10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <algorithm> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sstream> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/run_loop.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sys_info.h" 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/test/mock_special_storage_policy.h" 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/public/test/mock_storage_client.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_database.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_manager.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_manager_proxy.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::MessageLoopProxy; 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kQuotaErrorAbort; 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kQuotaErrorInvalidModification; 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kQuotaErrorNotSupported; 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kQuotaStatusOk; 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kQuotaStatusUnknown; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kStorageTypePersistent; 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kStorageTypeSyncable; 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kStorageTypeTemporary; 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::kStorageTypeUnknown; 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::QuotaClient; 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::QuotaManager; 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::QuotaStatusCode; 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::StorageType; 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::UsageAndQuota; 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::UsageInfo; 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::UsageInfoEntries; 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace content { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace { 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For shorter names. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StorageType kTemp = kStorageTypeTemporary; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StorageType kPerm = kStorageTypePersistent; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StorageType kSync = kStorageTypeSyncable; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kAllClients = QuotaClient::kAllClientsMask; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int64 kAvailableSpaceForApp = 13377331U; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int64 kMinimumPreserveForSystem = QuotaManager::kMinimumPreserveForSystem; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int kPerHostTemporaryPortion = QuotaManager::kPerHostTemporaryPortion; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a deterministic value for the amount of available disk space. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 GetAvailableDiskSpaceForTest(const base::FilePath&) { 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return kAvailableSpaceForApp + kMinimumPreserveForSystem; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class QuotaManagerTest : public testing::Test { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef QuotaManager::QuotaTableEntry QuotaTableEntry; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef QuotaManager::QuotaTableEntries QuotaTableEntries; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaManagerTest() 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : mock_time_counter_(0), 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_factory_(this) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_special_storage_policy_ = new MockSpecialStoragePolicy; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetQuotaManager(false /* is_incognito */); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void TearDown() { 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure the quota manager cleans up correctly. 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota_manager_ = NULL; 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetQuotaManager(bool is_incognito) { 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) quota_manager_ = new QuotaManager(is_incognito, 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) data_dir_.path(), 977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MessageLoopProxy::current().get(), 987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MessageLoopProxy::current().get(), 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) mock_special_storage_policy_.get()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't (automatically) start the eviction for testing. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->eviction_disabled_ = true; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't query the hard disk for remaining capacity. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->get_disk_space_fn_ = &GetAvailableDiskSpaceForTest; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) additional_callback_count_ = 0; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* CreateClient( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MockOriginData* mock_data, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t mock_data_size, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::ID id) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new MockStorageClient(quota_manager_->proxy(), 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_data, id, mock_data_size); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RegisterClient(MockStorageClient* client) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->proxy()->RegisterClient(client); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetUsageInfo() { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_info_.clear(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetUsageInfo( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetUsageInfo, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void GetUsageAndQuotaForWebApps(const GURL& origin, 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StorageType type) { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) usage_ = -1; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota_ = -1; 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) quota_manager_->GetUsageAndQuotaForWebApps( 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota, 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_factory_.GetWeakPtr())); 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void GetUsageAndQuotaForStorageClient(const GURL& origin, 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) StorageType type) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = -1; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetUsageAndQuota( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetTemporaryGlobalQuota() { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetTemporaryGlobalQuota( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetQuota, 15190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr())); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetTemporaryGlobalQuota(int64 new_quota) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->SetTemporaryGlobalOverrideQuota( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_quota, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetQuota, 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr())); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetPersistentHostQuota(const std::string& host) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetPersistentHostQuota( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetHostQuota, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPersistentHostQuota(const std::string& host, int64 new_quota) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->SetPersistentHostQuota( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, new_quota, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetHostQuota, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetGlobalUsage(StorageType type) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = -1; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unlimited_usage_ = -1; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetGlobalUsage( 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetGlobalUsage, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetHostUsage(const std::string& host, StorageType type) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = -1; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetHostUsage( 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, type, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetHostUsage, 19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) weak_factory_.GetWeakPtr())); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunAdditionalUsageAndQuotaTask(const GURL& origin, StorageType type) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetUsageAndQuota( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaAdditional, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteClientOriginData(QuotaClient* client, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType type) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(client); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->DeleteOriginData( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::StatusCallback, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EvictOriginData(const GURL& origin, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType type) { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->EvictOriginData( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::StatusCallback, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteOriginData(const GURL& origin, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType type, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int quota_client_mask) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DeleteOriginData( 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, quota_client_mask, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::StatusCallback, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteHostData(const std::string& host, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType type, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int quota_client_mask) { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DeleteHostData( 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host, type, quota_client_mask, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::StatusCallback, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAvailableSpace() { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) available_space_ = -1; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetAvailableSpace( 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetAvailableSpace, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetUsageAndQuotaForEviction() { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = kQuotaStatusUnknown; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = -1; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unlimited_usage_ = -1; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = -1; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) available_space_ = -1; 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetUsageAndQuotaForEviction( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaForEviction, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetCachedOrigins(StorageType type, std::set<GURL>* origins) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(origins != NULL); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins->clear(); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetCachedOrigins(type, origins); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyStorageAccessed(QuotaClient* client, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& origin, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType type) { 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(client); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->NotifyStorageAccessedInternal( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->id(), origin, type, IncrementMockTime()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeleteOriginFromDatabase(const GURL& origin, StorageType type) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DeleteOriginFromDatabase(origin, type); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetLRUOrigin(StorageType type) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lru_origin_ = GURL(); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetLRUOrigin( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetLRUOrigin, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyOriginInUse(const GURL& origin) { 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->NotifyOriginInUse(origin); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyOriginNoLongerInUse(const GURL& origin) { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->NotifyOriginNoLongerInUse(origin); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetOriginsModifiedSince(StorageType type, base::Time modified_since) { 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modified_origins_.clear(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modified_origins_type_ = kStorageTypeUnknown; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->GetOriginsModifiedSince( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, modified_since, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidGetModifiedOrigins, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DumpQuotaTable() { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_entries_.clear(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DumpQuotaTable( 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidDumpQuotaTable, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DumpOriginInfoTable() { 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info_entries_.clear(); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_->DumpOriginInfoTable( 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetUsageInfo(const UsageInfoEntries& entries) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = usage; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = quota; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void DidGetQuota(QuotaStatusCode status, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = quota; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetAvailableSpace(QuotaStatusCode status, int64 available_space) { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) available_space_ = available_space; 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetHostQuota(QuotaStatusCode status, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota) { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_ = quota; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void DidGetGlobalUsage(int64 usage, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 unlimited_usage) { 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = usage; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unlimited_usage_ = unlimited_usage; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void DidGetHostUsage(int64 usage) { 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = usage; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StatusCallback(QuotaStatusCode status) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++status_callback_count_; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetUsageAndQuotaForEviction(QuotaStatusCode status, 36490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const UsageAndQuota& usage_and_quota) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_status_ = status; 36690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) limited_usage_ = usage_and_quota.global_limited_usage; 36790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) quota_ = usage_and_quota.quota; 36890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) available_space_ = usage_and_quota.available_disk_space; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetLRUOrigin(const GURL& origin) { 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lru_origin_ = origin; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetModifiedOrigins(const std::set<GURL>& origins, StorageType type) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modified_origins_ = origins; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) modified_origins_type_ = type; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidDumpQuotaTable(const QuotaTableEntries& entries) { 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_entries_ = entries; 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin_info_entries_ = entries; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetUsage_WithModifyTestBody(const StorageType type); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_additional_callback_count(int c) { additional_callback_count_ = c; } 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int additional_callback_count() const { return additional_callback_count_; } 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGetUsageAndQuotaAdditional( 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaStatusCode status, int64 usage, int64 quota) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++additional_callback_count_; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaManager* quota_manager() const { return quota_manager_.get(); } 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_quota_manager(QuotaManager* quota_manager) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager_ = quota_manager; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockSpecialStoragePolicy* mock_special_storage_policy() const { 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mock_special_storage_policy_.get(); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaStatusCode status() const { return quota_status_; } 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UsageInfoEntries& usage_info() const { return usage_info_; } 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage() const { return usage_; } 40990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int64 limited_usage() const { return limited_usage_; } 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 unlimited_usage() const { return unlimited_usage_; } 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota() const { return quota_; } 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 available_space() const { return available_space_; } 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& lru_origin() const { return lru_origin_; } 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<GURL>& modified_origins() const { return modified_origins_; } 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType modified_origins_type() const { return modified_origins_type_; } 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const QuotaTableEntries& quota_entries() const { return quota_entries_; } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const OriginInfoTableEntries& origin_info_entries() const { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return origin_info_entries_; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path() const { return data_dir_.path(); } 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int status_callback_count() const { return status_callback_count_; } 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void reset_status_callback_count() { status_callback_count_ = 0; } 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time IncrementMockTime() { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++mock_time_counter_; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::Time::FromDoubleT(mock_time_counter_ * 10.0); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop message_loop_; 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir data_dir_; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<QuotaManager> quota_manager_; 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaStatusCode quota_status_; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UsageInfoEntries usage_info_; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage_; 43990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) int64 limited_usage_; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 unlimited_usage_; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 available_space_; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL lru_origin_; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> modified_origins_; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StorageType modified_origins_type_; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaTableEntries quota_entries_; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OriginInfoTableEntries origin_info_entries_; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int status_callback_count_; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int additional_callback_count_; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mock_time_counter_; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::WeakPtrFactory<QuotaManagerTest> weak_factory_; 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QuotaManagerTest); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsageInfo) { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kTemp, 15 }, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 20 }, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kPerm, 50 }, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com/", kTemp, 30 }, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com:8081/", kTemp, 35 }, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kPerm, 40 }, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://example.com/", kPerm, 40 }, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetUsageInfo(); 478d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, usage_info().size()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < usage_info().size(); ++i) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UsageInfo& info = usage_info()[i]; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (info.host == "foo.com" && info.type == kTemp) { 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 15 + 30 + 35, info.usage); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (info.host == "bar.com" && info.type == kTemp) { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(20, info.usage); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (info.host == "bar.com" && info.type == kPerm) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(50 + 40, info.usage); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (info.host == "example.com" && info.type == kPerm) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(40, info.usage); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ADD_FAILURE() 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Unexpected host, type: " << info.host << ", " << info.type; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsageAndQuota_Simple) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 80 }, 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 507d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(80, usage()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, quota()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 513d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage()); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(0, quota()); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 quota_returned_for_foo = quota(); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp); 520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(quota_returned_for_foo, quota()); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_NoClient) { 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 528d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 533d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 538d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 542d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 546d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 551d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_EmptyClient) { 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem)); 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 559d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 564d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 569d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 573d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 577d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 582d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_MultiOrigins) { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kTemp, 20 }, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 5 }, 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://bar.com/", kTemp, 7 }, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://baz.com/", kTemp, 30 }, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 40 }, 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This time explicitly sets a temporary global quota. 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(100); 601d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, quota()); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 606d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int kPerHostQuota = 100 / kPerHostTemporaryPortion; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The host's quota should be its full portion of the global quota 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // since global usage is under the global quota. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuota, quota()); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp); 617d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(5 + 7, usage()); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuota, quota()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_MultipleClients) { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://bar.com/", kTemp, 2 }, 627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://bar.com/", kPerm, 4 }, 628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://unlimited/", kPerm, 8 }, 629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://installed/", kPerm, 16 }, 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "https://foo.com/", kTemp, 128 }, 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://example.com/", kPerm, 256 }, 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://unlimited/", kTemp, 512 }, 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://installed/", kTemp, 1024 }, 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/")); 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/")); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase)); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int64 kTempQuotaBase = 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetAvailableDiskSpaceForTest(base::FilePath()) / kPerHostTemporaryPortion; 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 647c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 648d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1 + 128, usage()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kPerm); 653d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(4, usage()); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp); 658d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(512, usage()); 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota()); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm); 664d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(8, usage()); 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp + usage(), quota()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAvailableSpace(); 670d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(0, available_space()); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://installed/"), kTemp); 675d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1024, usage()); 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota()); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm); 681d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(16, usage()); 684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(usage(), quota()); // Over-budget case. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 687d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(1 + 2 + 128 + 512 + 1024, usage()); 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(512, unlimited_usage()); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 693d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(4 + 8 + 16 + 256, usage()); 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(8, unlimited_usage()); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void QuotaManagerTest::GetUsage_WithModifyTestBody(const StorageType type) { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const MockOriginData data[] = { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", type, 10 }, 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", type, 20 }, 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(data, ARRAYSIZE_UNSAFE(data), 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type); 709d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://foo.com/"), type, 30); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://foo.com:1/"), type, -5); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->AddOriginAndNotify(GURL("https://foo.com/"), type, 1); 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type); 718d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20 + 30 - 5 + 1, usage()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int foo_usage = usage(); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->AddOriginAndNotify(GURL("http://bar.com/"), type, 40); 724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), type); 725d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(40, usage()); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(type); 730d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(foo_usage + 40, usage()); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsage_WithModify) { 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetUsage_WithModifyTestBody(kTemp); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_WithAdditionalTasks) { 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kTemp, 20 }, 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 13 }, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 40 }, 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(100); 749d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion; 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 756d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuota, quota()); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_additional_callback_count(0); 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTemp); 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kTemp); 766d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuota, quota()); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, additional_callback_count()); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_NukeManager) { 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kTemp, 20 }, 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 13 }, 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 40 }, 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(100); 783d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_additional_callback_count(0); 786c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTemp); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTemp); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nuke before waiting for callbacks. 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_quota_manager(NULL); 797d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaErrorAbort, status()); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Overbudget) { 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://usage1/", kTemp, 1 }, 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://usage10/", kTemp, 10 }, 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://usage200/", kTemp, 200 }, 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(100); 810d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage1/"), kTemp); 815d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, usage()); 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, quota()); // should be clamped to our current usage 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp); 821d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage()); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, quota()); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage200/"), kTemp); 827d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(200, usage()); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuota, quota()); // should be clamped to the nominal quota 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Unlimited) { 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://usage10/", kTemp, 10 }, 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://usage50/", kTemp, 50 }, 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://unlimited/", kTemp, 4000 }, 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/")); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test when not overbugdet. 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(1000); 846d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 849d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 50 + 4000, usage()); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4000, unlimited_usage()); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPerHostQuotaFor1000 = 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1000 / QuotaManager::kPerHostTemporaryPortion; 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 856c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp); 857d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage()); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor1000, quota()); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp); 863d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(50, usage()); 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor1000, quota()); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp); 869d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4000, usage()); 872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp + usage(), quota()); 873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp); 875d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, usage()); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(QuotaManager::kNoLimit, quota()); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test when overbugdet. 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(100); 882d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPerHostQuotaFor100 = 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100 / QuotaManager::kPerHostTemporaryPortion; 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp); 888d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage()); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor100, quota()); 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 893c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp); 894d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(50, usage()); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor100, quota()); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp); 900d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4000, usage()); 903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp + usage(), quota()); 904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp); 906d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, usage()); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(QuotaManager::kNoLimit, quota()); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Revoke the unlimited rights and make sure the change is noticed. 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_special_storage_policy()->Reset(); 913c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->NotifyCleared(); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 916d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 50 + 4000, usage()); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 920c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp); 921d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage()); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, quota()); // should be clamped to our current usage 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp); 927d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(50, usage()); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor100, quota()); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp); 933d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(4000, usage()); 936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor100, quota()); 937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp); 939d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4000, usage()); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kPerHostQuotaFor100, quota()); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, OriginInUse) { 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kFooOrigin("http://foo.com/"); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kBarOrigin("http://bar.com/"); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin)); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginInUse(kFooOrigin); // count of 1 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin)); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginInUse(kFooOrigin); // count of 2 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin); // count of 1 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin)); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin)); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginInUse(kBarOrigin); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(quota_manager()->IsOriginInUse(kBarOrigin)); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginNoLongerInUse(kBarOrigin); 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin)); 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin)); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetAndSetPerststentHostQuota) { 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem)); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPersistentHostQuota("foo.com"); 971d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, quota()); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 100); 975d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, quota()); 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPersistentHostQuota("foo.com"); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 200); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPersistentHostQuota("foo.com"); 9815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPersistentHostQuota("foo.com", QuotaManager::kPerHostPersistentQuotaLimit); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPersistentHostQuota("foo.com"); 983d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota()); 9855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Persistent quota should be capped at the per-host quota limit. 9875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetPersistentHostQuota("foo.com", 9885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) QuotaManager::kPerHostPersistentQuotaLimit + 100); 9895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetPersistentHostQuota("foo.com"); 9905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 9915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(QuotaManager::kPerHostPersistentQuotaLimit, quota()); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetAndSetPersistentUsageAndQuota) { 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem)); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 998d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, quota()); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 100); 1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 1005d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage()); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, quota()); 1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For installed app GetUsageAndQuotaForWebApps returns the capped quota. 1011c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/")); 1012c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetPersistentHostQuota("installed", kAvailableSpaceForApp + 100); 1013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm); 1014d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1015c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp, quota()); 1016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Ditto for unlimited apps. 1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/")); 1019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm); 1020d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp, quota()); 1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetUsageAndQuotaForStorageClient should just return 0 usage and 1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // kNoLimit quota. 1025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kPerm); 1026d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, usage()); 1028c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(QuotaManager::kNoLimit, quota()); 1029c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1030c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(QuotaManagerTest, GetSyncableQuota) { 1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem)); 1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Pre-condition check: available disk space (for testing) is less than 1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the default quota for syncable storage. 1036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_LE(kAvailableSpaceForApp, 1037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QuotaManager::kSyncableStorageDefaultHostQuota); 1038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For installed apps the quota manager should return 1040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // kAvailableSpaceForApp as syncable quota (because of the pre-condition). 1041c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/")); 1042c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://installed/"), kSync); 1043d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1044c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 1045c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, usage()); 1046c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kAvailableSpaceForApp, quota()); 1047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // If it's not installed (which shouldn't happen in real case) it 1049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should just return the default host quota for syncable. 1050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo/"), kSync); 1051d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1052c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 1053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, usage()); 1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(QuotaManager::kSyncableStorageDefaultHostQuota, quota()); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_MultiOrigins) { 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 10 }, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kPerm, 20 }, 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com/", kPerm, 13 }, 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com:8081/", kPerm, 19 }, 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kPerm, 5 }, 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://bar.com/", kPerm, 7 }, 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://baz.com/", kPerm, 30 }, 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 40 }, 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 100); 1072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 1073d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20 + 13 + 19, usage()); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, quota()); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetPersistentUsage_WithModify) { 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetUsage_WithModifyTestBody(kPerm); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_WithAdditionalTasks) { 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 10 }, 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kPerm, 20 }, 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kPerm, 13 }, 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 40 }, 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 100); 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1094c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 1095c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 1096c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 1097d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, quota()); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_additional_callback_count(0); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPerm); 1105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm); 1107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10 + 20, usage()); 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, additional_callback_count()); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_NukeManager) { 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 10 }, 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:8080/", kPerm, 20 }, 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kPerm, 13 }, 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 40 }, 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("foo.com", 100); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_additional_callback_count(0); 1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), kPerm); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nuke before waiting for callbacks. 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_quota_manager(NULL); 1131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaErrorAbort, status()); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_Simple) { 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 1 }, 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kPerm, 20 }, 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 300 }, 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://buz.com/", kTemp, 4000 }, 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://buz.com/", kTemp, 50000 }, 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com:1/", kPerm, 600000 }, 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 7000000 }, 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem)); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 1149d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 1 + 20 + 600000); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 1 + 20); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("buz.com", kTemp); 1163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 4000 + 50000); 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_WithModification) { 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 1 }, 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kPerm, 20 }, 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 300 }, 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://buz.com/", kTemp, 4000 }, 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://buz.com/", kTemp, 50000 }, 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com:1/", kPerm, 600000 }, 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 7000000 }, 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 1183d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 1 + 20 + 600000); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify( 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://foo.com/"), kPerm, 80000000); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kPerm); 1191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 1 + 20 + 600000 + 80000000); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify( 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://foo.com/"), kTemp, 1); 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1204d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000 + 1); 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, unlimited_usage()); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("buz.com", kTemp); 1209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 4000 + 50000); 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify( 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://buz.com/"), kTemp, 900000000); 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("buz.com", kTemp); 1216d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(usage(), 4000 + 50000 + 900000000); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsage_WithDeleteOrigin) { 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 4000 }, 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1232d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_global_tmp = usage(); 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_tmp = usage(); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1240d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_pers = usage(); 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteClientOriginData(client, GURL("http://foo.com/"), 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTemp); 1245d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1249d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp - 1, usage()); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1253d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_tmp - 1, usage()); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1257d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_pers, usage()); 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetAvailableSpaceTest) { 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAvailableSpace(); 1263d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(0, available_space()); 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, EvictOriginData) { 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 4000 }, 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 50000 }, 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 6000 }, 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 700 }, 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com/", kTemp, 80 }, 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 9 }, 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1290d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_global_tmp = usage(); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1294d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_tmp = usage(); 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1298d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_pers = usage(); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i) 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown, 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(kData1[i].origin), kData1[i].type); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i) 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown, 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(kData2[i].origin), kData2[i].type); 1307d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EvictOriginData(GURL("http://foo.com/"), kTemp); 1310d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpOriginInfoTable(); 1313d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origin_info_entries().begin()), 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end(origin_info_entries().end()); 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (itr->type == kTemp) 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec()); 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1324d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp - (1 + 50000), usage()); 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1328d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_tmp - (1 + 50000), usage()); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1332d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_pers, usage()); 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, EvictOriginDataWithDeletionError) { 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 4000 }, 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kNumberOfTemporaryOrigins = 3; 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1349d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_global_tmp = usage(); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1353d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_tmp = usage(); 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1357d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_pers = usage(); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL(kData[i].origin), kData[i].type); 1362d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->AddOriginToErrorSet(GURL("http://foo.com/"), kTemp); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i < QuotaManager::kThresholdOfErrorsToBeBlacklisted + 1; 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i) { 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EvictOriginData(GURL("http://foo.com/"), kTemp); 1370d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaErrorInvalidModification, status()); 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpOriginInfoTable(); 1375d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool found_origin_in_database = false; 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origin_info_entries().begin()), 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end(origin_info_entries().end()); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (itr->type == kTemp && 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://foo.com/") == itr->origin) { 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_origin_in_database = true; 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The origin "http://foo.com/" should be in the database. 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(found_origin_in_database); 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kNumberOfTemporaryOrigins - 1; ++i) { 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(lru_origin().is_empty()); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The origin "http://foo.com/" should not be in the LRU list. 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://foo.com/"), lru_origin().spec()); 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginFromDatabase(lru_origin(), kTemp); 1398d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now the LRU list must be empty. 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1403d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(lru_origin().is_empty()); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deleting origins from the database should not affect the results of the 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // following checks. 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1409d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp, usage()); 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1413d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_tmp, usage()); 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1417d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_pers, usage()); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetUsageAndQuotaForEviction) { 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://unlimited/", kTemp, 4000 }, 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/")); 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetTemporaryGlobalQuota(10000000); 1435d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetUsageAndQuotaForEviction(); 1438d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 144090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(21, limited_usage()); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10000000, quota()); 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LE(0, available_space()); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteHostDataSimple) { 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1454d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_global_tmp = usage(); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1458d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_tmp = usage(); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1462d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 predelete_host_pers = usage(); 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeleteHostData(std::string(), kTemp, kAllClients); 1466d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1470d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp, usage()); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1474d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_tmp, usage()); 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1478d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_pers, usage()); 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, kAllClients); 1482d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1486d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp - 1, usage()); 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1490d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_tmp - 1, usage()); 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1494d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_host_pers, usage()); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteHostDataMultiple) { 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 4000 }, 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 50000 }, 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 6000 }, 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 700 }, 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com/", kTemp, 80 }, 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 9 }, 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_global_tmp = usage(); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1524d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kTemp); 1528d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_bar_tmp = usage(); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1532d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_pers = usage(); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kPerm); 1536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_bar_pers = usage(); 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset_status_callback_count(); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, kAllClients); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("bar.com", kTemp, kAllClients); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, kAllClients); 1543d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, status_callback_count()); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpOriginInfoTable(); 1548d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origin_info_entries().begin()), 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end(origin_info_entries().end()); 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (itr->type == kTemp) { 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec()); 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://foo.com:1/"), itr->origin.spec()); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("https://foo.com/"), itr->origin.spec()); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec()); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1563d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 1564b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) EXPECT_EQ(predelete_global_tmp - (1 + 20 + 4000 + 50000 + 6000 + 80 + 9), 1565b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) usage()); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1568d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - (1 + 20 + 50000 + 6000 + 80), usage()); 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kTemp); 1572d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage()); 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1576d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_pers, usage()); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kPerm); 1580d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_bar_pers, usage()); 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Single-run DeleteOriginData cases must be well covered by 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// EvictOriginData tests. 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteOriginDataMultiple) { 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 20 }, 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 300 }, 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 4000 }, 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 50000 }, 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1/", kTemp, 6000 }, 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kPerm, 700 }, 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://foo.com/", kTemp, 80 }, 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://bar.com/", kTemp, 9 }, 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1608d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_global_tmp = usage(); 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1612d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kTemp); 1616d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_bar_tmp = usage(); 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1620d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_pers = usage(); 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kPerm); 1624d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_bar_pers = usage(); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i) 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown, 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(kData1[i].origin), kData1[i].type); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i) 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown, 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(kData2[i].origin), kData2[i].type); 1633d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reset_status_callback_count(); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients); 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients); 1639d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, status_callback_count()); 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpOriginInfoTable(); 1644d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origin_info_entries().begin()), 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end(origin_info_entries().end()); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (itr->type == kTemp) { 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec()); 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec()); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1657d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_global_tmp - (1 + 4000 + 50000 + 9), usage()); 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1661d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - (1 + 50000), usage()); 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kTemp); 1665d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage()); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kPerm); 1669d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_pers, usage()); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("bar.com", kPerm); 1673d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_bar_pers, usage()); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetCachedOrigins) { 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com/", kTemp, 1 }, 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com:1/", kTemp, 20 }, 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://b.com/", kPerm, 300 }, 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://c.com/", kTemp, 4000 }, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(kinuko): Be careful when we add cache pruner. 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> origins; 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCachedOrigins(kTemp, &origins); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.empty()); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No matter how we make queries the quota manager tries to cache all 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the origins at startup. 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("a.com", kTemp); 1697d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCachedOrigins(kTemp, &origins); 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, origins.size()); 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("b.com", kTemp); 1702d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCachedOrigins(kTemp, &origins); 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, origins.size()); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCachedOrigins(kPerm, &origins); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.empty()); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetGlobalUsage(kTemp); 1710d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCachedOrigins(kTemp, &origins); 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3U, origins.size()); 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) { 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (kData[i].type == kTemp) 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(GURL(kData[i].origin)) != origins.end()); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, NotifyAndLRUOrigin) { 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com/", kTemp, 0 }, 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com:1/", kTemp, 0 }, 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://a.com/", kTemp, 0 }, 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://b.com/", kPerm, 0 }, // persistent 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://c.com/", kTemp, 0 }, 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL origin; 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1734d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(lru_origin().is_empty()); 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1739d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://a.com/", lru_origin().spec()); 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm); 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp); 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp); 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1746d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://a.com/", lru_origin().spec()); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginFromDatabase(lru_origin(), kTemp); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1751d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("https://a.com/", lru_origin().spec()); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginFromDatabase(lru_origin(), kTemp); 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1756d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://c.com/", lru_origin().spec()); 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetLRUOriginWithOriginInUse) { 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com/", kTemp, 0 }, 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com:1/", kTemp, 0 }, 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://a.com/", kTemp, 0 }, 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://b.com/", kPerm, 0 }, // persistent 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://c.com/", kTemp, 0 }, 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL origin; 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1774d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(lru_origin().is_empty()); 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp); 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm); 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp); 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1783d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://a.com/", lru_origin().spec()); 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify origin http://a.com is in use. 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyOriginInUse(GURL("http://a.com/")); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1789d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("https://a.com/", lru_origin().spec()); 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify origin https://a.com is in use while GetLRUOrigin is running. 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyOriginInUse(GURL("https://a.com/")); 1795d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post-filtering must have excluded the returned origin, so we will 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see empty result here. 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(lru_origin().is_empty()); 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify access for http://c.com while GetLRUOrigin is running. 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp); 1803d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post-filtering must have excluded the returned origin, so we will 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // see empty result here. 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(lru_origin().is_empty()); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyOriginNoLongerInUse(GURL("http://a.com/")); 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyOriginNoLongerInUse(GURL("https://a.com/")); 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLRUOrigin(kTemp); 1811d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http://a.com/", lru_origin().spec()); 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, GetOriginsModifiedSince) { 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData[] = { 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com/", kTemp, 0 }, 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://a.com:1/", kTemp, 0 }, 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "https://a.com/", kTemp, 0 }, 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://b.com/", kPerm, 0 }, // persistent 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://c.com/", kTemp, 0 }, 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client); 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOriginsModifiedSince(kTemp, base::Time()); 1828d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(modified_origins().empty()); 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(modified_origins_type(), kTemp); 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time1 = client->IncrementMockTime(); 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10); 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://a.com:1/"), kTemp, 10); 18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://b.com/"), kPerm, 10); 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time2 = client->IncrementMockTime(); 18375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("https://a.com/"), kTemp, 10); 18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://c.com/"), kTemp, 10); 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time time3 = client->IncrementMockTime(); 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOriginsModifiedSince(kTemp, time1); 1842d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4U, modified_origins().size()); 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(modified_origins_type(), kTemp); 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) { 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (kData[i].type == kTemp) 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, modified_origins().count(GURL(kData[i].origin))); 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOriginsModifiedSince(kTemp, time2); 1851d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, modified_origins().size()); 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOriginsModifiedSince(kTemp, time3); 1855d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(modified_origins().empty()); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(modified_origins_type(), kTemp); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10); 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetOriginsModifiedSince(kTemp, time3); 1862d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, modified_origins().size()); 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1U, modified_origins().count(GURL("http://a.com/"))); 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(modified_origins_type(), kTemp); 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DumpQuotaTable) { 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("example1.com", 1); 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("example2.com", 20); 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota("example3.com", 300); 1872d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpQuotaTable(); 1875d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const QuotaTableEntry kEntries[] = { 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaTableEntry("example1.com", kPerm, 1), 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaTableEntry("example2.com", kPerm, 20), 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaTableEntry("example3.com", kPerm, 300), 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<QuotaTableEntry> entries 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries)); 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef QuotaTableEntries::const_iterator iterator; 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(quota_entries().begin()), end(quota_entries().end()); 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(testing::Message() 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "host = " << itr->host << ", " 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "quota = " << itr->quota); 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, entries.erase(*itr)); 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(entries.empty()); 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DumpOriginInfoTable) { 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using std::make_pair; 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed( 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kUnknown, 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"), 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kTemp); 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed( 19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kUnknown, 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"), 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPerm); 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota_manager()->NotifyStorageAccessed( 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kUnknown, 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"), 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPerm); 1911d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DumpOriginInfoTable(); 1914d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::pair<GURL, StorageType> TypedOrigin; 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::pair<TypedOrigin, int> Entry; 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Entry kEntries[] = { 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) make_pair(make_pair(GURL("http://example.com/"), kTemp), 1), 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) make_pair(make_pair(GURL("http://example.com/"), kPerm), 2), 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<Entry> entries 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries)); 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef OriginInfoTableEntries::const_iterator iterator; 19265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (iterator itr(origin_info_entries().begin()), 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end(origin_info_entries().end()); 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr != end; ++itr) { 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(testing::Message() 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "host = " << itr->origin << ", " 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "type = " << itr->type << ", " 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "used_count = " << itr->used_count); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, entries.erase( 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) make_pair(make_pair(itr->origin, itr->type), 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itr->used_count))); 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(entries.empty()); 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, QuotaForEmptyHost) { 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPersistentHostQuota(std::string()); 1942d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, quota()); 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPersistentHostQuota(std::string(), 10); 1947d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kQuotaErrorNotSupported, status()); 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleOrigin) { 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 2 }, 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData3[] = { 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 4 }, 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData4[] = { 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 8 }, 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kAppcache); 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3), 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4), 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kIndexedDatabase); 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client3); 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client4); 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1978d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kFileSystem); 1982d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1984d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 1, usage()); 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kAppcache); 1988d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1990d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage()); 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kDatabase); 1994d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 1996d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage()); 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kIndexedDatabase); 2001d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2003d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage()); 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleHost) { 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1111/", kTemp, 1 }, 20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:2222/", kTemp, 2 }, 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData3[] = { 20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:3333/", kTemp, 4 }, 20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData4[] = { 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:4444/", kTemp, 8 }, 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kAppcache); 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3), 20255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4), 20275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kIndexedDatabase); 20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client3); 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client4); 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2034d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, QuotaClient::kFileSystem); 2038d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2040d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 1, usage()); 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, QuotaClient::kAppcache); 2044d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2046d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage()); 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, QuotaClient::kDatabase); 2050d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2052d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage()); 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, QuotaClient::kIndexedDatabase); 2056d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2058d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage()); 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleOrigin) { 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 1 }, 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 2 }, 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData3[] = { 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 4 }, 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData4[] = { 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com/", kTemp, 8 }, 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 20765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 20785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kAppcache); 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3), 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4), 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kIndexedDatabase); 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client3); 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client4); 20875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2089d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem | QuotaClient::kDatabase); 2094d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2096d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 4 - 1, usage()); 20985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(GURL("http://foo.com/"), kTemp, 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kAppcache | QuotaClient::kIndexedDatabase); 2101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage()); 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleHost) { 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData1[] = { 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:1111/", kTemp, 1 }, 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData2[] = { 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:2222/", kTemp, 2 }, 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData3[] = { 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:3333/", kTemp, 4 }, 21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const MockOriginData kData4[] = { 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "http://foo.com:4444/", kTemp, 8 }, 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1), 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem); 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2), 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kAppcache); 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3), 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase); 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4), 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kIndexedDatabase); 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client1); 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client2); 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client3); 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterClient(client4); 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int64 predelete_foo_tmp = usage(); 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kFileSystem | QuotaClient::kAppcache); 2139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage()); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteHostData("foo.com", kTemp, 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QuotaClient::kDatabase | QuotaClient::kIndexedDatabase); 2146d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetHostUsage("foo.com", kTemp); 2148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage()); 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(QuotaManagerTest, GetUsageAndQuota_Incognito) { 2153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetQuotaManager(true); 2154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const MockOriginData kData[] = { 2156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://foo.com/", kTemp, 10 }, 2157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { "http://foo.com/", kPerm, 80 }, 2158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 2159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData), 2160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QuotaClient::kFileSystem)); 2161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 2163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 2164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 2165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(80, usage()); 2166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, quota()); 2167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetTemporaryGlobalQuota(100); 2169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 2170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 2171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 2172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(10, usage()); 2173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_LE(std::min(static_cast<int64>(100 / kPerHostTemporaryPortion), 2174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) QuotaManager::kIncognitoDefaultQuotaLimit), quota()); 2175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_special_storage_policy()->AddUnlimited(GURL("http://foo.com/")); 2177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm); 2178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 2179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 2180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(80, usage()); 2181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota()); 2182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp); 2184d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 2185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(kQuotaStatusOk, status()); 2186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(10, usage()); 2187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota()); 2188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace content 2191