-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1788872 [wpt PR 35764] - [bfcache] Add notRestoredReasons field i…
…n PerformanceNavigationTiming, a=testonly Automatic update from web-platform-tests [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 The WPT have to run on all platforms because this API is intended to collect bfcache metrics from the wild, regardless of the platforms. LOW_COVERAGE_REASON=Adding coverage for new field. Just missing the tests for the existing fields Bug: 1349228 Change-Id: I8dd96a60188bdff94a21c4e4e34cacf181a823db Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3835534 Reviewed-by: Daniel Cheng <[email protected]> Reviewed-by: Kentaro Hara <[email protected]> Reviewed-by: Weizhong Xia <[email protected]> Commit-Queue: Yuzu Saijo <[email protected]> Cr-Commit-Position: refs/heads/main@{#1054800} -- wpt-commits: 88c0d4ec3d12f5389297f08ced7785e2c402cf36 wpt-pr: 35764
- Loading branch information
1 parent
3e9642c
commit 117efd0
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": [] | ||
} | ||
] | ||
}]); | ||
}); |