| <!doctype html> |
| <html> |
| <head> |
| <meta charset=utf-8> |
| <title>Origin of document produced from a 'data:' URL</title> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/browsers.html#origin"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| async_test(function (t) { |
| var i = document.createElement('iframe'); |
| i.src = "data:text/html,<script>" + |
| " window.parent.postMessage('Hello!', '*');" + |
| "</scr" + "ipt>"; |
| |
| window.addEventListener("message", t.step_func_done(function (e) { |
| assert_equals(e.origin, "null", "Messages sent from a 'data:' URL should have an opaque origin (which serializes to 'null')."); |
| assert_throws("SecurityError", function () { |
| var couldAccessCrossOriginProperty = e.source.location.href; |
| }, "The 'data:' frame should be cross-origin: 'window.location.href'"); |
| |
| // Try to access contentDocument of the 'data: ' frame. Some browsers |
| // (i.e. Firefox, Safari) will return |null| and some (i.e. Chrome) |
| // will throw an exception. |
| var dataFrameContentDocument = null; |
| try { |
| dataFrameContentDocument = i.contentDocument; |
| } catch (ex) { |
| } |
| assert_equals(dataFrameContentDocument, null, "The 'data:' iframe should be unable to access its contentDocument."); |
| })); |
| |
| document.body.appendChild(i); |
| }, "The origin of a 'data:' document in a frame is opaque."); |
| </script> |
| </body> |
| </html> |