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 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |