Android WebSocket: include cookies with request

Summary:
This commit brings Android in line with iOS WebSockets by sending along cookies from the shared CookieManager. See: https://github.com/facebook/react-native/pull/5630
Closes https://github.com/facebook/react-native/pull/6067

Differential Revision: D3841122

Pulled By: mkonicek

fbshipit-source-id: 6607424feeb31c9da4e370ebe4b33dbbedc0a446
This commit is contained in:
Brad Daily 2016-09-19 15:29:14 -07:00 committed by Facebook Github Bot 3
parent 74c32e2609
commit 04392f2428
1 changed files with 23 additions and 0 deletions

View File

@ -9,7 +9,9 @@
package com.facebook.react.modules.websocket;
import android.net.Uri;
import android.util.Base64;
import android.webkit.CookieManager;
import java.io.IOException;
import java.lang.IllegalStateException;
@ -87,6 +89,27 @@ public class WebSocketModule extends ReactContextBaseJavaModule {
.tag(id)
.url(url);
if (url != null) {
// Use the shared CookieManager to access the cookies
// set by WebViews inside the same app
CookieManager cookieManager = CookieManager.getInstance();
Uri parsedUrl = Uri.parse(url);
Uri.Builder builtUrl = parsedUrl.buildUpon();
// To get HTTPS-only cookies for wss URLs,
// replace wss with http in the URL.
if (parsedUrl.getScheme().equals("wss")) {
builtUrl.scheme("https");
}
String cookie = cookieManager.getCookie(builtUrl.build().toString());
if (cookie != null) {
builder.addHeader("Cookie", cookie);
}
}
if (headers != null) {
ReadableMapKeySetIterator iterator = headers.keySetIterator();