From 34b1e77dbc54d1f8db536545e37cdaf86b39bd00 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Tue, 22 Jun 2021 12:50:37 -0400 Subject: [PATCH] Improvements to site permissions --- .../java/org/mozilla/fenix/browser/BaseBrowserFragment.kt | 8 ++++---- .../settings/quicksettings/QuickSettingsController.kt | 4 ++-- .../mozilla/fenix/settings/sitepermissions/Extensions.kt | 4 ++-- .../SitePermissionsDetailsExceptionsFragment.kt | 3 ++- .../sitepermissions/SitePermissionsExceptionsFragment.kt | 6 +++--- .../components/settings/sitepermissions/ExtensionsTest.kt | 7 ++++--- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 7ab541601..6d6d4b7b2 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -22,7 +22,6 @@ import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.getSystemService -import androidx.core.net.toUri import androidx.core.view.isVisible import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels @@ -136,6 +135,7 @@ import mozilla.components.feature.webauthn.WebAuthnFeature import mozilla.components.support.base.feature.ActivityResultHandler import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph import mozilla.components.support.ktx.android.view.enterToImmersiveMode +import mozilla.components.support.ktx.kotlin.getOrigin import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.ext.measureNoInline import org.mozilla.fenix.ext.secure @@ -1185,9 +1185,9 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit private fun showQuickSettingsDialog() { val tab = getCurrentTab() ?: return viewLifecycleOwner.lifecycleScope.launch(Main) { - val sitePermissions: SitePermissions? = tab.content.url.toUri().host?.let { host -> - val storage = requireComponents.core.permissionStorage - storage.findSitePermissionsBy(host) + val sitePermissions: SitePermissions? = tab.content.url.getOrigin()?.let { origin -> + val storage = requireComponents.core.permissionStorage + storage.findSitePermissionsBy(origin) } view?.let { diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt index c8dbe8ac4..2bacc065d 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.settings.quicksettings import android.content.Context import androidx.annotation.VisibleForTesting -import androidx.core.net.toUri import androidx.navigation.NavController import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -17,6 +16,7 @@ import mozilla.components.feature.session.SessionUseCases.ReloadUrlUseCase import mozilla.components.feature.sitepermissions.SitePermissions import mozilla.components.feature.tabs.TabsUseCases.AddNewTabUseCase import mozilla.components.support.base.feature.OnNeedToRequestPermissions +import mozilla.components.support.ktx.kotlin.getOrigin import org.mozilla.fenix.components.PermissionStorage import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph import org.mozilla.fenix.settings.PhoneFeature @@ -141,7 +141,7 @@ class DefaultQuickSettingsController( sitePermissions = if (permissions == null) { val tab = browserStore.state.findTabOrCustomTab(sessionId) - val origin = requireNotNull(tab?.content?.url?.toUri()?.host) { + val origin = requireNotNull(tab?.content?.url?.getOrigin()) { "An origin is required to change a autoplay settings from the door hanger" } val sitePermissions = diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/Extensions.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/Extensions.kt index 4f459f84e..dd31f5feb 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/Extensions.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/Extensions.kt @@ -6,8 +6,8 @@ package org.mozilla.fenix.settings.sitepermissions import android.view.View import android.widget.TextView -import androidx.core.net.toUri import androidx.core.text.HtmlCompat +import mozilla.components.support.ktx.kotlin.getOrigin import org.mozilla.fenix.R import org.mozilla.fenix.components.Components import org.mozilla.fenix.settings.PhoneFeature @@ -23,7 +23,7 @@ import org.mozilla.fenix.settings.PhoneFeature internal fun Components.tryReloadTabBy(origin: String) { core.store.state.tabs .sortedByDescending { it.lastAccess } - .find { it.content.url.toUri().host == origin } + .find { it.content.url.getOrigin() == origin } ?.let { useCases.sessionUseCases.reload(it.id) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt index dcb2bcc9c..40567c3ae 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt @@ -18,6 +18,7 @@ import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mozilla.components.feature.sitepermissions.SitePermissions +import mozilla.components.support.ktx.kotlin.stripDefaultPort import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph @@ -55,7 +56,7 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() - showToolbar(sitePermissions.origin) + showToolbar(sitePermissions.origin.stripDefaultPort()) viewLifecycleOwner.lifecycleScope.launch(Main) { sitePermissions = requireNotNull(requireComponents.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin)) diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt index 352b71150..8b4c4ab04 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt @@ -27,6 +27,7 @@ import androidx.recyclerview.widget.RecyclerView import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch import mozilla.components.feature.sitepermissions.SitePermissions +import mozilla.components.support.ktx.kotlin.stripDefaultPort import org.mozilla.fenix.NavHostActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.components @@ -142,9 +143,8 @@ class ExceptionsAdapter(private val clickListener: View.OnClickListener) : override fun onBindViewHolder(holder: SitePermissionsViewHolder, position: Int) { val sitePermissions = requireNotNull(getItem(position)) val context = holder.view.context - - context.components.core.icons.loadIntoView(holder.iconView, "https://${sitePermissions.origin}/") - holder.siteTextView.text = sitePermissions.origin + context.components.core.icons.loadIntoView(holder.iconView, sitePermissions.origin) + holder.siteTextView.text = sitePermissions.origin.stripDefaultPort() holder.view.tag = sitePermissions holder.view.setOnClickListener(clickListener) } diff --git a/app/src/test/java/org/mozilla/fenix/components/settings/sitepermissions/ExtensionsTest.kt b/app/src/test/java/org/mozilla/fenix/components/settings/sitepermissions/ExtensionsTest.kt index 0c91f91d0..a736c9dbb 100644 --- a/app/src/test/java/org/mozilla/fenix/components/settings/sitepermissions/ExtensionsTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/settings/sitepermissions/ExtensionsTest.kt @@ -10,6 +10,7 @@ import io.mockk.verify import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.support.ktx.kotlin.getOrigin import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.components.Components @@ -33,13 +34,13 @@ class ExtensionsTest { val components: Components = mockk(relaxed = true) every { components.core.store } returns store - components.tryReloadTabBy("www.getpocket.com") + components.tryReloadTabBy("https://www.getpocket.com".getOrigin()!!) verify(exactly = 0) { components.useCases.sessionUseCases.reload(any()) } - components.tryReloadTabBy("www.mozilla.org") + components.tryReloadTabBy("https://www.mozilla.org".getOrigin()!!) verify { components.useCases.sessionUseCases.reload("2") } - components.tryReloadTabBy("www.firefox.com") + components.tryReloadTabBy("https://www.firefox.com".getOrigin()!!) verify { components.useCases.sessionUseCases.reload("3") } } }