forked from mirrors/gecko-dev
Currently, soft reload uses the `VALIDATE_ALWAYS` flag to not only force revalidate the top level document, but also subresources. This causes content to be refetched from the web even if there are caches that are still valid and can be used. Chrome already has such behaviour to not revalidate all resources. Differential Revision: https://phabricator.services.mozilla.com/D122270
127 lines
3.5 KiB
JavaScript
127 lines
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/*
|
|
* Ensures resources can still be fetched without validation
|
|
*/
|
|
|
|
const CONTENT_URL =
|
|
"http://www.example.com/browser/dom/base/test/file_browser_refresh_content.html";
|
|
|
|
async function run_test_browser_refresh(forceRevalidate) {
|
|
let tab = await BrowserTestUtils.openNewForegroundTab({
|
|
gBrowser,
|
|
url: CONTENT_URL,
|
|
waitForLoad: true,
|
|
/* Ensures each run is started with a fresh state */
|
|
forceNewProcess: true,
|
|
});
|
|
|
|
let originalAttributes = await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[],
|
|
async () => {
|
|
let result = content.document.getElementById("result");
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
return (
|
|
result.getAttribute("imageDataURL") &&
|
|
result.getAttribute("iframeContent") &&
|
|
result.getAttribute("expiredResourceCacheControl")
|
|
);
|
|
});
|
|
return {
|
|
imageDataURL: result.getAttribute("imageDataURL"),
|
|
iframeContent: result.getAttribute("iframeContent"),
|
|
expiredResourceCacheControl: result.getAttribute(
|
|
"expiredResourceCacheControl"
|
|
),
|
|
};
|
|
}
|
|
);
|
|
|
|
let imageDataURL = originalAttributes.imageDataURL;
|
|
let expiredResourceCacheControl =
|
|
originalAttributes.expiredResourceCacheControl;
|
|
|
|
is(
|
|
originalAttributes.iframeContent,
|
|
"first load",
|
|
"Iframe is loaded with the initial content"
|
|
);
|
|
|
|
tab.linkedBrowser.reload();
|
|
|
|
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
|
|
|
|
let attributes = await SpecialPowers.spawn(
|
|
tab.linkedBrowser,
|
|
[],
|
|
async () => {
|
|
let result = content.document.getElementById("result");
|
|
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
return (
|
|
result.getAttribute("imageDataURL") &&
|
|
result.getAttribute("expiredResourceCacheControl") &&
|
|
result.getAttribute("nonCacheableResourceCompleted")
|
|
);
|
|
});
|
|
|
|
return {
|
|
iframeContent: result.getAttribute("iframeContent"),
|
|
imageDataURL: result.getAttribute("imageDataURL"),
|
|
expiredResourceCacheControl: result.getAttribute(
|
|
"expiredResourceCacheControl"
|
|
),
|
|
nonCacheableResourceCompleted: result.getAttribute(
|
|
"nonCacheableResourceCompleted"
|
|
),
|
|
};
|
|
}
|
|
);
|
|
|
|
is(
|
|
attributes.iframeContent,
|
|
"second load",
|
|
"Iframe should always be revalidated"
|
|
);
|
|
|
|
if (!forceRevalidate) {
|
|
ok(attributes.imageDataURL === imageDataURL, "Image should use cache");
|
|
} else {
|
|
ok(attributes.imageDataURL !== imageDataURL, "Image should be revalidated");
|
|
}
|
|
|
|
if (!forceRevalidate) {
|
|
ok(
|
|
attributes.expiredResourceCacheControl === expiredResourceCacheControl,
|
|
"max-age shouldn't be changed after reload because it didn't revalidate"
|
|
);
|
|
} else {
|
|
ok(
|
|
attributes.expiredResourceCacheControl !== expiredResourceCacheControl,
|
|
"max-age should be changed after reload because it got revalidated"
|
|
);
|
|
}
|
|
|
|
is(
|
|
attributes.nonCacheableResourceCompleted,
|
|
"true",
|
|
"Non cacheable resource should still be loaded"
|
|
);
|
|
|
|
await BrowserTestUtils.removeTab(tab);
|
|
}
|
|
|
|
add_task(async function test_browser_refresh() {
|
|
Services.prefs.setBoolPref(
|
|
"browser.soft_reload.only_force_validate_top_level_document",
|
|
true
|
|
);
|
|
await run_test_browser_refresh(false);
|
|
Services.prefs.setBoolPref(
|
|
"browser.soft_reload.only_force_validate_top_level_document",
|
|
false
|
|
);
|
|
await run_test_browser_refresh(true);
|
|
});
|