OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Portions of this code based on Mozilla: | 5 // Portions of this code based on Mozilla: |
6 // (netwerk/cookie/src/nsCookieService.cpp) | 6 // (netwerk/cookie/src/nsCookieService.cpp) |
7 /* ***** BEGIN LICENSE BLOCK ***** | 7 /* ***** BEGIN LICENSE BLOCK ***** |
8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 8 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
9 * | 9 * |
10 * The contents of this file are subject to the Mozilla Public License Version | 10 * The contents of this file are subject to the Mozilla Public License Version |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 bool secure_; | 446 bool secure_; |
447 bool http_only_; | 447 bool http_only_; |
448 bool first_party_only_; | 448 bool first_party_only_; |
449 CookiePriority priority_; | 449 CookiePriority priority_; |
450 SetCookiesCallback callback_; | 450 SetCookiesCallback callback_; |
451 | 451 |
452 DISALLOW_COPY_AND_ASSIGN(SetCookieWithDetailsTask); | 452 DISALLOW_COPY_AND_ASSIGN(SetCookieWithDetailsTask); |
453 }; | 453 }; |
454 | 454 |
455 void CookieMonster::SetCookieWithDetailsTask::Run() { | 455 void CookieMonster::SetCookieWithDetailsTask::Run() { |
456 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
457 tracked_objects::ScopedTracker tracking_profile( | |
458 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
459 "456373 CookieMonster::SetCookieWithDetailsTask::Run")); | |
460 bool success = this->cookie_monster()->SetCookieWithDetails( | 456 bool success = this->cookie_monster()->SetCookieWithDetails( |
461 url_, name_, value_, domain_, path_, expiration_time_, secure_, | 457 url_, name_, value_, domain_, path_, expiration_time_, secure_, |
462 http_only_, first_party_only_, priority_); | 458 http_only_, first_party_only_, priority_); |
463 if (!callback_.is_null()) { | 459 if (!callback_.is_null()) { |
464 this->InvokeCallback(base::Bind(&SetCookiesCallback::Run, | 460 this->InvokeCallback(base::Bind(&SetCookiesCallback::Run, |
465 base::Unretained(&callback_), success)); | 461 base::Unretained(&callback_), success)); |
466 } | 462 } |
467 } | 463 } |
468 | 464 |
469 // Task class for GetAllCookies call. | 465 // Task class for GetAllCookies call. |
470 class CookieMonster::GetAllCookiesTask : public CookieMonsterTask { | 466 class CookieMonster::GetAllCookiesTask : public CookieMonsterTask { |
471 public: | 467 public: |
472 GetAllCookiesTask(CookieMonster* cookie_monster, | 468 GetAllCookiesTask(CookieMonster* cookie_monster, |
473 const GetCookieListCallback& callback) | 469 const GetCookieListCallback& callback) |
474 : CookieMonsterTask(cookie_monster), callback_(callback) {} | 470 : CookieMonsterTask(cookie_monster), callback_(callback) {} |
475 | 471 |
476 // CookieMonsterTask | 472 // CookieMonsterTask |
477 void Run() override; | 473 void Run() override; |
478 | 474 |
479 protected: | 475 protected: |
480 ~GetAllCookiesTask() override {} | 476 ~GetAllCookiesTask() override {} |
481 | 477 |
482 private: | 478 private: |
483 GetCookieListCallback callback_; | 479 GetCookieListCallback callback_; |
484 | 480 |
485 DISALLOW_COPY_AND_ASSIGN(GetAllCookiesTask); | 481 DISALLOW_COPY_AND_ASSIGN(GetAllCookiesTask); |
486 }; | 482 }; |
487 | 483 |
488 void CookieMonster::GetAllCookiesTask::Run() { | 484 void CookieMonster::GetAllCookiesTask::Run() { |
489 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
490 tracked_objects::ScopedTracker tracking_profile( | |
491 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
492 "456373 CookieMonster::GetAllCookiesTask::Run")); | |
493 if (!callback_.is_null()) { | 485 if (!callback_.is_null()) { |
494 CookieList cookies = this->cookie_monster()->GetAllCookies(); | 486 CookieList cookies = this->cookie_monster()->GetAllCookies(); |
495 this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, | 487 this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, |
496 base::Unretained(&callback_), cookies)); | 488 base::Unretained(&callback_), cookies)); |
497 } | 489 } |
498 } | 490 } |
499 | 491 |
500 // Task class for GetAllCookiesForURLWithOptions call. | 492 // Task class for GetAllCookiesForURLWithOptions call. |
501 class CookieMonster::GetAllCookiesForURLWithOptionsTask | 493 class CookieMonster::GetAllCookiesForURLWithOptionsTask |
502 : public CookieMonsterTask { | 494 : public CookieMonsterTask { |
(...skipping 15 matching lines...) Expand all Loading... |
518 | 510 |
519 private: | 511 private: |
520 GURL url_; | 512 GURL url_; |
521 CookieOptions options_; | 513 CookieOptions options_; |
522 GetCookieListCallback callback_; | 514 GetCookieListCallback callback_; |
523 | 515 |
524 DISALLOW_COPY_AND_ASSIGN(GetAllCookiesForURLWithOptionsTask); | 516 DISALLOW_COPY_AND_ASSIGN(GetAllCookiesForURLWithOptionsTask); |
525 }; | 517 }; |
526 | 518 |
527 void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() { | 519 void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() { |
528 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
529 tracked_objects::ScopedTracker tracking_profile( | |
530 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
531 "456373 CookieMonster::GetAllCookiesForURLWithOptionsTask::Run")); | |
532 if (!callback_.is_null()) { | 520 if (!callback_.is_null()) { |
533 CookieList cookies = | 521 CookieList cookies = |
534 this->cookie_monster()->GetAllCookiesForURLWithOptions(url_, options_); | 522 this->cookie_monster()->GetAllCookiesForURLWithOptions(url_, options_); |
535 this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, | 523 this->InvokeCallback(base::Bind(&GetCookieListCallback::Run, |
536 base::Unretained(&callback_), cookies)); | 524 base::Unretained(&callback_), cookies)); |
537 } | 525 } |
538 } | 526 } |
539 | 527 |
540 template <typename Result> | 528 template <typename Result> |
541 struct CallbackType { | 529 struct CallbackType { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 } | 574 } |
587 | 575 |
588 template <> | 576 template <> |
589 base::Closure CookieMonster::DeleteTask<void>::RunDeleteTaskAndBindCallback() { | 577 base::Closure CookieMonster::DeleteTask<void>::RunDeleteTaskAndBindCallback() { |
590 RunDeleteTask(); | 578 RunDeleteTask(); |
591 return callback_; | 579 return callback_; |
592 } | 580 } |
593 | 581 |
594 template <typename Result> | 582 template <typename Result> |
595 void CookieMonster::DeleteTask<Result>::Run() { | 583 void CookieMonster::DeleteTask<Result>::Run() { |
596 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
597 tracked_objects::ScopedTracker tracking_profile( | |
598 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
599 "456373 CookieMonster::DeleteTask::Run")); | |
600 this->cookie_monster()->FlushStore(base::Bind( | 584 this->cookie_monster()->FlushStore(base::Bind( |
601 &DeleteTask<Result>::FlushDone, this, RunDeleteTaskAndBindCallback())); | 585 &DeleteTask<Result>::FlushDone, this, RunDeleteTaskAndBindCallback())); |
602 } | 586 } |
603 | 587 |
604 template <typename Result> | 588 template <typename Result> |
605 void CookieMonster::DeleteTask<Result>::FlushDone( | 589 void CookieMonster::DeleteTask<Result>::FlushDone( |
606 const base::Closure& callback) { | 590 const base::Closure& callback) { |
607 if (!callback.is_null()) { | 591 if (!callback.is_null()) { |
608 this->InvokeCallback(callback); | 592 this->InvokeCallback(callback); |
609 } | 593 } |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 ~HasCookiesForETLDP1Task() override {} | 870 ~HasCookiesForETLDP1Task() override {} |
887 | 871 |
888 private: | 872 private: |
889 std::string etldp1_; | 873 std::string etldp1_; |
890 HasCookiesForETLDP1Callback callback_; | 874 HasCookiesForETLDP1Callback callback_; |
891 | 875 |
892 DISALLOW_COPY_AND_ASSIGN(HasCookiesForETLDP1Task); | 876 DISALLOW_COPY_AND_ASSIGN(HasCookiesForETLDP1Task); |
893 }; | 877 }; |
894 | 878 |
895 void CookieMonster::HasCookiesForETLDP1Task::Run() { | 879 void CookieMonster::HasCookiesForETLDP1Task::Run() { |
896 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
897 tracked_objects::ScopedTracker tracking_profile( | |
898 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
899 "456373 CookieMonster::HasCookiesForETLDP1Task::Run")); | |
900 bool result = this->cookie_monster()->HasCookiesForETLDP1(etldp1_); | 880 bool result = this->cookie_monster()->HasCookiesForETLDP1(etldp1_); |
901 if (!callback_.is_null()) { | 881 if (!callback_.is_null()) { |
902 this->InvokeCallback(base::Bind(&HasCookiesForETLDP1Callback::Run, | 882 this->InvokeCallback(base::Bind(&HasCookiesForETLDP1Callback::Run, |
903 base::Unretained(&callback_), result)); | 883 base::Unretained(&callback_), result)); |
904 } | 884 } |
905 } | 885 } |
906 | 886 |
907 // Asynchronous CookieMonster API | 887 // Asynchronous CookieMonster API |
908 | 888 |
909 void CookieMonster::SetCookieWithDetailsAsync( | 889 void CookieMonster::SetCookieWithDetailsAsync( |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 while (!tasks_pending_for_key.empty()) { | 1477 while (!tasks_pending_for_key.empty()) { |
1498 scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front(); | 1478 scoped_refptr<CookieMonsterTask> task = tasks_pending_for_key.front(); |
1499 task->Run(); | 1479 task->Run(); |
1500 tasks_pending_for_key.pop_front(); | 1480 tasks_pending_for_key.pop_front(); |
1501 } | 1481 } |
1502 } | 1482 } |
1503 } | 1483 } |
1504 | 1484 |
1505 void CookieMonster::StoreLoadedCookies( | 1485 void CookieMonster::StoreLoadedCookies( |
1506 const std::vector<CanonicalCookie*>& cookies) { | 1486 const std::vector<CanonicalCookie*>& cookies) { |
1507 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
1508 tracked_objects::ScopedTracker tracking_profile( | |
1509 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1510 "456373 CookieMonster::StoreLoadedCookies")); | |
1511 // Initialize the store and sync in any saved persistent cookies. We don't | 1487 // Initialize the store and sync in any saved persistent cookies. We don't |
1512 // care if it's expired, insert it so it can be garbage collected, removed, | 1488 // care if it's expired, insert it so it can be garbage collected, removed, |
1513 // and sync'd. | 1489 // and sync'd. |
1514 base::AutoLock autolock(lock_); | 1490 base::AutoLock autolock(lock_); |
1515 | 1491 |
1516 CookieItVector cookies_with_control_chars; | 1492 CookieItVector cookies_with_control_chars; |
1517 | 1493 |
1518 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin(); | 1494 for (std::vector<CanonicalCookie*>::const_iterator it = cookies.begin(); |
1519 it != cookies.end(); ++it) { | 1495 it != cookies.end(); ++it) { |
1520 int64 cookie_creation_time = (*it)->CreationDate().ToInternalValue(); | 1496 int64 cookie_creation_time = (*it)->CreationDate().ToInternalValue(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1576 break; | 1552 break; |
1577 } | 1553 } |
1578 request_task = tasks_pending_.front(); | 1554 request_task = tasks_pending_.front(); |
1579 tasks_pending_.pop(); | 1555 tasks_pending_.pop(); |
1580 } | 1556 } |
1581 request_task->Run(); | 1557 request_task->Run(); |
1582 } | 1558 } |
1583 } | 1559 } |
1584 | 1560 |
1585 void CookieMonster::EnsureCookiesMapIsValid() { | 1561 void CookieMonster::EnsureCookiesMapIsValid() { |
1586 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
1587 tracked_objects::ScopedTracker tracking_profile( | |
1588 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1589 "456373 CookieMonster::EnsureCookiesMapIsValid")); | |
1590 lock_.AssertAcquired(); | 1562 lock_.AssertAcquired(); |
1591 | 1563 |
1592 int num_duplicates_trimmed = 0; | 1564 int num_duplicates_trimmed = 0; |
1593 | 1565 |
1594 // Iterate through all the of the cookies, grouped by host. | 1566 // Iterate through all the of the cookies, grouped by host. |
1595 CookieMap::iterator prev_range_end = cookies_.begin(); | 1567 CookieMap::iterator prev_range_end = cookies_.begin(); |
1596 while (prev_range_end != cookies_.end()) { | 1568 while (prev_range_end != cookies_.end()) { |
1597 CookieMap::iterator cur_range_begin = prev_range_end; | 1569 CookieMap::iterator cur_range_begin = prev_range_end; |
1598 const std::string key = cur_range_begin->first; // Keep a copy. | 1570 const std::string key = cur_range_begin->first; // Keep a copy. |
1599 CookieMap::iterator cur_range_end = cookies_.upper_bound(key); | 1571 CookieMap::iterator cur_range_end = cookies_.upper_bound(key); |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1897 cc->SetLastAccessDate(current); | 1869 cc->SetLastAccessDate(current); |
1898 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get()) | 1870 if ((cc->IsPersistent() || persist_session_cookies_) && store_.get()) |
1899 store_->UpdateCookieAccessTime(*cc); | 1871 store_->UpdateCookieAccessTime(*cc); |
1900 } | 1872 } |
1901 | 1873 |
1902 // InternalDeleteCookies must not invalidate iterators other than the one being | 1874 // InternalDeleteCookies must not invalidate iterators other than the one being |
1903 // deleted. | 1875 // deleted. |
1904 void CookieMonster::InternalDeleteCookie(CookieMap::iterator it, | 1876 void CookieMonster::InternalDeleteCookie(CookieMap::iterator it, |
1905 bool sync_to_store, | 1877 bool sync_to_store, |
1906 DeletionCause deletion_cause) { | 1878 DeletionCause deletion_cause) { |
1907 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456373 is fixed. | |
1908 tracked_objects::ScopedTracker tracking_profile( | |
1909 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
1910 "456373 CookieMonster::InternalDeleteCookie")); | |
1911 lock_.AssertAcquired(); | 1879 lock_.AssertAcquired(); |
1912 | 1880 |
1913 // Ideally, this would be asserted up where we define ChangeCauseMapping, | 1881 // Ideally, this would be asserted up where we define ChangeCauseMapping, |
1914 // but DeletionCause's visibility (or lack thereof) forces us to make | 1882 // but DeletionCause's visibility (or lack thereof) forces us to make |
1915 // this check here. | 1883 // this check here. |
1916 static_assert(arraysize(ChangeCauseMapping) == DELETE_COOKIE_LAST_ENTRY + 1, | 1884 static_assert(arraysize(ChangeCauseMapping) == DELETE_COOKIE_LAST_ENTRY + 1, |
1917 "ChangeCauseMapping size should match DeletionCause size"); | 1885 "ChangeCauseMapping size should match DeletionCause size"); |
1918 | 1886 |
1919 // See InitializeHistograms() for details. | 1887 // See InitializeHistograms() for details. |
1920 if (deletion_cause != DELETE_COOKIE_DONT_RECORD) | 1888 if (deletion_cause != DELETE_COOKIE_DONT_RECORD) |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2341 it != hook_map_.end(); ++it) { | 2309 it != hook_map_.end(); ++it) { |
2342 std::pair<GURL, std::string> key = it->first; | 2310 std::pair<GURL, std::string> key = it->first; |
2343 if (cookie.IncludeForRequestURL(key.first, opts) && | 2311 if (cookie.IncludeForRequestURL(key.first, opts) && |
2344 cookie.Name() == key.second) { | 2312 cookie.Name() == key.second) { |
2345 it->second->Notify(cookie, removed); | 2313 it->second->Notify(cookie, removed); |
2346 } | 2314 } |
2347 } | 2315 } |
2348 } | 2316 } |
2349 | 2317 |
2350 } // namespace net | 2318 } // namespace net |
OLD | NEW |