зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
0a92c7bb9b
Коммит
90e5e54ec2
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче