Skip to content

Commit 35d2f4f

Browse files
natechapinchromium-wpt-export-bot
authored andcommitted
Implement navigateEvent.intercept() and navigateEvent.canIntercept
Follows WICG/navigation-api#235 intercept() works very similarly to transitionWhile(), except that instead of taking a mandatory Promise, it takes an optional handler function. If a function is provided and it returns a promise, navigation finish will be delayed until the Promise resolve, just as transitionWhile() delays navigation finish for its Promise. canIntercept is identical to canTransition. Intent to ship: https://groups.google.com/a/chromium.org/g/blink-dev/c/jyWqjAEv5LU Bug: 1336000 Change-Id: I94edd7fdc727080594f16fe4511cb7c302d88941
1 parent ce11f1f commit 35d2f4f

File tree

136 files changed

+492
-259
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+492
-259
lines changed

navigation-api/currententrychange-event/navigation-navigate-transitionWhile.html renamed to navigation-api/currententrychange-event/navigation-navigate-intercept.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
assert_equals(e.navigationType, "push");
1414
assert_equals(i.contentWindow.navigation.currentEntry.index, 1);
1515
});
16-
i.contentWindow.navigation.onnavigate = e => e.transitionWhile(Promise.resolve());
16+
i.contentWindow.navigation.onnavigate = e => e.intercept();
1717
let result = i.contentWindow.navigation.navigate("/common/blank.html?1");
1818
assert_true(oncurrententrychange_called);
1919
await result.committed;
20-
}, "currententrychange fires for navigation.navigate() intercepted by transitionWhile()");
20+
}, "currententrychange fires for navigation.navigate() intercepted by intercept()");
2121
</script>

navigation-api/currententrychange-event/navigation-navigate-replace-transitionWhile.html renamed to navigation-api/currententrychange-event/navigation-navigate-replace-intercept.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
assert_equals(e.navigationType, "replace");
1616
assert_equals(i.contentWindow.navigation.currentEntry.index, 0);
1717
});
18-
i.contentWindow.navigation.onnavigate = e => e.transitionWhile(Promise.resolve());
18+
i.contentWindow.navigation.onnavigate = e => e.intercept();
1919
let result = i.contentWindow.navigation.navigate("/common/blank.html?1", { history: "replace" });
2020
assert_true(oncurrententrychange_called);
2121
await result.committed;
22-
}, "currententrychange fires for navigation.navigate() with replace intercepted by transitionWhile()");
22+
}, "currententrychange fires for navigation.navigate() with replace intercepted by intercept()");
2323
</script>

navigation-api/currententrychange-event/navigation-reload-transitionWhile.html renamed to navigation-api/currententrychange-event/navigation-reload-intercept.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
assert_equals(e.navigationType, "reload");
1414
assert_equals(i.contentWindow.navigation.currentEntry.index, 0);
1515
});
16-
i.contentWindow.navigation.onnavigate = e => e.transitionWhile(Promise.resolve());
16+
i.contentWindow.navigation.onnavigate = e => e.intercept();
1717
let result = i.contentWindow.navigation.reload();
1818
assert_true(oncurrententrychange_called);
1919
await result.committed;
20-
}, "currententrychange fires for navigation.reload() intercepted by transitionWhile()");
20+
}, "currententrychange fires for navigation.reload() intercepted by intercept()");
2121
</script>

navigation-api/focus-reset/autofocus.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
assert_equals(document.activeElement, decoy, "focus() worked");
2424

2525
navigation.addEventListener("navigate", e => {
26-
e.transitionWhile(Promise.resolve());
26+
e.intercept();
2727
}, { once: true });
2828

2929
const { committed, finished } = navigation.navigate("#1");
@@ -44,7 +44,7 @@
4444
assert_equals(document.activeElement, decoy, "focus() worked");
4545

4646
navigation.addEventListener("navigate", e => {
47-
e.transitionWhile(Promise.resolve());
47+
e.intercept();
4848
}, { once: true });
4949

5050
const { committed, finished } = navigation.navigate("#1");
@@ -65,7 +65,7 @@
6565
assert_equals(document.activeElement, decoy, "focus() worked");
6666

6767
navigation.addEventListener("navigate", e => {
68-
e.transitionWhile(Promise.resolve());
68+
e.intercept();
6969
}, { once: true });
7070

7171
const { committed, finished } = navigation.navigate("#1");
@@ -88,7 +88,7 @@
8888
assert_equals(document.activeElement, decoy, "focus() worked");
8989

9090
navigation.addEventListener("navigate", e => {
91-
e.transitionWhile(Promise.resolve());
91+
e.intercept();
9292
}, { once: true });
9393

9494
const { committed, finished } = navigation.navigate("#1");
@@ -111,7 +111,7 @@
111111
assert_equals(document.activeElement, decoy, "focus() worked");
112112

113113
navigation.addEventListener("navigate", e => {
114-
e.transitionWhile(Promise.resolve());
114+
e.intercept();
115115
}, { once: true });
116116

117117
const { committed, finished } = navigation.navigate("#1");
@@ -134,7 +134,7 @@
134134
assert_equals(document.activeElement, decoy, "focus() worked");
135135

136136
navigation.addEventListener("navigate", e => {
137-
e.transitionWhile(Promise.resolve());
137+
e.intercept();
138138
}, { once: true });
139139

140140
const { committed, finished } = navigation.navigate("#1");
@@ -156,7 +156,7 @@
156156
assert_equals(document.activeElement, decoy, "focus() worked");
157157

158158
navigation.addEventListener("navigate", e => {
159-
e.transitionWhile(Promise.resolve());
159+
e.intercept();
160160
}, { once: true });
161161

162162
const { committed, finished } = navigation.navigate("#1");

navigation-api/focus-reset/basic.html

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
navigation.addEventListener("navigate", e => {
1414
assert_throws_js(TypeError, () => {
15-
e.transitionWhile(Promise.resolve(), { focusReset: "invalid" });
15+
e.intercept({ focusReset: "invalid" });
1616
});
1717
throwAssertionHappened = true;
1818
}, { once: true });
@@ -27,40 +27,37 @@
2727

2828
testFocusWasReset(t => {
2929
navigation.addEventListener("navigate", e => {
30-
e.transitionWhile(Promise.resolve());
30+
e.intercept();
3131
}, { once: true });
3232
}, "Resets the focus when no focusReset option is provided");
3333

3434
testFocusWasReset(t => {
3535
navigation.addEventListener("navigate", e => {
36-
e.transitionWhile(Promise.resolve());
36+
e.intercept();
3737
}, { once: true });
3838
}, "Resets the focus when focusReset is explicitly set to undefined");
3939

4040
testFocusWasReset(t => {
4141
navigation.addEventListener("navigate", e => {
42-
e.transitionWhile(new Promise(r => t.step_timeout(r, 5)));
42+
e.intercept({ handler: () => new Promise(r => t.step_timeout(r, 5)) });
4343
}, { once: true });
4444
}, "Resets the focus when no focusReset option is provided (nontrivial fulfilled promise)");
4545

4646
testFocusWasReset(t => {
4747
navigation.addEventListener("navigate", e => {
48-
e.transitionWhile(Promise.reject());
48+
e.intercept({ handler: () => Promise.reject() });
4949
}, { once: true });
5050
}, "Resets the focus when no focusReset option is provided (rejected promise)");
5151

5252
testFocusWasReset(t => {
5353
navigation.addEventListener("navigate", e => {
54-
e.transitionWhile(
55-
Promise.resolve(),
56-
{ focusReset: "after-transition" }
57-
);
54+
e.intercept({ focusReset: "after-transition" });
5855
}, { once: true });
5956
}, "Resets the focus when focusReset is explicitly set to 'after-transition'");
6057

6158
testFocusWasNotReset(t => {
6259
navigation.addEventListener("navigate", e => {
63-
e.transitionWhile(Promise.resolve(), { focusReset: "manual" });
60+
e.intercept({ focusReset: "manual" });
6461
});
6562
}, "Does not reset the focus when focusReset is set to 'manual'");
6663
</script>

navigation-api/focus-reset/change-focus-again-in-blur-during-transitionWhile.html renamed to navigation-api/focus-reset/change-focus-again-in-blur-during-intercept.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
<body>
55
<script>
66
promise_test(async t => {
7-
let transitionWhile_resolve;
7+
let intercept_resolve;
88
navigation.addEventListener("navigate", e => {
9-
e.transitionWhile(new Promise(resolve => transitionWhile_resolve = resolve),
10-
{ focusReset: "after-transition" });
9+
e.intercept({ handler: () => new Promise(resolve => intercept_resolve = resolve),
10+
focusReset: "after-transition" });
1111
}, { once: true });
1212

1313
const button = document.body.appendChild(document.createElement("button"));
@@ -27,7 +27,7 @@
2727
button.blur();
2828
assert_equals(document.activeElement, button2, "focus() in blur worked");
2929

30-
transitionWhile_resolve();
30+
intercept_resolve();
3131
await finished;
3232
assert_equals(document.activeElement, button2, "Focus was not reset after the transition");
3333
}, "");

navigation-api/focus-reset/change-focus-back-to-origial-during-transitionWhile.html renamed to navigation-api/focus-reset/change-focus-back-to-origial-during-intercept.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
<body>
55
<script>
66
promise_test(async t => {
7-
let transitionWhile_resolve;
7+
let intercept_resolve;
88
navigation.addEventListener("navigate", e => {
9-
e.transitionWhile(new Promise(resolve => transitionWhile_resolve = resolve),
10-
{ focusReset: "after-transition" });
9+
e.intercept({ handler: () => new Promise(resolve => intercept_resolve = resolve),
10+
focusReset: "after-transition" });
1111
}, { once: true });
1212

1313
const button = document.body.appendChild(document.createElement("button"));
@@ -28,7 +28,7 @@
2828
button.focus();
2929
assert_equals(document.activeElement, button, "focus() worked");
3030

31-
transitionWhile_resolve();
31+
intercept_resolve();
3232
await finished;
3333
assert_equals(document.activeElement, button, "Focus was not reset after the transition");
3434
}, "");

navigation-api/focus-reset/change-focus-during-transitionWhile.html renamed to navigation-api/focus-reset/change-focus-during-intercept.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
<body>
55
<script>
66
promise_test(async t => {
7-
let transitionWhile_resolve;
7+
let intercept_resolve;
88
navigation.addEventListener("navigate", e => {
9-
e.transitionWhile(new Promise(resolve => transitionWhile_resolve = resolve),
10-
{ focusReset: "after-transition" });
9+
e.intercept({ handler: () => new Promise(resolve => intercept_resolve = resolve),
10+
focusReset: "after-transition" });
1111
}, { once: true });
1212

1313
const button = document.body.appendChild(document.createElement("button"));
@@ -26,7 +26,7 @@
2626
button2.focus();
2727
assert_equals(document.activeElement, button2, "focus() worked");
2828

29-
transitionWhile_resolve();
29+
intercept_resolve();
3030
await finished;
3131
assert_equals(document.activeElement, button2, "Focus was not reset after the transition");
3232
}, "");

navigation-api/focus-reset/change-focus-then-remove-during-transitionWhile.html renamed to navigation-api/focus-reset/change-focus-then-remove-during-intercept.html

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
<body>
55
<script>
66
promise_test(async t => {
7-
let transitionWhile_resolve;
7+
let intercept_resolve;
88
navigation.addEventListener("navigate", e => {
9-
e.transitionWhile(new Promise(resolve => transitionWhile_resolve = resolve), { focusReset: "after-transition" });
9+
e.intercept({ handler: () => new Promise(resolve => intercept_resolve = resolve),
10+
focusReset: "after-transition" });
1011
}, { once: true });
1112

1213
const button = document.body.appendChild(document.createElement("button"));
@@ -30,7 +31,7 @@
3031
assert_true(onfocus_called);
3132

3233
document.body.onfocus = t.unreached_func("onfocus shouldn't fire a second time due to focus reset");
33-
transitionWhile_resolve();
34+
intercept_resolve();
3435
await finished;
3536
assert_equals(document.activeElement, document.body, "Focus remains on document.body after promise fulfills");
3637
await new Promise(resolve => t.step_timeout(resolve, 10));

navigation-api/focus-reset/multiple-transitionWhile.html renamed to navigation-api/focus-reset/multiple-intercept.html

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,61 +9,61 @@
99

1010
testFocusWasReset(t => {
1111
navigation.addEventListener("navigate", e => {
12-
e.transitionWhile(Promise.resolve());
12+
e.intercept();
1313
}, { once: true });
1414

1515
navigation.addEventListener("navigate", e => {
16-
e.transitionWhile(Promise.resolve(), { focusReset: "after-transition" });
16+
e.intercept({ focusReset: "after-transition" });
1717
}, { once: true });
1818
}, "(not provided) + after-transition");
1919

2020
testFocusWasNotReset(t => {
2121
navigation.addEventListener("navigate", e => {
22-
e.transitionWhile(Promise.resolve());
22+
e.intercept();
2323
}, { once: true });
2424

2525
navigation.addEventListener("navigate", e => {
26-
e.transitionWhile(Promise.resolve(), { focusReset: "manual" });
26+
e.intercept({ focusReset: "manual" });
2727
}, { once: true });
2828
}, "(not provided) + manual");
2929

3030
testFocusWasNotReset(t => {
3131
navigation.addEventListener("navigate", e => {
32-
e.transitionWhile(Promise.resolve(), { focusReset: "after-transition" });
32+
e.intercept({ focusReset: "after-transition" });
3333
}, { once: true });
3434

3535
navigation.addEventListener("navigate", e => {
36-
e.transitionWhile(Promise.resolve(), { focusReset: "manual" });
36+
e.intercept({ focusReset: "manual" });
3737
}, { once: true });
3838
}, "after-transition + manual");
3939

4040
testFocusWasReset(t => {
4141
navigation.addEventListener("navigate", e => {
42-
e.transitionWhile(Promise.resolve(), { focusReset: "after-transition" });
42+
e.intercept({ focusReset: "after-transition" });
4343
}, { once: true });
4444

4545
navigation.addEventListener("navigate", e => {
46-
e.transitionWhile(Promise.resolve());
46+
e.intercept();
4747
}, { once: true });
4848
}, "after-transition + (not provided)");
4949

5050
testFocusWasReset(t => {
5151
navigation.addEventListener("navigate", e => {
52-
e.transitionWhile(Promise.resolve(), { focusReset: "manual" });
52+
e.intercept({ focusReset: "manual" });
5353
}, { once: true });
5454

5555
navigation.addEventListener("navigate", e => {
56-
e.transitionWhile(Promise.resolve(), { focusReset: "after-transition" });
56+
e.intercept({ focusReset: "after-transition" });
5757
}, { once: true });
5858
}, "manual + after-transition");
5959

6060
testFocusWasNotReset(t => {
6161
navigation.addEventListener("navigate", e => {
62-
e.transitionWhile(Promise.resolve(), { focusReset: "manual" });
62+
e.intercept({ focusReset: "manual" });
6363
}, { once: true });
6464

6565
navigation.addEventListener("navigate", e => {
66-
e.transitionWhile(Promise.resolve());
66+
e.intercept();
6767
}, { once: true });
6868
}, "manual + (not provided)");
6969
</script>

navigation-api/navigate-event/cross-window/click-crossdocument-crossorigin-sameorigindomain.sub.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
iframe.contentWindow.navigation.onnavigate = t.step_func_done(e => {
2525
assert_equals(e.navigationType, "push", "navigationType");
2626
assert_true(e.cancelable, "cancelable");
27-
assert_true(e.canTransition, "canTransition");
27+
assert_true(e.canIntercept, "canIntercept");
2828
assert_false(e.userInitiated, "userInitiated");
2929
assert_false(e.hashChange, "hashChange");
3030
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/click-crossdocument-sameorigin.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
i.contentWindow.navigation.onnavigate = t.step_func_done(e => {
1313
assert_equals(e.navigationType, "push", "navigationType");
1414
assert_true(e.cancelable, "cancelable");
15-
assert_true(e.canTransition, "canTransition");
15+
assert_true(e.canIntercept, "canIntercept");
1616
assert_false(e.userInitiated, "userInitiated");
1717
assert_false(e.hashChange, "hashChange");
1818
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/click-samedocument-crossorigin-sameorigindomain.sub.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
iframe.contentWindow.navigation.onnavigate = t.step_func_done(e => {
2525
assert_equals(e.navigationType, "push", "navigationType");
2626
assert_true(e.cancelable, "cancelable");
27-
assert_true(e.canTransition, "canTransition");
27+
assert_true(e.canIntercept, "canIntercept");
2828
assert_false(e.userInitiated, "userInitiated");
2929
assert_true(e.hashChange, "hashChange");
3030
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/click-samedocument-crossorigin.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
window.onmessage = t.step_func_done(e => {
2323
assert_equals(e.data.navigationType, "push", "navigationType");
2424
assert_true(e.data.cancelable, "cancelable");
25-
assert_true(e.data.canTransition, "canTransition");
25+
assert_true(e.data.canIntercept, "canIntercept");
2626
assert_false(e.data.userInitiated, "userInitiated");
2727
assert_true(e.data.hashChange, "hashChange");
2828
assert_equals(e.data.formData, null, "formData");

navigation-api/navigate-event/cross-window/click-samedocument-sameorigin.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
i.contentWindow.navigation.onnavigate = t.step_func_done(e => {
1111
assert_equals(e.navigationType, "push", "navigationType");
1212
assert_true(e.cancelable, "cancelable");
13-
assert_true(e.canTransition, "canTransition");
13+
assert_true(e.canIntercept, "canIntercept");
1414
assert_false(e.userInitiated, "userInitiated");
1515
assert_true(e.hashChange, "hashChange");
1616
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/location-crossdocument-crossorigin-sameorigindomain.sub.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
iframe.contentWindow.navigation.onnavigate = t.step_func_done(e => {
1818
assert_equals(e.navigationType, "push", "navigationType");
1919
assert_true(e.cancelable, "cancelable");
20-
assert_true(e.canTransition, "canTransition");
20+
assert_true(e.canIntercept, "canIntercept");
2121
assert_false(e.userInitiated, "userInitiated");
2222
assert_false(e.hashChange, "hashChange");
2323
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/location-crossdocument-sameorigin.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
i.contentWindow.navigation.onnavigate = t.step_func_done(e => {
1010
assert_equals(e.navigationType, "push", "navigationType");
1111
assert_true(e.cancelable, "cancelable");
12-
assert_true(e.canTransition, "canTransition");
12+
assert_true(e.canIntercept, "canIntercept");
1313
assert_false(e.userInitiated, "userInitiated");
1414
assert_false(e.hashChange, "hashChange");
1515
assert_equals(e.formData, null, "formData");

navigation-api/navigate-event/cross-window/location-samedocument-crossorigin-sameorigindomain.sub.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
iframe.contentWindow.navigation.onnavigate = t.step_func_done(e => {
1818
assert_equals(e.navigationType, "push", "navigationType");
1919
assert_true(e.cancelable, "cancelable");
20-
assert_true(e.canTransition, "canTransition");
20+
assert_true(e.canIntercept, "canIntercept");
2121
assert_false(e.userInitiated, "userInitiated");
2222
assert_true(e.hashChange, "hashChange");
2323
assert_equals(e.formData, null, "formData");

0 commit comments

Comments
 (0)