Add 'thirdPartyCookiesEnabled' prop on WebView to enable third party …
Summary: …cookies on Android Lollipop or later versions. Third party cookies in WebView are [disabled by default](https://developer.android.com/reference/android/webkit/CookieManager.html#setAcceptFileSchemeCookies(boolean)) on Android Lollipop or later versions. This prevented users from logging in by using _Login by Facebook_ method (in redirect mode) in Android Webview. This PR exposes a prop `thirdPartyCookiesEnabled` which will enable third party cookies in Android Webview. This setting is ignored on versions below Android Lollipop and on iOS as third party cookies are enabled in them by default. Appropriate documentation was added in code and they were reflected in the website. Closes https://github.com/facebook/react-native/pull/14013 Differential Revision: D5145059 Pulled By: shergin fbshipit-source-id: 67bcb3a497a9c6f6db1d12e8d16197d2facd157e
This commit is contained in:
parent
bac84ce207
commit
7807247905
|
@ -120,6 +120,13 @@ class WebView extends React.Component {
|
||||||
*/
|
*/
|
||||||
javaScriptEnabled: PropTypes.bool,
|
javaScriptEnabled: PropTypes.bool,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used on Android Lollipop and above only, third party cookies are enabled
|
||||||
|
* by default for WebView on Android Kitkat and below and on iOS
|
||||||
|
* @platform android
|
||||||
|
*/
|
||||||
|
thirdPartyCookiesEnabled: PropTypes.bool,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used on Android only, controls whether DOM Storage is enabled or not
|
* Used on Android only, controls whether DOM Storage is enabled or not
|
||||||
* @platform android
|
* @platform android
|
||||||
|
@ -192,6 +199,7 @@ class WebView extends React.Component {
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
javaScriptEnabled : true,
|
javaScriptEnabled : true,
|
||||||
|
thirdPartyCookiesEnabled: true,
|
||||||
scalesPageToFit: true,
|
scalesPageToFit: true,
|
||||||
saveFormDataDisabled: false
|
saveFormDataDisabled: false
|
||||||
};
|
};
|
||||||
|
@ -253,6 +261,7 @@ class WebView extends React.Component {
|
||||||
injectedJavaScript={this.props.injectedJavaScript}
|
injectedJavaScript={this.props.injectedJavaScript}
|
||||||
userAgent={this.props.userAgent}
|
userAgent={this.props.userAgent}
|
||||||
javaScriptEnabled={this.props.javaScriptEnabled}
|
javaScriptEnabled={this.props.javaScriptEnabled}
|
||||||
|
thirdPartyCookiesEnabled={this.props.thirdPartyCookiesEnabled}
|
||||||
domStorageEnabled={this.props.domStorageEnabled}
|
domStorageEnabled={this.props.domStorageEnabled}
|
||||||
messagingEnabled={typeof this.props.onMessage === 'function'}
|
messagingEnabled={typeof this.props.onMessage === 'function'}
|
||||||
onMessage={this.onMessage}
|
onMessage={this.onMessage}
|
||||||
|
|
|
@ -285,6 +285,14 @@ class WebView extends React.Component {
|
||||||
*/
|
*/
|
||||||
javaScriptEnabled: PropTypes.bool,
|
javaScriptEnabled: PropTypes.bool,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Boolean value to enable third party cookies in the `WebView`. Used on
|
||||||
|
* Android Lollipop and above only as third party cookies are enabled by
|
||||||
|
* default on Android Kitkat and below and on iOS. The default value is `true`.
|
||||||
|
* @platform android
|
||||||
|
*/
|
||||||
|
thirdPartyCookiesEnabled: PropTypes.bool,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Boolean value to control whether DOM Storage is enabled. Used only in
|
* Boolean value to control whether DOM Storage is enabled. Used only in
|
||||||
* Android.
|
* Android.
|
||||||
|
|
|
@ -32,6 +32,7 @@ import android.webkit.WebViewClient;
|
||||||
import android.webkit.JavascriptInterface;
|
import android.webkit.JavascriptInterface;
|
||||||
import android.webkit.ValueCallback;
|
import android.webkit.ValueCallback;
|
||||||
import android.webkit.WebSettings;
|
import android.webkit.WebSettings;
|
||||||
|
import android.webkit.CookieManager;
|
||||||
|
|
||||||
import com.facebook.common.logging.FLog;
|
import com.facebook.common.logging.FLog;
|
||||||
import com.facebook.react.common.ReactConstants;
|
import com.facebook.react.common.ReactConstants;
|
||||||
|
@ -370,6 +371,13 @@ public class ReactWebViewManager extends SimpleViewManager<WebView> {
|
||||||
view.getSettings().setJavaScriptEnabled(enabled);
|
view.getSettings().setJavaScriptEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactProp(name = "thirdPartyCookiesEnabled")
|
||||||
|
public void setThirdPartyCookiesEnabled(WebView view, boolean enabled) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
CookieManager.getInstance().setAcceptThirdPartyCookies(view, enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ReactProp(name = "scalesPageToFit")
|
@ReactProp(name = "scalesPageToFit")
|
||||||
public void setScalesPageToFit(WebView view, boolean enabled) {
|
public void setScalesPageToFit(WebView view, boolean enabled) {
|
||||||
view.getSettings().setUseWideViewPort(!enabled);
|
view.getSettings().setUseWideViewPort(!enabled);
|
||||||
|
|
Loading…
Reference in New Issue