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.removeListener(requestFinishedListener);
|
||||||
};
|
};
|
||||||
browser.devtools.network.onRequestFinished.addListener(requestFinishedListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
function waitForRequestAdded(toolbox) {
|
browser.test.onMessage.addListener(msg => {
|
||||||
return new Promise(resolve => {
|
if (msg === "addOnRequestFinishedListener") {
|
||||||
let netPanel = toolbox.getPanel("netmonitor");
|
browser.devtools.network.onRequestFinished.addListener(requestFinishedListener);
|
||||||
netPanel.panelWin.api.once("NetMonitor:RequestAdded", () => {
|
}
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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
|
* 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");
|
let toolbox = await gDevTools.showToolbox(target, "webconsole");
|
||||||
info("Developer toolbox opened.");
|
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");
|
const getHAREmptyPromise = extension.awaitMessage("getHAR-result");
|
||||||
extension.sendMessage("getHAR");
|
extension.sendMessage("getHAR");
|
||||||
const getHAREmptyResult = await getHAREmptyPromise;
|
const getHAREmptyResult = await getHAREmptyPromise;
|
||||||
is(getHAREmptyResult.entries.length, 0, "HAR log should be empty");
|
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.
|
// Reload the page to collect some HTTP requests.
|
||||||
extension.sendMessage("navigate");
|
await navigateToolboxTarget(extension, toolbox);
|
||||||
|
|
||||||
// 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),
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Get HAR, it should not be empty now.
|
// Get HAR, it should not be empty now.
|
||||||
const getHARPromise = extension.awaitMessage("getHAR-result");
|
const getHARPromise = extension.awaitMessage("getHAR-result");
|
||||||
@ -198,6 +193,17 @@ add_task(async function test_devtools_network_get_har() {
|
|||||||
const getHARResult = await getHARPromise;
|
const getHARResult = await getHARPromise;
|
||||||
is(getHARResult.entries.length, 1, "HAR log should not be empty");
|
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
|
// Shutdown
|
||||||
await gDevTools.closeToolbox(target);
|
await gDevTools.closeToolbox(target);
|
||||||
|
|
||||||
@ -217,25 +223,23 @@ add_task(async function test_devtools_network_on_request_finished() {
|
|||||||
|
|
||||||
await extension.startup();
|
await extension.startup();
|
||||||
await extension.awaitMessage("ready");
|
await extension.awaitMessage("ready");
|
||||||
|
|
||||||
let target = gDevTools.getTargetForTab(tab);
|
let target = gDevTools.getTargetForTab(tab);
|
||||||
|
|
||||||
// Open the Toolbox
|
// Open the Toolbox
|
||||||
let toolbox = await gDevTools.showToolbox(target, "netmonitor");
|
let toolbox = await gDevTools.showToolbox(target, "webconsole");
|
||||||
info("Developer toolbox opened.");
|
info("Developer toolbox opened.");
|
||||||
|
|
||||||
// Reload and wait for onRequestFinished event.
|
// Wait the extension to subscribe the onRequestFinished listener.
|
||||||
extension.sendMessage("navigate");
|
await extension.sendMessage("addOnRequestFinishedListener");
|
||||||
|
|
||||||
await Promise.all([
|
// Reload the page
|
||||||
extension.awaitMessage("tabUpdated"),
|
await navigateToolboxTarget(extension, toolbox);
|
||||||
extension.awaitMessage("onNavigatedFired"),
|
|
||||||
waitForRequestAdded(toolbox),
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
info("Wait for an onRequestFinished event");
|
||||||
await extension.awaitMessage("onRequestFinished");
|
await extension.awaitMessage("onRequestFinished");
|
||||||
|
|
||||||
// Wait for response content being fetched.
|
// Wait for response content being fetched.
|
||||||
|
info("Wait for request.getBody results");
|
||||||
let [callbackRes, promiseRes] = await Promise.all([
|
let [callbackRes, promiseRes] = await Promise.all([
|
||||||
extension.awaitMessage("onRequestFinished-callbackExecuted"),
|
extension.awaitMessage("onRequestFinished-callbackExecuted"),
|
||||||
extension.awaitMessage("onRequestFinished-promiseResolved"),
|
extension.awaitMessage("onRequestFinished-promiseResolved"),
|
||||||
@ -245,7 +249,6 @@ add_task(async function test_devtools_network_on_request_finished() {
|
|||||||
"The expected content has been retrieved.");
|
"The expected content has been retrieved.");
|
||||||
is(callbackRes[1], "text/html; charset=utf-8",
|
is(callbackRes[1], "text/html; charset=utf-8",
|
||||||
"The expected content has been retrieved.");
|
"The expected content has been retrieved.");
|
||||||
|
|
||||||
is(promiseRes[0], callbackRes[0],
|
is(promiseRes[0], callbackRes[0],
|
||||||
"The resolved value is equal to the one received in the callback API mode");
|
"The resolved value is equal to the one received in the callback API mode");
|
||||||
is(promiseRes[1], callbackRes[1],
|
is(promiseRes[1], callbackRes[1],
|
||||||
|
@ -85,7 +85,8 @@ class FirefoxConnector {
|
|||||||
await this.removeListeners();
|
await this.removeListeners();
|
||||||
|
|
||||||
if (this.tabTarget) {
|
if (this.tabTarget) {
|
||||||
this.tabTarget.off("will-navigate");
|
this.tabTarget.off("will-navigate", this.willNavigate);
|
||||||
|
this.tabTarget.off("navigate", this.navigate);
|
||||||
this.tabTarget = null;
|
this.tabTarget = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,15 +177,19 @@ class FirefoxConnector {
|
|||||||
if (this.dataProvider && !this.dataProvider.isPayloadQueueEmpty()) {
|
if (this.dataProvider && !this.dataProvider.isPayloadQueueEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (this.owner) {
|
||||||
this.owner.off(EVENTS.PAYLOAD_READY, listener);
|
this.owner.off(EVENTS.PAYLOAD_READY, listener);
|
||||||
|
}
|
||||||
// Netmonitor may already be destroyed,
|
// Netmonitor may already be destroyed,
|
||||||
// so do not try to notify the listeners
|
// so do not try to notify the listeners
|
||||||
if (this.dataProvider) {
|
if (this.dataProvider) {
|
||||||
this.onReloaded();
|
this.onReloaded();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
if (this.owner) {
|
||||||
this.owner.on(EVENTS.PAYLOAD_READY, listener);
|
this.owner.on(EVENTS.PAYLOAD_READY, listener);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onReloaded() {
|
onReloaded() {
|
||||||
let panel = this.toolbox.getPanel("netmonitor");
|
let panel = this.toolbox.getPanel("netmonitor");
|
||||||
|
Loading…
Reference in New Issue
Block a user