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> |