From 2c490a3fcd55920cb457d6027056e5758901a057 Mon Sep 17 00:00:00 2001 From: Marcos Holgado Date: Wed, 10 Feb 2021 17:38:18 +0000 Subject: [PATCH] Remove MobileUrlRewriter --- .../app/browser/BrowserTabViewModelTest.kt | 27 ---------- .../browser/WebViewRequestInterceptorTest.kt | 20 +------ .../useragent/MobileUrlReWriterTest.kt | 48 ----------------- .../app/browser/BrowserTabViewModel.kt | 6 --- .../app/browser/WebViewRequestInterceptor.kt | 19 +------ .../app/browser/di/BrowserModule.kt | 9 ++-- .../browser/useragent/MobileUrlRewriter.kt | 54 ------------------- 7 files changed, 5 insertions(+), 178 deletions(-) delete mode 100644 app/src/androidTest/java/com/duckduckgo/app/browser/useragent/MobileUrlReWriterTest.kt delete mode 100644 app/src/main/java/com/duckduckgo/app/browser/useragent/MobileUrlRewriter.kt diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt index 276e4aa9dbac..b2087153f2d3 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt @@ -3083,33 +3083,6 @@ class BrowserTabViewModelTest { assertCommandIssued() } - @Test - fun whenPageChangesAndNewPageCanChangeBrowsingModeThenCanChangeBrowsingModeIsTrue() { - givenCurrentSite("https://www.example.com/") - - loadUrl("https://www.example2.com", isBrowserShowing = true) - - assertTrue(browserViewState().canChangeBrowsingMode) - } - - @Test - fun whenPageChangesAndNewPageCannotChangeBrowsingModeThenCanChangeBrowsingModeIsFalse() { - givenCurrentSite("https://www.example.com/") - - loadUrl("https://www.facebook.com", isBrowserShowing = true) - - assertFalse(browserViewState().canChangeBrowsingMode) - } - - @Test - fun whenPageChangesAndNewPageCanChangeBrowsingModeButContainsExcludedPathThenCanChangeBrowsingModeIsFalse() { - givenCurrentSite("https://www.example.com/") - - loadUrl("https://www.facebook.com/dialog", isBrowserShowing = true) - - assertFalse(browserViewState().canChangeBrowsingMode) - } - @Test fun whenRequestFileDownloadAndUrlIsBlobThenConvertBlobToDataUriCommandSent() { val blobUrl = "blob:https://example.com/283nasdho23jkasdAjd" diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/WebViewRequestInterceptorTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/WebViewRequestInterceptorTest.kt index 06b4a51d6a95..57c61a376279 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/WebViewRequestInterceptorTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/WebViewRequestInterceptorTest.kt @@ -24,7 +24,6 @@ import androidx.test.annotation.UiThreadTest import com.duckduckgo.app.CoroutineTestRule import com.duckduckgo.app.globalprivacycontrol.GlobalPrivacyControl import com.duckduckgo.app.globalprivacycontrol.GlobalPrivacyControlManager -import com.duckduckgo.app.browser.useragent.MobileUrlReWriter import com.duckduckgo.app.browser.useragent.UserAgentProvider import com.duckduckgo.app.httpsupgrade.HttpsUpgrader import com.duckduckgo.app.privacy.db.PrivacyProtectionCountDao @@ -58,7 +57,6 @@ class WebViewRequestInterceptorTest { private val mockGlobalPrivacyControl: GlobalPrivacyControl = mock() private val mockWebBackForwardList: WebBackForwardList = mock() private val userAgentProvider: UserAgentProvider = UserAgentProvider(DEFAULT, mock()) - private val mobileUrlReWriter = MobileUrlReWriter() private var webView: WebView = mock() @@ -75,8 +73,7 @@ class WebViewRequestInterceptorTest { resourceSurrogates = mockResourceSurrogates, privacyProtectionCountDao = mockPrivacyProtectionCountDao, globalPrivacyControl = mockGlobalPrivacyControl, - userAgentProvider = userAgentProvider, - mobileUrlReWriter = mobileUrlReWriter + userAgentProvider = userAgentProvider ) } @@ -444,21 +441,6 @@ class WebViewRequestInterceptorTest { verify(webView, never()).loadUrl(any(), any()) } - @Test - fun whenUrlShouldChangeToMobileUrlThenLoadUrlWithMobileSubDomain() = runBlocking { - configureShouldChangeToMobileUrl() - - val mockWebViewClientListener: WebViewClientListener = mock() - testee.shouldIntercept( - request = mockRequest, - documentUrl = null, - webView = webView, - webViewClientListener = mockWebViewClientListener - ) - - verify(webView).loadUrl("https://m.facebook.com", emptyMap()) - } - @Test fun whenUserAgentShouldChangeThenReloadUrl() = runBlocking { configureUserAgentShouldChange() diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/useragent/MobileUrlReWriterTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/useragent/MobileUrlReWriterTest.kt deleted file mode 100644 index ccc10530f946..000000000000 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/useragent/MobileUrlReWriterTest.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2020 DuckDuckGo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.duckduckgo.app.browser.useragent - -import androidx.core.net.toUri -import org.junit.Assert.* -import org.junit.Test - -class MobileUrlReWriterTest { - - private val testee = MobileUrlReWriter() - - @Test - fun whenMobileSiteOnlyForUriAndSiteBelongsToMobileSiteHostsThenReturnObject() { - val domain = MobileUrlReWriter.strictlyMobileSiteHosts.first().host - val url = "https://$domain".toUri() - - assertNotNull(testee.mobileSiteOnlyForUri(url)) - } - - @Test - fun whenMobileSiteOnlyForUriAndSiteBelongsToMobileSiteHostsWithExclusionPathThenReturnNull() { - val domain = MobileUrlReWriter.strictlyMobileSiteHosts.first().host - val path = MobileUrlReWriter.strictlyMobileSiteHosts.first().excludedPaths.first() - val url = "https://$domain/$path".toUri() - - assertNull(testee.mobileSiteOnlyForUri(url)) - } - - @Test - fun whenMobileSiteOnlyForUriAndSiteDoesNotBelongsToMobileSiteHostsThenReturnNull() { - assertNull(testee.mobileSiteOnlyForUri("https://example.com".toUri())) - } -} diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index 20367d759318..098a90276da4 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -61,7 +61,6 @@ import com.duckduckgo.app.browser.model.LongPressTarget import com.duckduckgo.app.browser.omnibar.OmnibarEntryConverter import com.duckduckgo.app.browser.session.WebViewSessionStorage import com.duckduckgo.app.browser.ui.HttpAuthenticationDialogFragment.HttpAuthenticationListener -import com.duckduckgo.app.browser.useragent.MobileUrlReWriter import com.duckduckgo.app.cta.ui.* import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteRepository @@ -771,7 +770,6 @@ class BrowserTabViewModel( browserShowing = true, canAddBookmarks = true, addToHomeEnabled = true, - canChangeBrowsingMode = canChangeBrowsingMode(site?.domain), addToHomeVisible = addToHomeCapabilityDetector.isAddToHomeSupported(), canSharePage = true, showPrivacyGrade = true, @@ -800,10 +798,6 @@ class BrowserTabViewModel( registerSiteVisit() } - private fun canChangeBrowsingMode(domain: String?): Boolean { - return !MobileUrlReWriter.strictlyMobileSiteHosts.any { domain?.contains(it.host) == true } - } - private fun sendPixelIfUseOurAppSiteVisitedFirstTime(url: String) { if (useOurAppDetector.isUseOurAppUrl(url)) { viewModelScope.launch { sendUseOurAppSiteVisitedPixel() } diff --git a/app/src/main/java/com/duckduckgo/app/browser/WebViewRequestInterceptor.kt b/app/src/main/java/com/duckduckgo/app/browser/WebViewRequestInterceptor.kt index 60ec82bfeb29..cd0f6a0d2225 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/WebViewRequestInterceptor.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/WebViewRequestInterceptor.kt @@ -22,7 +22,6 @@ import android.webkit.WebResourceResponse import android.webkit.WebView import androidx.annotation.WorkerThread import com.duckduckgo.app.browser.useragent.UserAgentProvider -import com.duckduckgo.app.browser.useragent.MobileUrlReWriter import com.duckduckgo.app.global.isHttp import com.duckduckgo.app.globalprivacycontrol.GlobalPrivacyControl import com.duckduckgo.app.globalprivacycontrol.GlobalPrivacyControlManager @@ -52,8 +51,7 @@ class WebViewRequestInterceptor( private val httpsUpgrader: HttpsUpgrader, private val privacyProtectionCountDao: PrivacyProtectionCountDao, private val globalPrivacyControl: GlobalPrivacyControl, - private val userAgentProvider: UserAgentProvider, - private val mobileUrlReWriter: MobileUrlReWriter + private val userAgentProvider: UserAgentProvider ) : RequestInterceptor { /** @@ -75,13 +73,6 @@ class WebViewRequestInterceptor( val url = request.url - shouldChangeToMobileUrl(request)?.let { newUrl -> - withContext(Dispatchers.Main) { - webView.loadUrl(newUrl, getHeaders(request)) - } - return WebResourceResponse(null, null, null) - } - newUserAgent(request, webView, webViewClientListener)?.let { withContext(Dispatchers.Main) { webView.settings?.userAgentString = it @@ -181,14 +172,6 @@ class WebViewRequestInterceptor( } } - private fun shouldChangeToMobileUrl(request: WebResourceRequest): String? { - return if (request.isForMainFrame && request.url != null && request.method == "GET") { - return mobileUrlReWriter.mobileSiteOnlyForUri(request.url) - } else { - null - } - } - private fun shouldUpgrade(request: WebResourceRequest) = request.isForMainFrame && request.url != null && httpsUpgrader.shouldUpgrade(request.url) diff --git a/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt b/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt index 6b8da9afb48f..bff5fa4c91b5 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/di/BrowserModule.kt @@ -47,7 +47,6 @@ import com.duckduckgo.app.browser.tabpreview.FileBasedWebViewPreviewPersister import com.duckduckgo.app.browser.tabpreview.WebViewPreviewGenerator import com.duckduckgo.app.browser.tabpreview.WebViewPreviewPersister import com.duckduckgo.app.browser.useragent.UserAgentProvider -import com.duckduckgo.app.browser.useragent.MobileUrlReWriter import com.duckduckgo.app.fire.* import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteDao import com.duckduckgo.app.global.AppUrl @@ -100,8 +99,7 @@ class BrowserModule { cookieManager: CookieManager, loginDetector: DOMLoginDetector, dosDetector: DosDetector, - globalPrivacyControl: GlobalPrivacyControl, - pixel: Pixel + globalPrivacyControl: GlobalPrivacyControl ): BrowserWebViewClient { return BrowserWebViewClient( webViewHttpAuthStore, @@ -178,9 +176,8 @@ class BrowserModule { httpsUpgrader: HttpsUpgrader, privacyProtectionCountDao: PrivacyProtectionCountDao, globalPrivacyControl: GlobalPrivacyControl, - userAgentProvider: UserAgentProvider, - mobileUrlReWriter: MobileUrlReWriter - ): RequestInterceptor = WebViewRequestInterceptor(resourceSurrogates, trackerDetector, httpsUpgrader, privacyProtectionCountDao, globalPrivacyControl, userAgentProvider, mobileUrlReWriter) + userAgentProvider: UserAgentProvider + ): RequestInterceptor = WebViewRequestInterceptor(resourceSurrogates, trackerDetector, httpsUpgrader, privacyProtectionCountDao, globalPrivacyControl, userAgentProvider) @Provides fun cookieManager( diff --git a/app/src/main/java/com/duckduckgo/app/browser/useragent/MobileUrlRewriter.kt b/app/src/main/java/com/duckduckgo/app/browser/useragent/MobileUrlRewriter.kt deleted file mode 100644 index ca0304af1e26..000000000000 --- a/app/src/main/java/com/duckduckgo/app/browser/useragent/MobileUrlRewriter.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2020 DuckDuckGo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.duckduckgo.app.browser.useragent - -import android.net.Uri -import com.duckduckgo.app.global.UriString -import com.duckduckgo.app.global.isMobileSite -import javax.inject.Inject - -class MobileUrlReWriter @Inject constructor() { - - fun mobileSiteOnlyForUri(uri: Uri?): String? { - if (uri == null) return null - val host = uri.host - return if (!uri.isMobileSite && host != null) { - strictlyMobileSiteHosts.firstOrNull { - UriString.sameOrSubdomain(host, it.host) && !containsExcludedPath(uri, it) - }?.getMobileSite(uri, host) - } else { - null - } - } - - private fun containsExcludedPath(uri: Uri, site: MobileSiteOnly): Boolean { - val segments = uri.pathSegments - return site.excludedPaths.any { segments.contains(it) } - } - - companion object { - val strictlyMobileSiteHosts = listOf( - MobileSiteOnly("facebook.com", "m.facebook.com", listOf("dialog", "sharer")) - ) - } - - data class MobileSiteOnly(val host: String, val mobileHost: String, val excludedPaths: List = emptyList()) - - private fun MobileSiteOnly.getMobileSite(uri: Uri, host: String): String { - return uri.toString().replace(host, mobileHost) - } -}