diff options
Diffstat (limited to 'netwerk/test/browser/browser_103_preload_2.js')
-rw-r--r-- | netwerk/test/browser/browser_103_preload_2.js | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/netwerk/test/browser/browser_103_preload_2.js b/netwerk/test/browser/browser_103_preload_2.js new file mode 100644 index 0000000000..c9f92fdef5 --- /dev/null +++ b/netwerk/test/browser/browser_103_preload_2.js @@ -0,0 +1,180 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +Services.prefs.setBoolPref("network.early-hints.enabled", true); + +const { + test_hint_preload, + test_hint_preload_internal, + request_count_checking, +} = ChromeUtils.importESModule( + "resource://testing-common/early_hint_preload_test_helper.sys.mjs" +); + +// two early hint responses +add_task(async function test_103_two_preload_responses() { + await test_hint_preload_internal( + "103_two_preload_responses", + "https://example.com", + [ + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ["", "new_response"], // indicate new early hint response + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ], + { hinted: 1, normal: 1 } + ); +}); + +// two link header in one early hint response +add_task(async function test_103_two_link_header() { + await test_hint_preload_internal( + "103_two_link_header", + "https://example.com", + [ + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ["", ""], // indicate new link header in same reponse + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ], + { hinted: 2, normal: 0 } + ); +}); + +// two links in one early hint link header +add_task(async function test_103_two_links() { + await test_hint_preload_internal( + "103_two_links", + "https://example.com", + [ + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ], + { hinted: 2, normal: 0 } + ); +}); + +// two early hint responses, only second one has a link header +add_task(async function test_103_two_links() { + await test_hint_preload_internal( + "103_two_links", + "https://example.com", + [ + ["", "non_link_header"], // indicate non-link related header + ["", "new_response"], // indicate new early hint response + [ + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + Services.uuid.generateUUID().toString(), + ], + ], + { hinted: 1, normal: 0 } + ); +}); + +// Preload twice same origin in secure context +add_task(async function test_103_preload_twice() { + // pass two times the same uuid so that on the second request, the response is + // already in the cache + let uuid = Services.uuid.generateUUID(); + await test_hint_preload( + "test_103_preload_twice_1", + "https://example.com", + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + { hinted: 1, normal: 0 }, + uuid + ); + await test_hint_preload( + "test_103_preload_twice_2", + "https://example.com", + "https://example.com/browser/netwerk/test/browser/early_hint_pixel.sjs", + { hinted: 0, normal: 0 }, + uuid + ); +}); + +// Test that preloads in iframes don't get triggered +add_task(async function test_103_iframe() { + // reset the count + let headers = new Headers(); + headers.append("X-Early-Hint-Count-Start", ""); + await fetch( + "https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs", + { headers } + ); + + let iframeUri = + "https://example.com/browser/netwerk/test/browser/103_preload_iframe.html"; + + await BrowserTestUtils.withNewTab( + { + gBrowser, + url: iframeUri, + waitForLoad: true, + }, + async function () {} + ); + + let gotRequestCount = await fetch( + "https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs" + ).then(response => response.json()); + let expectedRequestCount = { hinted: 0, normal: 1 }; + + await request_count_checking( + "test_103_iframe", + gotRequestCount, + expectedRequestCount + ); + + Services.cache2.clear(); +}); + +// Test that anchors are parsed +add_task(async function test_103_anchor() { + // reset the count + let headers = new Headers(); + headers.append("X-Early-Hint-Count-Start", ""); + await fetch( + "https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs", + { headers } + ); + + let anchorUri = + "https://example.com/browser/netwerk/test/browser/103_preload_anchor.html"; + + await BrowserTestUtils.withNewTab( + { + gBrowser, + url: anchorUri, + waitForLoad: true, + }, + async function () {} + ); + + let gotRequestCount = await fetch( + "https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs" + ).then(response => response.json()); + + await request_count_checking("test_103_anchor", gotRequestCount, { + hinted: 0, + normal: 1, + }); +}); |