Bug 1387899: Part 2 - Cache pageAction icon data for startup. r?mixedpuppy draft
authorKris Maglione <maglione.k@gmail.com>
Sun, 06 Aug 2017 16:16:33 -0700
changeset 641402 78851ac803c7a1924c96a2b9764f1fbbe7e01a70
parent 641401 094d227a2f6ea2aa357b2c29925a5737a398c0c8
child 641403 2640f61d885fee9bed60e8c15b4df1b2cd4c6a31
push id72507
push usermaglione.k@gmail.com
push dateSun, 06 Aug 2017 23:17:53 +0000
reviewersmixedpuppy
bugs1387899
milestone57.0a1
Bug 1387899: Part 2 - Cache pageAction icon data for startup. r?mixedpuppy MozReview-Commit-ID: 2ZK19neRcrQ
browser/components/extensions/ext-pageAction.js
--- 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()) {