Bug 1387899: Part 1 - Cache browserAction icon data for startup. r=mixedpuppy

MozReview-Commit-ID: 57ANCciibCn

--HG--
extra : rebase_source : da636dc48d07951d973965f4c662d7aa048c715e
This commit is contained in:
Kris Maglione 2017-08-06 16:12:14 -07:00
Родитель 0a92c7bb9b
Коммит 90e5e54ec2
2 изменённых файлов: 28 добавлений и 7 удалений

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

@ -31,6 +31,7 @@ Cu.import("resource://gre/modules/ExtensionParent.jsm");
var {
IconDetails,
StartupCache,
} = ExtensionParent;
const POPUP_PRELOAD_TIMEOUT_MS = 200;
@ -65,7 +66,7 @@ this.browserAction = class extends ExtensionAPI {
return browserActionMap.get(extension);
}
onManifestEntry(entryName) {
async onManifestEntry(entryName) {
let {extension} = this;
let options = extension.manifest.browser_action;
@ -88,10 +89,6 @@ this.browserAction = class extends ExtensionAPI {
title: options.default_title || extension.name,
badgeText: "",
badgeBackgroundColor: null,
icon: IconDetails.normalize({
path: options.default_icon,
themeIcons: options.theme_icons,
}, extension),
popup: options.default_popup || "",
area: browserAreas[options.default_area || "navbar"],
};
@ -102,11 +99,25 @@ this.browserAction = class extends ExtensionAPI {
"or not in your browser_action options.");
}
browserActionMap.set(extension, this);
this.defaults.icon = await StartupCache.get(
extension, ["browserAction", "default_icon"],
() => IconDetails.normalize({
path: options.default_icon,
themeIcons: options.theme_icons,
}, extension));
this.iconData.set(
this.defaults.icon,
await StartupCache.get(
extension, ["browserAction", "default_icon_data"],
() => this.getIconData(this.defaults.icon)));
this.tabContext = new TabContext(tab => Object.create(this.defaults),
extension);
this.build();
browserActionMap.set(extension, this);
}
onShutdown(reason) {

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

@ -1364,7 +1364,7 @@ let IconDetails = {
let StartupCache = {
DB_NAME: "ExtensionStartupCache",
STORE_NAMES: Object.freeze(["locales", "manifests", "permissions", "schemas"]),
STORE_NAMES: Object.freeze(["general", "locales", "manifests", "permissions", "schemas"]),
get file() {
return FileUtils.getFile("ProfLD", ["startupCache", "webext.sc.lz4"]);
@ -1413,6 +1413,7 @@ let StartupCache = {
clearAddonData(id) {
return Promise.all([
this.general.delete(id),
this.locales.delete(id),
this.manifests.delete(id),
this.permissions.delete(id),
@ -1428,6 +1429,15 @@ let StartupCache = {
this._dataPromise = Promise.resolve(this._data);
}
},
get(extension, path, createFunc) {
return this.general.get([extension.id, extension.version, ...path],
createFunc);
},
delete(extension, path) {
return this.general.delete([extension.id, extension.version, ...path]);
},
};
// void StartupCache.dataPromise;