tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

script-transform-sendKeyFrameRequest.https.html (5236B)


      1 <!doctype html>
      2 <html>
      3  <head>
      4    <meta charset=utf-8>
      5    <title>RTCRtpScriptTransformer.sendKeyFrameRequest tests</title>
      6    <meta name='timeout' content='long'>
      7    <script src='/resources/testharness.js'></script>
      8    <script src='/resources/testharnessreport.js'></script>
      9    <script src=/resources/testdriver.js></script>
     10    <script src=/resources/testdriver-vendor.js></script>
     11    <script src='../mediacapture-streams/permission-helper.js'></script>
     12  </head>
     13  <body>
     14    <video id='video1' autoplay></video>
     15    <video id='video2' autoplay></video>
     16    <script src ='routines.js'></script>
     17    <script>
     18 
     19 const sendKeyFrameRequest = (port, opts) => postMethod(port, 'sendKeyFrameRequest', opts);
     20 const sendKeyFrameRequestDoesNotThrow = (port, opts) => postMethod(port, 'sendKeyFrameRequestDoesNotThrow', opts);
     21 const waitForFrame = port => postMethod(port, 'waitForFrame');
     22 
     23 promise_test(async (test) => {
     24  const {sender, receiver} = await createConnectionWithTransform(test, 'script-transform-sendKeyFrameRequest.js', {video: true});
     25  assert_equals(await waitForFrame(receiver.transform.port), 'got frame');
     26 
     27  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'success');
     28 
     29  assert_equals(await sendKeyFrameRequest(sender.transform.port), 'failure: InvalidStateError');
     30 
     31  video1.srcObject = new MediaStream([receiver.track]);
     32  await video1.play();
     33 }, 'sendKeyFrameRequest resolves for video receiver, and throws for video sender');
     34 
     35 promise_test(async (test) => {
     36  const {sender, receiver} = await createConnectionWithTransform(test, 'script-transform-sendKeyFrameRequest.js', {audio: true});
     37  assert_equals(await waitForFrame(receiver.transform.port), 'got frame');
     38 
     39  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'failure: InvalidStateError');
     40 
     41  assert_equals(await waitForFrame(sender.transform.port), 'got frame');
     42 
     43  assert_equals(await sendKeyFrameRequest(sender.transform.port), 'failure: InvalidStateError');
     44 
     45  video1.srcObject = new MediaStream([receiver.track]);
     46  await video1.play();
     47 }, 'sendKeyFrameRequest throws for audio sender/receiver');
     48 
     49 promise_test(async (test) => {
     50  const [senderTransform] = await createTransforms('script-transform-sendKeyFrameRequest.js');
     51  assert_equals(await sendKeyFrameRequest(senderTransform.port), 'failure: InvalidStateError');
     52 }, 'sendKeyFrameRequest throws for unused transforms');
     53 
     54 promise_test(async (test) => {
     55  const {sender, receiver} = await createConnectionWithTransform(test, 'script-transform-sendKeyFrameRequest.js', {video: true});
     56  assert_equals(await waitForFrame(receiver.transform.port), 'got frame');
     57 
     58  const receiverTransform = receiver.transform;
     59  assert_equals(await sendKeyFrameRequest(receiverTransform.port), 'success');
     60 
     61  // TODO: Spec currently says that this will immediately cause the transformer
     62  // to stop working. This may change.
     63  receiver.transform = null;
     64 
     65  assert_equals(await sendKeyFrameRequestDoesNotThrow(receiverTransform.port), 'success');
     66 }, 'sendKeyFrameRequest does not throw for unset transforms');
     67 
     68 promise_test(async (test) => {
     69  const {sender, receiver, senderPc, receiverPc} = await createConnectionWithTransform(test, 'script-transform-sendKeyFrameRequest.js', {video: true});
     70  assert_equals(await waitForFrame(receiver.transform.port), 'got frame');
     71 
     72  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'success');
     73 
     74  senderPc.getTransceivers()[0].direction = 'inactive';
     75  await senderPc.setLocalDescription();
     76  await receiverPc.setRemoteDescription(senderPc.localDescription);
     77  await receiverPc.setLocalDescription();
     78  await senderPc.setRemoteDescription(receiverPc.localDescription);
     79 
     80  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'success');
     81 
     82  senderPc.getTransceivers()[0].direction = 'sendonly';
     83  await senderPc.setLocalDescription();
     84  await receiverPc.setRemoteDescription(senderPc.localDescription);
     85  await receiverPc.setLocalDescription();
     86  await senderPc.setRemoteDescription(receiverPc.localDescription);
     87 
     88  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'success');
     89 }, 'sendKeyFrameRequest does not reject when the receiver is negotiated inactive, and resumes succeeding when negotiated back to active');
     90 
     91 promise_test(async (test) => {
     92  const {sender, receiver, senderPc, receiverPc} = await createConnectionWithTransform(test, 'script-transform-sendKeyFrameRequest.js', {video: true});
     93  assert_equals(await waitForFrame(receiver.transform.port), 'got frame');
     94 
     95  assert_equals(await sendKeyFrameRequest(receiver.transform.port), 'success');
     96 
     97  receiverPc.getTransceivers()[0].stop();
     98 
     99  assert_equals(await sendKeyFrameRequestDoesNotThrow(receiver.transform.port), 'success');
    100 }, 'sendKeyFrameRequest does not reject when the receiver is stopped');
    101 
    102 // Testing that sendKeyFrameRequest actually results in the sending of keyframe
    103 // requests is effectively impossible, because there is no API to expose the
    104 // reception of a keyframe request, keyframes are sent regularly anyway, and
    105 // the spec allows the receiver to ignore these calls if sending a keyframe
    106 // request is 'not deemed appropriate'! sendKeyFrameRequest is at most a
    107 // suggestion.
    108 
    109    </script>
    110  </body>
    111 </html>