| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <title>WebShare Test: Share with an invalid URL</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/resources/testdriver.js"></script> | |
| <script src="/resources/testdriver-vendor.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "http://a.com:65536" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects when URL is invalid"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "file:///etc/passwd" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects file:// URLs"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "wss://a.com/" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects wss: URLs"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "about:config" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects about: URLs"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "chrome://about" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects chrome: URLs"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: "javascript:window.alert('error')" }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects javascript: URLs"); | |
| promise_test(async t => { | |
| await test_driver.bless(); | |
| const file = new File([], "text/plain"); | |
| const promise = navigator.share({ url: URL.createObjectURL(file) }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects blob: URLs"); | |
| promise_test(async t => { | |
| const encoder = new TextEncoder(); | |
| const encoded = encoder.encode( | |
| `<meta http-equiv="refresh" content="1;url=http://example.com/">` | |
| ); | |
| const file = new File(encoded, "text/html"); | |
| const url = URL.createObjectURL(file); | |
| const reader = new FileReader(); | |
| reader.readAsDataURL(file); | |
| const dataURL = await new Promise(resolve => { | |
| reader.addEventListener("load", () => { | |
| resolve(reader.result); | |
| }); | |
| }); | |
| await test_driver.bless(); | |
| const promise = navigator.share({ url: dataURL }); | |
| return promise_rejects_js(t, TypeError, promise); | |
| }, "share() rejects data: URLs"); | |
| </script> | |
| </body> | |
| </html> |