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

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

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 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/browser/cookie_manager.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "android_webview/browser/aw_browser_context.h" 11 #include "android_webview/browser/aw_browser_context.h"
12 #include "android_webview/browser/aw_cookie_access_policy.h" 12 #include "android_webview/browser/aw_cookie_access_policy.h"
13 #include "android_webview/browser/net/init_native_callback.h" 13 #include "android_webview/browser/net/init_native_callback.h"
14 #include "base/android/jni_string.h" 14 #include "base/android/jni_string.h"
15 #include "base/android/path_utils.h" 15 #include "base/android/path_utils.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 CookieManager::CookieManager() 245 CookieManager::CookieManager()
246 : accept_file_scheme_cookies_(kDefaultFileSchemeAllowed), 246 : accept_file_scheme_cookies_(kDefaultFileSchemeAllowed),
247 cookie_store_created_(false), 247 cookie_store_created_(false),
248 cookie_store_client_thread_("CookieMonsterClient"), 248 cookie_store_client_thread_("CookieMonsterClient"),
249 cookie_store_backend_thread_("CookieMonsterBackend") { 249 cookie_store_backend_thread_("CookieMonsterBackend") {
250 cookie_store_client_thread_.Start(); 250 cookie_store_client_thread_.Start();
251 cookie_store_backend_thread_.Start(); 251 cookie_store_backend_thread_.Start();
252 cookie_store_task_runner_ = cookie_store_client_thread_.task_runner(); 252 cookie_store_task_runner_ = cookie_store_client_thread_.task_runner();
253 } 253 }
254 254
255 CookieManager::~CookieManager() { 255 CookieManager::~CookieManager() {}
256 }
257 256
258 // Executes the |task| on |cookie_store_task_runner_| and waits for it to 257 // Executes the |task| on |cookie_store_task_runner_| and waits for it to
259 // complete before returning. 258 // complete before returning.
260 // 259 //
261 // To execute a CookieTask synchronously you must arrange for Signal to be 260 // To execute a CookieTask synchronously you must arrange for Signal to be
262 // called on the waitable event at some point. You can call the bool or int 261 // called on the waitable event at some point. You can call the bool or int
263 // versions of ExecCookieTaskSync, these will supply the caller with a dummy 262 // versions of ExecCookieTaskSync, these will supply the caller with a dummy
264 // callback which takes an int/bool, throws it away and calls Signal. 263 // callback which takes an int/bool, throws it away and calls Signal.
265 // Alternatively you can call the version which supplies a Closure in which 264 // Alternatively you can call the version which supplies a Closure in which
266 // case you must call Run on it when you want the unblock the calling code. 265 // case you must call Run on it when you want the unblock the calling code.
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 return AwCookieAccessPolicy::GetInstance()->GetShouldAcceptCookies(); 358 return AwCookieAccessPolicy::GetInstance()->GetShouldAcceptCookies();
360 } 359 }
361 360
362 void CookieManager::SetCookie( 361 void CookieManager::SetCookie(
363 const GURL& host, 362 const GURL& host,
364 const std::string& cookie_value, 363 const std::string& cookie_value,
365 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { 364 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) {
366 BoolCallback callback = 365 BoolCallback callback =
367 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); 366 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder));
368 ExecCookieTask(base::Bind(&CookieManager::SetCookieHelper, 367 ExecCookieTask(base::Bind(&CookieManager::SetCookieHelper,
369 base::Unretained(this), 368 base::Unretained(this), host, cookie_value,
370 host,
371 cookie_value,
372 callback)); 369 callback));
373 } 370 }
374 371
375 void CookieManager::SetCookieSync(const GURL& host, 372 void CookieManager::SetCookieSync(const GURL& host,
376 const std::string& cookie_value) { 373 const std::string& cookie_value) {
377 ExecCookieTaskSync(base::Bind(&CookieManager::SetCookieHelper, 374 ExecCookieTaskSync(base::Bind(&CookieManager::SetCookieHelper,
378 base::Unretained(this), 375 base::Unretained(this), host, cookie_value));
379 host,
380 cookie_value));
381 } 376 }
382 377
383 void CookieManager::SetCookieHelper( 378 void CookieManager::SetCookieHelper(const GURL& host,
384 const GURL& host, 379 const std::string& value,
385 const std::string& value, 380 const BoolCallback callback) {
386 const BoolCallback callback) {
387 net::CookieOptions options; 381 net::CookieOptions options;
388 options.set_include_httponly(); 382 options.set_include_httponly();
389 383
390 // Log message for catching strict secure cookies related bugs. 384 // Log message for catching strict secure cookies related bugs.
391 // TODO(sgurun) temporary. Add UMA stats to monitor, and remove afterwards. 385 // TODO(sgurun) temporary. Add UMA stats to monitor, and remove afterwards.
392 if (host.is_valid() && 386 if (host.is_valid() &&
393 (!host.has_scheme() || host.SchemeIs(url::kHttpScheme))) { 387 (!host.has_scheme() || host.SchemeIs(url::kHttpScheme))) {
394 net::ParsedCookie parsed_cookie(value); 388 net::ParsedCookie parsed_cookie(value);
395 if (parsed_cookie.IsValid() && parsed_cookie.IsSecure()) { 389 if (parsed_cookie.IsValid() && parsed_cookie.IsSecure()) {
396 LOG(WARNING) << "Strict Secure Cookie policy does not allow setting a " 390 LOG(WARNING) << "Strict Secure Cookie policy does not allow setting a "
397 "secure cookie for " 391 "secure cookie for "
398 << host.spec(); 392 << host.spec();
399 GURL::Replacements replace_host; 393 GURL::Replacements replace_host;
400 replace_host.SetSchemeStr("https"); 394 replace_host.SetSchemeStr("https");
401 GURL new_host = host.ReplaceComponents(replace_host); 395 GURL new_host = host.ReplaceComponents(replace_host);
402 GetCookieStore()->SetCookieWithOptionsAsync(new_host, value, options, 396 GetCookieStore()->SetCookieWithOptionsAsync(new_host, value, options,
403 callback); 397 callback);
404 return; 398 return;
405 } 399 }
406 } 400 }
407 401
408 GetCookieStore()->SetCookieWithOptionsAsync(host, value, options, callback); 402 GetCookieStore()->SetCookieWithOptionsAsync(host, value, options, callback);
409 } 403 }
410 404
411 std::string CookieManager::GetCookie(const GURL& host) { 405 std::string CookieManager::GetCookie(const GURL& host) {
412 std::string cookie_value; 406 std::string cookie_value;
413 ExecCookieTaskSync(base::Bind(&CookieManager::GetCookieValueAsyncHelper, 407 ExecCookieTaskSync(base::Bind(&CookieManager::GetCookieValueAsyncHelper,
414 base::Unretained(this), 408 base::Unretained(this), host, &cookie_value));
415 host,
416 &cookie_value));
417 return cookie_value; 409 return cookie_value;
418 } 410 }
419 411
420 void CookieManager::GetCookieValueAsyncHelper( 412 void CookieManager::GetCookieValueAsyncHelper(const GURL& host,
421 const GURL& host, 413 std::string* result,
422 std::string* result, 414 base::Closure complete) {
423 base::Closure complete) {
424 net::CookieOptions options; 415 net::CookieOptions options;
425 options.set_include_httponly(); 416 options.set_include_httponly();
426 417
427 GetCookieStore()->GetCookiesWithOptionsAsync( 418 GetCookieStore()->GetCookiesWithOptionsAsync(
428 host, options, base::Bind(&CookieManager::GetCookieValueCompleted, 419 host, options,
429 base::Unretained(this), complete, result)); 420 base::Bind(&CookieManager::GetCookieValueCompleted,
421 base::Unretained(this), complete, result));
430 } 422 }
431 423
432 void CookieManager::GetCookieValueCompleted(base::Closure complete, 424 void CookieManager::GetCookieValueCompleted(base::Closure complete,
433 std::string* result, 425 std::string* result,
434 const std::string& value) { 426 const std::string& value) {
435 *result = value; 427 *result = value;
436 complete.Run(); 428 complete.Run();
437 } 429 }
438 430
439 void CookieManager::RemoveSessionCookies( 431 void CookieManager::RemoveSessionCookies(
440 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { 432 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) {
441 BoolCallback callback = 433 BoolCallback callback =
442 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); 434 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder));
443 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookiesHelper, 435 ExecCookieTask(base::Bind(&CookieManager::RemoveSessionCookiesHelper,
444 base::Unretained(this), 436 base::Unretained(this), callback));
445 callback));
446 } 437 }
447 438
448 void CookieManager::RemoveSessionCookiesSync() { 439 void CookieManager::RemoveSessionCookiesSync() {
449 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveSessionCookiesHelper, 440 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveSessionCookiesHelper,
450 base::Unretained(this))); 441 base::Unretained(this)));
451 } 442 }
452 443
453 void CookieManager::RemoveSessionCookiesHelper( 444 void CookieManager::RemoveSessionCookiesHelper(BoolCallback callback) {
454 BoolCallback callback) {
455 GetCookieStore()->DeleteSessionCookiesAsync( 445 GetCookieStore()->DeleteSessionCookiesAsync(
456 base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this), 446 base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this),
457 callback)); 447 callback));
458 } 448 }
459 449
460 void CookieManager::RemoveCookiesCompleted( 450 void CookieManager::RemoveCookiesCompleted(BoolCallback callback,
461 BoolCallback callback, 451 int num_deleted) {
462 int num_deleted) {
463 callback.Run(num_deleted > 0); 452 callback.Run(num_deleted > 0);
464 } 453 }
465 454
466 void CookieManager::RemoveAllCookies( 455 void CookieManager::RemoveAllCookies(
467 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) { 456 std::unique_ptr<BoolCookieCallbackHolder> callback_holder) {
468 BoolCallback callback = 457 BoolCallback callback =
469 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder)); 458 BoolCookieCallbackHolder::ConvertToCallback(std::move(callback_holder));
470 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookiesHelper, 459 ExecCookieTask(base::Bind(&CookieManager::RemoveAllCookiesHelper,
471 base::Unretained(this), 460 base::Unretained(this), callback));
472 callback));
473 } 461 }
474 462
475 void CookieManager::RemoveAllCookiesSync() { 463 void CookieManager::RemoveAllCookiesSync() {
476 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveAllCookiesHelper, 464 ExecCookieTaskSync(base::Bind(&CookieManager::RemoveAllCookiesHelper,
477 base::Unretained(this))); 465 base::Unretained(this)));
478 } 466 }
479 467
480 void CookieManager::RemoveAllCookiesHelper( 468 void CookieManager::RemoveAllCookiesHelper(const BoolCallback callback) {
481 const BoolCallback callback) {
482 GetCookieStore()->DeleteAllAsync( 469 GetCookieStore()->DeleteAllAsync(
483 base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this), 470 base::Bind(&CookieManager::RemoveCookiesCompleted, base::Unretained(this),
484 callback)); 471 callback));
485 } 472 }
486 473
487 void CookieManager::RemoveExpiredCookies() { 474 void CookieManager::RemoveExpiredCookies() {
488 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC. 475 // HasCookies will call GetAllCookiesAsync, which in turn will force a GC.
489 HasCookies(); 476 HasCookies();
490 } 477 }
491 478
492 void CookieManager::FlushCookieStore() { 479 void CookieManager::FlushCookieStore() {
493 ExecCookieTaskSync(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper, 480 ExecCookieTaskSync(base::Bind(&CookieManager::FlushCookieStoreAsyncHelper,
494 base::Unretained(this))); 481 base::Unretained(this)));
495 } 482 }
496 483
497 void CookieManager::FlushCookieStoreAsyncHelper( 484 void CookieManager::FlushCookieStoreAsyncHelper(base::Closure complete) {
498 base::Closure complete) {
499 GetCookieStore()->FlushStore(complete); 485 GetCookieStore()->FlushStore(complete);
500 } 486 }
501 487
502 bool CookieManager::HasCookies() { 488 bool CookieManager::HasCookies() {
503 bool has_cookies; 489 bool has_cookies;
504 ExecCookieTaskSync(base::Bind(&CookieManager::HasCookiesAsyncHelper, 490 ExecCookieTaskSync(base::Bind(&CookieManager::HasCookiesAsyncHelper,
505 base::Unretained(this), 491 base::Unretained(this), &has_cookies));
506 &has_cookies));
507 return has_cookies; 492 return has_cookies;
508 } 493 }
509 494
510 // TODO(kristianm): Simplify this, copying the entire list around 495 // TODO(kristianm): Simplify this, copying the entire list around
511 // should not be needed. 496 // should not be needed.
512 void CookieManager::HasCookiesAsyncHelper(bool* result, 497 void CookieManager::HasCookiesAsyncHelper(bool* result,
513 base::Closure complete) { 498 base::Closure complete) {
514 GetCookieStore()->GetAllCookiesAsync( 499 GetCookieStore()->GetAllCookiesAsync(
515 base::Bind(&CookieManager::HasCookiesCompleted, base::Unretained(this), 500 base::Bind(&CookieManager::HasCookiesCompleted, base::Unretained(this),
516 complete, result)); 501 complete, result));
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 static void RemoveSessionCookies(JNIEnv* env, 566 static void RemoveSessionCookies(JNIEnv* env,
582 const JavaParamRef<jobject>& obj, 567 const JavaParamRef<jobject>& obj,
583 const JavaParamRef<jobject>& java_callback) { 568 const JavaParamRef<jobject>& java_callback) {
584 std::unique_ptr<BoolCookieCallbackHolder> callback( 569 std::unique_ptr<BoolCookieCallbackHolder> callback(
585 new BoolCookieCallbackHolder(env, java_callback)); 570 new BoolCookieCallbackHolder(env, java_callback));
586 CookieManager::GetInstance()->RemoveSessionCookies(std::move(callback)); 571 CookieManager::GetInstance()->RemoveSessionCookies(std::move(callback));
587 } 572 }
588 573
589 static void RemoveSessionCookiesSync(JNIEnv* env, 574 static void RemoveSessionCookiesSync(JNIEnv* env,
590 const JavaParamRef<jobject>& obj) { 575 const JavaParamRef<jobject>& obj) {
591 CookieManager::GetInstance()->RemoveSessionCookiesSync(); 576 CookieManager::GetInstance()->RemoveSessionCookiesSync();
592 } 577 }
593 578
594 static void RemoveAllCookies(JNIEnv* env, 579 static void RemoveAllCookies(JNIEnv* env,
595 const JavaParamRef<jobject>& obj, 580 const JavaParamRef<jobject>& obj,
596 const JavaParamRef<jobject>& java_callback) { 581 const JavaParamRef<jobject>& java_callback) {
597 std::unique_ptr<BoolCookieCallbackHolder> callback( 582 std::unique_ptr<BoolCookieCallbackHolder> callback(
598 new BoolCookieCallbackHolder(env, java_callback)); 583 new BoolCookieCallbackHolder(env, java_callback));
599 CookieManager::GetInstance()->RemoveAllCookies(std::move(callback)); 584 CookieManager::GetInstance()->RemoveAllCookies(std::move(callback));
600 } 585 }
601 586
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
638 623
639 net::CookieStore* GetCookieStore() { 624 net::CookieStore* GetCookieStore() {
640 return CookieManager::GetInstance()->GetCookieStore(); 625 return CookieManager::GetInstance()->GetCookieStore();
641 } 626 }
642 627
643 bool RegisterCookieManager(JNIEnv* env) { 628 bool RegisterCookieManager(JNIEnv* env) {
644 return RegisterNativesImpl(env); 629 return RegisterNativesImpl(env);
645 } 630 }
646 631
647 } // android_webview namespace 632 } // android_webview namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698