From c8aba76bae82269b8e9898dcbbb547ee7de25d19 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Mon, 4 Mar 2024 16:03:55 -0500 Subject: [PATCH] Bug 1875668 - Bypass cache when intercepting site in desktop mode (cherry picked from commit 775987289cb212ce0ef6cb843cc6f6954dcb9c5b) --- .../fenix/components/UrlRequestInterceptor.kt | 21 ++++++++++++++---- .../components/UrlRequestInterceptorTest.kt | 22 +++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) 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"