[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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user