Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Side by Side Diff: android_webview/native/cookie_manager.cc

Issue 273873003: Adds Asynchronous APIs to CookieManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed up some details. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698