|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 /** |
|
6 * Tests debug button for addons in list view |
|
7 */ |
|
8 |
|
9 let { Promise } = Components.utils.import("resource://gre/modules/Promise.jsm", {}); |
|
10 let { Task } = Components.utils.import("resource://gre/modules/Task.jsm", {}); |
|
11 |
|
12 const getDebugButton = node => |
|
13 node.ownerDocument.getAnonymousElementByAttribute(node, "anonid", "debug-btn"); |
|
14 const addonDebuggingEnabled = bool => |
|
15 Services.prefs.setBoolPref("devtools.chrome.enabled", !!bool); |
|
16 const remoteDebuggingEnabled = bool => |
|
17 Services.prefs.setBoolPref("devtools.debugger.remote-enabled", !!bool); |
|
18 |
|
19 function test() { |
|
20 requestLongerTimeout(2); |
|
21 |
|
22 waitForExplicitFinish(); |
|
23 |
|
24 |
|
25 var gProvider = new MockProvider(); |
|
26 gProvider.createAddons([{ |
|
27 id: "non-debuggable@tests.mozilla.org", |
|
28 name: "No debug", |
|
29 description: "foo" |
|
30 }, |
|
31 { |
|
32 id: "debuggable@tests.mozilla.org", |
|
33 name: "Debuggable", |
|
34 description: "bar", |
|
35 isDebuggable: true |
|
36 }]); |
|
37 |
|
38 Task.spawn(function* () { |
|
39 addonDebuggingEnabled(false); |
|
40 remoteDebuggingEnabled(false); |
|
41 |
|
42 yield testDOM((nondebug, debuggable) => { |
|
43 is(nondebug.disabled, true, |
|
44 "addon:disabled::remote:disabled button is disabled for legacy addons"); |
|
45 is(nondebug.hidden, true, |
|
46 "addon:disabled::remote:disabled button is hidden for legacy addons"); |
|
47 is(debuggable.disabled, true, |
|
48 "addon:disabled::remote:disabled button is disabled for debuggable addons"); |
|
49 is(debuggable.hidden, true, |
|
50 "addon:disabled::remote:disabled button is hidden for debuggable addons"); |
|
51 }); |
|
52 |
|
53 addonDebuggingEnabled(true); |
|
54 remoteDebuggingEnabled(false); |
|
55 |
|
56 yield testDOM((nondebug, debuggable) => { |
|
57 is(nondebug.disabled, true, |
|
58 "addon:enabled::remote:disabled button is disabled for legacy addons"); |
|
59 is(nondebug.disabled, true, |
|
60 "addon:enabled::remote:disabled button is hidden for legacy addons"); |
|
61 is(debuggable.disabled, true, |
|
62 "addon:enabled::remote:disabled button is disabled for debuggable addons"); |
|
63 is(debuggable.disabled, true, |
|
64 "addon:enabled::remote:disabled button is hidden for debuggable addons"); |
|
65 }); |
|
66 |
|
67 addonDebuggingEnabled(false); |
|
68 remoteDebuggingEnabled(true); |
|
69 |
|
70 yield testDOM((nondebug, debuggable) => { |
|
71 is(nondebug.disabled, true, |
|
72 "addon:disabled::remote:enabled button is disabled for legacy addons"); |
|
73 is(nondebug.disabled, true, |
|
74 "addon:disabled::remote:enabled button is hidden for legacy addons"); |
|
75 is(debuggable.disabled, true, |
|
76 "addon:disabled::remote:enabled button is disabled for debuggable addons"); |
|
77 is(debuggable.disabled, true, |
|
78 "addon:disabled::remote:enabled button is hidden for debuggable addons"); |
|
79 }); |
|
80 |
|
81 addonDebuggingEnabled(true); |
|
82 remoteDebuggingEnabled(true); |
|
83 |
|
84 yield testDOM((nondebug, debuggable) => { |
|
85 is(nondebug.disabled, true, |
|
86 "addon:enabled::remote:enabled button is disabled for legacy addons"); |
|
87 is(nondebug.disabled, true, |
|
88 "addon:enabled::remote:enabled button is hidden for legacy addons"); |
|
89 is(debuggable.disabled, false, |
|
90 "addon:enabled::remote:enabled button is enabled for debuggable addons"); |
|
91 is(debuggable.hidden, false, |
|
92 "addon:enabled::remote:enabled button is visible for debuggable addons"); |
|
93 }); |
|
94 |
|
95 finish(); |
|
96 }); |
|
97 |
|
98 function testDOM (testCallback) { |
|
99 let deferred = Promise.defer(); |
|
100 open_manager("addons://list/extension", function(aManager) { |
|
101 const {document} = aManager; |
|
102 const addonList = document.getElementById("addon-list"); |
|
103 const nondebug = addonList.querySelector("[name='No debug']"); |
|
104 const debuggable = addonList.querySelector("[name='Debuggable']"); |
|
105 |
|
106 testCallback.apply(null, [nondebug, debuggable].map(getDebugButton)); |
|
107 |
|
108 close_manager(aManager, deferred.resolve); |
|
109 }); |
|
110 return deferred.promise; |
|
111 } |
|
112 } |