Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/dom/media/test/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 6 kB image not shown  

Quelle  test_eme_createMediaKeys_iframes.html   Sprache: HTML

 
 products/Sources/formale Sprachen/C/Firefox/dom/media/test/test_eme_createMediaKeys_iframes.html


<!DOCTYPE HTML>
<html>
<head>
  <title>Test creation of MediaKeys in iframes</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <script type="text/javascript" src="manifest.js"></script>
  <script type="text/javascript" src="eme.js"></script>
</head>
<body>
<pre id="test">
<script class="testbody">
// Helper functions.

// We take navigator explicitly as an argument to avoid ambiguity in fetching
// it. This is to avoid issues with the following
// ```
// iframe.contentWindow.createMediaKeys = createMediaKeys;
// await iframe.contentWindow.createMediaKeys();
// ```
// If we don't pass a navigator, and just use `navigator` in the function, this
// ends up being equivalent to
// ```
// iframe.contentWindow.createMediaKeys = createMediaKeys;
// await iframe.contentWindow.createMediaKeys(window.navigator);
// ```
// i.e. the function will use the navigator from the global window for the top
// browsing context, not the iframe's. This would result in the tests not
// correctly testing within the iframe.
async function createMediaKeys(aNavigator) {
  const clearKeyOptions = [
    {
      initDataTypes: ["webm"],
      videoCapabilities: [{ contentType: 'video/webm; codecs="vp9"' }],
    },
  ];

  let access = await aNavigator.requestMediaKeySystemAccess(
    "org.w3.clearkey",
    clearKeyOptions
  );

  return access.createMediaKeys();
}
// End helper functions.

// These tests check that the following work using different iframe combinations
// - navigator.requestMediaKeySystem(...) successfully grants access.
// - the resulting MediaKeySystemAccess object's createMediaKeys() creates
//   MediaKeys as expected.

// Same origin iframe, using src attribute, wait for onload.
add_task(async () => {
  info(
    "Starting same origin iframe, using src attribute, wait for onload test"
  );
  let iframe = document.createElement("iframe");
  let iframeLoadPromise = new Promise(r => {
    iframe.onload = r;
  });
  iframe.src = "file_eme_createMediaKeys.html";
  document.body.appendChild(iframe);
  await iframeLoadPromise;
  info("iframe loaded");

  // Setup our handler for when the iframe messages to tell us if it
  // created MediaKeys or not.
  let iframeMessagePromise = new Promise(r => {
    window.onmessage = message => {
      is(
        message.data,
        "successCreatingMediaKeys",
        "iframe should have posted us a message saying keys were successfully created"
      );
      r();
    };
  });
  // Post a message to the iframe to ask it to try and create media keys.
  iframe.contentWindow.postMessage("""*");
  // Wait until we've got a message back from our iframe.
  await iframeMessagePromise;
});

// Same origin iframe, call via JS, wait for onload.
add_task(async () => {
  info("Starting same origin iframe, call via JS, wait for onload test");
  let iframe = document.createElement("iframe");
  let iframeLoadPromise = new Promise(r => {
    iframe.onload = r;
  });
  iframe.src = ""; // No src iframes are same origin.
  document.body.appendChild(iframe);
  await iframeLoadPromise;
  info("iframe loaded");

  try {
    iframe.contentWindow.createMediaKeys = createMediaKeys;
    let mediaKeys = await iframe.contentWindow.createMediaKeys(
      iframe.contentWindow.navigator
    );
    ok(mediaKeys, "Should get media keys");
  } catch (e) {
    ok(
      false,
      `Should not get any errors while trying to get media keys, got ${e}`
    );
  }
});

// Same origin iframe, call via JS, *do not* wait for onload.
//
// Note, sites shouldn't do this, because
// https://bugzilla.mozilla.org/show_bug.cgi?id=543435
// means not waiting for onload results in weird behavior, however
// https://bugzilla.mozilla.org/show_bug.cgi?id=1675360
// shows sites doing this in the wild because historically this worked in
// Firefox.
//
// Breaking this test case isn't necessarily against any specifications
// I'm (bryce) aware of, but it will probably break site compat, so be really
// sure you want to before doing so.
add_task(async () => {
  info(
    "Starting same origin iframe, call via JS, *do not* wait for onload test"
  );
  let iframe = document.createElement("iframe");
  let iframeLoadPromise = new Promise(r => {
    iframe.onload = r;
  });
  iframe.src = ""; // No src iframes are same origin.
  document.body.appendChild(iframe);
  info("iframe appended (we're not waiting for load)");

  try {
    iframe.contentWindow.createMediaKeys = createMediaKeys;
    let mediaKeys = await iframe.contentWindow.createMediaKeys(
      iframe.contentWindow.navigator
    );
    ok(mediaKeys, "Should get media keys");

    // We await the load to see if they keys persist through the load.
    // This could fail if gecko internally associates the keys with the
    // about:blank page that is replaced by the load.
    await iframeLoadPromise;
    ok(mediaKeys, "Media keys should still exist after the load");
  } catch (e) {
    ok(
      false,
      `Should not get any errors while trying to get media keys, got ${e}`
    );
  }
});

// Different origin iframe, using src attribute, wait for onload
add_task(async () => {
  info(
    "Starting different origin iframe, using src attribute, wait for onload test"
  );
  let iframe = document.createElement("iframe");
  let iframeLoadPromise = new Promise(r => {
    iframe.onload = r;
  });
  // Make our iframe cross origin (see build/pgo/server-locations.txt for more
  // info the url used).
  iframe.src =
    "https://w3c-test.org:443/tests/dom/media/test/file_eme_createMediaKeys.html";
  iframe.allow = "encrypted-media";
  document.body.appendChild(iframe);
  await iframeLoadPromise;
  info("iframe loaded");

  // Setup our handler for when the iframe messages to tell us if it
  // created MediaKeys or not.
  let iframeMessagePromise = new Promise(r => {
    window.onmessage = message => {
      is(
        message.data,
        "successCreatingMediaKeys",
        "iframe should have posted us a message saying keys were successfully created"
      );
      r();
    };
  });
  // Post a message to the iframe to ask it to try and create media keys.
  iframe.contentWindow.postMessage("""*");
  // Wait until we've got a message back from our iframe.
  await iframeMessagePromise;
});
</script>
</pre>
</body>
</html>

Messung V0.5
C=92 H=96 G=93

¤ Dauer der Verarbeitung: 0.23 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.