Skip to content

Commit fee5031

Browse files
mdvaccagrabbou
authored andcommitted
Fix IllegalArgumentException when creating CookieManager
Summary: This prevents this https://bugs.chromium.org/p/chromium/issues/detail?id=559720 to crash the app. When using this fix the webView will not function correctly More details about the bug https://bugs.chromium.org/p/chromium/issues/detail?id=559720 Reviewed By: fkgozali Differential Revision: D14181851 fbshipit-source-id: 5a8c149df82a7373fe8b5b32006f034868532485
1 parent fbf039b commit fee5031

1 file changed

Lines changed: 43 additions & 17 deletions

File tree

‎ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java‎

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ public ForwardingCookieHandler(ReactContext context) {
5656
@Override
5757
public Map<String, List<String>> get(URI uri, Map<String, List<String>> headers)
5858
throws IOException {
59-
String cookies = getCookieManager().getCookie(uri.toString());
59+
CookieManager cookieManager = getCookieManager();
60+
if (cookieManager == null) return Collections.emptyMap();
61+
62+
String cookies = cookieManager.getCookie(uri.toString());
6063
if (TextUtils.isEmpty(cookies)) {
6164
return Collections.emptyMap();
6265
}
@@ -80,7 +83,10 @@ public void clearCookies(final Callback callback) {
8083
new GuardedResultAsyncTask<Boolean>(mContext) {
8184
@Override
8285
protected Boolean doInBackgroundGuarded() {
83-
getCookieManager().removeAllCookie();
86+
CookieManager cookieManager = getCookieManager();
87+
if (cookieManager != null) {
88+
cookieManager.removeAllCookie();
89+
}
8490
mCookieSaver.onCookiesModified();
8591
return true;
8692
}
@@ -96,31 +102,40 @@ protected void onPostExecuteGuarded(Boolean result) {
96102
}
97103

98104
private void clearCookiesAsync(final Callback callback) {
99-
getCookieManager().removeAllCookies(
100-
new ValueCallback<Boolean>() {
101-
@Override
102-
public void onReceiveValue(Boolean value) {
103-
mCookieSaver.onCookiesModified();
104-
callback.invoke(value);
105-
}
106-
});
105+
CookieManager cookieManager = getCookieManager();
106+
if (cookieManager != null) {
107+
cookieManager.removeAllCookies(
108+
new ValueCallback<Boolean>() {
109+
@Override
110+
public void onReceiveValue(Boolean value) {
111+
mCookieSaver.onCookiesModified();
112+
callback.invoke(value);
113+
}
114+
});
115+
}
107116
}
108117

109118
public void destroy() {
110119
if (USES_LEGACY_STORE) {
111-
getCookieManager().removeExpiredCookie();
120+
CookieManager cookieManager = getCookieManager();
121+
if (cookieManager != null) {
122+
cookieManager.removeExpiredCookie();
123+
}
112124
mCookieSaver.persistCookies();
113125
}
114126
}
115127

116128
private void addCookies(final String url, final List<String> cookies) {
129+
final CookieManager cookieManager = getCookieManager();
130+
if (cookieManager == null) return;
131+
117132
if (USES_LEGACY_STORE) {
118133
runInBackground(
119134
new Runnable() {
120135
@Override
121136
public void run() {
122137
for (String cookie : cookies) {
123-
getCookieManager().setCookie(url, cookie);
138+
cookieManager.setCookie(url, cookie);
124139
}
125140
mCookieSaver.onCookiesModified();
126141
}
@@ -129,14 +144,17 @@ public void run() {
129144
for (String cookie : cookies) {
130145
addCookieAsync(url, cookie);
131146
}
132-
getCookieManager().flush();
147+
cookieManager.flush();
133148
mCookieSaver.onCookiesModified();
134149
}
135150
}
136151

137152
@TargetApi(21)
138153
private void addCookieAsync(String url, String cookie) {
139-
getCookieManager().setCookie(url, cookie, null);
154+
CookieManager cookieManager = getCookieManager();
155+
if (cookieManager != null) {
156+
cookieManager.setCookie(url, cookie, null);
157+
}
140158
}
141159

142160
private static boolean isCookieHeader(String name) {
@@ -156,10 +174,15 @@ protected void doInBackgroundGuarded(Void... params) {
156174
* Instantiating CookieManager in KitKat+ will load the Chromium task taking a 100ish ms so we
157175
* do it lazily to make sure it's done on a background thread as needed.
158176
*/
159-
private CookieManager getCookieManager() {
177+
private @Nullable CookieManager getCookieManager() {
160178
if (mCookieManager == null) {
161179
possiblyWorkaroundSyncManager(mContext);
162-
mCookieManager = CookieManager.getInstance();
180+
try {
181+
mCookieManager = CookieManager.getInstance();
182+
} catch (IllegalArgumentException ex) {
183+
// https://bugs.chromium.org/p/chromium/issues/detail?id=559720
184+
return null;
185+
}
163186

164187
if (USES_LEGACY_STORE) {
165188
mCookieManager.removeExpiredCookie();
@@ -228,7 +251,10 @@ public void run() {
228251

229252
@TargetApi(21)
230253
private void flush() {
231-
getCookieManager().flush();
254+
CookieManager cookieManager = getCookieManager();
255+
if (cookieManager != null) {
256+
cookieManager.flush();
257+
}
232258
}
233259
}
234260
}

0 commit comments

Comments
 (0)