tor-browser

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

MediaStream-clone.https.html (4362B)


      1 <!doctype html>
      2 <html>
      3 <head>
      4 <title>MediaStream and MediaStreamTrack clone()</title>
      5 <link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediastream-clone">
      6 <link rel="help" href="https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-clone">
      7 </head>
      8 <body>
      9 <p class="instructions">When prompted, accept to give permission to use your audio and video devices.</p>
     10 <h1 class="instructions">Description</h1>
     11 <p class="instructions">This test checks that cloning MediaStreams and MediaStreamTracks works as expected.</p>
     12 <script src=/resources/testharness.js></script>
     13 <script src=/resources/testharnessreport.js></script>
     14 <script src=/resources/testdriver.js></script>
     15 <script src=/resources/testdriver-vendor.js></script>
     16 <script src=permission-helper.js></script>
     17 <script>
     18 
     19 promise_test(async t => {
     20  await setMediaPermission();
     21  const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
     22  assert_equals(stream.getAudioTracks().length, 1);
     23  assert_equals(stream.getVideoTracks().length, 1);
     24 
     25  const clone1 = stream.clone();
     26  assert_equals(clone1.getAudioTracks().length, 1);
     27  assert_equals(clone1.getVideoTracks().length, 1);
     28  assert_not_equals(stream.getAudioTracks()[0].id, clone1.getAudioTracks()[0].id);
     29  assert_not_equals(stream.getVideoTracks()[0].id, clone1.getVideoTracks()[0].id);
     30 
     31  stream.getTracks().forEach(track => track.stop());
     32  assert_false(stream.active);
     33  assert_equals(stream.getAudioTracks()[0].readyState, "ended");
     34  assert_equals(stream.getVideoTracks()[0].readyState, "ended");
     35  assert_true(clone1.active);
     36  assert_equals(clone1.getAudioTracks()[0].readyState, "live");
     37  assert_equals(clone1.getVideoTracks()[0].readyState, "live");
     38 
     39  clone1.getAudioTracks()[0].stop();
     40  assert_true(clone1.active);
     41  assert_equals(clone1.getAudioTracks()[0].readyState, "ended");
     42  assert_equals(clone1.getVideoTracks()[0].readyState, "live");
     43 
     44  const clone2 = clone1.clone();
     45  assert_true(clone2.active);
     46  assert_equals(clone2.getAudioTracks()[0].readyState, "ended");
     47  assert_equals(clone2.getVideoTracks()[0].readyState, "live");
     48 
     49  clone1.getVideoTracks()[0].stop();
     50  clone2.getVideoTracks()[0].stop();
     51 
     52  const clone3 = clone2.clone();
     53  assert_false(clone3.active);
     54  assert_equals(clone3.getAudioTracks()[0].readyState, "ended");
     55  assert_equals(clone3.getVideoTracks()[0].readyState, "ended");
     56  assert_not_equals(clone1.getAudioTracks()[0].id, clone2.getAudioTracks()[0].id);
     57  assert_not_equals(clone1.getVideoTracks()[0].id, clone2.getVideoTracks()[0].id);
     58  assert_not_equals(clone2.getAudioTracks()[0].id, clone3.getAudioTracks()[0].id);
     59  assert_not_equals(clone2.getVideoTracks()[0].id, clone3.getVideoTracks()[0].id);
     60  assert_not_equals(clone1.getAudioTracks()[0].id, clone3.getAudioTracks()[0].id);
     61  assert_not_equals(clone1.getVideoTracks()[0].id, clone3.getVideoTracks()[0].id);
     62 }, "Tests that cloning MediaStream objects works as expected");
     63 
     64 promise_test(async t => {
     65  const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
     66  assert_equals(stream.getAudioTracks().length, 1);
     67  assert_equals(stream.getVideoTracks().length, 1);
     68  assert_equals(stream.getAudioTracks()[0].readyState, "live");
     69  assert_equals(stream.getVideoTracks()[0].readyState, "live");
     70  assert_true(stream.active);
     71 
     72  const audio_clone = stream.getAudioTracks()[0].clone();
     73  const video_clone = stream.getVideoTracks()[0].clone();
     74  assert_equals(audio_clone.readyState, "live");
     75  assert_equals(video_clone.readyState, "live");
     76  assert_not_equals(stream.getAudioTracks()[0].id, audio_clone.id);
     77  assert_not_equals(stream.getVideoTracks()[0].id, video_clone.id);
     78 
     79  stream.getTracks().forEach(track => track.stop());
     80  assert_false(stream.active);
     81  assert_equals(stream.getAudioTracks()[0].readyState, "ended");
     82  assert_equals(stream.getVideoTracks()[0].readyState, "ended");
     83  assert_equals(audio_clone.readyState, "live");
     84  assert_equals(video_clone.readyState, "live");
     85 
     86  stream.addTrack(audio_clone);
     87  stream.addTrack(video_clone);
     88  assert_true(stream.active);
     89 
     90  stream.getTracks().forEach(track => track.stop());
     91  assert_false(stream.active);
     92  assert_equals(audio_clone.readyState, "ended");
     93  assert_equals(video_clone.readyState, "ended");
     94 }, "Tests that cloning MediaStreamTrack objects works as expected");
     95 
     96 </script>
     97 </body>
     98 </html>