| Index: third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-opaque-origin.html
 | 
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-opaque-origin.html b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-opaque-origin.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..f69c47d31ad0baf1e91cdb40ab59a330a71a889f
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/LayoutTests/external/wpt/IndexedDB/idbfactory-open-opaque-origin.html
 | 
| @@ -0,0 +1,68 @@
 | 
| +<!DOCTYPE html>
 | 
| +<meta charset=utf-8>
 | 
| +<title>IDBFactory.open() 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 {' +
 | 
| +  '      indexedDB.deleteDatabase("opaque-origin-test");' +
 | 
| +  '      const r = indexedDB.open("opaque-origin-test");' +
 | 
| +  '      r.onupgradeneeded = () => { r.transaction.abort(); };' +
 | 
| +  '      window.parent.postMessage({result: "no exception"}, "*");' +
 | 
| +  '    } catch (ex) {' +
 | 
| +  '      window.parent.postMessage({result: ex.name}, "*");' +
 | 
| +  '    };' +
 | 
| +  '  };' +
 | 
| +  '<\/script>';
 | 
| +
 | 
| +promise_test(t => {
 | 
| +  return load_iframe(script)
 | 
| +    .then(iframe => {
 | 
| +      iframe.contentWindow.postMessage({}, '*');
 | 
| +      return wait_for_message(iframe);
 | 
| +    })
 | 
| +    .then(message => {
 | 
| +      assert_equals(message.result, 'no exception',
 | 
| +                    'IDBFactory.open() should not throw');
 | 
| +    });
 | 
| +}, 'IDBFactory.open() in non-sandboxed iframe should not throw');
 | 
| +
 | 
| +promise_test(t => {
 | 
| +  return load_iframe(script, 'allow-scripts')
 | 
| +    .then(iframe => {
 | 
| +      iframe.contentWindow.postMessage({}, '*');
 | 
| +      return wait_for_message(iframe);
 | 
| +    })
 | 
| +    .then(message => {
 | 
| +      assert_equals(message.result, 'SecurityError',
 | 
| +                    'Exception should be SecurityError');
 | 
| +    });
 | 
| +}, 'IDBFactory.open() in sandboxed iframe should throw SecurityError');
 | 
| +</script>
 | 
| 
 |