Bug 1850280 - Control extensions process rollout with Nimbus

(cherry picked from commit e59032a7d970167b7b67f7867c50ee87a0659233)

# Conflicts:
#	fenix/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt
fenix/118.0
Arturo Mejia 9 months ago committed by mergify[bot]
parent 63b02e5853
commit 6deba7ac47

@ -7,6 +7,14 @@ cookie-banners:
sections-enabled:
type: json
description: This property provides a lookup table of whether or not the given section should be enabled.
extensions-process:
description: A feature to rollout the extensions process.
hasExposure: true
exposureDescription: ""
variables:
enabled:
type: boolean
description: "If true, the extensions process is enabled."
glean:
description: A feature that provides server-side configurations for Glean metrics (aka Server Knobs).
hasExposure: true

@ -270,6 +270,14 @@ features:
type: Boolean
default: true
extensions-process:
description: A feature to rollout the extensions process.
variables:
enabled:
description: If true, the extensions process is enabled.
type: Boolean
default: false
growth-data:
description: A feature measuring campaign growth data
variables:

@ -0,0 +1,62 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.extensions
import android.content.Context
import mozilla.components.concept.engine.EngineSession
import org.json.JSONObject
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.mozilla.experiments.nimbus.HardcodedNimbusFeatures
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.gecko.GeckoProvider
import org.mozilla.fenix.helpers.TestHelper
import org.mozilla.fenix.nimbus.FxNimbus
/**
* Instrumentation test for verifying that the extensions process can be controlled with Nimbus.
*/
class ExtensionProcessTest {
private lateinit var context: Context
private lateinit var policy: EngineSession.TrackingProtectionPolicy
@Before
fun setUp() {
context = TestHelper.appContext
policy =
context.components.core.trackingProtectionPolicyFactory.createTrackingProtectionPolicy()
}
@Test
fun test_extension_process_can_be_controlled_by_nimbus() {
val hardcodedNimbus = HardcodedNimbusFeatures(
context,
"extensions-process" to JSONObject(
"""
{
"enabled":true
}
""".trimIndent(),
),
)
hardcodedNimbus.connectWith(FxNimbus)
val runtime = GeckoProvider.createRuntimeSettings(context, policy)
assertTrue(FxNimbus.features.extensionsProcess.value().enabled)
assertTrue(runtime.extensionsProcessEnabled!!)
}
@Test
fun test_extension_process_must_be_disabled_by_default() {
val runtime = GeckoProvider.createRuntimeSettings(context, policy)
assertFalse(FxNimbus.features.extensionsProcess.value().enabled)
assertFalse(runtime.extensionsProcessEnabled!!)
}
}

@ -5,6 +5,7 @@
package org.mozilla.fenix.gecko
import android.content.Context
import androidx.annotation.VisibleForTesting
import mozilla.components.browser.engine.gecko.autofill.GeckoAutocompleteStorageDelegate
import mozilla.components.browser.engine.gecko.ext.toContentBlockingSetting
import mozilla.components.browser.engine.gecko.glean.GeckoAdapter
@ -18,6 +19,7 @@ import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate
import org.mozilla.fenix.Config
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.geckoview.ContentBlocking
import org.mozilla.geckoview.ContentBlocking.SafeBrowsingProvider
import org.mozilla.geckoview.GeckoRuntime
@ -51,18 +53,7 @@ object GeckoProvider {
loginStorage: Lazy<LoginsStorage>,
policy: TrackingProtectionPolicy,
): GeckoRuntime {
val builder = GeckoRuntimeSettings.Builder()
val runtimeSettings = builder
.crashHandler(CrashHandlerService::class.java)
.telemetryDelegate(GeckoAdapter())
.experimentDelegate(NimbusExperimentDelegate())
.contentBlocking(policy.toContentBlockingSetting())
.consoleOutput(context.components.settings.enableGeckoLogs)
.debugLogging(Config.channel.isDebug || context.components.settings.enableGeckoLogs)
.aboutConfigEnabled(Config.channel.isBeta || Config.channel.isNightlyOrDebug)
.extensionsWebAPIEnabled(Config.channel.isNightlyOrDebug)
.build()
val runtimeSettings = createRuntimeSettings(context, policy)
val settings = context.components.settings
if (!settings.shouldUseAutoSize) {
@ -109,4 +100,22 @@ object GeckoProvider {
return geckoRuntime
}
@VisibleForTesting
internal fun createRuntimeSettings(
context: Context,
policy: TrackingProtectionPolicy,
): GeckoRuntimeSettings {
return GeckoRuntimeSettings.Builder()
.crashHandler(CrashHandlerService::class.java)
.telemetryDelegate(GeckoAdapter())
.experimentDelegate(NimbusExperimentDelegate())
.contentBlocking(policy.toContentBlockingSetting())
.consoleOutput(context.components.settings.enableGeckoLogs)
.debugLogging(Config.channel.isDebug || context.components.settings.enableGeckoLogs)
.aboutConfigEnabled(Config.channel.isBeta || Config.channel.isNightlyOrDebug)
.extensionsProcessEnabled(FxNimbus.features.extensionsProcess.value().enabled)
.extensionsWebAPIEnabled(Config.channel.isNightlyOrDebug)
.build()
}
}

Loading…
Cancel
Save