<!DOCTYPE html>
<meta charset=utf-8>
<title>IDBFactory.databases() and opaque origins</title>
<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>' +
  '  window.onmessage = () => {' +
  '    try { ' +
  '      if (!indexedDB || !indexedDB.databases) {' +
  '        window.parent.postMessage({result: "indexedDB.databases undefined"}, "*")' +
  '      }' +
  '      indexedDB.databases().then(' +
  '        () => window.parent.postMessage({result: "no exception"}, "*"),' +
  '        ex => window.parent.postMessage({result: ex.name}, "*"));' +
  '    } catch(e) { ' +
  '      window.parent.postMessage({result: e.name + " thrown, not rejected"}, "*")' +
  '    }'+
  '  };' +
  '<\/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',
                'IDBFactory.databases() should not reject');
}, 'IDBFactory.databases() in non-sandboxed iframe should not reject');

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',
                'Promise should be rejected with SecurityError');
}, 'IDBFactory.databases() in sandboxed iframe should reject');
</script>
