Improve site permissions
This commit is contained in:
parent
9a47aa3ac9
commit
cca309e0e6
|
@ -1251,7 +1251,7 @@ abstract class BaseBrowserFragment :
|
|||
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
||||
val sitePermissions: SitePermissions? = tab.content.url.getOrigin()?.let { origin ->
|
||||
val storage = requireComponents.core.permissionStorage
|
||||
storage.findSitePermissionsBy(origin)
|
||||
storage.findSitePermissionsBy(origin, tab.content.private)
|
||||
}
|
||||
|
||||
view?.let {
|
||||
|
|
|
@ -20,26 +20,58 @@ class PermissionStorage(
|
|||
context.components.core.geckoSitePermissionsStorage,
|
||||
) {
|
||||
|
||||
/**
|
||||
* Persists the [sitePermissions] provided as a parameter.
|
||||
* @param sitePermissions the [sitePermissions] to be stored.
|
||||
*/
|
||||
suspend fun add(sitePermissions: SitePermissions) = withContext(dispatcher) {
|
||||
permissionsStorage.save(sitePermissions)
|
||||
permissionsStorage.save(sitePermissions, private = false)
|
||||
}
|
||||
|
||||
suspend fun findSitePermissionsBy(origin: String): SitePermissions? = withContext(dispatcher) {
|
||||
permissionsStorage.findSitePermissionsBy(origin)
|
||||
}
|
||||
/**
|
||||
* Finds all SitePermissions that match the [origin].
|
||||
* @param origin the site to be used as filter in the search.
|
||||
* @param private indicates if the [origin] belongs to a private session.
|
||||
*/
|
||||
suspend fun findSitePermissionsBy(origin: String, private: Boolean): SitePermissions? =
|
||||
withContext(dispatcher) {
|
||||
permissionsStorage.findSitePermissionsBy(origin, private = private)
|
||||
}
|
||||
|
||||
suspend fun updateSitePermissions(sitePermissions: SitePermissions) = withContext(dispatcher) {
|
||||
permissionsStorage.update(sitePermissions)
|
||||
}
|
||||
/**
|
||||
* Replaces an existing SitePermissions with the values of [sitePermissions] provided as a parameter.
|
||||
* @param sitePermissions the sitePermissions to be updated.
|
||||
* @param private indicates if the [SitePermissions] belongs to a private session.
|
||||
*/
|
||||
suspend fun updateSitePermissions(sitePermissions: SitePermissions, private: Boolean) =
|
||||
withContext(dispatcher) {
|
||||
permissionsStorage.update(sitePermissions, private = private)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all saved [SitePermissions] instances as a [DataSource.Factory].
|
||||
*
|
||||
* A consuming app can transform the data source into a `LiveData<PagedList>` of when using RxJava2 into a
|
||||
* `Flowable<PagedList>` or `Observable<PagedList>`, that can be observed.
|
||||
*
|
||||
* - https://developer.android.com/topic/libraries/architecture/paging/data
|
||||
* - https://developer.android.com/topic/libraries/architecture/paging/ui
|
||||
*/
|
||||
suspend fun getSitePermissionsPaged(): DataSource.Factory<Int, SitePermissions> {
|
||||
return permissionsStorage.getSitePermissionsPaged()
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all sitePermissions that match the sitePermissions provided as a parameter.
|
||||
* @param sitePermissions the sitePermissions to be deleted from the storage.
|
||||
*/
|
||||
suspend fun deleteSitePermissions(sitePermissions: SitePermissions) = withContext(dispatcher) {
|
||||
permissionsStorage.remove(sitePermissions)
|
||||
permissionsStorage.remove(sitePermissions, private = false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all sitePermissions sitePermissions.
|
||||
*/
|
||||
suspend fun deleteAllSitePermissions() = withContext(dispatcher) {
|
||||
permissionsStorage.removeAll()
|
||||
}
|
||||
|
|
|
@ -263,8 +263,11 @@ class DefaultQuickSettingsController(
|
|||
*/
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
fun handlePermissionsChange(updatedPermissions: SitePermissions) {
|
||||
val tab = requireNotNull(browserStore.state.findTabOrCustomTab(sessionId)) {
|
||||
"A session is required to update permission"
|
||||
}
|
||||
ioScope.launch {
|
||||
permissionStorage.updateSitePermissions(updatedPermissions)
|
||||
permissionStorage.updateSitePermissions(updatedPermissions, tab.content.private)
|
||||
reload(sessionId)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,12 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() {
|
|||
showToolbar(sitePermissions.origin.stripDefaultPort())
|
||||
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
||||
sitePermissions =
|
||||
requireNotNull(requireComponents.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin))
|
||||
requireNotNull(
|
||||
requireComponents.core.permissionStorage.findSitePermissionsBy(
|
||||
sitePermissions.origin,
|
||||
private = false,
|
||||
),
|
||||
)
|
||||
bindCategoryPhoneFeatures()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -224,7 +224,10 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() {
|
|||
private fun updatedSitePermissions(status: SitePermissions.Status) {
|
||||
val updatedSitePermissions = getSitePermission().update(getFeature(), status)
|
||||
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
||||
requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions)
|
||||
requireComponents.core.permissionStorage.updateSitePermissions(
|
||||
sitePermissions = updatedSitePermissions,
|
||||
private = false,
|
||||
)
|
||||
requireComponents.tryReloadTabBy(updatedSitePermissions.origin)
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +236,10 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() {
|
|||
internal fun updatedSitePermissions(autoplayValue: AutoplayValue) {
|
||||
val updatedSitePermissions = autoplayValue.updateSitePermissions(getSitePermission())
|
||||
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
||||
requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions)
|
||||
requireComponents.core.permissionStorage.updateSitePermissions(
|
||||
sitePermissions = updatedSitePermissions,
|
||||
private = false,
|
||||
)
|
||||
requireComponents.tryReloadTabBy(updatedSitePermissions.origin)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ class PermissionStorageTest {
|
|||
|
||||
storage.add(sitePermissions)
|
||||
|
||||
coVerify { sitePermissionsStorage.save(sitePermissions) }
|
||||
coVerify { sitePermissionsStorage.save(sitePermissions, private = false) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -39,11 +39,11 @@ class PermissionStorageTest {
|
|||
val sitePermissionsStorage: SitePermissionsStorage = mockk(relaxed = true)
|
||||
val storage = PermissionStorage(testContext, this.coroutineContext, sitePermissionsStorage)
|
||||
|
||||
coEvery { sitePermissionsStorage.findSitePermissionsBy(any()) } returns sitePermissions
|
||||
coEvery { sitePermissionsStorage.findSitePermissionsBy(any(), any(), any()) } returns sitePermissions
|
||||
|
||||
val result = storage.findSitePermissionsBy("origin")
|
||||
val result = storage.findSitePermissionsBy("origin", false)
|
||||
|
||||
coVerify { sitePermissionsStorage.findSitePermissionsBy("origin") }
|
||||
coVerify { sitePermissionsStorage.findSitePermissionsBy("origin", private = false) }
|
||||
|
||||
assertEquals(sitePermissions, result)
|
||||
}
|
||||
|
@ -54,9 +54,9 @@ class PermissionStorageTest {
|
|||
val sitePermissionsStorage: SitePermissionsStorage = mockk(relaxed = true)
|
||||
val storage = PermissionStorage(testContext, this.coroutineContext, sitePermissionsStorage)
|
||||
|
||||
storage.updateSitePermissions(sitePermissions)
|
||||
storage.updateSitePermissions(sitePermissions, private = false)
|
||||
|
||||
coVerify { sitePermissionsStorage.update(sitePermissions) }
|
||||
coVerify { sitePermissionsStorage.update(sitePermissions, private = false) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -82,7 +82,7 @@ class PermissionStorageTest {
|
|||
|
||||
storage.deleteSitePermissions(sitePermissions)
|
||||
|
||||
coVerify { sitePermissionsStorage.remove(sitePermissions) }
|
||||
coVerify { sitePermissionsStorage.remove(sitePermissions, private = false) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -284,7 +284,7 @@ class DefaultQuickSettingsControllerTest {
|
|||
advanceUntilIdle()
|
||||
|
||||
coVerifyOrder {
|
||||
permissionStorage.updateSitePermissions(testPermissions)
|
||||
permissionStorage.updateSitePermissions(testPermissions, tab.content.private)
|
||||
reload(tab.id)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue