Bug 1245287 - Add toolbox API for isToolRegistered and events for tool-registered and tool-unregistered;r=jryans

--HG--
extra : commitid : FWUAnIRnqH
This commit is contained in:
Brian Grinstead 2016-02-03 16:00:21 -08:00
parent 970113dc9f
commit 9ebb26a99c
2 changed files with 50 additions and 16 deletions

View File

@ -39,11 +39,11 @@ function runTests1(aTab) {
};
ok(gDevTools, "gDevTools exists");
is(gDevTools.getToolDefinitionMap().has(toolId1), false,
ok(!gDevTools.getToolDefinitionMap().has(toolId1),
"The tool is not registered");
gDevTools.registerTool(toolDefinition);
is(gDevTools.getToolDefinitionMap().has(toolId1), true,
ok(gDevTools.getToolDefinitionMap().has(toolId1),
"The tool is registered");
let target = TargetFactory.forTab(gBrowser.selectedTab);
@ -98,11 +98,11 @@ function runTests2() {
},
};
is(gDevTools.getToolDefinitionMap().has(toolId2), false,
ok(!gDevTools.getToolDefinitionMap().has(toolId2),
"The tool is not registered");
gDevTools.registerTool(toolDefinition);
is(gDevTools.getToolDefinitionMap().has(toolId2), true,
ok(gDevTools.getToolDefinitionMap().has(toolId2),
"The tool is registered");
let target = TargetFactory.forTab(gBrowser.selectedTab);
@ -149,7 +149,7 @@ function runTests2() {
});
}
function continueTests(toolbox, panel) {
var continueTests = Task.async(function*(toolbox, panel) {
ok(toolbox.getCurrentPanel(), "panel value is correct");
is(toolbox.currentToolId, toolId2, "toolbox _currentToolId is correct");
@ -160,24 +160,42 @@ function continueTests(toolbox, panel) {
"The builtin tool tabs do have the invertable attribute");
let toolDefinitions = gDevTools.getToolDefinitionMap();
is(toolDefinitions.has(toolId2), true, "The tool is in gDevTools");
ok(toolDefinitions.has(toolId2), "The tool is in gDevTools");
let toolDefinition = toolDefinitions.get(toolId2);
is(toolDefinition.id, toolId2, "toolDefinition id is correct");
gDevTools.unregisterTool(toolId2);
is(gDevTools.getToolDefinitionMap().has(toolId2), false,
info("Testing toolbox tool-unregistered event");
let toolSelected = toolbox.once("select");
let unregisteredTool = yield new Promise(resolve => {
toolbox.once("tool-unregistered", (e,id) => resolve(id));
gDevTools.unregisterTool(toolId2);
});
yield toolSelected;
is(unregisteredTool, toolId2, "Event returns correct id");
ok(!toolbox.isToolRegistered(toolId2),
"Toolbox: The tool is not registered");
ok(!gDevTools.getToolDefinitionMap().has(toolId2),
"The tool is no longer registered");
// Wait for unregisterTool to select the next tool before
// attempting to destroy.
toolbox.on("select", function selectListener (_, id) {
if (id !== "test-tool") {
toolbox.off("select", selectListener);
destroyToolbox(toolbox);
}
info("Testing toolbox tool-registered event");
let registeredTool = yield new Promise(resolve => {
toolbox.once("tool-registered", (e,id) => resolve(id));
gDevTools.registerTool(toolDefinition);
});
}
is(registeredTool, toolId2, "Event returns correct id");
ok(toolbox.isToolRegistered(toolId2),
"Toolbox: The tool is registered");
ok(gDevTools.getToolDefinitionMap().has(toolId2),
"The tool is registered");
info("Unregistering tool")
gDevTools.unregisterTool(toolId2);
destroyToolbox(toolbox);
});
function destroyToolbox(toolbox) {
toolbox.destroy().then(function() {

View File

@ -1772,6 +1772,16 @@ Toolbox.prototype = {
});
},
/**
* Return if the tool is available as a tab (i.e. if it's checked
* in the options panel). This is different from Toolbox.getPanel -
* a tool could be registered but not yet opened in which case
* isToolRegistered would return true but getPanel would return false.
*/
isToolRegistered: function(toolId) {
return gDevTools.getToolDefinitionMap().has(toolId);
},
/**
* Handler for the tool-registered event.
* @param {string} event
@ -1782,6 +1792,9 @@ Toolbox.prototype = {
_toolRegistered: function(event, toolId) {
let tool = gDevTools.getToolDefinition(toolId);
this._buildTabForTool(tool);
// Emit the event so tools can listen to it from the toolbox level
// instead of gDevTools
this.emit("tool-registered", toolId);
},
/**
@ -1833,6 +1846,9 @@ Toolbox.prototype = {
key.parentNode.removeChild(key);
}
}
// Emit the event so tools can listen to it from the toolbox level
// instead of gDevTools
this.emit("tool-unregistered", toolId);
},
/**