Bug 1436665 - Fix WebExtensions devtools.network tests; r=ochameau,rpl

MozReview-Commit-ID: LDS6zxz7Ivi

--HG--
extra : rebase_source : 63b154ca2292d834ea3ddef5837bfedd7115e12b
This commit is contained in:
Jan Odvarko 2018-04-17 13:14:44 +02:00
Родитель 15c71ac569
Коммит 23d6c207ac
2 изменённых файлов: 52 добавлений и 44 удалений

Просмотреть файл

@ -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,14 +177,18 @@ class FirefoxConnector {
if (this.dataProvider && !this.dataProvider.isPayloadQueueEmpty()) {
return;
}
this.owner.off(EVENTS.PAYLOAD_READY, listener);
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();
}
};
this.owner.on(EVENTS.PAYLOAD_READY, listener);
if (this.owner) {
this.owner.on(EVENTS.PAYLOAD_READY, listener);
}
}
onReloaded() {