Files
IronFox/patches/install-ublock.patch
2025-04-28 11:56:29 +05:30

131 lines
5.4 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 82e44d1abc..fe2c0dd3e3 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
@@ -121,6 +121,9 @@ class WebExtensionPromptFeature(
private fun handlePostInstallationRequest(
addon: Addon,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ return
+ }
showPostInstallationDialog(addon)
}
@@ -128,6 +131,15 @@ class WebExtensionPromptFeature(
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Required,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true
+ )
+ return
+ }
+
showPermissionDialog(
addon = addon,
promptRequest = promptRequest,
@@ -141,6 +153,15 @@ class WebExtensionPromptFeature(
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Optional,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true
+ )
+ 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 1c975c33f4..c8e8c637f3 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
@@ -19,8 +19,10 @@ import androidx.annotation.RequiresApi
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
+import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.fragment.findNavController
+import kotlinx.coroutines.launch
import mozilla.components.concept.engine.webextension.InstallationMethod
import mozilla.components.service.nimbus.evalJexlSafe
import mozilla.components.service.nimbus.messaging.use
@@ -116,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