Bug 1872169 - Honor extensions.update.enabled pref in GeckoView. r=amejiamarmol,rpl,geckoview-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D197896
This commit is contained in:
William Durand 2024-01-09 15:33:04 +00:00
parent cb94ee0aa5
commit 1233bb68b3
2 changed files with 46 additions and 0 deletions

View File

@ -2341,6 +2341,7 @@ class WebExtensionTest : BaseSessionTest() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
"extensions.getAddons.cache.enabled" to true,
@ -2399,12 +2400,48 @@ class WebExtensionTest : BaseSessionTest() {
assumeThat(geckoPrefs[0] as Int, greaterThan(0))
}
@Test
fun updateDisabled() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
// This is the important change here:
"extensions.update.enabled" to false,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
),
)
sessionRule.delegateDuringNextWait(object : WebExtensionController.PromptDelegate {
@AssertCalled(count = 1)
override fun onInstallPrompt(extension: WebExtension): GeckoResult<AllowOrDeny> {
assertEquals(extension.metaData.version, "1.0")
return GeckoResult.allow()
}
})
// Install an extension that can be updated.
val update1 = sessionRule.waitForResult(
controller.install("https://example.org/tests/junit/update-1.xpi", null),
)
// Attempt to update the extension, which should not be possible since
// we set the pref to `false` above.
val update2 = sessionRule.waitForResult(controller.update(update1))
assertNull(update2)
// Cleanup.
sessionRule.waitForResult(controller.uninstall(update1))
}
@Test
fun updateWithMetadataNotStale() {
val now = (System.currentTimeMillis() / 1000).toInt()
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
"extensions.getAddons.cache.enabled" to true,
@ -2444,6 +2481,7 @@ class WebExtensionTest : BaseSessionTest() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
),
@ -2567,6 +2605,7 @@ class WebExtensionTest : BaseSessionTest() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
),
@ -2674,6 +2713,7 @@ class WebExtensionTest : BaseSessionTest() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
"extensions.webextensions.warnings-as-errors" to false,
@ -2736,6 +2776,7 @@ class WebExtensionTest : BaseSessionTest() {
sessionRule.setPrefsUntilTestEnd(
mapOf(
"xpinstall.signatures.required" to false,
"extensions.update.enabled" to true,
"extensions.install.requireBuiltInCerts" to false,
"extensions.update.requireBuiltInCerts" to false,
),

View File

@ -1084,6 +1084,11 @@ export var GeckoViewWebExtension = {
await this._promiseAddonRepositoryUpdate;
}
// Early-return when extension updates are disabled.
if (!lazy.AddonManager.updateEnabled) {
return null;
}
const extension = await this.extensionById(aId);
const install = await this.checkForUpdate(extension);