Bug 1313459 support CUI areas for browserAction, r=aswan

MozReview-Commit-ID: IoPOCv6M0qy

--HG--
extra : rebase_source : 501d3bd94c7f2859c8c5b3b05667cdb35a679b62
This commit is contained in:
Shane Caraveo 2017-02-21 10:00:06 -08:00
Родитель 970ca57ee7
Коммит a226f9e310
4 изменённых файлов: 90 добавлений и 2 удалений

Просмотреть файл

@ -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");

Просмотреть файл

@ -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

Просмотреть файл

@ -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]

Просмотреть файл

@ -0,0 +1,73 @@
/* -*- 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": {
"default_popup": "popup.html",
"browser_style": true,
},
};
if (area) {
manifest.browser_action.default_area = area;
}
let extension = ExtensionTestUtils.loadExtension({
manifest,
files: {
"popup.html": `
<!DOCTYPE html>
<html><head>
<meta charset="utf-8"/>
<script src="popup.js"></script>
</head><body>
</body></html>
`,
"popup.js": function() {
window.onload = () => {
browser.test.sendMessage("from-popup");
};
},
},
});
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`);
clickBrowserAction(extension);
yield extension.awaitMessage("from-popup");
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() {
CustomizableUI.setToolbarVisibility("PersonalToolbar", true);
yield testInArea("personaltoolbar");
CustomizableUI.setToolbarVisibility("PersonalToolbar", false);
});