Index: third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ba28dc2025acf163c25c3cc7c93fbae58f081a23 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html |
@@ -0,0 +1,60 @@ |
+<!doctype html> |
+<title>Set location.protocol to a non-broken-non-functioning scheme</title> |
+<!-- In particular, valid non-broken schemes that are nevertheless not going to work --> |
+<script src=/resources/testharness.js></script> |
+<script src=/resources/testharnessreport.js></script> |
+<div id=log></div> |
+<script> |
+self.onload = () => { |
+ [ |
+ 'x', |
+ 'data', |
+ // 'mailto' opens an email client in Firefox... |
+ 'file', |
+ 'ftp', |
+ 'gopher', |
+ 'http+x' |
+ ].forEach((val) => { |
+ async_test((t) => { |
+ // HTTP URL <iframe> |
+ const frame = document.createElement("iframe") |
+ frame.src = "/common/blank.html" |
+ frame.onload = t.step_func(() => { |
+ frame.contentWindow.location.protocol = val |
+ t.step_timeout(() => { |
+ assert_equals(frame.contentWindow.location.protocol, location.protocol) |
+ assert_equals(frame.contentWindow.location.host, location.host) |
+ assert_equals(frame.contentWindow.location.port, location.port) |
+ t.done() |
+ }, 500) |
+ }) |
+ document.body.appendChild(frame) |
+ }, "Set HTTP URL frame location.protocol to " + val) |
+ |
+ async_test((t) => { |
+ // data URL <iframe> |
+ const dataFrame = document.createElement("iframe") |
+ const channel = new MessageChannel() |
+ dataFrame.src = `data:text/html,<script> |
+onmessage = (e) => { |
+ let result = false; |
+ try { |
+ location.protocol = e.data |
+ } catch(e) { |
+ result = true |
+ } |
+ setTimeout(() => e.ports[0].postMessage([result, location.protocol]), 100) |
+} |
+<\/script>` |
+ dataFrame.onload = t.step_func(() => { |
+ dataFrame.contentWindow.postMessage(val, "*", [channel.port2]) |
+ }) |
+ channel.port1.onmessage = t.step_func_done((e) => { |
+ assert_false(e.data[0]) |
+ assert_equals(e.data[1], "data:") |
+ }) |
+ document.body.appendChild(dataFrame) |
+ }, "Set data URL frame location.protocol to " + val) |
+ }) |
+} |
+</script> |