From 2c180168a32bddffbbbb88652f7e8f46b99b0c17 Mon Sep 17 00:00:00 2001 From: 101arrowz Date: Mon, 23 May 2022 07:20:24 -0700 Subject: [PATCH] Fix web extension issues (#8000) --- packages/core/core/src/Dependency.js | 13 ++++++++++- .../core/src/requests/WriteBundleRequest.js | 3 ++- .../core/src/requests/WriteBundlesRequest.js | 1 - .../webextension/src/WebExtensionPackager.js | 9 +++++--- .../transformers/webextension/src/schema.js | 23 +++++++++---------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/packages/core/core/src/Dependency.js b/packages/core/core/src/Dependency.js index 4539166a8d8..12348f82cd8 100644 --- a/packages/core/core/src/Dependency.js +++ b/packages/core/core/src/Dependency.js @@ -50,6 +50,7 @@ export function createDependency( (opts.target ? JSON.stringify(opts.target) : '') + (opts.pipeline ?? '') + opts.specifierType + + (opts.bundleBehavior ?? '') + (opts.priority ?? 'sync'), ); @@ -85,7 +86,14 @@ export function createDependency( } export function mergeDependencies(a: Dependency, b: Dependency): void { - let {meta, symbols, ...other} = b; + let { + meta, + symbols, + needsStableName, + isEntry, + isOptional, + ...other + } = b; Object.assign(a, other); Object.assign(a.meta, meta); if (a.symbols && symbols) { @@ -93,4 +101,7 @@ export function mergeDependencies(a: Dependency, b: Dependency): void { a.symbols.set(k, v); } } + if (needsStableName) a.needsStableName = true; + if (isEntry) a.isEntry = true; + if (!isOptional) a.isOptional = false; } diff --git a/packages/core/core/src/requests/WriteBundleRequest.js b/packages/core/core/src/requests/WriteBundleRequest.js index 2a2b77bb7ce..232d4b0d387 100644 --- a/packages/core/core/src/requests/WriteBundleRequest.js +++ b/packages/core/core/src/requests/WriteBundleRequest.js @@ -66,11 +66,12 @@ export type WriteBundleRequest = {| export default function createWriteBundleRequest( input: WriteBundleRequestInput, ): WriteBundleRequest { + let name = nullthrows(input.bundle.name); let nameHash = nullthrows( input.hashRefToNameHash.get(input.bundle.hashReference), ); return { - id: `${input.bundle.id}:${input.info.hash}:${nameHash}`, + id: `${input.bundle.id}:${input.info.hash}:${nameHash}:${name}`, type: 'write_bundle_request', run, input, diff --git a/packages/core/core/src/requests/WriteBundlesRequest.js b/packages/core/core/src/requests/WriteBundlesRequest.js index f93d3df323b..bdfcbcf1360 100644 --- a/packages/core/core/src/requests/WriteBundlesRequest.js +++ b/packages/core/core/src/requests/WriteBundlesRequest.js @@ -147,7 +147,6 @@ function assignComplexNameHashes( if (hashRefToNameHash.get(bundle.hashReference) != null) { continue; } - hashRefToNameHash.set( bundle.hashReference, options.shouldContentHash diff --git a/packages/packagers/webextension/src/WebExtensionPackager.js b/packages/packagers/webextension/src/WebExtensionPackager.js index 4c5d5f0feee..f1670adbed7 100644 --- a/packages/packagers/webextension/src/WebExtensionPackager.js +++ b/packages/packagers/webextension/src/WebExtensionPackager.js @@ -72,13 +72,16 @@ export default (new Packager({ }); } } - manifest.web_accessible_resources = ( - manifest.web_accessible_resources || [] - ).concat( + + const warResult = (manifest.web_accessible_resources || []).concat( manifest.manifest_version == 2 ? [...new Set(war.flatMap(entry => entry.resources))] : war, ); + if (warResult.length > 0) { + manifest.web_accessible_resources = warResult; + } + let {contents} = replaceURLReferences({ bundle, bundleGraph, diff --git a/packages/transformers/webextension/src/schema.js b/packages/transformers/webextension/src/schema.js index 030b16d45ca..22fbf5a0cd4 100644 --- a/packages/transformers/webextension/src/schema.js +++ b/packages/transformers/webextension/src/schema.js @@ -94,8 +94,6 @@ const commonProps = { properties: {}, }, }, - key: string, - update_url: string, chrome_settings_overrides: { type: 'object', properties: { @@ -231,17 +229,27 @@ const commonProps = { type: 'string', enum: ['spanning', 'split', 'not_allowed'], }, + key: string, minimum_chrome_version: { type: 'string', __validate: validateVersion, }, // No NaCl modules because deprecated + oauth2: { + type: 'object', + properties: { + client_id: string, + scopes: arrStr, + }, + additionalProperties: false, + }, offline_enabled: boolean, omnibox: ({ type: 'object', properties: {}, additionalProperties: string, }: SchemaEntity), + optional_host_permissions: arrStr, optional_permissions: arrStr, // options_page is deprecated options_ui: { @@ -400,6 +408,7 @@ const commonProps = { }, additionalProperties: false, }, + update_url: string, user_scripts: { type: 'object', properties: { @@ -408,14 +417,6 @@ const commonProps = { additionalProperties: false, }, version_name: string, - oauth2: { - type: 'object', - properties: { - client_id: string, - scopes: arrStr, - }, - additionalProperties: false, - }, }; export const MV3Schema = ({ @@ -465,7 +466,6 @@ export const MV3Schema = ({ }, }, required: ['manifest_version', 'name', 'version'], - additionalProperties: false, }: SchemaEntity); export const MV2Schema = ({ @@ -501,7 +501,6 @@ export const MV2Schema = ({ web_accessible_resources: arrStr, }, required: ['manifest_version', 'name', 'version'], - additionalProperties: false, }: SchemaEntity); export const VersionSchema = ({