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 #include "webkit/quota/quota_manager.h" | 5 #include "webkit/quota/quota_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <deque> | 8 #include <deque> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 public: | 637 public: |
638 explicit DatabaseTaskBase(QuotaManager* manager) | 638 explicit DatabaseTaskBase(QuotaManager* manager) |
639 : QuotaThreadTask(manager, manager->db_thread_), | 639 : QuotaThreadTask(manager, manager->db_thread_), |
640 manager_(manager), | 640 manager_(manager), |
641 database_(manager->database_.get()), | 641 database_(manager->database_.get()), |
642 db_disabled_(false) { | 642 db_disabled_(false) { |
643 DCHECK(database_); | 643 DCHECK(database_); |
644 } | 644 } |
645 | 645 |
646 protected: | 646 protected: |
| 647 virtual ~DatabaseTaskBase() {} |
| 648 |
647 virtual void DatabaseTaskCompleted() = 0; | 649 virtual void DatabaseTaskCompleted() = 0; |
648 | 650 |
| 651 // QuotaThreadTask: |
649 virtual void Completed() OVERRIDE { | 652 virtual void Completed() OVERRIDE { |
650 manager_->db_disabled_ = db_disabled_; | 653 manager_->db_disabled_ = db_disabled_; |
651 DatabaseTaskCompleted(); | 654 DatabaseTaskCompleted(); |
652 } | 655 } |
653 | 656 |
654 bool db_disabled() const { return db_disabled_; } | 657 bool db_disabled() const { return db_disabled_; } |
655 void set_db_disabled(bool db_disabled) { | 658 void set_db_disabled(bool db_disabled) { |
656 db_disabled_ = db_disabled; | 659 db_disabled_ = db_disabled; |
657 } | 660 } |
658 | 661 |
659 QuotaManager* manager() const { return manager_; } | 662 QuotaManager* manager() const { return manager_; } |
660 QuotaDatabase* database() const { return database_; } | 663 QuotaDatabase* database() const { return database_; } |
661 | 664 |
662 private: | 665 private: |
663 QuotaManager* manager_; | 666 QuotaManager* manager_; |
664 QuotaDatabase* database_; | 667 QuotaDatabase* database_; |
665 bool db_disabled_; | 668 bool db_disabled_; |
666 }; | 669 }; |
667 | 670 |
668 class QuotaManager::InitializeTask : public QuotaManager::DatabaseTaskBase { | 671 class QuotaManager::InitializeTask : public QuotaManager::DatabaseTaskBase { |
669 public: | 672 public: |
670 InitializeTask(QuotaManager* manager) | 673 InitializeTask(QuotaManager* manager) |
671 : DatabaseTaskBase(manager), | 674 : DatabaseTaskBase(manager), |
672 temporary_quota_override_(-1), | 675 temporary_quota_override_(-1), |
673 desired_available_space_(-1) { | 676 desired_available_space_(-1) { |
674 } | 677 } |
675 | 678 |
676 protected: | 679 protected: |
| 680 virtual ~InitializeTask() {} |
| 681 |
| 682 // QuotaThreadTask: |
677 virtual void RunOnTargetThread() OVERRIDE { | 683 virtual void RunOnTargetThread() OVERRIDE { |
678 // See if we have overriding temporary quota configuration. | 684 // See if we have overriding temporary quota configuration. |
679 database()->GetQuotaConfigValue(QuotaDatabase::kTemporaryQuotaOverrideKey, | 685 database()->GetQuotaConfigValue(QuotaDatabase::kTemporaryQuotaOverrideKey, |
680 &temporary_quota_override_); | 686 &temporary_quota_override_); |
681 database()->GetQuotaConfigValue(QuotaDatabase::kDesiredAvailableSpaceKey, | 687 database()->GetQuotaConfigValue(QuotaDatabase::kDesiredAvailableSpaceKey, |
682 &desired_available_space_); | 688 &desired_available_space_); |
683 } | 689 } |
684 | 690 |
| 691 // DatabaseTaskBase: |
685 virtual void DatabaseTaskCompleted() OVERRIDE { | 692 virtual void DatabaseTaskCompleted() OVERRIDE { |
686 manager()->temporary_quota_override_ = temporary_quota_override_; | 693 manager()->temporary_quota_override_ = temporary_quota_override_; |
687 manager()->desired_available_space_ = desired_available_space_; | 694 manager()->desired_available_space_ = desired_available_space_; |
688 manager()->temporary_quota_initialized_ = true; | 695 manager()->temporary_quota_initialized_ = true; |
689 manager()->DidRunInitializeTask(); | 696 manager()->DidRunInitializeTask(); |
690 } | 697 } |
691 | 698 |
692 private: | 699 private: |
693 int64 temporary_quota_override_; | 700 int64 temporary_quota_override_; |
694 int64 desired_available_space_; | 701 int64 desired_available_space_; |
695 }; | 702 }; |
696 | 703 |
697 class QuotaManager::UpdateTemporaryQuotaOverrideTask | 704 class QuotaManager::UpdateTemporaryQuotaOverrideTask |
698 : public QuotaManager::DatabaseTaskBase { | 705 : public QuotaManager::DatabaseTaskBase { |
699 public: | 706 public: |
700 UpdateTemporaryQuotaOverrideTask( | 707 UpdateTemporaryQuotaOverrideTask( |
701 QuotaManager* manager, | 708 QuotaManager* manager, |
702 int64 new_quota, | 709 int64 new_quota, |
703 const QuotaCallback& callback) | 710 const QuotaCallback& callback) |
704 : DatabaseTaskBase(manager), | 711 : DatabaseTaskBase(manager), |
705 new_quota_(new_quota), | 712 new_quota_(new_quota), |
706 callback_(callback) {} | 713 callback_(callback) {} |
707 | 714 |
708 protected: | 715 protected: |
| 716 virtual ~UpdateTemporaryQuotaOverrideTask() {} |
| 717 |
| 718 // QuotaThreadTask: |
709 virtual void RunOnTargetThread() OVERRIDE { | 719 virtual void RunOnTargetThread() OVERRIDE { |
710 if (!database()->SetQuotaConfigValue( | 720 if (!database()->SetQuotaConfigValue( |
711 QuotaDatabase::kTemporaryQuotaOverrideKey, new_quota_)) { | 721 QuotaDatabase::kTemporaryQuotaOverrideKey, new_quota_)) { |
712 set_db_disabled(true); | 722 set_db_disabled(true); |
713 new_quota_ = -1; | 723 new_quota_ = -1; |
714 return; | 724 return; |
715 } | 725 } |
716 } | 726 } |
717 | 727 |
| 728 // DatabaseTaskBase: |
718 virtual void DatabaseTaskCompleted() OVERRIDE { | 729 virtual void DatabaseTaskCompleted() OVERRIDE { |
719 if (!db_disabled()) { | 730 if (!db_disabled()) { |
720 manager()->temporary_quota_override_ = new_quota_; | 731 manager()->temporary_quota_override_ = new_quota_; |
721 CallCallback(kQuotaStatusOk, kStorageTypeTemporary, new_quota_); | 732 CallCallback(kQuotaStatusOk, kStorageTypeTemporary, new_quota_); |
722 } else { | 733 } else { |
723 CallCallback(kQuotaErrorInvalidAccess, kStorageTypeTemporary, new_quota_); | 734 CallCallback(kQuotaErrorInvalidAccess, kStorageTypeTemporary, new_quota_); |
724 } | 735 } |
725 } | 736 } |
726 | 737 |
727 private: | 738 private: |
(...skipping 13 matching lines...) Expand all Loading... |
741 public: | 752 public: |
742 GetPersistentHostQuotaTask( | 753 GetPersistentHostQuotaTask( |
743 QuotaManager* manager, | 754 QuotaManager* manager, |
744 const std::string& host, | 755 const std::string& host, |
745 const HostQuotaCallback& callback) | 756 const HostQuotaCallback& callback) |
746 : DatabaseTaskBase(manager), | 757 : DatabaseTaskBase(manager), |
747 host_(host), | 758 host_(host), |
748 quota_(-1), | 759 quota_(-1), |
749 callback_(callback) { | 760 callback_(callback) { |
750 } | 761 } |
| 762 |
751 protected: | 763 protected: |
| 764 virtual ~GetPersistentHostQuotaTask() {} |
| 765 |
| 766 // QuotaThreadTask: |
752 virtual void RunOnTargetThread() OVERRIDE { | 767 virtual void RunOnTargetThread() OVERRIDE { |
753 if (!database()->GetHostQuota(host_, kStorageTypePersistent, "a_)) | 768 if (!database()->GetHostQuota(host_, kStorageTypePersistent, "a_)) |
754 quota_ = 0; | 769 quota_ = 0; |
755 } | 770 } |
| 771 |
| 772 // DatabaseTaskBase: |
756 virtual void DatabaseTaskCompleted() OVERRIDE { | 773 virtual void DatabaseTaskCompleted() OVERRIDE { |
757 callback_.Run(kQuotaStatusOk, | 774 callback_.Run(kQuotaStatusOk, |
758 host_, kStorageTypePersistent, quota_); | 775 host_, kStorageTypePersistent, quota_); |
759 } | 776 } |
| 777 |
760 private: | 778 private: |
761 std::string host_; | 779 std::string host_; |
762 int64 quota_; | 780 int64 quota_; |
763 HostQuotaCallback callback_; | 781 HostQuotaCallback callback_; |
764 }; | 782 }; |
765 | 783 |
766 class QuotaManager::UpdatePersistentHostQuotaTask | 784 class QuotaManager::UpdatePersistentHostQuotaTask |
767 : public QuotaManager::DatabaseTaskBase { | 785 : public QuotaManager::DatabaseTaskBase { |
768 public: | 786 public: |
769 UpdatePersistentHostQuotaTask( | 787 UpdatePersistentHostQuotaTask( |
770 QuotaManager* manager, | 788 QuotaManager* manager, |
771 const std::string& host, | 789 const std::string& host, |
772 int64 new_quota, | 790 int64 new_quota, |
773 const HostQuotaCallback& callback) | 791 const HostQuotaCallback& callback) |
774 : DatabaseTaskBase(manager), | 792 : DatabaseTaskBase(manager), |
775 host_(host), | 793 host_(host), |
776 new_quota_(new_quota), | 794 new_quota_(new_quota), |
777 callback_(callback) { | 795 callback_(callback) { |
778 DCHECK_GE(new_quota_, 0); | 796 DCHECK_GE(new_quota_, 0); |
779 } | 797 } |
| 798 |
780 protected: | 799 protected: |
| 800 virtual ~UpdatePersistentHostQuotaTask() {} |
| 801 |
| 802 // QuotaThreadTask: |
781 virtual void RunOnTargetThread() OVERRIDE { | 803 virtual void RunOnTargetThread() OVERRIDE { |
782 if (!database()->SetHostQuota(host_, kStorageTypePersistent, new_quota_)) { | 804 if (!database()->SetHostQuota(host_, kStorageTypePersistent, new_quota_)) { |
783 set_db_disabled(true); | 805 set_db_disabled(true); |
784 new_quota_ = 0; | 806 new_quota_ = 0; |
785 } | 807 } |
786 } | 808 } |
787 | 809 |
788 virtual void DatabaseTaskCompleted() OVERRIDE { | |
789 callback_.Run(db_disabled() ? kQuotaErrorInvalidAccess : kQuotaStatusOk, | |
790 host_, kStorageTypePersistent, new_quota_); | |
791 } | |
792 | |
793 virtual void Aborted() OVERRIDE { | 810 virtual void Aborted() OVERRIDE { |
794 callback_.Reset(); | 811 callback_.Reset(); |
795 } | 812 } |
796 | 813 |
| 814 // DatabaseTaskBase: |
| 815 virtual void DatabaseTaskCompleted() OVERRIDE { |
| 816 callback_.Run(db_disabled() ? kQuotaErrorInvalidAccess : kQuotaStatusOk, |
| 817 host_, kStorageTypePersistent, new_quota_); |
| 818 } |
| 819 |
797 private: | 820 private: |
798 std::string host_; | 821 std::string host_; |
799 int64 new_quota_; | 822 int64 new_quota_; |
800 HostQuotaCallback callback_; | 823 HostQuotaCallback callback_; |
801 }; | 824 }; |
802 | 825 |
803 class QuotaManager::GetLRUOriginTask | 826 class QuotaManager::GetLRUOriginTask |
804 : public QuotaManager::DatabaseTaskBase { | 827 : public QuotaManager::DatabaseTaskBase { |
805 public: | 828 public: |
806 GetLRUOriginTask( | 829 GetLRUOriginTask( |
(...skipping 14 matching lines...) Expand all Loading... |
821 } | 844 } |
822 for (std::map<GURL, int>::const_iterator p = origins_in_error.begin(); | 845 for (std::map<GURL, int>::const_iterator p = origins_in_error.begin(); |
823 p != origins_in_error.end(); | 846 p != origins_in_error.end(); |
824 ++p) { | 847 ++p) { |
825 if (p->second > QuotaManager::kThresholdOfErrorsToBeBlacklisted) | 848 if (p->second > QuotaManager::kThresholdOfErrorsToBeBlacklisted) |
826 exceptions_.insert(p->first); | 849 exceptions_.insert(p->first); |
827 } | 850 } |
828 } | 851 } |
829 | 852 |
830 protected: | 853 protected: |
| 854 virtual ~GetLRUOriginTask() {} |
| 855 |
| 856 // QuotaThreadTask: |
831 virtual void RunOnTargetThread() OVERRIDE { | 857 virtual void RunOnTargetThread() OVERRIDE { |
832 database()->GetLRUOrigin( | 858 database()->GetLRUOrigin( |
833 type_, exceptions_, special_storage_policy_, &url_); | 859 type_, exceptions_, special_storage_policy_, &url_); |
834 } | 860 } |
835 | 861 |
836 virtual void DatabaseTaskCompleted() OVERRIDE { | |
837 callback_.Run(url_); | |
838 } | |
839 | |
840 virtual void Aborted() OVERRIDE { | 862 virtual void Aborted() OVERRIDE { |
841 callback_.Reset(); | 863 callback_.Reset(); |
842 } | 864 } |
843 | 865 |
| 866 // DatabaseTaskBase: |
| 867 virtual void DatabaseTaskCompleted() OVERRIDE { |
| 868 callback_.Run(url_); |
| 869 } |
| 870 |
844 private: | 871 private: |
845 StorageType type_; | 872 StorageType type_; |
846 std::set<GURL> exceptions_; | 873 std::set<GURL> exceptions_; |
847 GetLRUOriginCallback callback_; | 874 GetLRUOriginCallback callback_; |
848 scoped_refptr<SpecialStoragePolicy> special_storage_policy_; | 875 scoped_refptr<SpecialStoragePolicy> special_storage_policy_; |
849 GURL url_; | 876 GURL url_; |
850 }; | 877 }; |
851 | 878 |
852 class QuotaManager::DeleteOriginInfo | 879 class QuotaManager::DeleteOriginInfo |
853 : public QuotaManager::DatabaseTaskBase { | 880 : public QuotaManager::DatabaseTaskBase { |
854 public: | 881 public: |
855 DeleteOriginInfo( | 882 DeleteOriginInfo( |
856 QuotaManager* manager, | 883 QuotaManager* manager, |
857 const GURL& origin, | 884 const GURL& origin, |
858 StorageType type) | 885 StorageType type) |
859 : DatabaseTaskBase(manager), | 886 : DatabaseTaskBase(manager), |
860 origin_(origin), | 887 origin_(origin), |
861 type_(type) {} | 888 type_(type) {} |
862 | 889 |
863 protected: | 890 protected: |
| 891 virtual ~DeleteOriginInfo() {} |
| 892 |
| 893 // QuotaThreadTask: |
864 virtual void RunOnTargetThread() OVERRIDE { | 894 virtual void RunOnTargetThread() OVERRIDE { |
865 if (!database()->DeleteOriginInfo(origin_, type_)) { | 895 if (!database()->DeleteOriginInfo(origin_, type_)) { |
866 set_db_disabled(true); | 896 set_db_disabled(true); |
867 } | 897 } |
868 } | 898 } |
| 899 |
| 900 // DatabaseTaskBase: |
869 virtual void DatabaseTaskCompleted() OVERRIDE {} | 901 virtual void DatabaseTaskCompleted() OVERRIDE {} |
870 | 902 |
871 private: | 903 private: |
872 GURL origin_; | 904 GURL origin_; |
873 StorageType type_; | 905 StorageType type_; |
874 }; | 906 }; |
875 | 907 |
876 class QuotaManager::InitializeTemporaryOriginsInfoTask | 908 class QuotaManager::InitializeTemporaryOriginsInfoTask |
877 : public QuotaManager::DatabaseTaskBase { | 909 : public QuotaManager::DatabaseTaskBase { |
878 public: | 910 public: |
879 InitializeTemporaryOriginsInfoTask( | 911 InitializeTemporaryOriginsInfoTask( |
880 QuotaManager* manager, | 912 QuotaManager* manager, |
881 UsageTracker* temporary_usage_tracker) | 913 UsageTracker* temporary_usage_tracker) |
882 : DatabaseTaskBase(manager), | 914 : DatabaseTaskBase(manager), |
883 has_registered_origins_(false) { | 915 has_registered_origins_(false) { |
884 DCHECK(temporary_usage_tracker); | 916 DCHECK(temporary_usage_tracker); |
885 temporary_usage_tracker->GetCachedOrigins(&origins_); | 917 temporary_usage_tracker->GetCachedOrigins(&origins_); |
886 } | 918 } |
887 | 919 |
888 protected: | 920 protected: |
| 921 virtual ~InitializeTemporaryOriginsInfoTask() {} |
| 922 |
| 923 // QuotaThreadTask: |
889 virtual void RunOnTargetThread() OVERRIDE { | 924 virtual void RunOnTargetThread() OVERRIDE { |
890 if (!database()->IsOriginDatabaseBootstrapped()) { | 925 if (!database()->IsOriginDatabaseBootstrapped()) { |
891 // Register existing origins with 0 last time access. | 926 // Register existing origins with 0 last time access. |
892 if (!database()->RegisterInitialOriginInfo( | 927 if (!database()->RegisterInitialOriginInfo( |
893 origins_, kStorageTypeTemporary)) { | 928 origins_, kStorageTypeTemporary)) { |
894 set_db_disabled(true); | 929 set_db_disabled(true); |
895 } else { | 930 } else { |
896 has_registered_origins_ = true; | 931 has_registered_origins_ = true; |
897 database()->SetOriginDatabaseBootstrapped(true); | 932 database()->SetOriginDatabaseBootstrapped(true); |
898 } | 933 } |
899 } | 934 } |
900 } | 935 } |
| 936 |
| 937 // DatabaseTaskBase: |
901 virtual void DatabaseTaskCompleted() OVERRIDE { | 938 virtual void DatabaseTaskCompleted() OVERRIDE { |
902 if (has_registered_origins_) | 939 if (has_registered_origins_) |
903 manager()->StartEviction(); | 940 manager()->StartEviction(); |
904 } | 941 } |
905 | 942 |
906 private: | 943 private: |
907 std::set<GURL> origins_; | 944 std::set<GURL> origins_; |
908 bool has_registered_origins_; | 945 bool has_registered_origins_; |
909 }; | 946 }; |
910 | 947 |
911 class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask { | 948 class QuotaManager::AvailableSpaceQueryTask : public QuotaThreadTask { |
912 public: | 949 public: |
913 AvailableSpaceQueryTask( | 950 AvailableSpaceQueryTask( |
914 QuotaManager* manager, | 951 QuotaManager* manager, |
915 const AvailableSpaceCallback& callback) | 952 const AvailableSpaceCallback& callback) |
916 : QuotaThreadTask(manager, manager->db_thread_), | 953 : QuotaThreadTask(manager, manager->db_thread_), |
917 profile_path_(manager->profile_path_), | 954 profile_path_(manager->profile_path_), |
918 space_(-1), | 955 space_(-1), |
919 callback_(callback) { | 956 callback_(callback) { |
920 } | 957 } |
| 958 |
| 959 protected: |
921 virtual ~AvailableSpaceQueryTask() {} | 960 virtual ~AvailableSpaceQueryTask() {} |
922 | 961 |
923 protected: | 962 // QuotaThreadTask: |
924 virtual void RunOnTargetThread() OVERRIDE { | 963 virtual void RunOnTargetThread() OVERRIDE { |
925 space_ = base::SysInfo::AmountOfFreeDiskSpace(profile_path_); | 964 space_ = base::SysInfo::AmountOfFreeDiskSpace(profile_path_); |
926 } | 965 } |
927 | 966 |
928 virtual void Aborted() OVERRIDE { | 967 virtual void Aborted() OVERRIDE { |
929 callback_.Reset(); | 968 callback_.Reset(); |
930 } | 969 } |
931 | 970 |
932 virtual void Completed() OVERRIDE { | 971 virtual void Completed() OVERRIDE { |
933 callback_.Run(kQuotaStatusOk, space_); | 972 callback_.Run(kQuotaStatusOk, space_); |
(...skipping 12 matching lines...) Expand all Loading... |
946 QuotaManager* manager, | 985 QuotaManager* manager, |
947 const GURL& origin, | 986 const GURL& origin, |
948 StorageType type, | 987 StorageType type, |
949 base::Time accessed_time) | 988 base::Time accessed_time) |
950 : DatabaseTaskBase(manager), | 989 : DatabaseTaskBase(manager), |
951 origin_(origin), | 990 origin_(origin), |
952 type_(type), | 991 type_(type), |
953 accessed_time_(accessed_time) {} | 992 accessed_time_(accessed_time) {} |
954 | 993 |
955 protected: | 994 protected: |
| 995 virtual ~UpdateAccessTimeTask() {} |
| 996 |
| 997 // QuotaThreadTask: |
956 virtual void RunOnTargetThread() OVERRIDE { | 998 virtual void RunOnTargetThread() OVERRIDE { |
957 if (!database()->SetOriginLastAccessTime(origin_, type_, accessed_time_)) { | 999 if (!database()->SetOriginLastAccessTime(origin_, type_, accessed_time_)) { |
958 set_db_disabled(true); | 1000 set_db_disabled(true); |
959 } | 1001 } |
960 } | 1002 } |
| 1003 |
| 1004 // DatabaseTaskBase: |
961 virtual void DatabaseTaskCompleted() OVERRIDE {} | 1005 virtual void DatabaseTaskCompleted() OVERRIDE {} |
962 | 1006 |
963 private: | 1007 private: |
964 GURL origin_; | 1008 GURL origin_; |
965 StorageType type_; | 1009 StorageType type_; |
966 base::Time accessed_time_; | 1010 base::Time accessed_time_; |
967 }; | 1011 }; |
968 | 1012 |
969 class QuotaManager::UpdateModifiedTimeTask | 1013 class QuotaManager::UpdateModifiedTimeTask |
970 : public QuotaManager::DatabaseTaskBase { | 1014 : public QuotaManager::DatabaseTaskBase { |
971 public: | 1015 public: |
972 UpdateModifiedTimeTask( | 1016 UpdateModifiedTimeTask( |
973 QuotaManager* manager, | 1017 QuotaManager* manager, |
974 const GURL& origin, | 1018 const GURL& origin, |
975 StorageType type, | 1019 StorageType type, |
976 base::Time modified_time) | 1020 base::Time modified_time) |
977 : DatabaseTaskBase(manager), | 1021 : DatabaseTaskBase(manager), |
978 origin_(origin), | 1022 origin_(origin), |
979 type_(type), | 1023 type_(type), |
980 modified_time_(modified_time) {} | 1024 modified_time_(modified_time) {} |
981 | 1025 |
982 protected: | 1026 protected: |
| 1027 virtual ~UpdateModifiedTimeTask() {} |
| 1028 |
| 1029 // QuotaThreadTask: |
983 virtual void RunOnTargetThread() OVERRIDE { | 1030 virtual void RunOnTargetThread() OVERRIDE { |
984 if (!database()->SetOriginLastModifiedTime( | 1031 if (!database()->SetOriginLastModifiedTime( |
985 origin_, type_, modified_time_)) { | 1032 origin_, type_, modified_time_)) { |
986 set_db_disabled(true); | 1033 set_db_disabled(true); |
987 } | 1034 } |
988 } | 1035 } |
| 1036 |
| 1037 // DatabaseTaskBase: |
989 virtual void DatabaseTaskCompleted() OVERRIDE {} | 1038 virtual void DatabaseTaskCompleted() OVERRIDE {} |
990 | 1039 |
991 private: | 1040 private: |
992 GURL origin_; | 1041 GURL origin_; |
993 StorageType type_; | 1042 StorageType type_; |
994 base::Time modified_time_; | 1043 base::Time modified_time_; |
995 }; | 1044 }; |
996 | 1045 |
997 class QuotaManager::GetModifiedSinceTask | 1046 class QuotaManager::GetModifiedSinceTask |
998 : public QuotaManager::DatabaseTaskBase { | 1047 : public QuotaManager::DatabaseTaskBase { |
999 public: | 1048 public: |
1000 GetModifiedSinceTask( | 1049 GetModifiedSinceTask( |
1001 QuotaManager* manager, | 1050 QuotaManager* manager, |
1002 StorageType type, | 1051 StorageType type, |
1003 base::Time modified_since, | 1052 base::Time modified_since, |
1004 GetOriginsCallback callback) | 1053 GetOriginsCallback callback) |
1005 : DatabaseTaskBase(manager), | 1054 : DatabaseTaskBase(manager), |
1006 type_(type), | 1055 type_(type), |
1007 modified_since_(modified_since), | 1056 modified_since_(modified_since), |
1008 callback_(callback) {} | 1057 callback_(callback) {} |
1009 | 1058 |
1010 protected: | 1059 protected: |
| 1060 virtual ~GetModifiedSinceTask() {} |
| 1061 |
| 1062 // QuotaThreadTask: |
1011 virtual void RunOnTargetThread() OVERRIDE { | 1063 virtual void RunOnTargetThread() OVERRIDE { |
1012 if (!database()->GetOriginsModifiedSince( | 1064 if (!database()->GetOriginsModifiedSince( |
1013 type_, &origins_, modified_since_)) { | 1065 type_, &origins_, modified_since_)) { |
1014 set_db_disabled(true); | 1066 set_db_disabled(true); |
1015 } | 1067 } |
1016 } | 1068 } |
1017 | 1069 |
1018 virtual void DatabaseTaskCompleted() OVERRIDE { | |
1019 callback_.Run(origins_, type_); | |
1020 } | |
1021 | |
1022 virtual void Aborted() OVERRIDE { | 1070 virtual void Aborted() OVERRIDE { |
1023 callback_.Run(std::set<GURL>(), type_); | 1071 callback_.Run(std::set<GURL>(), type_); |
1024 } | 1072 } |
1025 | 1073 |
| 1074 // DatabaseTaskBase: |
| 1075 virtual void DatabaseTaskCompleted() OVERRIDE { |
| 1076 callback_.Run(origins_, type_); |
| 1077 } |
| 1078 |
1026 private: | 1079 private: |
1027 StorageType type_; | 1080 StorageType type_; |
1028 base::Time modified_since_; | 1081 base::Time modified_since_; |
1029 std::set<GURL> origins_; | 1082 std::set<GURL> origins_; |
1030 GetOriginsCallback callback_; | 1083 GetOriginsCallback callback_; |
1031 }; | 1084 }; |
1032 | 1085 |
1033 class QuotaManager::DumpQuotaTableTask | 1086 class QuotaManager::DumpQuotaTableTask |
1034 : public QuotaManager::DatabaseTaskBase { | 1087 : public QuotaManager::DatabaseTaskBase { |
1035 private: | 1088 private: |
1036 typedef QuotaManager::DumpQuotaTableTask self_type; | 1089 typedef QuotaManager::DumpQuotaTableTask self_type; |
1037 typedef QuotaManager::DumpQuotaTableCallback Callback; | 1090 typedef QuotaManager::DumpQuotaTableCallback Callback; |
1038 typedef QuotaManager::QuotaTableEntry TableEntry; | 1091 typedef QuotaManager::QuotaTableEntry TableEntry; |
1039 typedef QuotaManager::QuotaTableEntries TableEntries; | 1092 typedef QuotaManager::QuotaTableEntries TableEntries; |
1040 typedef QuotaDatabase::QuotaTableCallback TableCallback; | 1093 typedef QuotaDatabase::QuotaTableCallback TableCallback; |
1041 | 1094 |
1042 public: | 1095 public: |
1043 DumpQuotaTableTask( | 1096 DumpQuotaTableTask( |
1044 QuotaManager* manager, | 1097 QuotaManager* manager, |
1045 const Callback& callback) | 1098 const Callback& callback) |
1046 : DatabaseTaskBase(manager), | 1099 : DatabaseTaskBase(manager), |
1047 callback_(callback) { | 1100 callback_(callback) { |
1048 } | 1101 } |
| 1102 |
1049 protected: | 1103 protected: |
| 1104 virtual ~DumpQuotaTableTask() {} |
| 1105 |
| 1106 // QuotaThreadTask: |
1050 virtual void RunOnTargetThread() OVERRIDE { | 1107 virtual void RunOnTargetThread() OVERRIDE { |
1051 if (!database()->DumpQuotaTable( | 1108 if (!database()->DumpQuotaTable( |
1052 new TableCallback( | 1109 new TableCallback( |
1053 base::Bind(&self_type::AppendEntry, this)))) | 1110 base::Bind(&self_type::AppendEntry, this)))) |
1054 set_db_disabled(true); | 1111 set_db_disabled(true); |
1055 } | 1112 } |
1056 | 1113 |
1057 virtual void Aborted() OVERRIDE { | 1114 virtual void Aborted() OVERRIDE { |
1058 callback_.Run(TableEntries()); | 1115 callback_.Run(TableEntries()); |
1059 } | 1116 } |
1060 | 1117 |
| 1118 // DatabaseTaskBase: |
1061 virtual void DatabaseTaskCompleted() OVERRIDE { | 1119 virtual void DatabaseTaskCompleted() OVERRIDE { |
1062 callback_.Run(entries_); | 1120 callback_.Run(entries_); |
1063 } | 1121 } |
1064 | 1122 |
1065 private: | 1123 private: |
1066 bool AppendEntry(const TableEntry& entry) { | 1124 bool AppendEntry(const TableEntry& entry) { |
1067 entries_.push_back(entry); | 1125 entries_.push_back(entry); |
1068 return true; | 1126 return true; |
1069 } | 1127 } |
1070 | 1128 |
(...skipping 10 matching lines...) Expand all Loading... |
1081 typedef QuotaManager::OriginInfoTableEntries TableEntries; | 1139 typedef QuotaManager::OriginInfoTableEntries TableEntries; |
1082 typedef QuotaDatabase::OriginInfoTableCallback TableCallback; | 1140 typedef QuotaDatabase::OriginInfoTableCallback TableCallback; |
1083 | 1141 |
1084 public: | 1142 public: |
1085 DumpOriginInfoTableTask( | 1143 DumpOriginInfoTableTask( |
1086 QuotaManager* manager, | 1144 QuotaManager* manager, |
1087 const Callback& callback) | 1145 const Callback& callback) |
1088 : DatabaseTaskBase(manager), | 1146 : DatabaseTaskBase(manager), |
1089 callback_(callback) { | 1147 callback_(callback) { |
1090 } | 1148 } |
| 1149 |
1091 protected: | 1150 protected: |
| 1151 virtual ~DumpOriginInfoTableTask() {} |
| 1152 |
| 1153 // QuotaThreadTask: |
1092 virtual void RunOnTargetThread() OVERRIDE { | 1154 virtual void RunOnTargetThread() OVERRIDE { |
1093 if (!database()->DumpOriginInfoTable( | 1155 if (!database()->DumpOriginInfoTable( |
1094 new TableCallback( | 1156 new TableCallback( |
1095 base::Bind(&self_type::AppendEntry, this)))) | 1157 base::Bind(&self_type::AppendEntry, this)))) |
1096 set_db_disabled(true); | 1158 set_db_disabled(true); |
1097 } | 1159 } |
1098 | 1160 |
1099 virtual void Aborted() OVERRIDE { | 1161 virtual void Aborted() OVERRIDE { |
1100 callback_.Run(TableEntries()); | 1162 callback_.Run(TableEntries()); |
1101 } | 1163 } |
1102 | 1164 |
| 1165 // DatabaseTaskBase: |
1103 virtual void DatabaseTaskCompleted() OVERRIDE { | 1166 virtual void DatabaseTaskCompleted() OVERRIDE { |
1104 callback_.Run(entries_); | 1167 callback_.Run(entries_); |
1105 } | 1168 } |
1106 | 1169 |
1107 private: | 1170 private: |
1108 bool AppendEntry(const TableEntry& entry) { | 1171 bool AppendEntry(const TableEntry& entry) { |
1109 entries_.push_back(entry); | 1172 entries_.push_back(entry); |
1110 return true; | 1173 return true; |
1111 } | 1174 } |
1112 | 1175 |
(...skipping 16 matching lines...) Expand all Loading... |
1129 eviction_disabled_(false), | 1192 eviction_disabled_(false), |
1130 io_thread_(io_thread), | 1193 io_thread_(io_thread), |
1131 db_thread_(db_thread), | 1194 db_thread_(db_thread), |
1132 temporary_quota_initialized_(false), | 1195 temporary_quota_initialized_(false), |
1133 temporary_quota_override_(-1), | 1196 temporary_quota_override_(-1), |
1134 desired_available_space_(-1), | 1197 desired_available_space_(-1), |
1135 special_storage_policy_(special_storage_policy), | 1198 special_storage_policy_(special_storage_policy), |
1136 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 1199 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
1137 } | 1200 } |
1138 | 1201 |
1139 QuotaManager::~QuotaManager() { | |
1140 proxy_->manager_ = NULL; | |
1141 std::for_each(clients_.begin(), clients_.end(), | |
1142 std::mem_fun(&QuotaClient::OnQuotaManagerDestroyed)); | |
1143 if (database_.get()) | |
1144 db_thread_->DeleteSoon(FROM_HERE, database_.release()); | |
1145 } | |
1146 | |
1147 void QuotaManager::GetUsageInfo(const GetUsageInfoCallback& callback) { | 1202 void QuotaManager::GetUsageInfo(const GetUsageInfoCallback& callback) { |
1148 LazyInitialize(); | 1203 LazyInitialize(); |
1149 GetUsageInfoTask* get_usage_info = new GetUsageInfoTask(this, callback); | 1204 GetUsageInfoTask* get_usage_info = new GetUsageInfoTask(this, callback); |
1150 get_usage_info->Start(); | 1205 get_usage_info->Start(); |
1151 } | 1206 } |
1152 | 1207 |
1153 void QuotaManager::GetUsageAndQuota( | 1208 void QuotaManager::GetUsageAndQuota( |
1154 const GURL& origin, StorageType type, | 1209 const GURL& origin, StorageType type, |
1155 const GetUsageAndQuotaCallback& callback) { | 1210 const GetUsageAndQuotaCallback& callback) { |
1156 GetUsageAndQuotaInternal(origin, type, false /* global */, | 1211 GetUsageAndQuotaInternal(origin, type, false /* global */, |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1267 } | 1322 } |
1268 | 1323 |
1269 void QuotaManager::GetOriginsModifiedSince(StorageType type, | 1324 void QuotaManager::GetOriginsModifiedSince(StorageType type, |
1270 base::Time modified_since, | 1325 base::Time modified_since, |
1271 const GetOriginsCallback& callback) { | 1326 const GetOriginsCallback& callback) { |
1272 LazyInitialize(); | 1327 LazyInitialize(); |
1273 make_scoped_refptr(new GetModifiedSinceTask( | 1328 make_scoped_refptr(new GetModifiedSinceTask( |
1274 this, type, modified_since, callback))->Start(); | 1329 this, type, modified_since, callback))->Start(); |
1275 } | 1330 } |
1276 | 1331 |
| 1332 QuotaManager::~QuotaManager() { |
| 1333 proxy_->manager_ = NULL; |
| 1334 std::for_each(clients_.begin(), clients_.end(), |
| 1335 std::mem_fun(&QuotaClient::OnQuotaManagerDestroyed)); |
| 1336 if (database_.get()) |
| 1337 db_thread_->DeleteSoon(FROM_HERE, database_.release()); |
| 1338 } |
| 1339 |
1277 void QuotaManager::LazyInitialize() { | 1340 void QuotaManager::LazyInitialize() { |
1278 DCHECK(io_thread_->BelongsToCurrentThread()); | 1341 DCHECK(io_thread_->BelongsToCurrentThread()); |
1279 if (database_.get()) { | 1342 if (database_.get()) { |
1280 // Initialization seems to be done already. | 1343 // Initialization seems to be done already. |
1281 return; | 1344 return; |
1282 } | 1345 } |
1283 | 1346 |
1284 // Use an empty path to open an in-memory only databse for incognito. | 1347 // Use an empty path to open an in-memory only databse for incognito. |
1285 database_.reset(new QuotaDatabase(is_incognito_ ? FilePath() : | 1348 database_.reset(new QuotaDatabase(is_incognito_ ? FilePath() : |
1286 profile_path_.AppendASCII(kDatabaseName))); | 1349 profile_path_.AppendASCII(kDatabaseName))); |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1761 | 1824 |
1762 QuotaManagerProxy::QuotaManagerProxy( | 1825 QuotaManagerProxy::QuotaManagerProxy( |
1763 QuotaManager* manager, base::MessageLoopProxy* io_thread) | 1826 QuotaManager* manager, base::MessageLoopProxy* io_thread) |
1764 : manager_(manager), io_thread_(io_thread) { | 1827 : manager_(manager), io_thread_(io_thread) { |
1765 } | 1828 } |
1766 | 1829 |
1767 QuotaManagerProxy::~QuotaManagerProxy() { | 1830 QuotaManagerProxy::~QuotaManagerProxy() { |
1768 } | 1831 } |
1769 | 1832 |
1770 } // namespace quota | 1833 } // namespace quota |
OLD | NEW |