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

Side by Side Diff: net/cookies/cookie_monster.cc

Issue 18032002: Wait for store flush in CookieMonster::Delete*Task (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: template DeleteTask Created 7 years, 3 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
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 523
524 void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() { 524 void CookieMonster::GetAllCookiesForURLWithOptionsTask::Run() {
525 if (!callback_.is_null()) { 525 if (!callback_.is_null()) {
526 CookieList cookies = this->cookie_monster()-> 526 CookieList cookies = this->cookie_monster()->
527 GetAllCookiesForURLWithOptions(url_, options_); 527 GetAllCookiesForURLWithOptions(url_, options_);
528 this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run, 528 this->InvokeCallback(base::Bind(&CookieMonster::GetCookieListCallback::Run,
529 base::Unretained(&callback_), cookies)); 529 base::Unretained(&callback_), cookies));
530 } 530 }
531 } 531 }
532 532
533 // Base task class for Delete*Task.
534 template <typename Callback, typename Result>
535 class CookieMonster::DeleteTask : public CookieMonster::CookieMonsterTask {
536 public:
537 DeleteTask(CookieMonster* cookie_monster,
538 const Callback& callback)
539 : CookieMonsterTask(cookie_monster),
540 callback_(callback) {
541 }
542
543 // Runs the delete task and returns a result.
544 virtual Result RunDeleteTask() = 0;
545
546 // CookieMonster::CookieMonsterTask:
547 virtual void Run() OVERRIDE;
548
549 void FlushDone(const base::Closure& callback);
550
551 private:
552 Callback callback_;
553
554 DISALLOW_COPY_AND_ASSIGN(DeleteTask);
555 };
556
557 template <typename Callback, typename Result>
558 base::Closure RunDeleteTaskAndBindCallback(
559 CookieMonster::DeleteTask<Callback, Result>* task,
560 const Callback& callback) {
561 return base::Bind(callback, task->RunDeleteTask());
562 }
563
564 template <typename Callback>
philipj_slow 2013/09/05 14:39:12 I wanted to do this: template <> base::Closure Ru
erikwright (departed) 2013/09/05 20:28:18 Presumably in cookie_monster.h the declaration of
565 base::Closure RunDeleteTaskAndBindCallback(
566 CookieMonster::DeleteTask<Callback, void>* task,
567 const Callback& callback) {
568 task->RunDeleteTask();
569 return callback;
570 }
571
572 template <typename Callback, typename Result>
573 void CookieMonster::DeleteTask<Callback, Result>::Run() {
574 this->cookie_monster()->FlushStore(
575 base::Bind(&CookieMonster::DeleteTask<Callback, Result>::FlushDone, this,
576 RunDeleteTaskAndBindCallback(this, callback_)));
577 }
578
579 template <typename Callback, typename Result>
580 void CookieMonster::DeleteTask<Callback, Result>::FlushDone(
581 const base::Closure& callback) {
582 if (!callback.is_null()) {
583 this->InvokeCallback(callback);
584 }
585 }
586
533 // Task class for DeleteAll call. 587 // Task class for DeleteAll call.
534 class CookieMonster::DeleteAllTask : public CookieMonster::CookieMonsterTask { 588 class CookieMonster::DeleteAllTask
589 : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> {
535 public: 590 public:
536 DeleteAllTask(CookieMonster* cookie_monster, 591 DeleteAllTask(CookieMonster* cookie_monster,
537 const CookieMonster::DeleteCallback& callback) 592 const CookieMonster::DeleteCallback& callback)
538 : CookieMonsterTask(cookie_monster), 593 : DeleteTask(cookie_monster, callback) {
539 callback_(callback) {
540 } 594 }
541 595
542 // CookieMonster::CookieMonsterTask: 596 // CookieMonster::DeleteTask:
543 virtual void Run() OVERRIDE; 597 virtual int RunDeleteTask() OVERRIDE;
544 598
545 protected: 599 protected:
546 virtual ~DeleteAllTask() {} 600 virtual ~DeleteAllTask() {}
547 601
548 private: 602 private:
549 CookieMonster::DeleteCallback callback_;
550
551 DISALLOW_COPY_AND_ASSIGN(DeleteAllTask); 603 DISALLOW_COPY_AND_ASSIGN(DeleteAllTask);
552 }; 604 };
553 605
554 void CookieMonster::DeleteAllTask::Run() { 606 int CookieMonster::DeleteAllTask::RunDeleteTask() {
555 int num_deleted = this->cookie_monster()->DeleteAll(true); 607 return this->cookie_monster()->DeleteAll(true);
556 if (!callback_.is_null()) {
557 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
558 base::Unretained(&callback_), num_deleted));
559 }
560 } 608 }
561 609
562 // Task class for DeleteAllCreatedBetween call. 610 // Task class for DeleteAllCreatedBetween call.
563 class CookieMonster::DeleteAllCreatedBetweenTask 611 class CookieMonster::DeleteAllCreatedBetweenTask
564 : public CookieMonster::CookieMonsterTask { 612 : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> {
565 public: 613 public:
566 DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster, 614 DeleteAllCreatedBetweenTask(CookieMonster* cookie_monster,
567 const Time& delete_begin, 615 const Time& delete_begin,
568 const Time& delete_end, 616 const Time& delete_end,
569 const CookieMonster::DeleteCallback& callback) 617 const CookieMonster::DeleteCallback& callback)
570 : CookieMonsterTask(cookie_monster), 618 : DeleteTask(cookie_monster, callback),
571 delete_begin_(delete_begin), 619 delete_begin_(delete_begin),
572 delete_end_(delete_end), 620 delete_end_(delete_end) {
573 callback_(callback) {
574 } 621 }
575 622
576 // CookieMonster::CookieMonsterTask: 623 // CookieMonster::DeleteTask:
577 virtual void Run() OVERRIDE; 624 virtual int RunDeleteTask() OVERRIDE;
578 625
579 protected: 626 protected:
580 virtual ~DeleteAllCreatedBetweenTask() {} 627 virtual ~DeleteAllCreatedBetweenTask() {}
581 628
582 private: 629 private:
583 Time delete_begin_; 630 Time delete_begin_;
584 Time delete_end_; 631 Time delete_end_;
585 CookieMonster::DeleteCallback callback_;
586 632
587 DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenTask); 633 DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenTask);
588 }; 634 };
589 635
590 void CookieMonster::DeleteAllCreatedBetweenTask::Run() { 636 int CookieMonster::DeleteAllCreatedBetweenTask::RunDeleteTask() {
591 int num_deleted = this->cookie_monster()-> 637 return this->cookie_monster()->
592 DeleteAllCreatedBetween(delete_begin_, delete_end_); 638 DeleteAllCreatedBetween(delete_begin_, delete_end_);
593 if (!callback_.is_null()) {
594 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
595 base::Unretained(&callback_), num_deleted));
596 }
597 } 639 }
598 640
599 // Task class for DeleteAllForHost call. 641 // Task class for DeleteAllForHost call.
600 class CookieMonster::DeleteAllForHostTask 642 class CookieMonster::DeleteAllForHostTask
601 : public CookieMonster::CookieMonsterTask { 643 : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> {
602 public: 644 public:
603 DeleteAllForHostTask(CookieMonster* cookie_monster, 645 DeleteAllForHostTask(CookieMonster* cookie_monster,
604 const GURL& url, 646 const GURL& url,
605 const CookieMonster::DeleteCallback& callback) 647 const CookieMonster::DeleteCallback& callback)
606 : CookieMonsterTask(cookie_monster), 648 : DeleteTask(cookie_monster, callback),
607 url_(url), 649 url_(url) {
608 callback_(callback) {
609 } 650 }
610 651
611 // CookieMonster::CookieMonsterTask: 652 // CookieMonster::DeleteTask:
612 virtual void Run() OVERRIDE; 653 virtual int RunDeleteTask() OVERRIDE;
613 654
614 protected: 655 protected:
615 virtual ~DeleteAllForHostTask() {} 656 virtual ~DeleteAllForHostTask() {}
616 657
617 private: 658 private:
618 GURL url_; 659 GURL url_;
619 CookieMonster::DeleteCallback callback_;
620 660
621 DISALLOW_COPY_AND_ASSIGN(DeleteAllForHostTask); 661 DISALLOW_COPY_AND_ASSIGN(DeleteAllForHostTask);
622 }; 662 };
623 663
624 void CookieMonster::DeleteAllForHostTask::Run() { 664 int CookieMonster::DeleteAllForHostTask::RunDeleteTask() {
625 int num_deleted = this->cookie_monster()->DeleteAllForHost(url_); 665 return this->cookie_monster()->DeleteAllForHost(url_);
626 if (!callback_.is_null()) {
627 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
628 base::Unretained(&callback_), num_deleted));
629 }
630 } 666 }
631 667
632 // Task class for DeleteAllCreatedBetweenForHost call. 668 // Task class for DeleteAllCreatedBetweenForHost call.
633 class CookieMonster::DeleteAllCreatedBetweenForHostTask 669 class CookieMonster::DeleteAllCreatedBetweenForHostTask
634 : public CookieMonster::CookieMonsterTask { 670 : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> {
635 public: 671 public:
636 DeleteAllCreatedBetweenForHostTask( 672 DeleteAllCreatedBetweenForHostTask(
637 CookieMonster* cookie_monster, 673 CookieMonster* cookie_monster,
638 Time delete_begin, 674 Time delete_begin,
639 Time delete_end, 675 Time delete_end,
640 const GURL& url, 676 const GURL& url,
641 const CookieMonster::DeleteCallback& callback) 677 const CookieMonster::DeleteCallback& callback)
642 : CookieMonsterTask(cookie_monster), 678 : DeleteTask(cookie_monster, callback),
643 delete_begin_(delete_begin), 679 delete_begin_(delete_begin),
644 delete_end_(delete_end), 680 delete_end_(delete_end),
645 url_(url), 681 url_(url) {
646 callback_(callback) {
647 } 682 }
648 683
649 // CookieMonster::CookieMonsterTask: 684 // CookieMonster::DeleteTask:
650 virtual void Run() OVERRIDE; 685 virtual int RunDeleteTask() OVERRIDE;
651 686
652 protected: 687 protected:
653 virtual ~DeleteAllCreatedBetweenForHostTask() {} 688 virtual ~DeleteAllCreatedBetweenForHostTask() {}
654 689
655 private: 690 private:
656 Time delete_begin_; 691 Time delete_begin_;
657 Time delete_end_; 692 Time delete_end_;
658 GURL url_; 693 GURL url_;
659 CookieMonster::DeleteCallback callback_;
660 694
661 DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenForHostTask); 695 DISALLOW_COPY_AND_ASSIGN(DeleteAllCreatedBetweenForHostTask);
662 }; 696 };
663 697
664 void CookieMonster::DeleteAllCreatedBetweenForHostTask::Run() { 698 int CookieMonster::DeleteAllCreatedBetweenForHostTask::RunDeleteTask() {
665 int num_deleted = this->cookie_monster()->DeleteAllCreatedBetweenForHost( 699 return this->cookie_monster()->DeleteAllCreatedBetweenForHost(
666 delete_begin_, delete_end_, url_); 700 delete_begin_, delete_end_, url_);
667 if (!callback_.is_null()) {
668 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
669 base::Unretained(&callback_), num_deleted));
670 }
671 } 701 }
672 702
673 // Task class for DeleteCanonicalCookie call. 703 // Task class for DeleteCanonicalCookie call.
674 class CookieMonster::DeleteCanonicalCookieTask 704 class CookieMonster::DeleteCanonicalCookieTask
675 : public CookieMonster::CookieMonsterTask { 705 : public CookieMonster::DeleteTask<CookieMonster::DeleteCookieCallback, bool > {
676 public: 706 public:
677 DeleteCanonicalCookieTask(CookieMonster* cookie_monster, 707 DeleteCanonicalCookieTask(CookieMonster* cookie_monster,
678 const CanonicalCookie& cookie, 708 const CanonicalCookie& cookie,
679 const CookieMonster::DeleteCookieCallback& callback) 709 const CookieMonster::DeleteCookieCallback& callback)
680 : CookieMonsterTask(cookie_monster), 710 : DeleteTask(cookie_monster, callback),
681 cookie_(cookie), 711 cookie_(cookie) {
682 callback_(callback) {
683 } 712 }
684 713
685 // CookieMonster::CookieMonsterTask: 714 // CookieMonster::DeleteTask:
686 virtual void Run() OVERRIDE; 715 virtual bool RunDeleteTask() OVERRIDE;
687 716
688 protected: 717 protected:
689 virtual ~DeleteCanonicalCookieTask() {} 718 virtual ~DeleteCanonicalCookieTask() {}
690 719
691 private: 720 private:
692 CanonicalCookie cookie_; 721 CanonicalCookie cookie_;
693 CookieMonster::DeleteCookieCallback callback_;
694 722
695 DISALLOW_COPY_AND_ASSIGN(DeleteCanonicalCookieTask); 723 DISALLOW_COPY_AND_ASSIGN(DeleteCanonicalCookieTask);
696 }; 724 };
697 725
698 void CookieMonster::DeleteCanonicalCookieTask::Run() { 726 bool CookieMonster::DeleteCanonicalCookieTask::RunDeleteTask() {
699 bool result = this->cookie_monster()->DeleteCanonicalCookie(cookie_); 727 return this->cookie_monster()->DeleteCanonicalCookie(cookie_);
700 if (!callback_.is_null()) {
701 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCookieCallback::Run,
702 base::Unretained(&callback_), result));
703 }
704 } 728 }
705 729
706 // Task class for SetCookieWithOptions call. 730 // Task class for SetCookieWithOptions call.
707 class CookieMonster::SetCookieWithOptionsTask 731 class CookieMonster::SetCookieWithOptionsTask
708 : public CookieMonster::CookieMonsterTask { 732 : public CookieMonster::CookieMonsterTask {
709 public: 733 public:
710 SetCookieWithOptionsTask(CookieMonster* cookie_monster, 734 SetCookieWithOptionsTask(CookieMonster* cookie_monster,
711 const GURL& url, 735 const GURL& url,
712 const std::string& cookie_line, 736 const std::string& cookie_line,
713 const CookieOptions& options, 737 const CookieOptions& options,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 std::string cookie = this->cookie_monster()-> 799 std::string cookie = this->cookie_monster()->
776 GetCookiesWithOptions(url_, options_); 800 GetCookiesWithOptions(url_, options_);
777 if (!callback_.is_null()) { 801 if (!callback_.is_null()) {
778 this->InvokeCallback(base::Bind(&CookieMonster::GetCookiesCallback::Run, 802 this->InvokeCallback(base::Bind(&CookieMonster::GetCookiesCallback::Run,
779 base::Unretained(&callback_), cookie)); 803 base::Unretained(&callback_), cookie));
780 } 804 }
781 } 805 }
782 806
783 // Task class for DeleteCookie call. 807 // Task class for DeleteCookie call.
784 class CookieMonster::DeleteCookieTask 808 class CookieMonster::DeleteCookieTask
785 : public CookieMonster::CookieMonsterTask { 809 : public CookieMonster::DeleteTask<base::Closure, void> {
786 public: 810 public:
787 DeleteCookieTask(CookieMonster* cookie_monster, 811 DeleteCookieTask(CookieMonster* cookie_monster,
788 const GURL& url, 812 const GURL& url,
789 const std::string& cookie_name, 813 const std::string& cookie_name,
790 const base::Closure& callback) 814 const base::Closure& callback)
791 : CookieMonsterTask(cookie_monster), 815 : DeleteTask(cookie_monster, callback),
792 url_(url), 816 url_(url),
793 cookie_name_(cookie_name), 817 cookie_name_(cookie_name) {
794 callback_(callback) { } 818 }
795 819
796 // CookieMonster::CookieMonsterTask: 820 // CookieMonster::DeleteTask:
797 virtual void Run() OVERRIDE; 821 virtual void RunDeleteTask() OVERRIDE;
798 822
799 protected: 823 protected:
800 virtual ~DeleteCookieTask() {} 824 virtual ~DeleteCookieTask() {}
801 825
802 private: 826 private:
803 GURL url_; 827 GURL url_;
804 std::string cookie_name_; 828 std::string cookie_name_;
805 base::Closure callback_;
806 829
807 DISALLOW_COPY_AND_ASSIGN(DeleteCookieTask); 830 DISALLOW_COPY_AND_ASSIGN(DeleteCookieTask);
808 }; 831 };
809 832
810 void CookieMonster::DeleteCookieTask::Run() { 833 void CookieMonster::DeleteCookieTask::RunDeleteTask() {
811 this->cookie_monster()->DeleteCookie(url_, cookie_name_); 834 this->cookie_monster()->DeleteCookie(url_, cookie_name_);
812 if (!callback_.is_null()) {
813 this->InvokeCallback(callback_);
814 }
815 } 835 }
816 836
817 // Task class for DeleteSessionCookies call. 837 // Task class for DeleteSessionCookies call.
818 class CookieMonster::DeleteSessionCookiesTask 838 class CookieMonster::DeleteSessionCookiesTask
819 : public CookieMonster::CookieMonsterTask { 839 : public CookieMonster::DeleteTask<CookieMonster::DeleteCallback, int> {
820 public: 840 public:
821 DeleteSessionCookiesTask(CookieMonster* cookie_monster, 841 DeleteSessionCookiesTask(CookieMonster* cookie_monster,
822 const CookieMonster::DeleteCallback& callback) 842 const CookieMonster::DeleteCallback& callback)
823 : CookieMonsterTask(cookie_monster), callback_(callback) { 843 : DeleteTask(cookie_monster, callback) {
824 } 844 }
825 845
826 // CookieMonster::CookieMonsterTask: 846 // CookieMonster::DeleteTask:
827 virtual void Run() OVERRIDE; 847 virtual int RunDeleteTask() OVERRIDE;
828 848
829 protected: 849 protected:
830 virtual ~DeleteSessionCookiesTask() {} 850 virtual ~DeleteSessionCookiesTask() {}
831 851
832 private: 852 private:
833 CookieMonster::DeleteCallback callback_;
834 853
835 DISALLOW_COPY_AND_ASSIGN(DeleteSessionCookiesTask); 854 DISALLOW_COPY_AND_ASSIGN(DeleteSessionCookiesTask);
836 }; 855 };
837 856
838 void CookieMonster::DeleteSessionCookiesTask::Run() { 857 int CookieMonster::DeleteSessionCookiesTask::RunDeleteTask() {
839 int num_deleted = this->cookie_monster()->DeleteSessionCookies(); 858 return this->cookie_monster()->DeleteSessionCookies();
840 if (!callback_.is_null()) {
841 this->InvokeCallback(base::Bind(&CookieMonster::DeleteCallback::Run,
842 base::Unretained(&callback_), num_deleted));
843 }
844 } 859 }
845 860
846 // Task class for HasCookiesForETLDP1Task call. 861 // Task class for HasCookiesForETLDP1Task call.
847 class CookieMonster::HasCookiesForETLDP1Task 862 class CookieMonster::HasCookiesForETLDP1Task
848 : public CookieMonster::CookieMonsterTask { 863 : public CookieMonster::CookieMonsterTask {
849 public: 864 public:
850 HasCookiesForETLDP1Task( 865 HasCookiesForETLDP1Task(
851 CookieMonster* cookie_monster, 866 CookieMonster* cookie_monster,
852 const std::string& etldp1, 867 const std::string& etldp1,
853 const CookieMonster::HasCookiesForETLDP1Callback& callback) 868 const CookieMonster::HasCookiesForETLDP1Callback& callback)
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after
2214 2229
2215 // The system resolution is not high enough, so we can have multiple 2230 // The system resolution is not high enough, so we can have multiple
2216 // set cookies that result in the same system time. When this happens, we 2231 // set cookies that result in the same system time. When this happens, we
2217 // increment by one Time unit. Let's hope computers don't get too fast. 2232 // increment by one Time unit. Let's hope computers don't get too fast.
2218 Time CookieMonster::CurrentTime() { 2233 Time CookieMonster::CurrentTime() {
2219 return std::max(Time::Now(), 2234 return std::max(Time::Now(),
2220 Time::FromInternalValue(last_time_seen_.ToInternalValue() + 1)); 2235 Time::FromInternalValue(last_time_seen_.ToInternalValue() + 1));
2221 } 2236 }
2222 2237
2223 } // namespace net 2238 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster.h ('k') | net/cookies/cookie_monster_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698