forked from mirrors/gecko-dev
The problem that the image element not being removed is that the tabId is missing. To make tabId available for the web extensions, we need to provide nsILoadContext to hinted requests. Differential Revision: https://phabricator.services.mozilla.com/D179924
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
/* 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/. */
|
|
|
|
Services.prefs.setBoolPref("network.early-hints.enabled", true);
|
|
|
|
registerCleanupFunction(function () {
|
|
Services.prefs.clearUserPref("network.early-hints.enabled");
|
|
});
|
|
|
|
const { request_count_checking } = ChromeUtils.importESModule(
|
|
"resource://testing-common/early_hint_preload_test_helper.sys.mjs"
|
|
);
|
|
|
|
// Test steps:
|
|
// 1. Install an extension to observe the tabId.
|
|
// 2. Load early_hint_asset_html.sjs?as=image, so we should see a hinted
|
|
// request to early_hint_asset.sjs?as=image.
|
|
// 3. Check if the hinted request has the same tabId as
|
|
// early_hint_asset_html.sys.
|
|
add_task(async function test_103_asset_with_extension() {
|
|
let extension = ExtensionTestUtils.loadExtension({
|
|
manifest: {
|
|
permissions: [
|
|
"webRequest",
|
|
"webRequestBlocking",
|
|
"https://example.com/*",
|
|
],
|
|
},
|
|
background() {
|
|
let { browser } = this;
|
|
browser.webRequest.onBeforeRequest.addListener(
|
|
details => {
|
|
browser.test.sendMessage("request", {
|
|
url: details.url,
|
|
tabId: details.tabId,
|
|
});
|
|
return undefined;
|
|
},
|
|
{ urls: ["https://example.com/*"] },
|
|
["blocking"]
|
|
);
|
|
},
|
|
});
|
|
|
|
await extension.startup();
|
|
|
|
// 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 baseUrl = "https://example.com/browser/netwerk/test/browser/";
|
|
let requestUrl = `${baseUrl}early_hint_asset_html.sjs?as=image&hinted=1`;
|
|
let assetUrl = `${baseUrl}early_hint_asset.sjs?as=image`;
|
|
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: requestUrl,
|
|
waitForLoad: true,
|
|
},
|
|
async function () {}
|
|
);
|
|
|
|
const result1 = await extension.awaitMessage("request");
|
|
Assert.equal(result1.url, requestUrl);
|
|
let tabId = result1.tabId;
|
|
|
|
const result2 = await extension.awaitMessage("request");
|
|
Assert.equal(result2.url, assetUrl);
|
|
Assert.equal(result2.tabId, tabId);
|
|
|
|
await extension.unload();
|
|
});
|