Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<title>Navigation Timing Transfert Size of Prefetched Page</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
This test uses RemoteContext and Executor to execute JavaScript in another
page opened by this test page. This is because we need to simulate
navigating away from current page in this test. It will cause all Javascript
code on the test page to be lost if we do it in the test page. We can't do it
in an iframe because currently the prefetch behaves differently in an iframe
in this particular test case. For detailed information about RemoteContext and
Executor, see /common/dispatcher/
const addLink = (url) => {
return new Promise(resolve => {
const link = document.createElement('link');
link.onload = function () { resolve(); };
link.rel = 'prefetch'; = 'document';
link.href = url;
const navigateToPrefetchedUrl = (url) => {
document.location.href = url;
const getTransferSize = () => window.performance.getEntriesByType('navigation')[0].transferSize;
promise_test(async t => {
const testPage = new RemoteContext(token());
// Function remoteExecutorUrl is defined in /common/dispatcher/dispatcher.js
const url = remoteExecutorUrl(testPage.context_id);
const handler =;
t.add_cleanup(() => handler.close());
const prefetchedPage = new RemoteContext(token());
const url_to_prefetch = '/navigation-timing/resources/blank_page_prefetch.html?uuid='
+ prefetchedPage.context_id;
// Prefetch link.
await testPage.execute_script(addLink, [url_to_prefetch]);
// Navigate to the prefetched link.
await testPage.execute_script(navigateToPrefetchedUrl, [url_to_prefetch]);
// Get navigation timing transfer size.
const size = await prefetchedPage.execute_script(getTransferSize);
assert_equals(0, size);
}, "Navigation timing transfer size for a prefetched navigation should be 0.");