ma1 pushed to branch tor-browser-128.3.0esr-14.0-1 at The Tor Project / Applications / Tor Browser
Commits:
-
d1579ad1
by hackademix at 2024-10-08T14:25:29+02:00
4 changed files:
- mobile/shared/modules/geckoview/GeckoViewWebExtension.sys.mjs
- toolkit/mozapps/extensions/AddonManager.sys.mjs
- toolkit/mozapps/extensions/components.conf
- toolkit/mozapps/extensions/internal/XPIInstall.sys.mjs
Changes:
| ... | ... | @@ -354,7 +354,9 @@ async function exportExtension(aAddon, aSourceURI) { |
| 354 | 354 | disabledFlags.push("appVersionDisabled");
|
| 355 | 355 | }
|
| 356 | 356 | const baseURL = policy ? policy.getURL() : "";
|
| 357 | - const privateBrowsingAllowed = policy ? policy.privateBrowsingAllowed : false;
|
|
| 357 | + const privateBrowsingAllowed = policy
|
|
| 358 | + ? policy.privateBrowsingAllowed
|
|
| 359 | + : lazy.PrivateBrowsingUtils.permanentPrivateBrowsing;
|
|
| 358 | 360 | |
| 359 | 361 | let updateDate;
|
| 360 | 362 | try {
|
| ... | ... | @@ -509,6 +511,9 @@ class ExtensionInstallListener { |
| 509 | 511 | |
| 510 | 512 | async onInstallEnded(aInstall, aAddon) {
|
| 511 | 513 | debug`onInstallEnded addonId=${aAddon.id}`;
|
| 514 | + if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
|
| 515 | + await GeckoViewWebExtension.setPrivateBrowsingAllowed(aAddon.id, true);
|
|
| 516 | + }
|
|
| 512 | 517 | const extension = await exportExtension(aAddon, aInstall.sourceURI);
|
| 513 | 518 | this.resolve({ extension });
|
| 514 | 519 | }
|
| ... | ... | @@ -83,7 +83,10 @@ const lazy = {}; |
| 83 | 83 | ChromeUtils.defineESModuleGetters(lazy, {
|
| 84 | 84 | AbuseReporter: "resource://gre/modules/AbuseReporter.sys.mjs",
|
| 85 | 85 | AddonRepository: "resource://gre/modules/addons/AddonRepository.sys.mjs",
|
| 86 | + GeckoViewWebExtension: "resource://gre/modules/GeckoViewWebExtension.sys.mjs",
|
|
| 87 | + EventDispatcher: "resource://gre/modules/Messaging.sys.mjs",
|
|
| 86 | 88 | Extension: "resource://gre/modules/Extension.sys.mjs",
|
| 89 | + PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
|
| 87 | 90 | RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
| 88 | 91 | TelemetryTimestamps: "resource://gre/modules/TelemetryTimestamps.sys.mjs",
|
| 89 | 92 | isGatedPermissionType:
|
| ... | ... | @@ -2346,6 +2349,24 @@ var AddonManagerInternal = { |
| 2346 | 2349 | return promiseInstall;
|
| 2347 | 2350 | },
|
| 2348 | 2351 | |
| 2352 | + async installGeckoViewWebExtension(extensionUri) {
|
|
| 2353 | + const installId = Services.uuid.generateUUID().toString();
|
|
| 2354 | + let { extension } = await lazy.GeckoViewWebExtension.installWebExtension(
|
|
| 2355 | + installId,
|
|
| 2356 | + extensionUri
|
|
| 2357 | + );
|
|
| 2358 | + if (lazy.PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
|
| 2359 | + extension = await lazy.GeckoViewWebExtension.setPrivateBrowsingAllowed(
|
|
| 2360 | + extension.webExtensionId,
|
|
| 2361 | + true
|
|
| 2362 | + );
|
|
| 2363 | + }
|
|
| 2364 | + await lazy.EventDispatcher.instance.sendRequest({
|
|
| 2365 | + type: "GeckoView:WebExtension:OnInstalled",
|
|
| 2366 | + extension,
|
|
| 2367 | + });
|
|
| 2368 | + },
|
|
| 2369 | + |
|
| 2349 | 2370 | /**
|
| 2350 | 2371 | * Starts installation of an AddonInstall notifying the registered
|
| 2351 | 2372 | * web install listener of a blocked or started install.
|
| ... | ... | @@ -2518,6 +2539,10 @@ var AddonManagerInternal = { |
| 2518 | 2539 | );
|
| 2519 | 2540 | |
| 2520 | 2541 | if (installAllowed) {
|
| 2542 | + if (AppConstants.platform == "android") {
|
|
| 2543 | + aInstall.cancel();
|
|
| 2544 | + return this.installGeckoViewWebExtension(aInstall.sourceURI);
|
|
| 2545 | + }
|
|
| 2521 | 2546 | startInstall("AMO");
|
| 2522 | 2547 | } else if (installPerm === Ci.nsIPermissionManager.DENY_ACTION) {
|
| 2523 | 2548 | // Block without prompt
|
| ... | ... | @@ -32,14 +32,13 @@ Classes = [ |
| 32 | 32 | 'esModule': 'resource://gre/modules/amWebAPI.sys.mjs',
|
| 33 | 33 | 'constructor': 'WebAPI',
|
| 34 | 34 | },
|
| 35 | + # tor-browser#43132: re-enable XPI handler on Android to allow scriptless extensions installation.
|
|
| 36 | + # This reverts https://bugzilla.mozilla.org/show_bug.cgi?id=1610571, which made sense for generic
|
|
| 37 | + # GeckoView extensionless embedders and for Firefox, relying on navigator.mozAddonManager.
|
|
| 38 | + {
|
|
| 39 | + 'cid': '{7beb3ba8-6ec3-41b4-b67c-da89b8518922}',
|
|
| 40 | + 'contract_ids': ['@mozilla.org/uriloader/content-handler;1?type=application/x-xpinstall'],
|
|
| 41 | + 'esModule': 'resource://gre/modules/amContentHandler.sys.mjs',
|
|
| 42 | + 'constructor': 'amContentHandler',
|
|
| 43 | + },
|
|
| 35 | 44 | ] |
| 36 | - |
|
| 37 | -if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] != 'android':
|
|
| 38 | - Classes += [
|
|
| 39 | - {
|
|
| 40 | - 'cid': '{7beb3ba8-6ec3-41b4-b67c-da89b8518922}',
|
|
| 41 | - 'contract_ids': ['@mozilla.org/uriloader/content-handler;1?type=application/x-xpinstall'],
|
|
| 42 | - 'esModule': 'resource://gre/modules/amContentHandler.sys.mjs',
|
|
| 43 | - 'constructor': 'amContentHandler',
|
|
| 44 | - },
|
|
| 45 | - ] |
| ... | ... | @@ -4475,6 +4475,11 @@ export var XPIInstall = { |
| 4475 | 4475 | return false;
|
| 4476 | 4476 | }
|
| 4477 | 4477 | |
| 4478 | + // tor-browser#43132: short-circuit permission check on Android scriptless install from AMO
|
|
| 4479 | + if (AppConstants.platform == "android" && uri.prePath == "https://addons.mozilla.org") {
|
|
| 4480 | + return true;
|
|
| 4481 | + }
|
|
| 4482 | + |
|
| 4478 | 4483 | let requireWhitelist = Services.prefs.getBoolPref(
|
| 4479 | 4484 | PREF_XPI_WHITELIST_REQUIRED,
|
| 4480 | 4485 | true
|