| 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 |