@@ -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