|
1 /* vim: set ts=2 et sw=2 tw=80: */ |
|
2 /* Any copyright is dedicated to the Public Domain. |
|
3 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
4 |
|
5 let toolbox; |
|
6 |
|
7 function test() |
|
8 { |
|
9 waitForExplicitFinish(); |
|
10 |
|
11 gBrowser.selectedTab = gBrowser.addTab(); |
|
12 let target = TargetFactory.forTab(gBrowser.selectedTab); |
|
13 |
|
14 gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) { |
|
15 gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true); |
|
16 gDevTools.showToolbox(target).then(testRegister); |
|
17 }, true); |
|
18 |
|
19 content.location = "data:text/html,test for dynamically registering and unregistering tools"; |
|
20 } |
|
21 |
|
22 function testRegister(aToolbox) |
|
23 { |
|
24 toolbox = aToolbox |
|
25 gDevTools.once("tool-registered", toolRegistered); |
|
26 |
|
27 gDevTools.registerTool({ |
|
28 id: "test-tool", |
|
29 label: "Test Tool", |
|
30 inMenu: true, |
|
31 isTargetSupported: function() true, |
|
32 build: function() {} |
|
33 }); |
|
34 } |
|
35 |
|
36 function toolRegistered(event, toolId) |
|
37 { |
|
38 is(toolId, "test-tool", "tool-registered event handler sent tool id"); |
|
39 |
|
40 ok(gDevTools.getToolDefinitionMap().has(toolId), "tool added to map"); |
|
41 |
|
42 // test that it appeared in the UI |
|
43 let doc = toolbox.frame.contentDocument; |
|
44 let tab = doc.getElementById("toolbox-tab-" + toolId); |
|
45 ok(tab, "new tool's tab exists in toolbox UI"); |
|
46 |
|
47 let panel = doc.getElementById("toolbox-panel-" + toolId); |
|
48 ok(panel, "new tool's panel exists in toolbox UI"); |
|
49 |
|
50 for (let win of getAllBrowserWindows()) { |
|
51 let command = win.document.getElementById("Tools:" + toolId); |
|
52 ok(command, "command for new tool added to every browser window"); |
|
53 let menuitem = win.document.getElementById("menuitem_" + toolId); |
|
54 ok(menuitem, "menu item of new tool added to every browser window"); |
|
55 } |
|
56 |
|
57 // then unregister it |
|
58 testUnregister(); |
|
59 } |
|
60 |
|
61 function getAllBrowserWindows() { |
|
62 let wins = []; |
|
63 let enumerator = Services.wm.getEnumerator("navigator:browser"); |
|
64 while (enumerator.hasMoreElements()) { |
|
65 wins.push(enumerator.getNext()); |
|
66 } |
|
67 return wins; |
|
68 } |
|
69 |
|
70 function testUnregister() |
|
71 { |
|
72 gDevTools.once("tool-unregistered", toolUnregistered); |
|
73 |
|
74 gDevTools.unregisterTool("test-tool"); |
|
75 } |
|
76 |
|
77 function toolUnregistered(event, toolDefinition) |
|
78 { |
|
79 let toolId = toolDefinition.id; |
|
80 is(toolId, "test-tool", "tool-unregistered event handler sent tool id"); |
|
81 |
|
82 ok(!gDevTools.getToolDefinitionMap().has(toolId), "tool removed from map"); |
|
83 |
|
84 // test that it disappeared from the UI |
|
85 let doc = toolbox.frame.contentDocument; |
|
86 let tab = doc.getElementById("toolbox-tab-" + toolId); |
|
87 ok(!tab, "tool's tab was removed from the toolbox UI"); |
|
88 |
|
89 let panel = doc.getElementById("toolbox-panel-" + toolId); |
|
90 ok(!panel, "tool's panel was removed from toolbox UI"); |
|
91 |
|
92 for (let win of getAllBrowserWindows()) { |
|
93 let command = win.document.getElementById("Tools:" + toolId); |
|
94 ok(!command, "command removed from every browser window"); |
|
95 let menuitem = win.document.getElementById("menuitem_" + toolId); |
|
96 ok(!menuitem, "menu item removed from every browser window"); |
|
97 } |
|
98 |
|
99 cleanup(); |
|
100 } |
|
101 |
|
102 function cleanup() |
|
103 { |
|
104 toolbox.destroy(); |
|
105 toolbox = null; |
|
106 gBrowser.removeCurrentTab(); |
|
107 finish(); |
|
108 } |