| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "storage/browser/quota/quota_manager.h" | 5 #include "storage/browser/quota/quota_manager.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <functional> | 8 #include <functional> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 143 bool GetLRUOriginOnDBThread(StorageType type, | 143 bool GetLRUOriginOnDBThread(StorageType type, | 
| 144                             std::set<GURL>* exceptions, | 144                             std::set<GURL>* exceptions, | 
| 145                             SpecialStoragePolicy* policy, | 145                             SpecialStoragePolicy* policy, | 
| 146                             GURL* url, | 146                             GURL* url, | 
| 147                             QuotaDatabase* database) { | 147                             QuotaDatabase* database) { | 
| 148   DCHECK(database); | 148   DCHECK(database); | 
| 149   database->GetLRUOrigin(type, *exceptions, policy, url); | 149   database->GetLRUOrigin(type, *exceptions, policy, url); | 
| 150   return true; | 150   return true; | 
| 151 } | 151 } | 
| 152 | 152 | 
|  | 153 bool GetDurableOnDBThread(const GURL& origin, | 
|  | 154                           bool* durable, | 
|  | 155                           QuotaDatabase* database) { | 
|  | 156   DCHECK(database); | 
|  | 157   return database->GetDurabilityForOrigin(origin, durable); | 
|  | 158 } | 
|  | 159 | 
| 153 bool DeleteOriginInfoOnDBThread(const GURL& origin, | 160 bool DeleteOriginInfoOnDBThread(const GURL& origin, | 
| 154                                 StorageType type, | 161                                 StorageType type, | 
| 155                                 QuotaDatabase* database) { | 162                                 QuotaDatabase* database) { | 
| 156   DCHECK(database); | 163   DCHECK(database); | 
| 157   return database->DeleteOriginInfo(origin, type); | 164   return database->DeleteOriginInfo(origin, type); | 
| 158 } | 165 } | 
| 159 | 166 | 
| 160 bool InitializeTemporaryOriginsInfoOnDBThread(const std::set<GURL>* origins, | 167 bool InitializeTemporaryOriginsInfoOnDBThread(const std::set<GURL>* origins, | 
| 161                                               QuotaDatabase* database) { | 168                                               QuotaDatabase* database) { | 
| 162   DCHECK(database); | 169   DCHECK(database); | 
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 709 | 716 | 
| 710 class QuotaManager::GetModifiedSinceHelper { | 717 class QuotaManager::GetModifiedSinceHelper { | 
| 711  public: | 718  public: | 
| 712   bool GetModifiedSinceOnDBThread(StorageType type, | 719   bool GetModifiedSinceOnDBThread(StorageType type, | 
| 713                                   base::Time modified_since, | 720                                   base::Time modified_since, | 
| 714                                   QuotaDatabase* database) { | 721                                   QuotaDatabase* database) { | 
| 715     DCHECK(database); | 722     DCHECK(database); | 
| 716     return database->GetOriginsModifiedSince(type, &origins_, modified_since); | 723     return database->GetOriginsModifiedSince(type, &origins_, modified_since); | 
| 717   } | 724   } | 
| 718 | 725 | 
|  | 726 | 
| 719   void DidGetModifiedSince(const base::WeakPtr<QuotaManager>& manager, | 727   void DidGetModifiedSince(const base::WeakPtr<QuotaManager>& manager, | 
| 720                            const GetOriginsCallback& callback, | 728                            const GetOriginsCallback& callback, | 
| 721                            StorageType type, | 729                            StorageType type, | 
| 722                            bool success) { | 730                            bool success) { | 
| 723     if (!manager) { | 731     if (!manager) { | 
| 724       // The operation was aborted. | 732       // The operation was aborted. | 
| 725       callback.Run(std::set<GURL>(), type); | 733       callback.Run(std::set<GURL>(), type); | 
| 726       return; | 734       return; | 
| 727     } | 735     } | 
| 728     manager->DidDatabaseWork(success); | 736     manager->DidDatabaseWork(success); | 
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 825 void QuotaManager::GetUsageAndQuotaForWebApps( | 833 void QuotaManager::GetUsageAndQuotaForWebApps( | 
| 826     const GURL& origin, | 834     const GURL& origin, | 
| 827     StorageType type, | 835     StorageType type, | 
| 828     const GetUsageAndQuotaCallback& callback) { | 836     const GetUsageAndQuotaCallback& callback) { | 
| 829   // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. | 837   // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. | 
| 830   tracked_objects::ScopedTracker tracking_profile( | 838   tracked_objects::ScopedTracker tracking_profile( | 
| 831       FROM_HERE_WITH_EXPLICIT_FUNCTION( | 839       FROM_HERE_WITH_EXPLICIT_FUNCTION( | 
| 832           "477117 QuotaManager::GetUsageAndQuotaForWebApps")); | 840           "477117 QuotaManager::GetUsageAndQuotaForWebApps")); | 
| 833   if (type != kStorageTypeTemporary && | 841   if (type != kStorageTypeTemporary && | 
| 834       type != kStorageTypePersistent && | 842       type != kStorageTypePersistent && | 
|  | 843       type != kStorageTypeDurable && | 
| 835       type != kStorageTypeSyncable) { | 844       type != kStorageTypeSyncable) { | 
| 836     callback.Run(kQuotaErrorNotSupported, 0, 0); | 845     callback.Run(kQuotaErrorNotSupported, 0, 0); | 
| 837     return; | 846     return; | 
| 838   } | 847   } | 
| 839 | 848 | 
| 840   DCHECK(origin == origin.GetOrigin()); | 849   DCHECK(origin == origin.GetOrigin()); | 
| 841   LazyInitialize(); | 850   LazyInitialize(); | 
| 842 | 851 | 
| 843   bool unlimited = IsStorageUnlimited(origin, type); | 852   bool unlimited = IsStorageUnlimited(origin, type); | 
| 844   bool can_query_disk_size = CanQueryDiskSize(origin); | 853   bool can_query_disk_size = CanQueryDiskSize(origin); | 
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1042                  weak_factory_.GetWeakPtr(), | 1051                  weak_factory_.GetWeakPtr(), | 
| 1043                  host, | 1052                  host, | 
| 1044                  base::Owned(quota_ptr))); | 1053                  base::Owned(quota_ptr))); | 
| 1045 } | 1054 } | 
| 1046 | 1055 | 
| 1047 void QuotaManager::SetPersistentHostQuota(const std::string& host, | 1056 void QuotaManager::SetPersistentHostQuota(const std::string& host, | 
| 1048                                           int64 new_quota, | 1057                                           int64 new_quota, | 
| 1049                                           const QuotaCallback& callback) { | 1058                                           const QuotaCallback& callback) { | 
| 1050   LazyInitialize(); | 1059   LazyInitialize(); | 
| 1051   if (host.empty()) { | 1060   if (host.empty()) { | 
|  | 1061     LOG(ERROR) << "Calling with kQuotaErrorNotSupported"; | 
| 1052     // This could happen if we are called on file:///. | 1062     // This could happen if we are called on file:///. | 
| 1053     callback.Run(kQuotaErrorNotSupported, 0); | 1063     callback.Run(kQuotaErrorNotSupported, 0); | 
| 1054     return; | 1064     return; | 
| 1055   } | 1065   } | 
| 1056 | 1066 | 
| 1057   if (new_quota < 0) { | 1067   if (new_quota < 0) { | 
| 1058     callback.Run(kQuotaErrorInvalidModification, -1); | 1068     callback.Run(kQuotaErrorInvalidModification, -1); | 
| 1059     return; | 1069     return; | 
| 1060   } | 1070   } | 
| 1061 | 1071 | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1136   // For syncable storage we should always enforce quota (since the | 1146   // For syncable storage we should always enforce quota (since the | 
| 1137   // quota must be capped by the server limit). | 1147   // quota must be capped by the server limit). | 
| 1138   if (type == kStorageTypeSyncable) | 1148   if (type == kStorageTypeSyncable) | 
| 1139     return false; | 1149     return false; | 
| 1140   if (type == kStorageTypeQuotaNotManaged) | 1150   if (type == kStorageTypeQuotaNotManaged) | 
| 1141     return true; | 1151     return true; | 
| 1142   return special_storage_policy_.get() && | 1152   return special_storage_policy_.get() && | 
| 1143          special_storage_policy_->IsStorageUnlimited(origin); | 1153          special_storage_policy_->IsStorageUnlimited(origin); | 
| 1144 } | 1154 } | 
| 1145 | 1155 | 
|  | 1156 void QuotaManager::GetDurability(const GURL& origin, | 
|  | 1157                                  const GetDurabilityCallback& callback) { | 
|  | 1158   LazyInitialize(); | 
|  | 1159   LOG(ERROR) << "Got into QuotaManager::GetDurability"; | 
|  | 1160 | 
|  | 1161   // if db is hosed, do something with callback | 
|  | 1162 | 
|  | 1163   bool* is_durable = new bool; | 
|  | 1164   PostTaskAndReplyWithResultForDBThread( | 
|  | 1165       FROM_HERE, | 
|  | 1166       base::Bind(&GetDurableOnDBThread, | 
|  | 1167                  origin, | 
|  | 1168                  base::Unretained(is_durable)), | 
|  | 1169       base::Bind(&QuotaManager::DidGetDurability, | 
|  | 1170                  weak_factory_.GetWeakPtr(), | 
|  | 1171                  callback, | 
|  | 1172                  base::Owned(is_durable))); | 
|  | 1173 } | 
|  | 1174 | 
| 1146 void QuotaManager::GetOriginsModifiedSince(StorageType type, | 1175 void QuotaManager::GetOriginsModifiedSince(StorageType type, | 
| 1147                                            base::Time modified_since, | 1176                                            base::Time modified_since, | 
| 1148                                            const GetOriginsCallback& callback) { | 1177                                            const GetOriginsCallback& callback) { | 
| 1149   LazyInitialize(); | 1178   LazyInitialize(); | 
| 1150   GetModifiedSinceHelper* helper = new GetModifiedSinceHelper; | 1179   GetModifiedSinceHelper* helper = new GetModifiedSinceHelper; | 
| 1151   PostTaskAndReplyWithResultForDBThread( | 1180   PostTaskAndReplyWithResultForDBThread( | 
| 1152       FROM_HERE, | 1181       FROM_HERE, | 
| 1153       base::Bind(&GetModifiedSinceHelper::GetModifiedSinceOnDBThread, | 1182       base::Bind(&GetModifiedSinceHelper::GetModifiedSinceOnDBThread, | 
| 1154                  base::Unretained(helper), | 1183                  base::Unretained(helper), | 
| 1155                  type, | 1184                  type, | 
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1262   switch (type) { | 1291   switch (type) { | 
| 1263     case kStorageTypeTemporary: | 1292     case kStorageTypeTemporary: | 
| 1264       return temporary_usage_tracker_.get(); | 1293       return temporary_usage_tracker_.get(); | 
| 1265     case kStorageTypePersistent: | 1294     case kStorageTypePersistent: | 
| 1266       return persistent_usage_tracker_.get(); | 1295       return persistent_usage_tracker_.get(); | 
| 1267     case kStorageTypeSyncable: | 1296     case kStorageTypeSyncable: | 
| 1268       return syncable_usage_tracker_.get(); | 1297       return syncable_usage_tracker_.get(); | 
| 1269     case kStorageTypeQuotaNotManaged: | 1298     case kStorageTypeQuotaNotManaged: | 
| 1270       return NULL; | 1299       return NULL; | 
| 1271     case kStorageTypeUnknown: | 1300     case kStorageTypeUnknown: | 
|  | 1301     case kStorageTypeDurable: | 
| 1272       NOTREACHED(); | 1302       NOTREACHED(); | 
| 1273   } | 1303   } | 
| 1274   return NULL; | 1304   return NULL; | 
| 1275 } | 1305 } | 
| 1276 | 1306 | 
| 1277 void QuotaManager::GetCachedOrigins( | 1307 void QuotaManager::GetCachedOrigins( | 
| 1278     StorageType type, std::set<GURL>* origins) { | 1308     StorageType type, std::set<GURL>* origins) { | 
| 1279   DCHECK(origins); | 1309   DCHECK(origins); | 
| 1280   LazyInitialize(); | 1310   LazyInitialize(); | 
| 1281   DCHECK(GetUsageTracker(type)); | 1311   DCHECK(GetUsageTracker(type)); | 
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1599 } | 1629 } | 
| 1600 | 1630 | 
| 1601 void QuotaManager::DidGetAvailableSpace(int64 space) { | 1631 void QuotaManager::DidGetAvailableSpace(int64 space) { | 
| 1602   available_space_callbacks_.Run(kQuotaStatusOk, space); | 1632   available_space_callbacks_.Run(kQuotaStatusOk, space); | 
| 1603 } | 1633 } | 
| 1604 | 1634 | 
| 1605 void QuotaManager::DidDatabaseWork(bool success) { | 1635 void QuotaManager::DidDatabaseWork(bool success) { | 
| 1606   db_disabled_ = !success; | 1636   db_disabled_ = !success; | 
| 1607 } | 1637 } | 
| 1608 | 1638 | 
|  | 1639 void QuotaManager::DidGetDurability(const GetDurabilityCallback& callback, | 
|  | 1640                                     const bool* durable, | 
|  | 1641                                     bool success) { | 
|  | 1642   DidDatabaseWork(success); | 
|  | 1643   if (!success) { | 
|  | 1644     NOTREACHED() << "Add a test for this"; | 
|  | 1645     callback.Run(kQuotaErrorInvalidAccess, false /*durability*/); | 
|  | 1646     return; | 
|  | 1647   } | 
|  | 1648   callback.Run(kQuotaStatusOk, *durable); | 
|  | 1649 } | 
|  | 1650 | 
| 1609 void QuotaManager::DeleteOnCorrectThread() const { | 1651 void QuotaManager::DeleteOnCorrectThread() const { | 
| 1610   if (!io_thread_->BelongsToCurrentThread() && | 1652   if (!io_thread_->BelongsToCurrentThread() && | 
| 1611       io_thread_->DeleteSoon(FROM_HERE, this)) { | 1653       io_thread_->DeleteSoon(FROM_HERE, this)) { | 
| 1612     return; | 1654     return; | 
| 1613   } | 1655   } | 
| 1614   delete this; | 1656   delete this; | 
| 1615 } | 1657 } | 
| 1616 | 1658 | 
| 1617 void QuotaManager::PostTaskAndReplyWithResultForDBThread( | 1659 void QuotaManager::PostTaskAndReplyWithResultForDBThread( | 
| 1618     const tracked_objects::Location& from_here, | 1660     const tracked_objects::Location& from_here, | 
| 1619     const base::Callback<bool(QuotaDatabase*)>& task, | 1661     const base::Callback<bool(QuotaDatabase*)>& task, | 
| 1620     const base::Callback<void(bool)>& reply) { | 1662     const base::Callback<void(bool)>& reply) { | 
| 1621   // Deleting manager will post another task to DB thread to delete | 1663   // Deleting manager will post another task to DB thread to delete | 
| 1622   // |database_|, therefore we can be sure that database_ is alive when this | 1664   // |database_|, therefore we can be sure that database_ is alive when this | 
| 1623   // task runs. | 1665   // task runs. | 
| 1624   base::PostTaskAndReplyWithResult( | 1666   base::PostTaskAndReplyWithResult( | 
| 1625       db_thread_.get(), | 1667       db_thread_.get(), | 
| 1626       from_here, | 1668       from_here, | 
| 1627       base::Bind(task, base::Unretained(database_.get())), | 1669       base::Bind(task, base::Unretained(database_.get())), | 
| 1628       reply); | 1670       reply); | 
| 1629 } | 1671 } | 
| 1630 | 1672 | 
| 1631 }  // namespace storage | 1673 }  // namespace storage | 
| OLD | NEW | 
|---|