Bug 1338726 fix icon style for new windows, r?kmag
MozReview-Commit-ID: BQOgqOwtSdm
--- a/browser/components/extensions/ext-sidebarAction.js
+++ b/browser/components/extensions/ext-sidebarAction.js
@@ -108,22 +108,34 @@ class SidebarAction {
// get the command id we pass to SidebarUI.
broadcaster.setAttribute("oncommand", "SidebarUI.toggle(this.getAttribute('observes'))");
let menuitem = document.createElementNS(XUL_NS, "menuitem");
menuitem.setAttribute("id", this.menuId);
menuitem.setAttribute("observes", this.id);
menuitem.setAttribute("class", "menuitem-iconic webextension-menuitem");
+ this.setMenuIcon(menuitem, details);
+
document.getElementById("mainBroadcasterSet").appendChild(broadcaster);
document.getElementById("viewSidebarMenu").appendChild(menuitem);
return menuitem;
}
+ setMenuIcon(menuitem, details) {
+ let getIcon = size => IconDetails.escapeUrl(
+ IconDetails.getPreferredIcon(details.icon, this.extension, size).icon);
+
+ menuitem.setAttribute("style", `
+ --webextension-menuitem-image: url("${getIcon(16)}");
+ --webextension-menuitem-image-2x: url("${getIcon(32)}");
+ `);
+ }
+
/**
* Update the broadcaster and menuitem `node` with the tab context data
* in `tabData`.
*
* @param {ChromeWindow} window
* Browser chrome window.
* @param {object} tabData
* Tab specific sidebar configuration.
@@ -142,23 +154,17 @@ class SidebarAction {
broadcaster.setAttribute("label", title);
let url = this.sidebarUrl(tabData.panel);
let urlChanged = url !== broadcaster.getAttribute("sidebarurl");
if (urlChanged) {
broadcaster.setAttribute("sidebarurl", url);
}
- let getIcon = size => IconDetails.escapeUrl(
- IconDetails.getPreferredIcon(tabData.icon, this.extension, size).icon);
-
- menu.setAttribute("style", `
- --webextension-menuitem-image: url("${getIcon(16)}");
- --webextension-menuitem-image-2x: url("${getIcon(32)}");
- `);
+ this.setMenuIcon(menu, tabData);
// Update the sidebar if this extension is the current sidebar.
if (SidebarUI.currentID === this.id) {
SidebarUI.title = title;
if (SidebarUI.isOpen && urlChanged) {
SidebarUI.show(this.id);
}
}
--- a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
+++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
@@ -86,25 +86,35 @@ add_task(function* sidebar_two_sidebar_a
});
add_task(function* sidebar_windows() {
let extension = ExtensionTestUtils.loadExtension(extData);
yield extension.startup();
// Test sidebar is opened on install
yield extension.awaitMessage("sidebar");
ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible in first window");
+ // Check that the menuitem has our image styling.
+ let elements = document.getElementsByClassName("webextension-menuitem");
+ is(elements.length, 1, "have one menuitem");
+ let style = elements[0].getAttribute("style");
+ ok(style.includes("webextension-menuitem-image"), "this menu has style");
let secondSidebar = extension.awaitMessage("sidebar");
// SidebarUI relies on window.opener being set, which is normal behavior when
// using menu or key commands to open a new browser window.
let win = yield BrowserTestUtils.openNewBrowserWindow({opener: window});
yield secondSidebar;
ok(!win.document.getElementById("sidebar-box").hidden, "sidebar box is visible in second window");
+ // Check that the menuitem has our image styling.
+ elements = win.document.getElementsByClassName("webextension-menuitem");
+ is(elements.length, 1, "have one menuitem");
+ style = elements[0].getAttribute("style");
+ ok(style.includes("webextension-menuitem-image"), "this menu has style");
yield extension.unload();
yield BrowserTestUtils.closeWindow(win);
});
add_task(function* sidebar_empty_panel() {
let extension = ExtensionTestUtils.loadExtension(extData);
yield extension.startup();