зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1340529 - Fix shown/hidden events for a devtools_panel toggled from toolbox preferences. r=kmag
MozReview-Commit-ID: H81qwCEoaf9 --HG-- extra : rebase_source : 8376f43d40739be337f983c34a9527137fb1c1c5
This commit is contained in:
Родитель
0db343d655
Коммит
f30c630e4d
|
@ -44,6 +44,13 @@ class ChildDevToolsPanel extends EventEmitter {
|
|||
if (view.viewType === "devtools_panel" &&
|
||||
view.devtoolsToolboxInfo.toolboxPanelId === this.id) {
|
||||
this._panelContext = view;
|
||||
|
||||
// Reset the cached _panelContext property when the view is closed.
|
||||
view.callOnClose({
|
||||
close: () => {
|
||||
this._panelContext = null;
|
||||
},
|
||||
});
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,6 +170,12 @@ class ParentDevToolsPanel {
|
|||
unwatchExtensionProxyContextLoad();
|
||||
browser.remove();
|
||||
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) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.visible && id === this.id) {
|
||||
// Wait that the panel is fully loaded and emit show.
|
||||
this.waitTopLevelContext.then(() => {
|
||||
|
@ -218,6 +223,8 @@ class ParentDevToolsPanel {
|
|||
|
||||
this.context = 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.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 target.destroy();
|
||||
|
|
Загрузка…
Ссылка в новой задаче