mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 14:55:47 +00:00
Bug 1436665 - Fix WebExtensions devtools.network tests; r=ochameau,rpl
MozReview-Commit-ID: LDS6zxz7Ivi --HG-- extra : rebase_source : 63b154ca2292d834ea3ddef5837bfedd7115e12b
This commit is contained in:
parent
15c71ac569
commit
23d6c207ac
@ -76,15 +76,11 @@ function devtools_page() {
|
||||
|
||||
browser.devtools.network.onRequestFinished.removeListener(requestFinishedListener);
|
||||
};
|
||||
browser.devtools.network.onRequestFinished.addListener(requestFinishedListener);
|
||||
}
|
||||
|
||||
function waitForRequestAdded(toolbox) {
|
||||
return new Promise(resolve => {
|
||||
let netPanel = toolbox.getPanel("netmonitor");
|
||||
netPanel.panelWin.api.once("NetMonitor:RequestAdded", () => {
|
||||
resolve();
|
||||
});
|
||||
browser.test.onMessage.addListener(msg => {
|
||||
if (msg === "addOnRequestFinishedListener") {
|
||||
browser.devtools.network.onRequestFinished.addListener(requestFinishedListener);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -108,6 +104,26 @@ let extData = {
|
||||
},
|
||||
};
|
||||
|
||||
function waitForRequestAdded(toolbox) {
|
||||
return new Promise(async resolve => {
|
||||
let netPanel = await toolbox.getNetMonitorAPI();
|
||||
netPanel.once("NetMonitor:RequestAdded", () => {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function navigateToolboxTarget(extension, toolbox) {
|
||||
extension.sendMessage("navigate");
|
||||
|
||||
// Wait till the navigation is complete.
|
||||
await Promise.all([
|
||||
extension.awaitMessage("tabUpdated"),
|
||||
extension.awaitMessage("onNavigatedFired"),
|
||||
waitForRequestAdded(toolbox),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for `chrome.devtools.network.onNavigate()` API
|
||||
*/
|
||||
@ -162,35 +178,14 @@ add_task(async function test_devtools_network_get_har() {
|
||||
let toolbox = await gDevTools.showToolbox(target, "webconsole");
|
||||
info("Developer toolbox opened.");
|
||||
|
||||
// Get HAR, it should be empty since the Net panel wasn't selected.
|
||||
// Get HAR, it should be empty since no data collected yet.
|
||||
const getHAREmptyPromise = extension.awaitMessage("getHAR-result");
|
||||
extension.sendMessage("getHAR");
|
||||
const getHAREmptyResult = await getHAREmptyPromise;
|
||||
is(getHAREmptyResult.entries.length, 0, "HAR log should be empty");
|
||||
|
||||
// Select the Net panel.
|
||||
await toolbox.selectTool("netmonitor");
|
||||
|
||||
// Get HAR again, it should be empty because the Panel is selected
|
||||
// but no data collected yet.
|
||||
const getHAREmptyPromiseWithPanel = extension.awaitMessage("getHAR-result");
|
||||
extension.sendMessage("getHAR");
|
||||
const emptyResultWithPanel = await getHAREmptyPromiseWithPanel;
|
||||
is(emptyResultWithPanel.entries.length, 0, "HAR log should be empty");
|
||||
|
||||
// Reload the page to collect some HTTP requests.
|
||||
extension.sendMessage("navigate");
|
||||
|
||||
// Wait till the navigation is complete and request
|
||||
// added into the net panel.
|
||||
await Promise.all([
|
||||
extension.awaitMessage("tabUpdated"),
|
||||
extension.awaitMessage("onNavigatedFired"),
|
||||
extension.awaitMessage("onRequestFinished"),
|
||||
extension.awaitMessage("onRequestFinished-callbackExecuted"),
|
||||
extension.awaitMessage("onRequestFinished-promiseResolved"),
|
||||
waitForRequestAdded(toolbox),
|
||||
]);
|
||||
await navigateToolboxTarget(extension, toolbox);
|
||||
|
||||
// Get HAR, it should not be empty now.
|
||||
const getHARPromise = extension.awaitMessage("getHAR-result");
|
||||
@ -198,6 +193,17 @@ add_task(async function test_devtools_network_get_har() {
|
||||
const getHARResult = await getHARPromise;
|
||||
is(getHARResult.entries.length, 1, "HAR log should not be empty");
|
||||
|
||||
// Select the Net panel and reload page again.
|
||||
await toolbox.selectTool("netmonitor");
|
||||
await navigateToolboxTarget(extension, toolbox);
|
||||
|
||||
// Get HAR again, it should not be empty even if
|
||||
// the Network panel is selected now.
|
||||
const getHAREmptyPromiseWithPanel = extension.awaitMessage("getHAR-result");
|
||||
extension.sendMessage("getHAR");
|
||||
const emptyResultWithPanel = await getHAREmptyPromiseWithPanel;
|
||||
is(emptyResultWithPanel.entries.length, 1, "HAR log should not be empty");
|
||||
|
||||
// Shutdown
|
||||
await gDevTools.closeToolbox(target);
|
||||
|
||||
@ -217,25 +223,23 @@ add_task(async function test_devtools_network_on_request_finished() {
|
||||
|
||||
await extension.startup();
|
||||
await extension.awaitMessage("ready");
|
||||
|
||||
let target = gDevTools.getTargetForTab(tab);
|
||||
|
||||
// Open the Toolbox
|
||||
let toolbox = await gDevTools.showToolbox(target, "netmonitor");
|
||||
let toolbox = await gDevTools.showToolbox(target, "webconsole");
|
||||
info("Developer toolbox opened.");
|
||||
|
||||
// Reload and wait for onRequestFinished event.
|
||||
extension.sendMessage("navigate");
|
||||
// Wait the extension to subscribe the onRequestFinished listener.
|
||||
await extension.sendMessage("addOnRequestFinishedListener");
|
||||
|
||||
await Promise.all([
|
||||
extension.awaitMessage("tabUpdated"),
|
||||
extension.awaitMessage("onNavigatedFired"),
|
||||
waitForRequestAdded(toolbox),
|
||||
]);
|
||||
// Reload the page
|
||||
await navigateToolboxTarget(extension, toolbox);
|
||||
|
||||
info("Wait for an onRequestFinished event");
|
||||
await extension.awaitMessage("onRequestFinished");
|
||||
|
||||
// Wait for response content being fetched.
|
||||
info("Wait for request.getBody results");
|
||||
let [callbackRes, promiseRes] = await Promise.all([
|
||||
extension.awaitMessage("onRequestFinished-callbackExecuted"),
|
||||
extension.awaitMessage("onRequestFinished-promiseResolved"),
|
||||
@ -245,7 +249,6 @@ add_task(async function test_devtools_network_on_request_finished() {
|
||||
"The expected content has been retrieved.");
|
||||
is(callbackRes[1], "text/html; charset=utf-8",
|
||||
"The expected content has been retrieved.");
|
||||
|
||||
is(promiseRes[0], callbackRes[0],
|
||||
"The resolved value is equal to the one received in the callback API mode");
|
||||
is(promiseRes[1], callbackRes[1],
|
||||
|
@ -85,7 +85,8 @@ class FirefoxConnector {
|
||||
await this.removeListeners();
|
||||
|
||||
if (this.tabTarget) {
|
||||
this.tabTarget.off("will-navigate");
|
||||
this.tabTarget.off("will-navigate", this.willNavigate);
|
||||
this.tabTarget.off("navigate", this.navigate);
|
||||
this.tabTarget = null;
|
||||
}
|
||||
|
||||
@ -176,15 +177,19 @@ class FirefoxConnector {
|
||||
if (this.dataProvider && !this.dataProvider.isPayloadQueueEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (this.owner) {
|
||||
this.owner.off(EVENTS.PAYLOAD_READY, listener);
|
||||
}
|
||||
// Netmonitor may already be destroyed,
|
||||
// so do not try to notify the listeners
|
||||
if (this.dataProvider) {
|
||||
this.onReloaded();
|
||||
}
|
||||
};
|
||||
if (this.owner) {
|
||||
this.owner.on(EVENTS.PAYLOAD_READY, listener);
|
||||
}
|
||||
}
|
||||
|
||||
onReloaded() {
|
||||
let panel = this.toolbox.getPanel("netmonitor");
|
||||
|
Loading…
Reference in New Issue
Block a user