OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "android_webview/native/cookie_manager.h" | 5 #include "android_webview/native/cookie_manager.h" |
6 | 6 |
7 #include "android_webview/browser/aw_browser_context.h" | 7 #include "android_webview/browser/aw_browser_context.h" |
8 #include "android_webview/browser/aw_cookie_access_policy.h" | 8 #include "android_webview/browser/aw_cookie_access_policy.h" |
9 #include "android_webview/browser/net/init_native_callback.h" | 9 #include "android_webview/browser/net/init_native_callback.h" |
10 #include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h" | 10 #include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h" |
(...skipping 17 matching lines...) Expand all Loading... | |
28 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
29 #include "content/public/browser/cookie_crypto_delegate.h" | 29 #include "content/public/browser/cookie_crypto_delegate.h" |
30 #include "content/public/browser/cookie_store_factory.h" | 30 #include "content/public/browser/cookie_store_factory.h" |
31 #include "content/public/common/url_constants.h" | 31 #include "content/public/common/url_constants.h" |
32 #include "jni/AwCookieManager_jni.h" | 32 #include "jni/AwCookieManager_jni.h" |
33 #include "net/cookies/cookie_monster.h" | 33 #include "net/cookies/cookie_monster.h" |
34 #include "net/cookies/cookie_options.h" | 34 #include "net/cookies/cookie_options.h" |
35 #include "net/url_request/url_request_context.h" | 35 #include "net/url_request/url_request_context.h" |
36 | 36 |
37 using base::FilePath; | 37 using base::FilePath; |
38 using base::WaitableEvent; | |
38 using base::android::ConvertJavaStringToUTF8; | 39 using base::android::ConvertJavaStringToUTF8; |
39 using base::android::ConvertJavaStringToUTF16; | 40 using base::android::ConvertJavaStringToUTF16; |
41 using base::android::ScopedJavaGlobalRef; | |
40 using content::BrowserThread; | 42 using content::BrowserThread; |
41 using net::CookieList; | 43 using net::CookieList; |
42 using net::CookieMonster; | 44 using net::CookieMonster; |
43 | 45 |
44 // In the future, we may instead want to inject an explicit CookieStore | 46 // In the future, we may instead want to inject an explicit CookieStore |
45 // dependency into this object during process initialization to avoid | 47 // dependency into this object during process initialization to avoid |
46 // depending on the URLRequestContext. | 48 // depending on the URLRequestContext. |
47 // See issue http://crbug.com/157683 | 49 // See issue http://crbug.com/157683 |
48 | 50 |
49 // All functions on the CookieManager can be called from any thread, including | 51 // On the CookieManager methods without a callback and methods with a callback |
50 // threads without a message loop. BrowserThread::IO is used to call methods | 52 // when that callback is null can be called from any thread, including threads |
51 // on CookieMonster that needs to be called, and called back, on a chrome | 53 // without a message loop. Methods with a non-null callback must be called on |
52 // thread. | 54 // a thread with a running message loop. |
53 | 55 |
54 namespace android_webview { | 56 namespace android_webview { |
55 | 57 |
56 namespace { | 58 namespace { |
57 | 59 |
60 typedef base::Callback<void(bool)> BoolCallback; | |
61 typedef base::Callback<void(int)> IntCallback; | |
62 | |
63 // Holds a Java BooleanCookieCallback, knows how to invoke it and turn it | |
64 // into a base callback. | |
65 class BoolCookieCallbackHolder { | |
66 public: | |
67 BoolCookieCallbackHolder(JNIEnv* env, jobject callback) { | |
68 callback_.Reset(env, callback); | |
69 } | |
70 | |
71 void Invoke(bool result) { | |
72 if (!callback_.is_null()) { | |
73 JNIEnv* env = base::android::AttachCurrentThread(); | |
74 Java_AwCookieManager_invokeBooleanCookieCallback( | |
75 env, callback_.obj(), result); | |
76 } | |
77 } | |
78 | |
79 static BoolCallback ConvertToCallback( | |
80 scoped_ptr<BoolCookieCallbackHolder> me) { | |
81 return base::Bind(&BoolCookieCallbackHolder::Invoke, | |
82 base::Owned(me.release())); | |
83 } | |
84 | |
85 private: | |
86 ScopedJavaGlobalRef<jobject> callback_; | |
87 DISALLOW_COPY_AND_ASSIGN(BoolCookieCallbackHolder); | |
88 }; | |
89 | |
90 // Construct a closure which signals a waitable event if and when the closure | |
91 // is called the waitable event must still exist. | |
92 static base::Closure SignalEventClosure(WaitableEvent* completion) { | |
93 return base::Bind(&WaitableEvent::Signal, base::Unretained(completion)); | |
94 } | |
95 | |
96 static void DiscardBool(const base::Closure& f, bool b) { | |
97 f.Run(); | |
98 } | |
99 | |
100 static BoolCallback BoolCallbackAdapter(const base::Closure& f) { | |
101 return base::Bind(&DiscardBool, f); | |
102 } | |
103 | |
104 static void DiscardInt(const base::Closure& f, int i) { | |
105 f.Run(); | |
106 } | |
107 | |
108 static IntCallback IntCallbackAdapter(const base::Closure& f) { | |
109 return base::Bind(&DiscardInt, f); | |
110 } | |
111 | |
58 // Are cookies allowed for file:// URLs by default? | 112 // Are cookies allowed for file:// URLs by default? |
59 const bool kDefaultFileSchemeAllowed = false; | 113 const bool kDefaultFileSchemeAllowed = false; |
60 | 114 |
61 void ImportLegacyCookieStore(const FilePath& cookie_store_path) { | 115 void ImportLegacyCookieStore(const FilePath& cookie_store_path) { |
62 // We use the old cookie store to create the new cookie store only if the | 116 // We use the old cookie store to create the new cookie store only if the |
63 // new cookie store does not exist. | 117 // new cookie store does not exist. |
64 if (base::PathExists(cookie_store_path)) | 118 if (base::PathExists(cookie_store_path)) |
65 return; | 119 return; |
66 | 120 |
67 // WebViewClassic gets the database path from Context and appends a | 121 // WebViewClassic gets the database path from Context and appends a |
(...skipping 23 matching lines...) Expand all Loading... | |
91 public: | 145 public: |
92 static CookieManager* GetInstance(); | 146 static CookieManager* GetInstance(); |
93 | 147 |
94 scoped_refptr<net::CookieStore> CreateBrowserThreadCookieStore( | 148 scoped_refptr<net::CookieStore> CreateBrowserThreadCookieStore( |
95 AwBrowserContext* browser_context); | 149 AwBrowserContext* browser_context); |
96 | 150 |
97 void SetAcceptCookie(bool accept); | 151 void SetAcceptCookie(bool accept); |
98 bool AcceptCookie(); | 152 bool AcceptCookie(); |
99 void SetAcceptThirdPartyCookie(bool accept); | 153 void SetAcceptThirdPartyCookie(bool accept); |
100 bool AcceptThirdPartyCookie(); | 154 bool AcceptThirdPartyCookie(); |
101 void SetCookie(const GURL& host, const std::string& cookie_value); | 155 void SetCookie(const GURL& host, |
156 const std::string& cookie_value, | |
157 scoped_ptr<BoolCookieCallbackHolder> callback); | |
158 void SetCookieSync(const GURL& host, | |
159 const std::string& cookie_value); | |
102 std::string GetCookie(const GURL& host); | 160 std::string GetCookie(const GURL& host); |
103 void RemoveSessionCookie(); | 161 void RemoveSessionCookies(scoped_ptr<BoolCookieCallbackHolder> callback); |
104 void RemoveAllCookie(); | 162 void RemoveAllCookies(scoped_ptr<BoolCookieCallbackHolder> callback); |
105 void RemoveExpiredCookie(); | 163 void RemoveAllCookiesSync(); |
164 void RemoveSessionCookiesSync(); | |
165 void RemoveExpiredCookies(); | |
106 void FlushCookieStore(); | 166 void FlushCookieStore(); |
107 bool HasCookies(); | 167 bool HasCookies(); |
108 bool AllowFileSchemeCookies(); | 168 bool AllowFileSchemeCookies(); |
109 void SetAcceptFileSchemeCookies(bool accept); | 169 void SetAcceptFileSchemeCookies(bool accept); |
110 | 170 |
111 private: | 171 private: |
112 friend struct base::DefaultLazyInstanceTraits<CookieManager>; | 172 friend struct base::DefaultLazyInstanceTraits<CookieManager>; |
113 | 173 |
114 CookieManager(); | 174 CookieManager(); |
115 ~CookieManager(); | 175 ~CookieManager(); |
116 | 176 |
117 typedef base::Callback<void(base::WaitableEvent*)> CookieTask; | 177 void ExecCookieTaskSync(const base::Callback<void(BoolCallback)>& task); |
118 void ExecCookieTask(const CookieTask& task); | 178 void ExecCookieTaskSync(const base::Callback<void(IntCallback)>& task); |
179 void ExecCookieTaskSync(const base::Callback<void(base::Closure)>& task); | |
180 void ExecCookieTask(const base::Closure& task); | |
119 | 181 |
120 void SetCookieAsyncHelper( | 182 void SetCookieHelper( |
121 const GURL& host, | 183 const GURL& host, |
122 const std::string& value, | 184 const std::string& value, |
123 base::WaitableEvent* completion); | 185 BoolCallback callback); |
124 void SetCookieCompleted(base::WaitableEvent* completion, bool success); | |
125 | 186 |
126 void GetCookieValueAsyncHelper( | 187 void GetCookieValueAsyncHelper(const GURL& host, |
127 const GURL& host, | 188 std::string* result, |
128 std::string* result, | 189 base::Closure complete); |
129 base::WaitableEvent* completion); | 190 void GetCookieValueCompleted(base::Closure complete, |
130 void GetCookieValueCompleted(base::WaitableEvent* completion, | |
131 std::string* result, | 191 std::string* result, |
132 const std::string& value); | 192 const std::string& value); |
133 | 193 |
134 void RemoveSessionCookieAsyncHelper(base::WaitableEvent* completion); | 194 void RemoveSessionCookiesHelper(BoolCallback callback); |
135 void RemoveAllCookieAsyncHelper(base::WaitableEvent* completion); | 195 void RemoveAllCookiesHelper(BoolCallback callback); |
136 void RemoveCookiesCompleted(base::WaitableEvent* completion, int num_deleted); | 196 void RemoveCookiesCompleted(BoolCallback callback, int num_deleted); |
137 | 197 |
138 void FlushCookieStoreAsyncHelper(base::WaitableEvent* completion); | 198 void FlushCookieStoreAsyncHelper(base::Closure complete); |
139 | 199 |
140 void HasCookiesAsyncHelper(bool* result, | 200 void HasCookiesAsyncHelper(bool* result, base::Closure complete); |
141 base::WaitableEvent* completion); | 201 void HasCookiesCompleted(base::Closure complete, |
142 void HasCookiesCompleted(base::WaitableEvent* completion, | |
143 bool* result, | 202 bool* result, |
144 const CookieList& cookies); | 203 const CookieList& cookies); |
145 | 204 |
146 void CreateCookieMonster( | 205 void CreateCookieMonster( |
147 const FilePath& user_data_dir, | 206 const FilePath& user_data_dir, |
148 const scoped_refptr<base::SequencedTaskRunner>& client_task_runner, | 207 const scoped_refptr<base::SequencedTaskRunner>& client_task_runner, |
149 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner); | 208 const scoped_refptr<base::SequencedTaskRunner>& background_task_runner); |
150 void EnsureCookieMonsterExistsLocked(); | 209 void EnsureCookieMonsterExistsLocked(); |
151 bool AllowFileSchemeCookiesLocked(); | 210 bool AllowFileSchemeCookiesLocked(); |
152 void SetAcceptFileSchemeCookiesLocked(bool accept); | 211 void SetAcceptFileSchemeCookiesLocked(bool accept); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
214 cookie_monster_proxy_ = cookie_monster_client_thread_->message_loop_proxy(); | 273 cookie_monster_proxy_ = cookie_monster_client_thread_->message_loop_proxy(); |
215 cookie_monster_backend_thread_.reset( | 274 cookie_monster_backend_thread_.reset( |
216 new base::Thread("CookieMonsterBackend")); | 275 new base::Thread("CookieMonsterBackend")); |
217 cookie_monster_backend_thread_->Start(); | 276 cookie_monster_backend_thread_->Start(); |
218 | 277 |
219 CreateCookieMonster(user_data_dir, | 278 CreateCookieMonster(user_data_dir, |
220 cookie_monster_proxy_, | 279 cookie_monster_proxy_, |
221 cookie_monster_backend_thread_->message_loop_proxy()); | 280 cookie_monster_backend_thread_->message_loop_proxy()); |
222 } | 281 } |
223 | 282 |
224 // Executes the |task| on the |cookie_monster_proxy_| message loop. | 283 // Executes the |task| on the |cookie_monster_proxy_| message loop and |
225 void CookieManager::ExecCookieTask(const CookieTask& task) { | 284 // waits for it to complete before returning. |
226 base::WaitableEvent completion(false, false); | |
227 base::AutoLock lock(cookie_monster_lock_); | |
228 | 285 |
229 EnsureCookieMonsterExistsLocked(); | 286 // To execute a CookieTask synchronously you must arrange for Signal to be |
287 // called on the waitable event at some point. You can call the bool or int | |
288 // versions of ExecCookieTaskSync, these will supply the caller with a dummy | |
289 // callback which takes an int/bool, throws it away and calls Signal. | |
290 // Alternatively you can call the version which supplies a Closure in which | |
291 // case you must call Run on it when you want the unblock the calling code. | |
230 | 292 |
231 cookie_monster_proxy_->PostTask(FROM_HERE, base::Bind(task, &completion)); | 293 // Ignore a bool callback. |
232 | 294 void CookieManager::ExecCookieTaskSync( |
233 // We always wait for the posted task to complete, even when it doesn't return | 295 const base::Callback<void(BoolCallback)>& task) { |
234 // a value, because previous versions of the CookieManager API were | 296 WaitableEvent completion(false, false); |
235 // synchronous in most/all cases and the caller may be relying on this. | 297 ExecCookieTask( |
298 base::Bind(task, BoolCallbackAdapter(SignalEventClosure(&completion)))); | |
236 ScopedAllowWaitForLegacyWebViewApi wait; | 299 ScopedAllowWaitForLegacyWebViewApi wait; |
237 completion.Wait(); | 300 completion.Wait(); |
238 } | 301 } |
239 | 302 |
303 // Ignore an int callback. | |
304 void CookieManager::ExecCookieTaskSync( | |
305 const base::Callback<void(IntCallback)>& task) { | |
306 WaitableEvent completion(false, false); | |
307 ExecCookieTask( | |
308 base::Bind(task, IntCallbackAdapter(SignalEventClosure(&completion)))); | |
309 ScopedAllowWaitForLegacyWebViewApi wait; | |
310 completion.Wait(); | |
311 } | |
312 | |
313 // Call the supplied closure when you want to signal that the blocked code can | |
314 // continue. | |
315 void CookieManager::ExecCookieTaskSync( | |
316 const base::Callback<void(base::Closure)>& task) { | |
317 WaitableEvent completion(false, false); | |
318 ExecCookieTask(base::Bind(task, SignalEventClosure(&completion))); | |
319 ScopedAllowWaitForLegacyWebViewApi wait; | |
320 completion.Wait(); | |
321 } | |
322 | |
323 // Executes the |task| on the |cookie_monster_proxy_| message loop. | |
324 void CookieManager::ExecCookieTask(const base::Closure& task) { | |
325 base::AutoLock lock(cookie_monster_lock_); | |
326 EnsureCookieMonsterExistsLocked(); | |
327 cookie_monster_proxy_->PostTask(FROM_HERE, task); | |
328 } | |
329 | |
240 scoped_refptr<net::CookieStore> CookieManager::CreateBrowserThreadCookieStore( | 330 scoped_refptr<net::CookieStore> CookieManager::CreateBrowserThreadCookieStore( |
241 AwBrowserContext* browser_context) { | 331 AwBrowserContext* browser_context) { |
242 base::AutoLock lock(cookie_monster_lock_); | 332 base::AutoLock lock(cookie_monster_lock_); |
243 | 333 |
244 if (cookie_monster_client_thread_) { | 334 if (cookie_monster_client_thread_) { |
245 // We created a cookie monster already on its own threads; we'll just keep | 335 // We created a cookie monster already on its own threads; we'll just keep |
246 // using it rather than creating one on the normal Chromium threads. | 336 // using it rather than creating one on the normal Chromium threads. |
247 // CookieMonster is threadsafe, so this is fine. | 337 // CookieMonster is threadsafe, so this is fine. |
248 return cookie_monster_; | 338 return cookie_monster_; |
249 } | 339 } |
(...skipping 26 matching lines...) Expand all Loading... | |
276 } | 366 } |
277 | 367 |
278 void CookieManager::SetAcceptThirdPartyCookie(bool accept) { | 368 void CookieManager::SetAcceptThirdPartyCookie(bool accept) { |
279 AwCookieAccessPolicy::GetInstance()->SetThirdPartyAllowAccess(accept); | 369 AwCookieAccessPolicy::GetInstance()->SetThirdPartyAllowAccess(accept); |
280 } | 370 } |
281 | 371 |
282 bool CookieManager::AcceptThirdPartyCookie() { | 372 bool CookieManager::AcceptThirdPartyCookie() { |
283 return AwCookieAccessPolicy::GetInstance()->GetThirdPartyAllowAccess(); | 373 return AwCookieAccessPolicy::GetInstance()->GetThirdPartyAllowAccess(); |
284 } | 374 } |
285 | 375 |
286 void CookieManager::SetCookie(const GURL& host, | 376 void CookieManager::SetCookie( |
377 const GURL& host, | |
378 const std::string& cookie_value, | |
379 scoped_ptr<BoolCookieCallbackHolder> callback_holder) { | |
380 BoolCallback callback = | |
381 BoolCookieCallbackHolder::ConvertToCallback(callback_holder.Pass()); | |
382 ExecCookieTask(base::Bind(&CookieManager::SetCookieHelper, | |
383 base::Unretained(this), | |
384 host, | |
385 cookie_value, | |
386 callback)); | |
387 } | |
388 | |
389 void CookieManager::SetCookieSync(const GURL& host, | |
287 const std::string& cookie_value) { | 390 const std::string& cookie_value) { |
288 ExecCookieTask(base::Bind(&CookieManager::SetCookieAsyncHelper, | 391 ExecCookieTaskSync(base::Bind(&CookieManager::SetCookieHelper, |
289 base::Unretained(this), | 392 base::Unretained(this), |
290 host, | 393 host, |
291 cookie_value)); | 394 cookie_value)); |
292 } | 395 } |
293 | 396 |
294 void CookieManager::SetCookieAsyncHelper( | 397 void CookieManager::SetCookieHelper( |
295 const GURL& host, | 398 const GURL& host, |
296 const std::string& value, | 399 const std::string& value, |
297 base::WaitableEvent* completion) { | 400 const BoolCallback callback) { |
298 net::CookieOptions options; | 401 net::CookieOptions options; |
299 options.set_include_httponly(); | 402 options.set_include_httponly(); |
300 | 403 |
301 cookie_monster_->SetCookieWithOptionsAsync( | 404 cookie_monster_->SetCookieWithOptionsAsync( |
302 host, value, options, | 405 host, value, options, callback); |
303 base::Bind(&CookieManager::SetCookieCompleted, | |
304 base::Unretained(this), | |
305 completion)); | |
306 } | |
307 | |
308 void CookieManager::SetCookieCompleted(base::WaitableEvent* completion, | |
309 bool success) { | |
310 // The CookieManager API does not return a value for SetCookie, | |
311 // so we don't need to propagate the |success| value back to the caller. | |
312 completion->Signal(); | |
313 } | 406 } |
314 | 407 |
315 std::string CookieManager::GetCookie(const GURL& host) { | 408 std::string CookieManager::GetCookie(const GURL& host) { |
316 std::string cookie_value; | 409 std::string cookie_value; |
317 ExecCookieTask(base::Bind(&CookieManager::GetCookieValueAsyncHelper, | 410 ExecCookieTaskSync(base::Bind(&CookieManager::GetCookieValueAsyncHelper, |
318 base::Unretained(this), | 411 base::Unretained(this), |
319 host, | 412 host, |
320 &cookie_value)); | 413 &cookie_value)); |
321 | |
322 return cookie_value; | 414 return cookie_value; |
323 } | 415 } |
324 | 416 |
325 void CookieManager::GetCookieValueAsyncHelper( | 417 void CookieManager::GetCookieValueAsyncHelper( |
326 const GURL& host, | 418 const GURL& host, |
327 std::string* result, | 419 std::string* result, |
328 base::WaitableEvent* completion) { | 420 base::Closure complete) { |
329 net::CookieOptions options; | 421 net::CookieOptions options; |
330 options.set_include_httponly(); | 422 options.set_include_httponly(); |
331 | 423 |
332 cookie_monster_->GetCookiesWithOptionsAsync( | 424 cookie_monster_->GetCookiesWithOptionsAsync( |
333 host, | 425 host, |
334 options, | 426 options, |
335 base::Bind(&CookieManager::GetCookieValueCompleted, | 427 base::Bind(&CookieManager::GetCookieValueCompleted, |
336 base::Unretained(this), | 428 base::Unretained(this), |
337 completion, | 429 complete, |
338 result)); | 430 result)); |
339 } | 431 } |
340 | 432 |
341 void CookieManager::GetCookieValueCompleted(base::WaitableEvent* completion, | 433 void CookieManager::GetCookieValueCompleted(base::Closure complete, |
342 std::string* result, | 434 std::string* result, |
343 const std::string& value) { | 435 const std::string& value) { |
344 *result = value; | 436 *result = value; |
345 completion->Signal(); | 437 complete.Run(); |
346 } | 438 } |
347 | 439 |
348 void CookieManager::RemoveSessionCookie() { | 440 void CookieManager::RemoveSessionCookies( |
349 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookieAsyncHelper, | 441 scoped_ptr<BoolCookieCallbackHolder> callback_holder) { |
442 BoolCallback callback = | |
443 BoolCookieCallbackHolder::ConvertToCallback(callback_holder.Pass()); | |
444 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookiesHelper, | |
445 base::Unretained(this), | |
446 callback)); | |
447 } | |
448 | |
449 void CookieManager::RemoveSessionCookiesSync() { | |
450 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveSessionCookiesHelper, | |
350 base::Unretained(this))); | 451 base::Unretained(this))); |
351 } | 452 } |
352 | 453 |
353 void CookieManager::RemoveSessionCookieAsyncHelper( | 454 void CookieManager::RemoveSessionCookiesHelper( |
354 base::WaitableEvent* completion) { | 455 BoolCallback callback) { |
355 cookie_monster_->DeleteSessionCookiesAsync( | 456 cookie_monster_->DeleteSessionCookiesAsync( |
356 base::Bind(&CookieManager::RemoveCookiesCompleted, | 457 base::Bind(&CookieManager::RemoveCookiesCompleted, |
357 base::Unretained(this), | 458 base::Unretained(this), |
358 completion)); | 459 callback)); |
359 } | 460 } |
360 | 461 |
361 void CookieManager::RemoveCookiesCompleted(base::WaitableEvent* completion, | 462 void CookieManager::RemoveCookiesCompleted( |
362 int num_deleted) { | 463 BoolCallback callback, |
363 // The CookieManager API does not return a value for removeSessionCookie or | 464 int num_deleted) { |
364 // removeAllCookie, so we don't need to propagate the |num_deleted| value back | 465 callback.Run(num_deleted > 0); |
365 // to the caller. | |
366 completion->Signal(); | |
367 } | 466 } |
368 | 467 |
369 void CookieManager::RemoveAllCookie() { | 468 void CookieManager::RemoveAllCookies( |
370 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookieAsyncHelper, | 469 scoped_ptr<BoolCookieCallbackHolder> callback_holder) { |
470 BoolCallback callback = | |
471 BoolCookieCallbackHolder::ConvertToCallback(callback_holder.Pass()); | |
472 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookiesHelper, | |
473 base::Unretained(this), | |
474 callback)); | |
475 } | |
476 | |
477 void CookieManager::RemoveAllCookiesSync() { | |
478 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveAllCookiesHelper, | |
371 base::Unretained(this))); | 479 base::Unretained(this))); |
372 } | 480 } |
373 | 481 |
374 void CookieManager::RemoveAllCookieAsyncHelper( | 482 void CookieManager::RemoveAllCookiesHelper( |
375 base::WaitableEvent* completion) { | 483 const BoolCallback callback) { |
376 cookie_monster_->DeleteAllAsync( | 484 cookie_monster_->DeleteAllAsync( |
377 base::Bind(&CookieManager::RemoveCookiesCompleted, | 485 base::Bind(&CookieManager::RemoveCookiesCompleted, |
378 base::Unretained(this), | 486 base::Unretained(this), |
379 completion)); | 487 callback)); |
380 } | 488 } |
381 | 489 |
382 void CookieManager::RemoveExpiredCookie() { | 490 void CookieManager::RemoveExpiredCookies() { |
383 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. | 491 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. |
384 HasCookies(); | 492 HasCookies(); |
385 } | 493 } |
386 | 494 |
387 void CookieManager::FlushCookieStoreAsyncHelper( | 495 void CookieManager::FlushCookieStore() { |
388 base::WaitableEvent* completion) { | 496 ExecCookieTaskSync(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, |
389 cookie_monster_->FlushStore(base::Bind(&base::WaitableEvent::Signal, | 497 base::Unretained(this))); |
390 base::Unretained(completion))); | |
391 } | 498 } |
392 | 499 |
393 void CookieManager::FlushCookieStore() { | 500 void CookieManager::FlushCookieStoreAsyncHelper( |
394 ExecCookieTask(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, | 501 base::Closure complete) { |
395 base::Unretained(this))); | 502 cookie_monster_->FlushStore(complete); |
396 } | 503 } |
397 | 504 |
398 bool CookieManager::HasCookies() { | 505 bool CookieManager::HasCookies() { |
399 bool has_cookies; | 506 bool has_cookies; |
400 ExecCookieTask(base::Bind(&CookieManager::HasCookiesAsyncHelper, | 507 ExecCookieTaskSync(base::Bind(&CookieManager::HasCookiesAsyncHelper, |
401 base::Unretained(this), | 508 base::Unretained(this), |
402 &has_cookies)); | 509 &has_cookies)); |
403 return has_cookies; | 510 return has_cookies; |
404 } | 511 } |
405 | 512 |
406 // TODO(kristianm): Simplify this, copying the entire list around | 513 // TODO(kristianm): Simplify this, copying the entire list around |
407 // should not be needed. | 514 // should not be needed. |
408 void CookieManager::HasCookiesAsyncHelper(bool* result, | 515 void CookieManager::HasCookiesAsyncHelper(bool* result, |
409 base::WaitableEvent* completion) { | 516 base::Closure complete) { |
mkosiba (inactive)
2014/05/19 14:34:15
nit: indent
hjd
2014/05/19 15:12:52
Done.
| |
410 cookie_monster_->GetAllCookiesAsync( | 517 cookie_monster_->GetAllCookiesAsync( |
411 base::Bind(&CookieManager::HasCookiesCompleted, | 518 base::Bind(&CookieManager::HasCookiesCompleted, |
412 base::Unretained(this), | 519 base::Unretained(this), |
413 completion, | 520 complete, |
414 result)); | 521 result)); |
415 } | 522 } |
416 | 523 |
417 void CookieManager::HasCookiesCompleted(base::WaitableEvent* completion, | 524 void CookieManager::HasCookiesCompleted(base::Closure complete, |
418 bool* result, | 525 bool* result, |
419 const CookieList& cookies) { | 526 const CookieList& cookies) { |
420 *result = cookies.size() != 0; | 527 *result = cookies.size() != 0; |
421 completion->Signal(); | 528 complete.Run(); |
422 } | 529 } |
423 | 530 |
424 bool CookieManager::AllowFileSchemeCookies() { | 531 bool CookieManager::AllowFileSchemeCookies() { |
425 base::AutoLock lock(cookie_monster_lock_); | 532 base::AutoLock lock(cookie_monster_lock_); |
426 EnsureCookieMonsterExistsLocked(); | 533 EnsureCookieMonsterExistsLocked(); |
427 return AllowFileSchemeCookiesLocked(); | 534 return AllowFileSchemeCookiesLocked(); |
428 } | 535 } |
429 | 536 |
430 bool CookieManager::AllowFileSchemeCookiesLocked() { | 537 bool CookieManager::AllowFileSchemeCookiesLocked() { |
431 return cookie_monster_->IsCookieableScheme(content::kFileScheme); | 538 return cookie_monster_->IsCookieableScheme(content::kFileScheme); |
(...skipping 28 matching lines...) Expand all Loading... | |
460 static void SetAcceptThirdPartyCookie(JNIEnv* env, | 567 static void SetAcceptThirdPartyCookie(JNIEnv* env, |
461 jobject obj, | 568 jobject obj, |
462 jboolean accept) { | 569 jboolean accept) { |
463 CookieManager::GetInstance()->SetAcceptThirdPartyCookie(accept); | 570 CookieManager::GetInstance()->SetAcceptThirdPartyCookie(accept); |
464 } | 571 } |
465 | 572 |
466 static jboolean AcceptThirdPartyCookie(JNIEnv* env, jobject obj) { | 573 static jboolean AcceptThirdPartyCookie(JNIEnv* env, jobject obj) { |
467 return CookieManager::GetInstance()->AcceptThirdPartyCookie(); | 574 return CookieManager::GetInstance()->AcceptThirdPartyCookie(); |
468 } | 575 } |
469 | 576 |
470 static void SetCookie(JNIEnv* env, jobject obj, jstring url, jstring value) { | 577 static void SetCookie(JNIEnv* env, |
578 jobject obj, | |
579 jstring url, | |
580 jstring value, | |
581 jobject java_callback) { | |
582 GURL host(ConvertJavaStringToUTF16(env, url)); | |
583 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); | |
584 scoped_ptr<BoolCookieCallbackHolder> callback( | |
585 new BoolCookieCallbackHolder(env, java_callback)); | |
586 CookieManager::GetInstance()->SetCookie(host, cookie_value, callback.Pass()); | |
587 } | |
588 | |
589 static void SetCookieSync(JNIEnv* env, | |
590 jobject obj, | |
591 jstring url, | |
592 jstring value) { | |
471 GURL host(ConvertJavaStringToUTF16(env, url)); | 593 GURL host(ConvertJavaStringToUTF16(env, url)); |
472 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); | 594 std::string cookie_value(ConvertJavaStringToUTF8(env, value)); |
473 | 595 |
474 CookieManager::GetInstance()->SetCookie(host, cookie_value); | 596 CookieManager::GetInstance()->SetCookieSync(host, cookie_value); |
475 } | 597 } |
476 | 598 |
477 static jstring GetCookie(JNIEnv* env, jobject obj, jstring url) { | 599 static jstring GetCookie(JNIEnv* env, jobject obj, jstring url) { |
478 GURL host(ConvertJavaStringToUTF16(env, url)); | 600 GURL host(ConvertJavaStringToUTF16(env, url)); |
479 | 601 |
480 return base::android::ConvertUTF8ToJavaString( | 602 return base::android::ConvertUTF8ToJavaString( |
481 env, | 603 env, |
482 CookieManager::GetInstance()->GetCookie(host)).Release(); | 604 CookieManager::GetInstance()->GetCookie(host)).Release(); |
483 } | 605 } |
484 | 606 |
485 static void RemoveSessionCookie(JNIEnv* env, jobject obj) { | 607 static void RemoveSessionCookies(JNIEnv* env, |
486 CookieManager::GetInstance()->RemoveSessionCookie(); | 608 jobject obj, |
609 jobject java_callback) { | |
610 scoped_ptr<BoolCookieCallbackHolder> callback( | |
611 new BoolCookieCallbackHolder(env, java_callback)); | |
612 CookieManager::GetInstance()->RemoveSessionCookies(callback.Pass()); | |
487 } | 613 } |
488 | 614 |
489 static void RemoveAllCookie(JNIEnv* env, jobject obj) { | 615 static void RemoveSessionCookiesSync(JNIEnv* env, jobject obj) { |
490 CookieManager::GetInstance()->RemoveAllCookie(); | 616 CookieManager::GetInstance()->RemoveSessionCookiesSync(); |
491 } | 617 } |
492 | 618 |
493 static void RemoveExpiredCookie(JNIEnv* env, jobject obj) { | 619 static void RemoveAllCookies(JNIEnv* env, jobject obj, jobject java_callback) { |
494 CookieManager::GetInstance()->RemoveExpiredCookie(); | 620 scoped_ptr<BoolCookieCallbackHolder> callback( |
621 new BoolCookieCallbackHolder(env, java_callback)); | |
622 CookieManager::GetInstance()->RemoveAllCookies(callback.Pass()); | |
623 } | |
624 | |
625 static void RemoveAllCookiesSync(JNIEnv* env, jobject obj) { | |
626 CookieManager::GetInstance()->RemoveAllCookiesSync(); | |
627 } | |
628 | |
629 static void RemoveExpiredCookies(JNIEnv* env, jobject obj) { | |
630 CookieManager::GetInstance()->RemoveExpiredCookies(); | |
495 } | 631 } |
496 | 632 |
497 static void FlushCookieStore(JNIEnv* env, jobject obj) { | 633 static void FlushCookieStore(JNIEnv* env, jobject obj) { |
498 CookieManager::GetInstance()->FlushCookieStore(); | 634 CookieManager::GetInstance()->FlushCookieStore(); |
499 } | 635 } |
500 | 636 |
501 static jboolean HasCookies(JNIEnv* env, jobject obj) { | 637 static jboolean HasCookies(JNIEnv* env, jobject obj) { |
502 return CookieManager::GetInstance()->HasCookies(); | 638 return CookieManager::GetInstance()->HasCookies(); |
503 } | 639 } |
504 | 640 |
(...skipping 10 matching lines...) Expand all Loading... | |
515 AwBrowserContext* browser_context) { | 651 AwBrowserContext* browser_context) { |
516 return CookieManager::GetInstance()->CreateBrowserThreadCookieStore( | 652 return CookieManager::GetInstance()->CreateBrowserThreadCookieStore( |
517 browser_context); | 653 browser_context); |
518 } | 654 } |
519 | 655 |
520 bool RegisterCookieManager(JNIEnv* env) { | 656 bool RegisterCookieManager(JNIEnv* env) { |
521 return RegisterNativesImpl(env); | 657 return RegisterNativesImpl(env); |
522 } | 658 } |
523 | 659 |
524 } // android_webview namespace | 660 } // android_webview namespace |
OLD | NEW |