From a4ed9eb7351266ab1d3a75a57e888dfb809b6b16 Mon Sep 17 00:00:00 2001 From: Shane Caraveo Date: Wed, 22 Feb 2017 18:47:16 -0800 Subject: [PATCH] Bug 1313459 support CUI areas for browserAction, r=aswan MozReview-Commit-ID: IoPOCv6M0qy --HG-- extra : rebase_source : b032c4e8d1f9fe3cdc79ea9216540b7de51a572a --- .../extensions/ext-browserAction.js | 12 ++++- .../extensions/schemas/browser_action.json | 6 +++ .../test/browser/browser-common.ini | 1 + .../browser/browser_ext_browserAction_area.js | 49 +++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 browser/components/extensions/test/browser/browser_ext_browserAction_area.js diff --git a/browser/components/extensions/ext-browserAction.js b/browser/components/extensions/ext-browserAction.js index 6dbd2663698a..f7562579ccaa 100644 --- a/browser/components/extensions/ext-browserAction.js +++ b/browser/components/extensions/ext-browserAction.js @@ -38,7 +38,14 @@ function isAncestorOrSelf(target, node) { } // WeakMap[Extension -> BrowserAction] -var browserActionMap = new WeakMap(); +const browserActionMap = new WeakMap(); + +const browserAreas = { + "navbar": CustomizableUI.AREA_NAVBAR, + "menupanel": CustomizableUI.AREA_PANEL, + "tabstrip": CustomizableUI.AREA_TABSTRIP, + "personaltoolbar": CustomizableUI.AREA_BOOKMARKS, +}; // Responsible for the browser_action section of the manifest as well // as the associated popup. @@ -62,6 +69,7 @@ function BrowserAction(options, extension) { badgeBackgroundColor: null, icon: IconDetails.normalize({path: options.default_icon}, extension), popup: options.default_popup || "", + area: browserAreas[options.default_area || "navbar"], }; this.browserStyle = options.browser_style || false; @@ -85,7 +93,7 @@ BrowserAction.prototype = { removable: true, label: this.defaults.title || this.extension.name, tooltiptext: this.defaults.title || "", - defaultArea: CustomizableUI.AREA_NAVBAR, + defaultArea: this.defaults.area, onBeforeCreated: document => { let view = document.createElementNS(XUL_NS, "panelview"); diff --git a/browser/components/extensions/schemas/browser_action.json b/browser/components/extensions/schemas/browser_action.json index 1a7da956a13b..575731e68679 100644 --- a/browser/components/extensions/schemas/browser_action.json +++ b/browser/components/extensions/schemas/browser_action.json @@ -31,6 +31,12 @@ "browser_style": { "type": "boolean", "optional": true + }, + "default_area": { + "description": "Defines the location the browserAction will appear by default. The default location is navbar.", + "type": "string", + "enum": ["navbar", "menupanel", "tabstrip", "personaltoolbar"], + "optional": true } }, "optional": true diff --git a/browser/components/extensions/test/browser/browser-common.ini b/browser/components/extensions/test/browser/browser-common.ini index f908835ea766..a4676d81bd49 100644 --- a/browser/components/extensions/test/browser/browser-common.ini +++ b/browser/components/extensions/test/browser/browser-common.ini @@ -24,6 +24,7 @@ support-files = searchSuggestionEngine.sjs ../../../../../toolkit/components/extensions/test/mochitest/head_webrequest.js +[browser_ext_browserAction_area.js] [browser_ext_browserAction_context.js] [browser_ext_browserAction_disabled.js] [browser_ext_browserAction_pageAction_icon.js] diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_area.js b/browser/components/extensions/test/browser/browser_ext_browserAction_area.js new file mode 100644 index 000000000000..919b00a38147 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_browserAction_area.js @@ -0,0 +1,49 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +var browserAreas = { + "navbar": CustomizableUI.AREA_NAVBAR, + "menupanel": CustomizableUI.AREA_PANEL, + "tabstrip": CustomizableUI.AREA_TABSTRIP, + "personaltoolbar": CustomizableUI.AREA_BOOKMARKS, +}; + +function* testInArea(area) { + let manifest = { + "browser_action": { + "browser_style": true, + }, + }; + if (area) { + manifest.browser_action.default_area = area; + } + let extension = ExtensionTestUtils.loadExtension({ + manifest, + }); + yield extension.startup(); + let widget = getBrowserActionWidget(extension); + let placement = CustomizableUI.getPlacementOfWidget(widget.id); + is(placement && placement.area, browserAreas[area || "navbar"], `widget located in correct area`); + yield extension.unload(); +} + +add_task(function* testBrowserActionDefaultArea() { + yield testInArea(); +}); + +add_task(function* testBrowserActionInToolbar() { + yield testInArea("navbar"); +}); + +add_task(function* testBrowserActionInMenuPanel() { + yield testInArea("menupanel"); +}); + +add_task(function* testBrowserActionInTabStrip() { + yield testInArea("tabstrip"); +}); + +add_task(function* testBrowserActionInPersonalToolbar() { + yield testInArea("personaltoolbar"); +});