browser/devtools/framework/test/browser_toolbox_dynamic_registration.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:c4dd8424bf0c
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 }

mercurial