blob: e253fe962c6550a25a9caa0542b80aba0c185443 [file] [log] [blame]
Nick Burris97e6b872019-12-11 19:06:381<!doctype html>
2<title>Navigating to a text fragment directive</title>
3<meta charset=utf-8>
4<link rel="help" href="https://wicg.github.io/ScrollToTextFragment/">
5<script src="/resources/testharness.js"></script>
6<script src="/resources/testharnessreport.js"></script>
7<script src="/resources/testdriver.js"></script>
8<script src="/resources/testdriver-vendor.js"></script>
9<script src="/common/utils.js"></script>
10<script src="stash.js"></script>
11<script>
12// Test security restriction for user activation
13for (let user_activation of [true, false]) {
14 promise_test(t => new Promise((resolve, reject) => {
15 let key = token();
16
17 if (user_activation) {
18 test_driver.bless('Open a URL with a text fragment directive', () => {
19 window.open(`scroll-to-text-fragment-target.html?key=${key}#:~:text=test`, '_blank', 'noopener');
20 });
21 } else {
22 window.open(`scroll-to-text-fragment-target.html?key=${key}#:~:text=test`, '_blank', 'noopener');
23 }
24
25 fetchResults(key, resolve, reject);
26 }).then(data => {
27 assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
28
29 if (user_activation) {
30 assert_equals(data.scrollPosition, 'text', 'Expected window.open() with a user activation to scroll to text.');
31 } else {
32 assert_equals(data.scrollPosition, 'top', 'Expected window.open() with no user activation to not activate text fragment directive.');
33 }
34 }), `Test that a text fragment directive requires a user activation (user_activation=${user_activation}).`);
35}
36
37// Test security restriction for no window opener
38for (let noopener of [true, false]) {
39 promise_test(t => new Promise((resolve, reject) => {
40 let key = token();
41
42 test_driver.bless('Open a URL with a text fragment directive', () => {
43 if (noopener) {
44 window.open(`scroll-to-text-fragment-target.html?key=${key}#:~:text=test`, '_blank', 'noopener');
45 } else {
46 window.open(`scroll-to-text-fragment-target.html?key=${key}#:~:text=test`, '_blank');
47 }
48 });
49
50 fetchResults(key, resolve, reject);
51 }).then(data => {
52 assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
53
54 if (noopener) {
55 assert_equals(data.scrollPosition, 'text', 'Expected window.open() with noopener to scroll to text.');
56 } else {
57 assert_equals(data.scrollPosition, 'top', 'Expected window.open() with opener to not activate text fragment directive.');
58 }
59 }), `Test that a text fragment directive is not activated when there is a window opener (noopener=${noopener}).`);
60}
61
62// Test security restriction for no activation in an iframe
63promise_test(t => new Promise((resolve, reject) => {
64 let key = token();
65
66 let frame = document.createElement('iframe');
67 document.body.appendChild(frame);
68
69 test_driver.bless('Navigate the iframe with a text fragment directive', () => {
70 frame.src = `scroll-to-text-fragment-target.html?key=${key}#:~:text=test`;
71 });
72
73 fetchResults(key, resolve, reject);
74}).then(data => {
75 assert_equals(data.href.indexOf(':~:'), -1, 'Expected fragment directive to be stripped from the URL.');
76 assert_equals(data.scrollPosition, 'top', 'Expected iframe navigation to not activate text fragment directive.');
77}), 'Test that a text fragment directive is not activated within an iframe.');
78</script>