mirror of
https://github.com/HeyPuter/firefox.git
synced 2026-11-13 20:14:57 -10:00
# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D230598
128 lines
3.8 KiB
JavaScript
128 lines
3.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
// Test the ResourceCommand API around ROOT_NODE
|
|
|
|
/**
|
|
* The original test still asserts some scenarios using several watchRootNode
|
|
* call sites, which is not something we intend to support at the moment in the
|
|
* resource command.
|
|
*
|
|
* Otherwise this test checks the basic behavior of the resource when reloading
|
|
* an empty page.
|
|
*/
|
|
add_task(async function () {
|
|
// Open a test tab
|
|
const tab = await addTab("data:text/html,Root Node tests");
|
|
|
|
const { client, resourceCommand, targetCommand } =
|
|
await initResourceCommand(tab);
|
|
|
|
const browser = gBrowser.selectedBrowser;
|
|
|
|
info("Call watchResources([ROOT_NODE], ...)");
|
|
let onAvailableCounter = 0;
|
|
const onAvailable = resources => (onAvailableCounter += resources.length);
|
|
await resourceCommand.watchResources([resourceCommand.TYPES.ROOT_NODE], {
|
|
onAvailable,
|
|
});
|
|
|
|
info("Wait until onAvailable has been called");
|
|
await waitUntil(() => onAvailableCounter === 1);
|
|
is(onAvailableCounter, 1, "onAvailable has been called 1 time");
|
|
|
|
info("Reload the selected browser");
|
|
browser.reload();
|
|
|
|
info(
|
|
"Wait until the watchResources([ROOT_NODE], ...) callback has been called"
|
|
);
|
|
await waitUntil(() => onAvailableCounter === 2);
|
|
|
|
is(onAvailableCounter, 2, "onAvailable has been called 2 times");
|
|
|
|
info("Call unwatchResources([ROOT_NODE], ...) for the onAvailable callback");
|
|
resourceCommand.unwatchResources([resourceCommand.TYPES.ROOT_NODE], {
|
|
onAvailable,
|
|
});
|
|
|
|
info("Reload the selected browser");
|
|
const reloaded = BrowserTestUtils.browserLoaded(browser);
|
|
browser.reload();
|
|
await reloaded;
|
|
|
|
is(
|
|
onAvailableCounter,
|
|
2,
|
|
"onAvailable was not called after calling unwatchResources"
|
|
);
|
|
|
|
// Cleanup
|
|
targetCommand.destroy();
|
|
await client.close();
|
|
});
|
|
|
|
/**
|
|
* Test that the watchRootNode API provides the expected node fronts.
|
|
*/
|
|
add_task(async function testRootNodeFrontIsCorrect() {
|
|
const tab = await addTab("data:text/html,<div id=div1>");
|
|
|
|
const { client, resourceCommand, targetCommand } =
|
|
await initResourceCommand(tab);
|
|
const browser = gBrowser.selectedBrowser;
|
|
|
|
info("Call watchResources([ROOT_NODE], ...)");
|
|
|
|
let rootNodeResolve;
|
|
let rootNodePromise = new Promise(r => (rootNodeResolve = r));
|
|
const onAvailable = ([rootNodeFront]) => rootNodeResolve(rootNodeFront);
|
|
await resourceCommand.watchResources([resourceCommand.TYPES.ROOT_NODE], {
|
|
onAvailable,
|
|
});
|
|
|
|
info("Wait until onAvailable has been called");
|
|
const root1 = await rootNodePromise;
|
|
ok(!!root1, "onAvailable has been called with a valid argument");
|
|
is(
|
|
root1.resourceType,
|
|
resourceCommand.TYPES.ROOT_NODE,
|
|
"The resource has the expected type"
|
|
);
|
|
|
|
info("Check we can query an expected node under the retrieved root");
|
|
const div1 = await root1.walkerFront.querySelector(root1, "div");
|
|
is(div1.getAttribute("id"), "div1", "Correct root node retrieved");
|
|
|
|
info("Reload the selected browser");
|
|
rootNodePromise = new Promise(r => (rootNodeResolve = r));
|
|
browser.reload();
|
|
|
|
const root2 = await rootNodePromise;
|
|
Assert.notStrictEqual(
|
|
root1,
|
|
root2,
|
|
"onAvailable has been called with a different node front after reload"
|
|
);
|
|
|
|
info("Navigate to another URL");
|
|
rootNodePromise = new Promise(r => (rootNodeResolve = r));
|
|
BrowserTestUtils.startLoadingURIString(
|
|
browser,
|
|
`data:text/html,<div id=div3>`
|
|
);
|
|
const root3 = await rootNodePromise;
|
|
info("Check we can query an expected node under the retrieved root");
|
|
const div3 = await root3.walkerFront.querySelector(root3, "div");
|
|
is(div3.getAttribute("id"), "div3", "Correct root node retrieved");
|
|
|
|
// Cleanup
|
|
resourceCommand.unwatchResources([resourceCommand.TYPES.ROOT_NODE], {
|
|
onAvailable,
|
|
});
|
|
targetCommand.destroy();
|
|
await client.close();
|
|
});
|