Revision 6d430e9d2dbc770f66c40e944928f5ec4f6cbccb authored by Henrik Skupin on 15 August 2018, 17:44:30 UTC, committed by jgraham on 17 August 2018, 09:47:16 UTC
Those tests make sure that an "invalid argument" error is raised
if the body doesn't contain any data.

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1469601
gecko-commit: 7915b80eca091d53838f20594e84ed543b1752f3
gecko-integration-branch: mozilla-inbound
gecko-reviewers: ato
1 parent e27c34b
Raw File
opaque-origin.tentative.https.html
<!DOCTYPE html>
<meta charset=utf-8>
<title>Web Locks API: Opaque origins</title>
<link rel=help href="https://wicg.github.io/web-locks/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

function load_iframe(src, sandbox) {
  return new Promise(resolve => {
    const iframe = document.createElement('iframe');
    iframe.onload = () => { resolve(iframe); };
    if (sandbox)
      iframe.sandbox = sandbox;
    iframe.srcdoc = src;
    iframe.style.display = 'none';
    document.documentElement.appendChild(iframe);
  });
}

function wait_for_message(iframe) {
  return new Promise(resolve => {
    self.addEventListener('message', function listener(e) {
      if (e.source === iframe.contentWindow) {
        resolve(e.data);
        self.removeEventListener('message', listener);
      }
    });
  });
}

const script = `
<script>
  "use strict";
  window.onmessage = async () => {
    try {
      await navigator.locks.request('name', lock => {});
      window.parent.postMessage({result: "no exception"}, "*");
    } catch (ex) {
      window.parent.postMessage({result: ex.name}, "*");
    };
  };
<\/script>
`;

promise_test(async t => {
  const iframe = await load_iframe(script);
  iframe.contentWindow.postMessage({}, '*');
  const message = await wait_for_message(iframe);
  assert_equals(message.result, 'no exception',
                'navigator.locks.request() should not throw');
}, 'navigator.locks.request() in non-sandboxed iframe should not throw');

promise_test(async t => {
  const iframe = await load_iframe(script, 'allow-scripts');
  iframe.contentWindow.postMessage({}, '*');
  const message = await wait_for_message(iframe);
  assert_equals(message.result, 'SecurityError',
                'Exception should be SecurityError');
}, 'navigator.locks.request() in sandboxed iframe should throw SecurityError');
</script>
back to top