зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1405264 Part 2: Use startupData for new langpacks r=gandalf,kmag
Webextension-formatted langpacks now store their list of chrome registry resources in startupData so that those resources can be registered early in startup. MozReview-Commit-ID: 80eOiPKLlWu --HG-- extra : rebase_source : b00abc0484e6b41bfb1d17c543a450dc737a6b30
This commit is contained in:
Родитель
73d8eb4bdc
Коммит
1b859fa83a
|
@ -313,6 +313,8 @@ this.ExtensionData = class {
|
||||||
this.dependencies = new Set();
|
this.dependencies = new Set();
|
||||||
this.permissions = new Set();
|
this.permissions = new Set();
|
||||||
|
|
||||||
|
this.startupData = null;
|
||||||
|
|
||||||
this.errors = [];
|
this.errors = [];
|
||||||
this.warnings = [];
|
this.warnings = [];
|
||||||
}
|
}
|
||||||
|
@ -620,6 +622,24 @@ this.ExtensionData = class {
|
||||||
webAccessibleResources = manifest.web_accessible_resources
|
webAccessibleResources = manifest.web_accessible_resources
|
||||||
.map(path => path.replace(/^\/*/, "/"));
|
.map(path => path.replace(/^\/*/, "/"));
|
||||||
}
|
}
|
||||||
|
} else if (this.type == "langpack") {
|
||||||
|
// Compute the chrome resources to be registered for this langpack
|
||||||
|
// and stash them in startupData
|
||||||
|
const platform = AppConstants.platform;
|
||||||
|
const chromeEntries = [];
|
||||||
|
for (const [language, entry] of Object.entries(manifest.languages)) {
|
||||||
|
for (const [alias, path] of Object.entries(entry.chrome_resources || {})) {
|
||||||
|
if (typeof path === "string") {
|
||||||
|
chromeEntries.push(["locale", alias, language, path]);
|
||||||
|
} else if (platform in path) {
|
||||||
|
// If the path is not a string, it's an object with path per
|
||||||
|
// platform where the keys are taken from AppConstants.platform
|
||||||
|
chromeEntries.push(["locale", alias, language, path[platform]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.startupData = {chromeEntries};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {apiNames, dependencies, originPermissions, id, manifest, permissions,
|
return {apiNames, dependencies, originPermissions, id, manifest, permissions,
|
||||||
|
@ -1608,6 +1628,7 @@ this.Extension = class extends ExtensionData {
|
||||||
this.Langpack = class extends ExtensionData {
|
this.Langpack = class extends ExtensionData {
|
||||||
constructor(addonData, startupReason) {
|
constructor(addonData, startupReason) {
|
||||||
super(addonData.resourceURI);
|
super(addonData.resourceURI);
|
||||||
|
this.startupData = addonData.startupData;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getBootstrapScope(id, file) {
|
static getBootstrapScope(id, file) {
|
||||||
|
@ -1661,7 +1682,6 @@ this.Langpack = class extends ExtensionData {
|
||||||
}
|
}
|
||||||
|
|
||||||
data.l10nRegistrySources = l10nRegistrySources;
|
data.l10nRegistrySources = l10nRegistrySources;
|
||||||
data.chromeResources = this.getChromeResources(data.manifest);
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -1672,19 +1692,18 @@ this.Langpack = class extends ExtensionData {
|
||||||
}
|
}
|
||||||
|
|
||||||
async startup(reason) {
|
async startup(reason) {
|
||||||
|
this.chromeRegistryHandle = null;
|
||||||
|
if (this.startupData.chromeEntries.length > 0) {
|
||||||
|
const manifestURI = Services.io.newURI("manifest.json", null, this.rootURI);
|
||||||
|
this.chromeRegistryHandle =
|
||||||
|
aomStartup.registerChrome(manifestURI, this.startupData.chromeEntries);
|
||||||
|
}
|
||||||
|
|
||||||
const data = await this.parseManifest();
|
const data = await this.parseManifest();
|
||||||
this.langpackId = data.langpackId;
|
this.langpackId = data.langpackId;
|
||||||
this.l10nRegistrySources = data.l10nRegistrySources;
|
this.l10nRegistrySources = data.l10nRegistrySources;
|
||||||
|
|
||||||
const languages = Object.keys(data.manifest.languages);
|
const languages = Object.keys(data.manifest.languages);
|
||||||
const manifestURI = Services.io.newURI("manifest.json", null, this.rootURI);
|
|
||||||
|
|
||||||
this.chromeRegistryHandle = null;
|
|
||||||
if (data.chromeResources.length > 0) {
|
|
||||||
this.chromeRegistryHandle =
|
|
||||||
aomStartup.registerChrome(manifestURI, data.chromeResources);
|
|
||||||
}
|
|
||||||
|
|
||||||
resourceProtocol.setSubstitution(this.langpackId, this.rootURI);
|
resourceProtocol.setSubstitution(this.langpackId, this.rootURI);
|
||||||
|
|
||||||
for (const [sourceName, basePath] of Object.entries(this.l10nRegistrySources)) {
|
for (const [sourceName, basePath] of Object.entries(this.l10nRegistrySources)) {
|
||||||
|
@ -1707,23 +1726,4 @@ this.Langpack = class extends ExtensionData {
|
||||||
|
|
||||||
resourceProtocol.setSubstitution(this.langpackId, null);
|
resourceProtocol.setSubstitution(this.langpackId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
getChromeResources(manifest) {
|
|
||||||
const chromeEntries = [];
|
|
||||||
for (const [language, entry] of Object.entries(manifest.languages)) {
|
|
||||||
for (const [alias, path] of Object.entries(entry.chrome_resources || {})) {
|
|
||||||
if (typeof path === "string") {
|
|
||||||
chromeEntries.push(["locale", alias, language, path]);
|
|
||||||
} else {
|
|
||||||
// If the path is not a string, it's an object with path per platform
|
|
||||||
// where the keys are taken from AppConstants.platform
|
|
||||||
const platform = AppConstants.platform;
|
|
||||||
if (platform in path) {
|
|
||||||
chromeEntries.push(["locale", alias, language, path[platform]]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return chromeEntries;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -363,6 +363,7 @@ async function loadManifestFromWebManifest(aUri) {
|
||||||
addon.optionsType = null;
|
addon.optionsType = null;
|
||||||
addon.aboutURL = null;
|
addon.aboutURL = null;
|
||||||
addon.dependencies = Object.freeze(Array.from(extension.dependencies));
|
addon.dependencies = Object.freeze(Array.from(extension.dependencies));
|
||||||
|
addon.startupData = extension.startupData;
|
||||||
|
|
||||||
if (manifest.options_ui) {
|
if (manifest.options_ui) {
|
||||||
// Store just the relative path here, the AddonWrapper getURL
|
// Store just the relative path here, the AddonWrapper getURL
|
||||||
|
|
Загрузка…
Ссылка в новой задаче