Unverified Commit b0726c30 authored by Matthew Finkel's avatar Matthew Finkel
Browse files

Merge remote-tracking branch 'acatgl/40062+1' into tor-browser-81.1.2-10.0-2

parents 6afc782a 78d91855
Loading
Loading
Loading
Loading
+2782 −0

File added.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -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)
            requireContext().components.addonManager.uninstallAddon(
+1 −13
Original line number Diff line number Diff line
@@ -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()) {
            AddonCollectionProvider(
                context,
                core.client,
                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) }

+60 −0
Original line number Diff line number Diff line
/* 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

    @Throws(IOException::class)
    override suspend fun getAvailableAddons(
        allowCache: Boolean,
        readTimeoutInSeconds: Long?
    ): List<Addon> {
        ensureCache()
        return super.getAvailableAddons(true, readTimeoutInSeconds)
    }

    @Throws(IOException::class)
    override suspend fun getAddonIconBitmap(addon: Addon): Bitmap? {
        ensureCache()
        return super.getAddonIconBitmap(addon)
    }

    @Throws(IOException::class)
    private suspend fun ensureCache() {
        if (isCacheLoaded) {
            return
        }
        return withContext(Dispatchers.IO) {
            val data = context.assets.open(ALLOWED_ADDONS_PATH).bufferedReader().use {
                it.readText()
            }
            writeToDiskCache(data)
            isCacheLoaded = true
        }
    }
}