diff --git a/electron_paks.gni b/electron_paks.gni index 1ee2e1663980..c3a257ab0f62 100644 --- a/electron_paks.gni +++ b/electron_paks.gni @@ -174,6 +174,7 @@ template("electron_paks") { } source_patterns = [ + "${root_gen_dir}/chrome/chromium_strings_", "${root_gen_dir}/chrome/locale_settings_", "${root_gen_dir}/chrome/platform_locale_settings_", "${root_gen_dir}/chrome/generated_resources_", @@ -189,6 +190,7 @@ template("electron_paks") { "${root_gen_dir}/ui/strings/ui_strings_", ] deps = [ + "//chrome/app:chromium_strings", "//chrome/app:generated_resources", "//chrome/app/resources:locale_settings", "//chrome/app/resources:platform_locale_settings", diff --git a/shell/common/extensions/api/_manifest_features.json b/shell/common/extensions/api/_manifest_features.json index 7fdabc8a37dc..b860cc40e239 100644 --- a/shell/common/extensions/api/_manifest_features.json +++ b/shell/common/extensions/api/_manifest_features.json @@ -14,5 +14,9 @@ "devtools_page": { "channel": "stable", "extension_types": ["extension"] + }, + "minimum_chrome_version": { + "channel": "stable", + "extension_types": ["extension"] } } diff --git a/shell/common/extensions/electron_extensions_api_provider.cc b/shell/common/extensions/electron_extensions_api_provider.cc index a5aea27f0d77..36cf3f8957f2 100644 --- a/shell/common/extensions/electron_extensions_api_provider.cc +++ b/shell/common/extensions/electron_extensions_api_provider.cc @@ -10,6 +10,7 @@ #include "base/containers/span.h" #include "base/strings/utf_string_conversions.h" #include "chrome/common/extensions/chrome_manifest_url_handlers.h" +#include "chrome/common/extensions/manifest_handlers/minimum_chrome_version_checker.h" #include "electron/buildflags/buildflags.h" #include "electron/shell/common/extensions/api/generated_schemas.h" #include "extensions/common/alias.h" @@ -99,6 +100,8 @@ void ElectronExtensionsAPIProvider::RegisterManifestHandlers() { extensions::ManifestHandlerRegistry::Get(); registry->RegisterHandler( std::make_unique()); + registry->RegisterHandler( + std::make_unique()); } } // namespace electron diff --git a/spec/extensions-spec.ts b/spec/extensions-spec.ts index b5a43fcd95fb..5a0f5ddff2cb 100644 --- a/spec/extensions-spec.ts +++ b/spec/extensions-spec.ts @@ -69,6 +69,25 @@ describe('chrome extensions', () => { `)).to.eventually.have.property('id'); }); + it('supports minimum_chrome_version manifest key', async () => { + const customSession = session.fromPartition(`persist:${require('uuid').v4()}`); + const w = new BrowserWindow({ + show: false, + webPreferences: { + session: customSession, + sandbox: true + } + }); + + await w.loadURL('about:blank'); + + const extPath = path.join(fixtures, 'extensions', 'chrome-too-low-version'); + const load = customSession.loadExtension(extPath); + await expect(load).to.eventually.be.rejectedWith( + `Loading extension at ${extPath} failed with: This extension requires Chromium version 999 or greater.` + ); + }); + it('can open WebSQLDatabase in a background page', async () => { const customSession = session.fromPartition(`persist:${require('uuid').v4()}`); const w = new BrowserWindow({ show: false, webPreferences: { session: customSession, sandbox: true } }); diff --git a/spec/fixtures/extensions/chrome-too-low-version/main.js b/spec/fixtures/extensions/chrome-too-low-version/main.js new file mode 100644 index 000000000000..d58117c501c1 --- /dev/null +++ b/spec/fixtures/extensions/chrome-too-low-version/main.js @@ -0,0 +1 @@ +document.documentElement.style.backgroundColor = 'blue'; diff --git a/spec/fixtures/extensions/chrome-too-low-version/manifest.json b/spec/fixtures/extensions/chrome-too-low-version/manifest.json new file mode 100644 index 000000000000..c65bced2f5f3 --- /dev/null +++ b/spec/fixtures/extensions/chrome-too-low-version/manifest.json @@ -0,0 +1,14 @@ +{ + "name": "chrome-too-low-version", + "version": "1.0", + "minimum_chrome_version": "999", + "content_scripts": [ + { + "matches": [""], + "js": ["main.js"], + "run_at": "document_start" + } + ], + "permissions": ["storage"], + "manifest_version": 3 +}