-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[bfcache] Add notRestoredReasons field in PerformanceNavigationTiming
This CL adds back/forward cache not restored reasons in Performance NavigationTiming API. It's proposed here: w3c/navigation-timing#171 Explainer: https://github.com/rubberyuzu/bfcache-not-retored-reason/blob/main/NotRestoredReason.md This CL does two things: - exposes not restored reasons to PerformanceNavigationTiming API - adds WPT Bug: 1349228 Change-Id: I8dd96a60188bdff94a21c4e4e34cacf181a823db
- Loading branch information
1 parent
bfd862f
commit 5842e10
Showing
5 changed files
with
255 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
performance-timeline/not-restored-reasons/performance-navigation-timing-bfcache.window.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// META: title=RemoteContextHelper navigation using BFCache | ||
// META: script=/common/dispatcher/dispatcher.js | ||
// META: script=/common/get-host-info.sub.js | ||
// META: script=/common/utils.js | ||
// META: script=/resources/testharness.js | ||
// META: script=/resources/testharnessreport.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js | ||
|
||
'use strict'; | ||
|
||
// Ensure that notRestoredReasons is empty for successful BFCache restore. | ||
promise_test(async t => { | ||
const rcHelper = new RemoteContextHelper(); | ||
|
||
// Open a window with noopener so that BFCache will work. | ||
const rc1 = await rcHelper.addWindow( | ||
/*config=*/ null, /*options=*/ {features: 'noopener'}); | ||
|
||
// Navigate away. | ||
const rc2 = await rc1.navigateToNew(); | ||
|
||
// Navigate back. | ||
await rc2.historyBack(); | ||
|
||
// Verify that no reasons are recorded for successful restore. | ||
assert_true(await rc1.executeScript(() => { | ||
let reasons = performance.getEntriesByType('navigation')[0].notRestoredReasons; | ||
return reasons == null; | ||
})); | ||
}); |
70 changes: 70 additions & 0 deletions
70
...imeline/not-restored-reasons/performance-navigation-timing-cross-origin-bfcache.window.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// META: title=RemoteContextHelper navigation using BFCache | ||
// META: script=/common/dispatcher/dispatcher.js | ||
// META: script=/common/get-host-info.sub.js | ||
// META: script=/common/utils.js | ||
// META: script=/resources/testharness.js | ||
// META: script=/resources/testharnessreport.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js | ||
// META: script=/websockets/constants.sub.js | ||
|
||
'use strict'; | ||
|
||
// Ensure that cross-origin subtree's reasons are not exposed to notRestoredReasons. | ||
promise_test(async t => { | ||
const rcHelper = new RemoteContextHelper(); | ||
// Open a window with noopener so that BFCache will work. | ||
const rc1 = await rcHelper.addWindow( | ||
/*config=*/ null, /*options=*/ {features: 'noopener'}); | ||
const rc1_url = await rc1.executeScript(() => { | ||
return location.href; | ||
}); | ||
// Add a cross-origin iframe and use BroadcastChannel. | ||
const rc1_child = await rc1.addIframe( | ||
/*extraConfig=*/ { | ||
origin: 'HTTP_REMOTE_ORIGIN', | ||
scripts: [], | ||
headers: [], | ||
}, | ||
/*attributes=*/ {id: 'test-id'}, | ||
); | ||
|
||
const domainPort = SCHEME_DOMAIN_PORT; | ||
await rc1_child.executeScript((domain) => { | ||
var ws = new WebSocket(domain + '/echo'); | ||
}, [domainPort]); | ||
|
||
const rc1_child_url = await rc1_child.executeScript(() => { | ||
return location.href; | ||
}); | ||
// Add a child to the iframe. | ||
const rc1_grand_child = await rc1_child.addIframe(); | ||
const rc1_grand_child_url = await rc1_grand_child.executeScript(() => { | ||
return location.href; | ||
}); | ||
|
||
// Navigate away. | ||
const rc2 = await rc1.navigateToNew(); | ||
|
||
// Navigate back. | ||
await rc2.historyBack(); | ||
|
||
// Check the reported reasons. | ||
await assertNotRestoredReasonsEquals( | ||
rc1, | ||
/*blocked=*/false, | ||
/*url=*/rc1_url, | ||
/*src=*/ "", | ||
/*id=*/"", | ||
/*name=*/"", | ||
/*reasons=*/[], | ||
/*children=*/[{ | ||
"blocked": true, | ||
"url": "", | ||
"src": "", | ||
"id": "", | ||
"name": "", | ||
"reasons": [], | ||
"children": [] | ||
}]); | ||
}); |
44 changes: 44 additions & 0 deletions
44
...rmance-timeline/not-restored-reasons/performance-navigation-timing-not-bfcached.window.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// META: title=RemoteContextHelper navigation using BFCache | ||
// META: script=/common/dispatcher/dispatcher.js | ||
// META: script=/common/get-host-info.sub.js | ||
// META: script=/common/utils.js | ||
// META: script=/resources/testharness.js | ||
// META: script=/resources/testharnessreport.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js | ||
// META: script=/websockets/constants.sub.js | ||
|
||
'use strict'; | ||
|
||
// Ensure that notRestoredReasons is populated when not restored. | ||
promise_test(async t => { | ||
const rcHelper = new RemoteContextHelper(); | ||
// Open a window with noopener so that BFCache will work. | ||
const rc1 = await rcHelper.addWindow( | ||
/*config=*/ null, /*options=*/ {features: 'noopener'}); | ||
|
||
const domainPort = SCHEME_DOMAIN_PORT; | ||
await rc1.executeScript((domain) => { | ||
var ws = new WebSocket(domain + '/echo'); | ||
}, [domainPort]); | ||
|
||
const rc1_url = await rc1.executeScript(() => { | ||
return location.href; | ||
}); | ||
|
||
// Navigate away. | ||
const rc2 = await rc1.navigateToNew(); | ||
|
||
// Navigate back. | ||
await rc2.historyBack(); | ||
// Check the reported reasons. | ||
await assertNotRestoredReasonsEquals( | ||
rc1, | ||
/*blocked=*/true, | ||
/*url=*/rc1_url, | ||
/*src=*/ "", | ||
/*id=*/"", | ||
/*name=*/"", | ||
/*reasons=*/["WebSocket"], | ||
/*children=*/[]); | ||
}); |
73 changes: 73 additions & 0 deletions
73
...timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.window.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
// META: title=RemoteContextHelper navigation using BFCache | ||
// META: script=/common/dispatcher/dispatcher.js | ||
// META: script=/common/get-host-info.sub.js | ||
// META: script=/common/utils.js | ||
// META: script=/resources/testharness.js | ||
// META: script=/resources/testharnessreport.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js | ||
// META: script=/html/browsers/browsing-the-web/remote-context-helper-tests/resources/test-helper.js | ||
// META: script=/websockets/constants.sub.js | ||
|
||
'use strict'; | ||
|
||
// Ensure that same-origin subtree's reasons are exposed to notRestoredReasons. | ||
promise_test(async t => { | ||
const rcHelper = new RemoteContextHelper(); | ||
// Open a window with noopener so that BFCache will work. | ||
const rc1 = await rcHelper.addWindow( | ||
/*config=*/ null, /*options=*/ {features: 'noopener'}); | ||
const rc1_url = await rc1.executeScript(() => { | ||
return location.href; | ||
}); | ||
// Add a same-origin iframe and use WebSocket. | ||
const rc1_child = await rc1.addIframe(/*extra_config=*/{}, /*attributes=*/ {id: 'test-id'}); | ||
|
||
const domainPort = SCHEME_DOMAIN_PORT; | ||
await rc1_child.executeScript((domain) => { | ||
var ws = new WebSocket(domain + '/echo'); | ||
}, [domainPort]); | ||
|
||
const rc1_child_url = await rc1_child.executeScript(() => { | ||
return location.href; | ||
}); | ||
// Add a child to the iframe. | ||
const rc1_grand_child = await rc1_child.addIframe(); | ||
const rc1_grand_child_url = await rc1_grand_child.executeScript(() => { | ||
return location.href; | ||
}); | ||
|
||
// Navigate away. | ||
const rc2 = await rc1.navigateToNew(); | ||
|
||
// Navigate back. | ||
await rc2.historyBack(); | ||
|
||
// Check the reported reasons. | ||
await assertNotRestoredReasonsEquals( | ||
rc1, | ||
/*blocked=*/false, | ||
/*url=*/rc1_url, | ||
/*src=*/ "", | ||
/*id=*/"", | ||
/*name=*/"", | ||
/*reasons=*/[], | ||
/*children=*/[{ | ||
"blocked": true, | ||
"url": rc1_child_url, | ||
"src": rc1_child_url, | ||
"id": "test-id", | ||
"name": "", | ||
"reasons": ["WebSocket"], | ||
"children": [ | ||
{ | ||
"blocked": false, | ||
"url": rc1_grand_child_url, | ||
"src": rc1_grand_child_url, | ||
"id": "", | ||
"name": "", | ||
"reasons": [], | ||
"children": [] | ||
} | ||
] | ||
}]); | ||
}); |