Closes #18367 run SupportedAddonsChecker only for users with unsupported extensions

upstream-sync
Arturo Mejia 3 years ago
parent ec52c56ed9
commit 8f43acc903

@ -10,6 +10,7 @@ import android.os.Build.VERSION.SDK_INT
import android.os.StrictMode
import android.util.Log.INFO
import androidx.annotation.CallSuper
import androidx.annotation.VisibleForTesting
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.getSystemService
import androidx.work.Configuration.Builder
@ -23,7 +24,10 @@ import mozilla.appservices.Megazord
import mozilla.components.browser.state.action.SystemAction
import mozilla.components.browser.state.selector.selectedTab
import mozilla.components.concept.base.crash.Breadcrumb
import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.concept.engine.webextension.isUnsupported
import mozilla.components.concept.push.PushProcessor
import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker
import mozilla.components.feature.addons.update.GlobalAddonDependencyProvider
import mozilla.components.lib.crash.CrashReporter
import mozilla.components.service.glean.Glean
@ -447,7 +451,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
},
onExtensionsLoaded = { extensions ->
components.addonUpdater.registerForFutureUpdates(extensions)
components.supportedAddonsChecker.registerForChecks()
subscribeForNewAddonsIfNeeded(components.supportedAddonsChecker, extensions)
},
onUpdatePermissionRequest = components.addonUpdater::onUpdatePermissionRequest
)
@ -456,6 +460,21 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
}
}
@VisibleForTesting
internal fun subscribeForNewAddonsIfNeeded(
checker: DefaultSupportedAddonsChecker,
installedExtensions: List<WebExtension>
) {
val hasUnsupportedAddons = installedExtensions.any { it.isUnsupported() }
if (hasUnsupportedAddons) {
checker.registerForChecks()
} else {
// As checks are a persistent subscriptions, we have to make sure
// we remove any previous subscriptions.
checker.unregisterForChecks()
}
}
protected fun recordOnInit() {
// This gets called by more than one process. Ideally we'd only run this in the main process
// but the code to check which process we're in crashes because the Context isn't valid yet.

@ -5,6 +5,13 @@
package org.mozilla.fenix
import androidx.test.core.app.ApplicationProvider
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import mozilla.components.concept.engine.webextension.DisabledFlags
import mozilla.components.concept.engine.webextension.Metadata
import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker
import mozilla.components.service.glean.testing.GleanTestRule
import org.junit.Assert.assertTrue
import org.junit.Before
@ -34,4 +41,32 @@ class FenixApplicationTest {
// https://robolectric.blogspot.com/2013/04/the-test-lifecycle-in-20.html
assertTrue(PerfStartup.applicationOnCreate.testHasValue())
}
@Test
fun `GIVEN there are unsupported addons installed WHEN subscribing for new add-ons checks THEN register for checks`() {
val checker = mockk<DefaultSupportedAddonsChecker>(relaxed = true)
val unSupportedExtension: WebExtension = mockk()
val metadata: Metadata = mockk()
every { unSupportedExtension.getMetadata() } returns metadata
every { metadata.disabledFlags } returns DisabledFlags.select(DisabledFlags.APP_SUPPORT)
application.subscribeForNewAddonsIfNeeded(checker, listOf(unSupportedExtension))
verify { checker.registerForChecks() }
}
@Test
fun `GIVEN there are no unsupported addons installed WHEN subscribing for new add-ons checks THEN unregister for checks`() {
val checker = mockk<DefaultSupportedAddonsChecker>(relaxed = true)
val unSupportedExtension: WebExtension = mockk()
val metadata: Metadata = mockk()
every { unSupportedExtension.getMetadata() } returns metadata
every { metadata.disabledFlags } returns DisabledFlags.select(DisabledFlags.USER)
application.subscribeForNewAddonsIfNeeded(checker, listOf(unSupportedExtension))
verify { checker.unregisterForChecks() }
}
}

Loading…
Cancel
Save