From 91038db3278705ac542b352f5a416c5046180b25 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Tue, 4 Sep 2018 13:39:43 +0200 Subject: [PATCH] Issue #696: browser-engine-system: Clear "X-Requested-With" header when loading URLs. --- .../engine/system/SystemEngineSession.kt | 10 +++++++++- .../browser/engine/system/SystemEngineView.kt | 2 +- .../engine/system/SystemEngineSessionTest.kt | 19 +++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineSession.kt b/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineSession.kt index c7067aca688..39ed09e4d91 100644 --- a/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineSession.kt +++ b/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineSession.kt @@ -13,6 +13,14 @@ import kotlinx.coroutines.experimental.launch import mozilla.components.concept.engine.Settings import mozilla.components.concept.engine.request.RequestInterceptor +internal val additionalHeaders = mapOf( + // For every request WebView sends a "X-requested-with" header with the package name of the + // application. We can't really prevent that but we can at least send an empty value. + // Unfortunately the additional headers will not be propagated to subsequent requests + // (e.g. redirects). See issue #696. + "X-Requested-With" to "" +) + /** * WebView-based EngineSession implementation. */ @@ -34,7 +42,7 @@ class SystemEngineSession(private val defaultSettings: Settings? = null) : Engin scheduledLoad = ScheduledLoad(url) } else { view?.get()?.currentUrl = url - internalView.loadUrl(url) + internalView.loadUrl(url, additionalHeaders) } } diff --git a/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineView.kt b/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineView.kt index 582e9ff18bc..8ce760f0be3 100644 --- a/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineView.kt +++ b/components/browser/engine-system/src/main/java/mozilla/components/browser/engine/system/SystemEngineView.kt @@ -69,7 +69,7 @@ class SystemEngineView @JvmOverloads constructor( } internalSession.scheduledLoad.url?.let { - currentWebView.loadUrl(it) + currentWebView.loadUrl(it, additionalHeaders) internalSession.scheduledLoad = ScheduledLoad() } } diff --git a/components/browser/engine-system/src/test/java/mozilla/components/browser/engine/system/SystemEngineSessionTest.kt b/components/browser/engine-system/src/test/java/mozilla/components/browser/engine/system/SystemEngineSessionTest.kt index dbcea894f54..1438d8ceeda 100644 --- a/components/browser/engine-system/src/test/java/mozilla/components/browser/engine/system/SystemEngineSessionTest.kt +++ b/components/browser/engine-system/src/test/java/mozilla/components/browser/engine/system/SystemEngineSessionTest.kt @@ -52,8 +52,16 @@ class SystemEngineSessionTest { @Test fun testLoadUrl() { + var loadedUrl: String? = null + var loadHeaders: Map? = null + val engineSession = spy(SystemEngineSession()) - val webView = mock(WebView::class.java) + val webView = spy(object : WebView(RuntimeEnvironment.application) { + override fun loadUrl(url: String?, additionalHttpHeaders: MutableMap?) { + loadedUrl = url + loadHeaders = additionalHttpHeaders + } + }) engineSession.loadUrl("") verify(webView, never()).loadUrl(anyString()) @@ -61,7 +69,14 @@ class SystemEngineSessionTest { `when`(engineSession.currentView()).thenReturn(webView) engineSession.loadUrl("http://mozilla.org") - verify(webView).loadUrl("http://mozilla.org") + verify(webView).loadUrl(eq("http://mozilla.org"), any()) + + assertEquals("http://mozilla.org", loadedUrl) + + assertNotNull(loadHeaders) + assertEquals(1, loadHeaders!!.size) + assertTrue(loadHeaders!!.containsKey("X-Requested-With")) + assertEquals("", loadHeaders!!["X-Requested-With"]) } @Test