1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/framework/test/browser_toolbox_dynamic_registration.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,108 @@ 1.4 +/* vim: set ts=2 et sw=2 tw=80: */ 1.5 +/* Any copyright is dedicated to the Public Domain. 1.6 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.7 + 1.8 +let toolbox; 1.9 + 1.10 +function test() 1.11 +{ 1.12 + waitForExplicitFinish(); 1.13 + 1.14 + gBrowser.selectedTab = gBrowser.addTab(); 1.15 + let target = TargetFactory.forTab(gBrowser.selectedTab); 1.16 + 1.17 + gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) { 1.18 + gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true); 1.19 + gDevTools.showToolbox(target).then(testRegister); 1.20 + }, true); 1.21 + 1.22 + content.location = "data:text/html,test for dynamically registering and unregistering tools"; 1.23 +} 1.24 + 1.25 +function testRegister(aToolbox) 1.26 +{ 1.27 + toolbox = aToolbox 1.28 + gDevTools.once("tool-registered", toolRegistered); 1.29 + 1.30 + gDevTools.registerTool({ 1.31 + id: "test-tool", 1.32 + label: "Test Tool", 1.33 + inMenu: true, 1.34 + isTargetSupported: function() true, 1.35 + build: function() {} 1.36 + }); 1.37 +} 1.38 + 1.39 +function toolRegistered(event, toolId) 1.40 +{ 1.41 + is(toolId, "test-tool", "tool-registered event handler sent tool id"); 1.42 + 1.43 + ok(gDevTools.getToolDefinitionMap().has(toolId), "tool added to map"); 1.44 + 1.45 + // test that it appeared in the UI 1.46 + let doc = toolbox.frame.contentDocument; 1.47 + let tab = doc.getElementById("toolbox-tab-" + toolId); 1.48 + ok(tab, "new tool's tab exists in toolbox UI"); 1.49 + 1.50 + let panel = doc.getElementById("toolbox-panel-" + toolId); 1.51 + ok(panel, "new tool's panel exists in toolbox UI"); 1.52 + 1.53 + for (let win of getAllBrowserWindows()) { 1.54 + let command = win.document.getElementById("Tools:" + toolId); 1.55 + ok(command, "command for new tool added to every browser window"); 1.56 + let menuitem = win.document.getElementById("menuitem_" + toolId); 1.57 + ok(menuitem, "menu item of new tool added to every browser window"); 1.58 + } 1.59 + 1.60 + // then unregister it 1.61 + testUnregister(); 1.62 +} 1.63 + 1.64 +function getAllBrowserWindows() { 1.65 + let wins = []; 1.66 + let enumerator = Services.wm.getEnumerator("navigator:browser"); 1.67 + while (enumerator.hasMoreElements()) { 1.68 + wins.push(enumerator.getNext()); 1.69 + } 1.70 + return wins; 1.71 +} 1.72 + 1.73 +function testUnregister() 1.74 +{ 1.75 + gDevTools.once("tool-unregistered", toolUnregistered); 1.76 + 1.77 + gDevTools.unregisterTool("test-tool"); 1.78 +} 1.79 + 1.80 +function toolUnregistered(event, toolDefinition) 1.81 +{ 1.82 + let toolId = toolDefinition.id; 1.83 + is(toolId, "test-tool", "tool-unregistered event handler sent tool id"); 1.84 + 1.85 + ok(!gDevTools.getToolDefinitionMap().has(toolId), "tool removed from map"); 1.86 + 1.87 + // test that it disappeared from the UI 1.88 + let doc = toolbox.frame.contentDocument; 1.89 + let tab = doc.getElementById("toolbox-tab-" + toolId); 1.90 + ok(!tab, "tool's tab was removed from the toolbox UI"); 1.91 + 1.92 + let panel = doc.getElementById("toolbox-panel-" + toolId); 1.93 + ok(!panel, "tool's panel was removed from toolbox UI"); 1.94 + 1.95 + for (let win of getAllBrowserWindows()) { 1.96 + let command = win.document.getElementById("Tools:" + toolId); 1.97 + ok(!command, "command removed from every browser window"); 1.98 + let menuitem = win.document.getElementById("menuitem_" + toolId); 1.99 + ok(!menuitem, "menu item removed from every browser window"); 1.100 + } 1.101 + 1.102 + cleanup(); 1.103 +} 1.104 + 1.105 +function cleanup() 1.106 +{ 1.107 + toolbox.destroy(); 1.108 + toolbox = null; 1.109 + gBrowser.removeCurrentTab(); 1.110 + finish(); 1.111 +}