Bug 1340529 - Fix shown/hidden events for a devtools_panel toggled from toolbox preferences. r=kmag
MozReview-Commit-ID: H81qwCEoaf9
This commit is contained in:
@@ -44,6 +44,13 @@ class ChildDevToolsPanel extends EventEmitter {
|
|||||||
if (view.viewType === "devtools_panel" &&
|
if (view.viewType === "devtools_panel" &&
|
||||||
view.devtoolsToolboxInfo.toolboxPanelId === this.id) {
|
view.devtoolsToolboxInfo.toolboxPanelId === this.id) {
|
||||||
this._panelContext = view;
|
this._panelContext = view;
|
||||||
|
|
||||||
|
// Reset the cached _panelContext property when the view is closed.
|
||||||
|
view.callOnClose({
|
||||||
|
close: () => {
|
||||||
|
this._panelContext = null;
|
||||||
|
},
|
||||||
|
});
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,6 +170,12 @@ class ParentDevToolsPanel {
|
|||||||
unwatchExtensionProxyContextLoad();
|
unwatchExtensionProxyContextLoad();
|
||||||
browser.remove();
|
browser.remove();
|
||||||
toolbox.off("select", this.onToolboxPanelSelect);
|
toolbox.off("select", this.onToolboxPanelSelect);
|
||||||
|
|
||||||
|
// If the panel has been disabled from the toolbox preferences,
|
||||||
|
// we need to re-initialize the waitTopLevelContext Promise.
|
||||||
|
this.waitTopLevelContext = new Promise(resolve => {
|
||||||
|
this._resolveTopLevelContext = resolve;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +190,6 @@ class ParentDevToolsPanel {
|
|||||||
if (!this.waitTopLevelContext || !this.panelAdded) {
|
if (!this.waitTopLevelContext || !this.panelAdded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.visible && id === this.id) {
|
if (!this.visible && id === this.id) {
|
||||||
// Wait that the panel is fully loaded and emit show.
|
// Wait that the panel is fully loaded and emit show.
|
||||||
this.waitTopLevelContext.then(() => {
|
this.waitTopLevelContext.then(() => {
|
||||||
@@ -218,6 +223,8 @@ class ParentDevToolsPanel {
|
|||||||
|
|
||||||
this.context = null;
|
this.context = null;
|
||||||
this.toolbox = null;
|
this.toolbox = null;
|
||||||
|
this.waitTopLevelContext = null;
|
||||||
|
this._resolveTopLevelContext = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -135,6 +135,56 @@ add_task(function* test_devtools_page_panels_create() {
|
|||||||
is(secondCycleResults.panelShown, 2, "panel.onShown listener has been called twice");
|
is(secondCycleResults.panelShown, 2, "panel.onShown listener has been called twice");
|
||||||
is(secondCycleResults.panelHidden, 2, "panel.onHidden listener has been called twice");
|
is(secondCycleResults.panelHidden, 2, "panel.onHidden listener has been called twice");
|
||||||
|
|
||||||
|
// Turn off the addon devtools panel using the visibilityswitch.
|
||||||
|
const waitToolVisibilityOff = new Promise(resolve => {
|
||||||
|
toolbox.once("tool-unregistered", resolve);
|
||||||
|
});
|
||||||
|
|
||||||
|
Services.prefs.setBoolPref(`devtools.webext-${panelId}.enabled`, false);
|
||||||
|
gDevTools.emit("tool-unregistered", panelId);
|
||||||
|
|
||||||
|
yield waitToolVisibilityOff;
|
||||||
|
|
||||||
|
ok(toolbox.hasAdditionalTool(panelId),
|
||||||
|
"The tool has not been removed on visibilityswitch set to false");
|
||||||
|
|
||||||
|
is(toolbox.visibleAdditionalTools.filter(tool => tool.id == panelId).length, 0,
|
||||||
|
"The tool is not visible on visibilityswitch set to false");
|
||||||
|
|
||||||
|
// Turn on the addon devtools panel using the visibilityswitch.
|
||||||
|
const waitToolVisibilityOn = new Promise(resolve => {
|
||||||
|
toolbox.once("tool-registered", resolve);
|
||||||
|
});
|
||||||
|
|
||||||
|
Services.prefs.setBoolPref(`devtools.webext-${panelId}.enabled`, true);
|
||||||
|
gDevTools.emit("tool-registered", panelId);
|
||||||
|
|
||||||
|
yield waitToolVisibilityOn;
|
||||||
|
|
||||||
|
ok(toolbox.hasAdditionalTool(panelId),
|
||||||
|
"The tool has been added on visibilityswitch set to true");
|
||||||
|
is(toolbox.visibleAdditionalTools.filter(toolId => toolId == panelId).length, 1,
|
||||||
|
"The tool is visible on visibilityswitch set to true");
|
||||||
|
|
||||||
|
// Test devtools panel is loaded correctly after being toggled and
|
||||||
|
// devtools panel events has been fired as expected.
|
||||||
|
yield gDevTools.showToolbox(target, panelId);
|
||||||
|
yield extension.awaitMessage("devtools_panel_shown");
|
||||||
|
info("Addon Devtools Panel shown - after visibilityswitch toggled");
|
||||||
|
|
||||||
|
info("Wait until the Addon Devtools Panel has been loaded - after visibilityswitch toggled");
|
||||||
|
const panelTabIdAfterToggle = yield extension.awaitMessage("devtools_panel_inspectedWindow_tabId");
|
||||||
|
is(panelTabIdAfterToggle, devtoolsPageTabId,
|
||||||
|
"Got the same devtools.inspectedWindow.tabId from devtools panel after visibility toggled");
|
||||||
|
|
||||||
|
yield gDevTools.showToolbox(target, "webconsole");
|
||||||
|
const toolToggledResults = yield extension.awaitMessage("devtools_panel_hidden");
|
||||||
|
info("Addon Devtools Panel hidden - after visibilityswitch toggled");
|
||||||
|
|
||||||
|
is(toolToggledResults.panelCreated, 1, "devtools.panel.create callback has been called once");
|
||||||
|
is(toolToggledResults.panelShown, 3, "panel.onShown listener has been called three times");
|
||||||
|
is(toolToggledResults.panelHidden, 3, "panel.onHidden listener has been called three times");
|
||||||
|
|
||||||
yield gDevTools.closeToolbox(target);
|
yield gDevTools.closeToolbox(target);
|
||||||
|
|
||||||
yield target.destroy();
|
yield target.destroy();
|
||||||
|
|||||||
Reference in New Issue
Block a user