fune/toolkit/components/windowcreator/test/browser_persist.js
Emilio Cobos Álvarez 0d0fd8f578 Bug 1668414 - Also handle <source srcset>. r=edgar
Thanks for asking me to add a test ;)

Using the image responsive selector works for scanning the srcset images, but
since we wouldn't rewrite the <source> uris the invalid urls would still have
preference.

Differential Revision: https://phabricator.services.mozilla.com/D92264
2020-10-05 13:44:48 +00:00

103 lines
2.9 KiB
JavaScript

"use strict"; // -*- js-indent-level: 2; indent-tabs-mode: nil -*-
Services.scriptloader.loadSubScript(
"chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js",
this
);
const contentBase =
"https://example.com/browser/toolkit/components/windowcreator/test/";
const chromeBase =
"chrome://mochitests/content/browser/toolkit/components/windowcreator/test/";
// Checks that the source and target documents are the same.
const REFTESTS = [
"file_persist_srcset.html",
"file_persist_picture_source.html",
// ...
];
async function persist(name, uri) {
return BrowserTestUtils.withNewTab(uri, async function(browser) {
// Snapshot the doc as loaded, this is our reference.
info("snapshotting reference");
let reference = await snapshotWindow(browser);
info("starting persistence");
let doc = await new Promise(function(resolve) {
browser.frameLoader.startPersistence(null, {
onDocumentReady(d) {
resolve(d);
},
onError(e) {
ok(false, "startPersistence failed: " + e);
},
});
});
let wbp = Cc[
"@mozilla.org/embedding/browser/nsWebBrowserPersist;1"
].createInstance(Ci.nsIWebBrowserPersist);
let tmp = Services.dirsvc.get("TmpD", Ci.nsIFile);
let tmpFile = tmp.clone();
tmpFile.append(name + "_saved.html");
let tmpDir = tmp.clone();
tmpDir.append(name + "_files");
registerCleanupFunction(function cleanUp() {
if (tmpFile.exists()) {
tmpFile.remove(/* recursive = */ false);
}
if (tmpDir.exists()) {
tmpDir.remove(/* recursive = */ true);
}
});
info("persisting document");
// Wait for the persisted document.
await new Promise(function(resolve) {
wbp.progressListener = {
onProgressChange() {},
onLocationChange() {},
onStatusChange() {},
onSecurityChange() {},
onContentBlockingEvent() {},
onStateChange(_wbp, _req, state, _status) {
if (state & Ci.nsIWebProgressListener.STATE_STOP) {
resolve();
}
},
};
wbp.saveDocument(doc, tmpFile, tmpDir, null, 0, 0);
});
info("load done, loading persisted document");
let fileUri = Services.io.newFileURI(tmpFile).spec;
let test = await BrowserTestUtils.withNewTab(fileUri, async function(
persistedBrowser
) {
info("snapshotting persisted document");
return snapshotWindow(persistedBrowser);
});
return { test, reference };
});
}
add_task(async function() {
for (let filename of REFTESTS) {
let uri = contentBase + filename;
let { test, reference } = await persist(filename, uri);
let expectEqual = true;
let [same, testUri, refUri] = compareSnapshots(
test,
reference,
expectEqual
);
ok(same, "test and references should match");
if (!same) {
info(testUri);
info(refUri);
}
}
});