Files
IronFox/patches/install-ublock.patch
celenity 806373ac2a v141.0
Signed-off-by: celenity <celenity@celenity.dev>
2025-07-22 18:50:57 -04:00

128 lines
5.3 KiB
Diff

From 51f108b2abb8808bc7196d6b7e7b4d46aaeb9013 Mon Sep 17 00:00:00 2001
From: Akash Yadav <itsaky01@gmail.com>
Date: Mon, 28 Apr 2025 11:33:58 +0530
Subject: [PATCH] fix(patches): update 'install-ublock.patch' for
'FIREFOX_138_0_BUILD1'
Signed-off-by: Akash Yadav <itsaky01@gmail.com>
---
.../extension/WebExtensionPromptFeature.kt | 21 ++++++++++++
.../fenix/onboarding/OnboardingFragment.kt | 7 ++++
.../org/mozilla/fenix/utils/AddonUtils.kt | 34 +++++++++++++++++++
3 files changed, 62 insertions(+)
create mode 100644 mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
index 492c009ff9..988155f8a2 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
@@ -36,6 +36,7 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.theme.ThemeManager
+import org.mozilla.fenix.utils.IronFoxAddons
/**
* Feature implementation for handling [WebExtensionPromptRequest] and showing the respective UI.
@@ -121,6 +122,9 @@ class WebExtensionPromptFeature(
private fun handlePostInstallationRequest(
addon: Addon,
) {
+ if (IronFoxAddons.isUBlockOrigin(addon)) {
+ return
+ }
showPostInstallationDialog(addon)
}
@@ -128,6 +132,15 @@ class WebExtensionPromptFeature(
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Required,
) {
+ if (IronFoxAddons.isUBlockOrigin(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true,
+ technicalAndInteractionDataGranted = false,
+ )
+ return
+ }
showPermissionDialog(
addon = addon,
promptRequest = promptRequest,
@@ -142,6 +155,15 @@ class WebExtensionPromptFeature(
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Optional,
) {
+ if (IronFoxAddons.isUBlockOrigin(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true,
+ technicalAndInteractionDataGranted = false,
+ )
+ return
+ }
val shouldGrantWithoutPrompt = Addon.localizePermissions(
promptRequest.permissions,
context,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
index e5ab956ac3..5522b6c023 100644
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
@@ -118,6 +118,11 @@ class OnboardingFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val context = requireContext()
+
+ lifecycleScope.launch {
+ org.mozilla.fenix.utils.installIFAddons(requireComponents)
+ }
+
if (pagesToDisplay.isEmpty()) {
// do not continue if there's no onboarding pages to display
onFinish(null)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt
new file mode 100644
index 0000000000..da5f74b77f
--- /dev/null
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt
@@ -0,0 +1,34 @@
+package org.mozilla.fenix.utils
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.engine.webextension.InstallationMethod
+import mozilla.components.feature.addons.Addon
+import mozilla.components.feature.addons.logger
+import org.mozilla.fenix.components.Components
+
+private val UBLOCK = Addon(
+ id = "uBlock0@raymondhill.net",
+ downloadUrl = "https://addons.mozilla.org/firefox/downloads/latest/uBlock0@raymondhill.net/latest.xpi"
+)
+
+fun isUBlock(addon: Addon) = addon.id == UBLOCK.id
+
+suspend fun installIFAddons(components: Components) = withContext(Dispatchers.IO) {
+ val addonManager = components.addonManager
+ val addons = addonManager.getAddons(waitForPendingActions = true)
+ if (addons.none { it.id == UBLOCK.id && it.isInstalled() }) {
+ withContext(Dispatchers.Main) {
+ addonManager.installAddon(
+ url = UBLOCK.downloadUrl,
+ installationMethod = InstallationMethod.MANAGER,
+ onSuccess = {
+ logger.info("uBlock Origin installed.")
+ },
+ onError = { err ->
+ logger.error("uBlock Origin install failed.", err)
+ }
+ )
+ }
+ }
+}
--
2.49.0