diff --git a/app/src/main/java/org/mozilla/fenix/components/UrlRequestInterceptor.kt b/app/src/main/java/org/mozilla/fenix/components/UrlRequestInterceptor.kt index 74e270f70..0c113755b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/UrlRequestInterceptor.kt +++ b/app/src/main/java/org/mozilla/fenix/components/UrlRequestInterceptor.kt @@ -8,6 +8,7 @@ import androidx.annotation.VisibleForTesting import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession.LoadUrlFlags import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.ALLOW_ADDITIONAL_HEADERS +import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.BYPASS_CACHE import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE import mozilla.components.concept.engine.request.RequestInterceptor @@ -58,12 +59,24 @@ class UrlRequestInterceptor(private val isDeviceRamAboveThreshold: Boolean) : Re return null } - return RequestInterceptor.InterceptionResponse.Url( - url = uri, - flags = LoadUrlFlags.select( + // This is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1875668 + // Remove this by implementing https://bugzilla.mozilla.org/show_bug.cgi?id=1883496 + val loadUrlFlags = if (uri.endsWith("#ip=1", true)) { + LoadUrlFlags.select( + LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE, + ALLOW_ADDITIONAL_HEADERS, + BYPASS_CACHE, + ) + } else { + LoadUrlFlags.select( LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE, ALLOW_ADDITIONAL_HEADERS, - ), + ) + } + + return RequestInterceptor.InterceptionResponse.Url( + url = uri, + flags = loadUrlFlags, additionalHeaders = getAdditionalHeaders(isDeviceRamAboveThreshold), ) } diff --git a/app/src/test/java/org/mozilla/fenix/components/UrlRequestInterceptorTest.kt b/app/src/test/java/org/mozilla/fenix/components/UrlRequestInterceptorTest.kt index 61edbff0a..a53dde2d8 100644 --- a/app/src/test/java/org/mozilla/fenix/components/UrlRequestInterceptorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/UrlRequestInterceptorTest.kt @@ -8,6 +8,7 @@ import io.mockk.mockk import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession.LoadUrlFlags import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.ALLOW_ADDITIONAL_HEADERS +import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.BYPASS_CACHE import mozilla.components.concept.engine.EngineSession.LoadUrlFlags.Companion.LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE import mozilla.components.concept.engine.request.RequestInterceptor import org.junit.Assert.assertEquals @@ -147,6 +148,27 @@ class UrlRequestInterceptorTest { ) } + @Test + fun `WHEN a Google request end in #ip=1 is loaded THEN request bypass cache`() { + val uri = "https://www.google.com/search?q=test&ie=utf-8#ip=1" + assertEquals( + RequestInterceptor.InterceptionResponse.Url( + url = uri, + flags = LoadUrlFlags.select( + BYPASS_CACHE, + LOAD_FLAGS_BYPASS_LOAD_URI_DELEGATE, + ALLOW_ADDITIONAL_HEADERS, + ), + additionalHeaders = mapOf( + "X-Search-Subdivision" to "0", + ), + ), + getUrlRequestInterceptor().onLoadRequest( + uri = uri, + ), + ) + } + @Test fun `WHEN a Google search request is loaded THEN request is intercepted`() { val uri = "https://www.google.com/search?q=blue"