Bug 1387899: Part 2 - Cache pageAction icon data for startup. r?mixedpuppy
MozReview-Commit-ID: 2ZK19neRcrQ
--- a/browser/components/extensions/ext-pageAction.js
+++ b/browser/components/extensions/ext-pageAction.js
@@ -15,42 +15,42 @@ XPCOMUtils.defineLazyModuleGetter(this,
var {
DefaultWeakMap,
} = ExtensionUtils;
Cu.import("resource://gre/modules/ExtensionParent.jsm");
var {
IconDetails,
+ StartupCache,
} = ExtensionParent;
const popupOpenTimingHistogram = "WEBEXT_PAGEACTION_POPUP_OPEN_MS";
// WeakMap[Extension -> PageAction]
let pageActionMap = new WeakMap();
this.pageAction = class extends ExtensionAPI {
static for(extension) {
return pageActionMap.get(extension);
}
- onManifestEntry(entryName) {
+ async onManifestEntry(entryName) {
let {extension} = this;
let options = extension.manifest.page_action;
this.iconData = new DefaultWeakMap(icons => this.getIconData(icons));
this.id = makeWidgetId(extension.id) + "-page-action";
this.tabManager = extension.tabManager;
this.defaults = {
show: false,
title: options.default_title || extension.name,
- icon: IconDetails.normalize({path: options.default_icon}, extension),
popup: options.default_popup || "",
};
this.browserStyle = options.browser_style || false;
if (options.browser_style === null) {
this.extension.logger.warn("Please specify whether you want browser_style " +
"or not in your page_action options.");
}
@@ -59,16 +59,26 @@ this.pageAction = class extends Extensio
extension);
this.tabContext.on("location-change", this.handleLocationChange.bind(this)); // eslint-disable-line mozilla/balanced-listeners
// WeakMap[ChromeWindow -> <xul:image>]
this.buttons = new WeakMap();
pageActionMap.set(extension, this);
+
+ this.defaults.icon = await StartupCache.get(
+ extension, ["pageAction", "default_icon"],
+ () => IconDetails.normalize({path: options.default_icon}, extension));
+
+ this.iconData.set(
+ this.defaults.icon,
+ await StartupCache.get(
+ extension, ["pageAction", "default_icon_data"],
+ () => this.getIconData(this.defaults.icon)));
}
onShutdown(reason) {
pageActionMap.delete(this.extension);
this.tabContext.shutdown();
for (let window of windowTracker.browserWindows()) {