diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_debug_button.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/browser/browser_debug_button.js | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_debug_button.js b/toolkit/mozapps/extensions/test/browser/browser_debug_button.js new file mode 100644 index 000000000..3f371e906 --- /dev/null +++ b/toolkit/mozapps/extensions/test/browser/browser_debug_button.js @@ -0,0 +1,112 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +/** + * Tests debug button for addons in list view + */ + +let { Promise } = Components.utils.import("resource://gre/modules/Promise.jsm", {}); +let { Task } = Components.utils.import("resource://gre/modules/Task.jsm", {}); + +const getDebugButton = node => + node.ownerDocument.getAnonymousElementByAttribute(node, "anonid", "debug-btn"); +const addonDebuggingEnabled = bool => + Services.prefs.setBoolPref("devtools.chrome.enabled", !!bool); +const remoteDebuggingEnabled = bool => + Services.prefs.setBoolPref("devtools.debugger.remote-enabled", !!bool); + +function test() { + requestLongerTimeout(2); + + waitForExplicitFinish(); + + + var gProvider = new MockProvider(); + gProvider.createAddons([{ + id: "non-debuggable@tests.mozilla.org", + name: "No debug", + description: "foo" + }, + { + id: "debuggable@tests.mozilla.org", + name: "Debuggable", + description: "bar", + isDebuggable: true + }]); + + Task.spawn(function* () { + addonDebuggingEnabled(false); + remoteDebuggingEnabled(false); + + yield testDOM((nondebug, debuggable) => { + is(nondebug.disabled, true, + "addon:disabled::remote:disabled button is disabled for legacy addons"); + is(nondebug.hidden, true, + "addon:disabled::remote:disabled button is hidden for legacy addons"); + is(debuggable.disabled, true, + "addon:disabled::remote:disabled button is disabled for debuggable addons"); + is(debuggable.hidden, true, + "addon:disabled::remote:disabled button is hidden for debuggable addons"); + }); + + addonDebuggingEnabled(true); + remoteDebuggingEnabled(false); + + yield testDOM((nondebug, debuggable) => { + is(nondebug.disabled, true, + "addon:enabled::remote:disabled button is disabled for legacy addons"); + is(nondebug.disabled, true, + "addon:enabled::remote:disabled button is hidden for legacy addons"); + is(debuggable.disabled, true, + "addon:enabled::remote:disabled button is disabled for debuggable addons"); + is(debuggable.disabled, true, + "addon:enabled::remote:disabled button is hidden for debuggable addons"); + }); + + addonDebuggingEnabled(false); + remoteDebuggingEnabled(true); + + yield testDOM((nondebug, debuggable) => { + is(nondebug.disabled, true, + "addon:disabled::remote:enabled button is disabled for legacy addons"); + is(nondebug.disabled, true, + "addon:disabled::remote:enabled button is hidden for legacy addons"); + is(debuggable.disabled, true, + "addon:disabled::remote:enabled button is disabled for debuggable addons"); + is(debuggable.disabled, true, + "addon:disabled::remote:enabled button is hidden for debuggable addons"); + }); + + addonDebuggingEnabled(true); + remoteDebuggingEnabled(true); + + yield testDOM((nondebug, debuggable) => { + is(nondebug.disabled, true, + "addon:enabled::remote:enabled button is disabled for legacy addons"); + is(nondebug.disabled, true, + "addon:enabled::remote:enabled button is hidden for legacy addons"); + is(debuggable.disabled, false, + "addon:enabled::remote:enabled button is enabled for debuggable addons"); + is(debuggable.hidden, false, + "addon:enabled::remote:enabled button is visible for debuggable addons"); + }); + + finish(); + }); + + function testDOM (testCallback) { + let deferred = Promise.defer(); + open_manager("addons://list/extension", function(aManager) { + const {document} = aManager; + const addonList = document.getElementById("addon-list"); + const nondebug = addonList.querySelector("[name='No debug']"); + const debuggable = addonList.querySelector("[name='Debuggable']"); + + testCallback.apply(null, [nondebug, debuggable].map(getDebugButton)); + + close_manager(aManager, deferred.resolve); + }); + return deferred.promise; + } +} |