Unverified Commit 1e797f95 authored by Alex Catarineu's avatar Alex Catarineu Committed by Matthew Finkel
Browse files

Bug 40062: HTTPS Everywhere is not shown as installed

Also 40070: Consider storing the list of recommended addons

This implements our own AddonsProvider, which loads the list of
available addons from assets instead of fetching it from an
endpoint. In this list, we replace https-everywhere by
our https-everywhere-eff, so that the EFF one is shown as installed
in the addons list and the AMO one is not displayed.

Also, we hide the uninstall button for builtin addons.
parent 58c7c6e4
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -21,6 +21,7 @@ import kotlinx.coroutines.launch
import mozilla.components.feature.addons.Addon
import mozilla.components.feature.addons.AddonManagerException
import mozilla.components.feature.addons.ui.translatedName
import mozilla.components.support.webextensions.WebExtensionSupport.installedExtensions
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
......@@ -256,6 +257,8 @@ class InstalledAddonDetailsFragment : Fragment() {
private fun bindRemoveButton(view: View) {
val isBuiltin = installedExtensions[addon.id]?.isBuiltIn() ?: false
view.remove_add_on.isVisible = !isBuiltin
view.remove_add_on.setOnClickListener {
setAllInteractiveViewsClickable(view, false)
......@@ -9,7 +9,6 @@ import android.content.Context
import android.content.Intent
import androidx.core.net.toUri
import mozilla.components.feature.addons.AddonManager
import mozilla.components.feature.addons.amo.AddonCollectionProvider
import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker
import mozilla.components.feature.addons.migration.SupportedAddonsChecker
import mozilla.components.feature.addons.update.AddonUpdater
......@@ -71,18 +70,7 @@ class Components(private val context: Context) {
val addonCollectionProvider by lazy {
if (!BuildConfig.AMO_COLLECTION.isNullOrEmpty()) {
collectionName = BuildConfig.AMO_COLLECTION,
maxCacheAgeInMinutes = DAY_IN_MINUTES
} else {
AddonCollectionProvider(context, core.client, maxCacheAgeInMinutes = DAY_IN_MINUTES)
val addonCollectionProvider by lazy { TorAddonCollectionProvider(context, core.client) }
val appStartupTelemetry by lazy { AppStartupTelemetry(analytics.metrics) }
/* 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/. */
// Copyright (c) 2020, The Tor Project, Inc.
package org.mozilla.fenix.components
import android.content.Context
import android.graphics.Bitmap
import kotlinx.coroutines.withContext
import mozilla.components.concept.fetch.Client
import mozilla.components.feature.addons.Addon
import kotlinx.coroutines.Dispatchers
import mozilla.components.feature.addons.amo.AddonCollectionProvider
import java.io.IOException
internal const val COLLECTION_NAME = "tor_browser_collection"
internal const val ALLOWED_ADDONS_PATH = "allowed_addons.json"
internal const val MAX_CACHE_AGE = 1000L * 365L * 24L * 60L // 1000 years
class TorAddonCollectionProvider(
private val context: Context,
client: Client
) : AddonCollectionProvider(
context, client, serverURL = "",
collectionName = COLLECTION_NAME,
maxCacheAgeInMinutes = MAX_CACHE_AGE
) {
private var isCacheLoaded = false
override suspend fun getAvailableAddons(
allowCache: Boolean,
readTimeoutInSeconds: Long?
): List<Addon> {
return super.getAvailableAddons(true, readTimeoutInSeconds)
override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
return super.getAddonIconBitmap(addon)
private suspend fun ensureCache() {
if (isCacheLoaded) {
return withContext(Dispatchers.IO) {
val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use {
isCacheLoaded = true
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment