[components] Closes https://github.com/mozilla-mobile/android-components/issues/2025: concept-fetch: Add API to control if cookies should be sent

This commit is contained in:
Christian Sadilek
2019-02-12 18:16:48 -05:00
parent 050dc24131
commit 88bf1ebdd2
11 changed files with 135 additions and 9 deletions

View File

@@ -9,9 +9,12 @@ import mozilla.components.concept.fetch.Headers
import mozilla.components.concept.fetch.MutableHeaders
import mozilla.components.concept.fetch.Request
import mozilla.components.concept.fetch.Response
import mozilla.components.lib.fetch.httpurlconnection.HttpURLConnectionClient.Companion.getOrCreateCookieManager
import java.io.FileNotFoundException
import java.io.IOException
import java.io.InputStream
import java.net.CookieHandler
import java.net.CookieManager
import java.net.HttpURLConnection
import java.net.URL
import java.util.zip.GZIPInputStream
@@ -30,6 +33,15 @@ class HttpURLConnectionClient : Client() {
return connection.toResponse()
}
companion object {
fun getOrCreateCookieManager(): CookieManager {
if (CookieHandler.getDefault() == null) {
CookieHandler.setDefault(CookieManager())
}
return CookieHandler.getDefault() as CookieManager
}
}
}
private fun HttpURLConnection.addBodyFrom(request: Request) {
@@ -62,6 +74,17 @@ private fun HttpURLConnection.setupWith(request: Request) {
request.readTimeout?.let { (timeout, unit) ->
readTimeout = unit.toMillis(timeout).toInt()
}
// HttpURLConnection can't be configured to omit cookies. As
// a workaround, we delete all cookies we have stored for
// the request URI.
val cookieManager = getOrCreateCookieManager()
if (request.cookiePolicy == Request.CookiePolicy.OMIT) {
val uri = URL(request.url).toURI()
for (cookie in cookieManager.cookieStore.get(uri)) {
cookieManager.cookieStore.remove(uri, cookie)
}
}
}
private fun HttpURLConnection.addHeadersFrom(request: Request, defaultHeaders: Headers) {