| Index: webkit/quota/quota_manager_unittest.cc
|
| diff --git a/webkit/quota/quota_manager_unittest.cc b/webkit/quota/quota_manager_unittest.cc
|
| deleted file mode 100644
|
| index 5817f1c71b8ecc821333c64de71e2d6bc4b1ec18..0000000000000000000000000000000000000000
|
| --- a/webkit/quota/quota_manager_unittest.cc
|
| +++ /dev/null
|
| @@ -1,2165 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include <set>
|
| -#include <sstream>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/file_util.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/message_loop.h"
|
| -#include "base/message_loop_proxy.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/sys_info.h"
|
| -#include "base/time.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "webkit/quota/mock_special_storage_policy.h"
|
| -#include "webkit/quota/mock_storage_client.h"
|
| -#include "webkit/quota/quota_database.h"
|
| -#include "webkit/quota/quota_manager.h"
|
| -
|
| -using base::MessageLoopProxy;
|
| -
|
| -namespace quota {
|
| -
|
| -namespace {
|
| -
|
| -// For shorter names.
|
| -const StorageType kTemp = kStorageTypeTemporary;
|
| -const StorageType kPerm = kStorageTypePersistent;
|
| -const StorageType kSync = kStorageTypeSyncable;
|
| -
|
| -const int kAllClients = QuotaClient::kAllClientsMask;
|
| -
|
| -const int64 kAvailableSpaceForApp = 13377331U;
|
| -
|
| -const int64 kMinimumPreserveForSystem = QuotaManager::kMinimumPreserveForSystem;
|
| -const int kPerHostTemporaryPortion = QuotaManager::kPerHostTemporaryPortion;
|
| -
|
| -// Returns a deterministic value for the amount of available disk space.
|
| -int64 GetAvailableDiskSpaceForTest(const base::FilePath&) {
|
| - return kAvailableSpaceForApp + kMinimumPreserveForSystem;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class QuotaManagerTest : public testing::Test {
|
| - protected:
|
| - typedef QuotaManager::QuotaTableEntry QuotaTableEntry;
|
| - typedef QuotaManager::QuotaTableEntries QuotaTableEntries;
|
| - typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries;
|
| -
|
| - public:
|
| - QuotaManagerTest()
|
| - : weak_factory_(this),
|
| - mock_time_counter_(0) {
|
| - }
|
| -
|
| - virtual void SetUp() {
|
| - ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
|
| - mock_special_storage_policy_ = new MockSpecialStoragePolicy;
|
| - ResetQuotaManager(false /* is_incognito */);
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - // Make sure the quota manager cleans up correctly.
|
| - quota_manager_ = NULL;
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - protected:
|
| - void ResetQuotaManager(bool is_incognito) {
|
| - quota_manager_ = new QuotaManager(
|
| - is_incognito,
|
| - data_dir_.path(),
|
| - MessageLoopProxy::current(),
|
| - MessageLoopProxy::current(),
|
| - mock_special_storage_policy_);
|
| - // Don't (automatically) start the eviction for testing.
|
| - quota_manager_->eviction_disabled_ = true;
|
| - // Don't query the hard disk for remaining capacity.
|
| - quota_manager_->get_disk_space_fn_ = &GetAvailableDiskSpaceForTest;
|
| - additional_callback_count_ = 0;
|
| - }
|
| -
|
| - MockStorageClient* CreateClient(
|
| - const MockOriginData* mock_data,
|
| - size_t mock_data_size,
|
| - QuotaClient::ID id) {
|
| - return new MockStorageClient(quota_manager_->proxy(),
|
| - mock_data, id, mock_data_size);
|
| - }
|
| -
|
| - void RegisterClient(MockStorageClient* client) {
|
| - quota_manager_->proxy()->RegisterClient(client);
|
| - }
|
| -
|
| - void GetUsageInfo() {
|
| - usage_info_.clear();
|
| - quota_manager_->GetUsageInfo(
|
| - base::Bind(&QuotaManagerTest::DidGetUsageInfo,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetUsageAndQuotaForWebApps(const GURL& origin,
|
| - StorageType type) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - usage_ = -1;
|
| - quota_ = -1;
|
| - quota_manager_->GetUsageAndQuotaForWebApps(
|
| - origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetUsageAndQuotaForStorageClient(const GURL& origin,
|
| - StorageType type) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - usage_ = -1;
|
| - quota_ = -1;
|
| - quota_manager_->GetUsageAndQuota(
|
| - origin, type, base::Bind(&QuotaManagerTest::DidGetUsageAndQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetTemporaryGlobalQuota() {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_ = -1;
|
| - quota_manager_->GetTemporaryGlobalQuota(
|
| - base::Bind(&QuotaManagerTest::DidGetQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void SetTemporaryGlobalQuota(int64 new_quota) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_ = -1;
|
| - quota_manager_->SetTemporaryGlobalOverrideQuota(
|
| - new_quota,
|
| - base::Bind(&QuotaManagerTest::DidGetQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetPersistentHostQuota(const std::string& host) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_ = -1;
|
| - quota_manager_->GetPersistentHostQuota(
|
| - host,
|
| - base::Bind(&QuotaManagerTest::DidGetHostQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void SetPersistentHostQuota(const std::string& host, int64 new_quota) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_ = -1;
|
| - quota_manager_->SetPersistentHostQuota(
|
| - host, new_quota,
|
| - base::Bind(&QuotaManagerTest::DidGetHostQuota,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetGlobalUsage(StorageType type) {
|
| - usage_ = -1;
|
| - unlimited_usage_ = -1;
|
| - quota_manager_->GetGlobalUsage(
|
| - type,
|
| - base::Bind(&QuotaManagerTest::DidGetGlobalUsage,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetHostUsage(const std::string& host, StorageType type) {
|
| - usage_ = -1;
|
| - quota_manager_->GetHostUsage(
|
| - host, type,
|
| - base::Bind(&QuotaManagerTest::DidGetHostUsage,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void RunAdditionalUsageAndQuotaTask(const GURL& origin, StorageType type) {
|
| - quota_manager_->GetUsageAndQuota(
|
| - origin, type,
|
| - base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaAdditional,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DeleteClientOriginData(QuotaClient* client,
|
| - const GURL& origin,
|
| - StorageType type) {
|
| - DCHECK(client);
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - client->DeleteOriginData(
|
| - origin, type,
|
| - base::Bind(&QuotaManagerTest::StatusCallback,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void EvictOriginData(const GURL& origin,
|
| - StorageType type) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_manager_->EvictOriginData(
|
| - origin, type,
|
| - base::Bind(&QuotaManagerTest::StatusCallback,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DeleteOriginData(const GURL& origin,
|
| - StorageType type,
|
| - int quota_client_mask) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_manager_->DeleteOriginData(
|
| - origin, type, quota_client_mask,
|
| - base::Bind(&QuotaManagerTest::StatusCallback,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DeleteHostData(const std::string& host,
|
| - StorageType type,
|
| - int quota_client_mask) {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - quota_manager_->DeleteHostData(
|
| - host, type, quota_client_mask,
|
| - base::Bind(&QuotaManagerTest::StatusCallback,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetAvailableSpace() {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - available_space_ = -1;
|
| - quota_manager_->GetAvailableSpace(
|
| - base::Bind(&QuotaManagerTest::DidGetAvailableSpace,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetUsageAndQuotaForEviction() {
|
| - quota_status_ = kQuotaStatusUnknown;
|
| - usage_ = -1;
|
| - unlimited_usage_ = -1;
|
| - quota_ = -1;
|
| - available_space_ = -1;
|
| - quota_manager_->GetUsageAndQuotaForEviction(
|
| - base::Bind(&QuotaManagerTest::DidGetUsageAndQuotaForEviction,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void GetCachedOrigins(StorageType type, std::set<GURL>* origins) {
|
| - ASSERT_TRUE(origins != NULL);
|
| - origins->clear();
|
| - quota_manager_->GetCachedOrigins(type, origins);
|
| - }
|
| -
|
| - void NotifyStorageAccessed(QuotaClient* client,
|
| - const GURL& origin,
|
| - StorageType type) {
|
| - DCHECK(client);
|
| - quota_manager_->NotifyStorageAccessedInternal(
|
| - client->id(), origin, type, IncrementMockTime());
|
| - }
|
| -
|
| - void DeleteOriginFromDatabase(const GURL& origin, StorageType type) {
|
| - quota_manager_->DeleteOriginFromDatabase(origin, type);
|
| - }
|
| -
|
| - void GetLRUOrigin(StorageType type) {
|
| - lru_origin_ = GURL();
|
| - quota_manager_->GetLRUOrigin(
|
| - type,
|
| - base::Bind(&QuotaManagerTest::DidGetLRUOrigin,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void NotifyOriginInUse(const GURL& origin) {
|
| - quota_manager_->NotifyOriginInUse(origin);
|
| - }
|
| -
|
| - void NotifyOriginNoLongerInUse(const GURL& origin) {
|
| - quota_manager_->NotifyOriginNoLongerInUse(origin);
|
| - }
|
| -
|
| - void GetOriginsModifiedSince(StorageType type, base::Time modified_since) {
|
| - modified_origins_.clear();
|
| - modified_origins_type_ = kStorageTypeUnknown;
|
| - quota_manager_->GetOriginsModifiedSince(
|
| - type, modified_since,
|
| - base::Bind(&QuotaManagerTest::DidGetModifiedOrigins,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DumpQuotaTable() {
|
| - quota_entries_.clear();
|
| - quota_manager_->DumpQuotaTable(
|
| - base::Bind(&QuotaManagerTest::DidDumpQuotaTable,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DumpOriginInfoTable() {
|
| - origin_info_entries_.clear();
|
| - quota_manager_->DumpOriginInfoTable(
|
| - base::Bind(&QuotaManagerTest::DidDumpOriginInfoTable,
|
| - weak_factory_.GetWeakPtr()));
|
| - }
|
| -
|
| - void DidGetUsageInfo(const UsageInfoEntries& entries) {
|
| - usage_info_.insert(usage_info_.begin(), entries.begin(), entries.end());
|
| - }
|
| -
|
| - void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) {
|
| - quota_status_ = status;
|
| - usage_ = usage;
|
| - quota_ = quota;
|
| - }
|
| -
|
| - void DidGetQuota(QuotaStatusCode status,
|
| - int64 quota) {
|
| - quota_status_ = status;
|
| - quota_ = quota;
|
| - }
|
| -
|
| - void DidGetAvailableSpace(QuotaStatusCode status, int64 available_space) {
|
| - quota_status_ = status;
|
| - available_space_ = available_space;
|
| - }
|
| -
|
| - void DidGetHostQuota(QuotaStatusCode status,
|
| - int64 quota) {
|
| - quota_status_ = status;
|
| - quota_ = quota;
|
| - }
|
| -
|
| - void DidGetGlobalUsage(int64 usage,
|
| - int64 unlimited_usage) {
|
| - usage_ = usage;
|
| - unlimited_usage_ = unlimited_usage;
|
| - }
|
| -
|
| - void DidGetHostUsage(int64 usage) {
|
| - usage_ = usage;
|
| - }
|
| -
|
| - void StatusCallback(QuotaStatusCode status) {
|
| - ++status_callback_count_;
|
| - quota_status_ = status;
|
| - }
|
| -
|
| - void DidGetUsageAndQuotaForEviction(QuotaStatusCode status,
|
| - const UsageAndQuota& usage_and_quota) {
|
| - quota_status_ = status;
|
| - limited_usage_ = usage_and_quota.global_limited_usage;
|
| - quota_ = usage_and_quota.quota;
|
| - available_space_ = usage_and_quota.available_disk_space;
|
| - }
|
| -
|
| - void DidGetLRUOrigin(const GURL& origin) {
|
| - lru_origin_ = origin;
|
| - }
|
| -
|
| - void DidGetModifiedOrigins(const std::set<GURL>& origins, StorageType type) {
|
| - modified_origins_ = origins;
|
| - modified_origins_type_ = type;
|
| - }
|
| -
|
| - void DidDumpQuotaTable(const QuotaTableEntries& entries) {
|
| - quota_entries_ = entries;
|
| - }
|
| -
|
| - void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries) {
|
| - origin_info_entries_ = entries;
|
| - }
|
| -
|
| - void GetUsage_WithModifyTestBody(const StorageType type);
|
| -
|
| - void set_additional_callback_count(int c) { additional_callback_count_ = c; }
|
| - int additional_callback_count() const { return additional_callback_count_; }
|
| - void DidGetUsageAndQuotaAdditional(
|
| - QuotaStatusCode status, int64 usage, int64 quota) {
|
| - ++additional_callback_count_;
|
| - }
|
| -
|
| - QuotaManager* quota_manager() const { return quota_manager_.get(); }
|
| - void set_quota_manager(QuotaManager* quota_manager) {
|
| - quota_manager_ = quota_manager;
|
| - }
|
| -
|
| - MockSpecialStoragePolicy* mock_special_storage_policy() const {
|
| - return mock_special_storage_policy_.get();
|
| - }
|
| -
|
| - QuotaStatusCode status() const { return quota_status_; }
|
| - const UsageInfoEntries& usage_info() const { return usage_info_; }
|
| - int64 usage() const { return usage_; }
|
| - int64 limited_usage() const { return limited_usage_; }
|
| - int64 unlimited_usage() const { return unlimited_usage_; }
|
| - int64 quota() const { return quota_; }
|
| - int64 available_space() const { return available_space_; }
|
| - const GURL& lru_origin() const { return lru_origin_; }
|
| - const std::set<GURL>& modified_origins() const { return modified_origins_; }
|
| - StorageType modified_origins_type() const { return modified_origins_type_; }
|
| - const QuotaTableEntries& quota_entries() const { return quota_entries_; }
|
| - const OriginInfoTableEntries& origin_info_entries() const {
|
| - return origin_info_entries_;
|
| - }
|
| - base::FilePath profile_path() const { return data_dir_.path(); }
|
| - int status_callback_count() const { return status_callback_count_; }
|
| - void reset_status_callback_count() { status_callback_count_ = 0; }
|
| -
|
| - private:
|
| - base::Time IncrementMockTime() {
|
| - ++mock_time_counter_;
|
| - return base::Time::FromDoubleT(mock_time_counter_ * 10.0);
|
| - }
|
| -
|
| - base::MessageLoop message_loop_;
|
| - base::ScopedTempDir data_dir_;
|
| - base::WeakPtrFactory<QuotaManagerTest> weak_factory_;
|
| -
|
| - scoped_refptr<QuotaManager> quota_manager_;
|
| - scoped_refptr<MockSpecialStoragePolicy> mock_special_storage_policy_;
|
| -
|
| - QuotaStatusCode quota_status_;
|
| - UsageInfoEntries usage_info_;
|
| - int64 usage_;
|
| - int64 limited_usage_;
|
| - int64 unlimited_usage_;
|
| - int64 quota_;
|
| - int64 available_space_;
|
| - GURL lru_origin_;
|
| - std::set<GURL> modified_origins_;
|
| - StorageType modified_origins_type_;
|
| - QuotaTableEntries quota_entries_;
|
| - OriginInfoTableEntries origin_info_entries_;
|
| - int status_callback_count_;
|
| -
|
| - int additional_callback_count_;
|
| -
|
| - int mock_time_counter_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(QuotaManagerTest);
|
| -};
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsageInfo) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com:8080/", kTemp, 15 },
|
| - { "http://bar.com/", kTemp, 20 },
|
| - { "http://bar.com/", kPerm, 50 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "https://foo.com/", kTemp, 30 },
|
| - { "https://foo.com:8081/", kTemp, 35 },
|
| - { "http://bar.com/", kPerm, 40 },
|
| - { "http://example.com/", kPerm, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem));
|
| - RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kDatabase));
|
| -
|
| - GetUsageInfo();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - EXPECT_EQ(4U, usage_info().size());
|
| - for (size_t i = 0; i < usage_info().size(); ++i) {
|
| - const UsageInfo& info = usage_info()[i];
|
| - if (info.host == "foo.com" && info.type == kTemp) {
|
| - EXPECT_EQ(10 + 15 + 30 + 35, info.usage);
|
| - } else if (info.host == "bar.com" && info.type == kTemp) {
|
| - EXPECT_EQ(20, info.usage);
|
| - } else if (info.host == "bar.com" && info.type == kPerm) {
|
| - EXPECT_EQ(50 + 40, info.usage);
|
| - } else if (info.host == "example.com" && info.type == kPerm) {
|
| - EXPECT_EQ(40, info.usage);
|
| - } else {
|
| - ADD_FAILURE()
|
| - << "Unexpected host, type: " << info.host << ", " << info.type;
|
| - }
|
| - }
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsageAndQuota_Simple) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com/", kPerm, 80 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(80, usage());
|
| - EXPECT_EQ(0, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_LE(0, quota());
|
| - int64 quota_returned_for_foo = quota();
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(quota_returned_for_foo, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_NoClient) {
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_EmptyClient) {
|
| - RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_MultiOrigins) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com:8080/", kTemp, 20 },
|
| - { "http://bar.com/", kTemp, 5 },
|
| - { "https://bar.com/", kTemp, 7 },
|
| - { "http://baz.com/", kTemp, 30 },
|
| - { "http://foo.com/", kPerm, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| -
|
| - // This time explicitly sets a temporary global quota.
|
| - SetTemporaryGlobalQuota(100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(100, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| -
|
| - const int kPerHostQuota = 100 / kPerHostTemporaryPortion;
|
| -
|
| - // The host's quota should be its full portion of the global quota
|
| - // since global usage is under the global quota.
|
| - EXPECT_EQ(kPerHostQuota, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(5 + 7, usage());
|
| - EXPECT_EQ(kPerHostQuota, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_MultipleClients) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://bar.com/", kTemp, 2 },
|
| - { "http://bar.com/", kPerm, 4 },
|
| - { "http://unlimited/", kPerm, 8 },
|
| - { "http://installed/", kPerm, 16 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "https://foo.com/", kTemp, 128 },
|
| - { "http://example.com/", kPerm, 256 },
|
| - { "http://unlimited/", kTemp, 512 },
|
| - { "http://installed/", kTemp, 1024 },
|
| - };
|
| - mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
|
| - mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
|
| - RegisterClient(CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem));
|
| - RegisterClient(CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kDatabase));
|
| -
|
| - const int64 kTempQuotaBase =
|
| - GetAvailableDiskSpaceForTest(base::FilePath()) / kPerHostTemporaryPortion;
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(1 + 128, usage());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4, usage());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(512, usage());
|
| - EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(8, usage());
|
| - EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
|
| -
|
| - GetAvailableSpace();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_LE(0, available_space());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://installed/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(1024, usage());
|
| - EXPECT_EQ(std::min(kAvailableSpaceForApp, kTempQuotaBase) + usage(), quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(16, usage());
|
| - EXPECT_EQ(usage(), quota()); // Over-budget case.
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(1 + 2 + 128 + 512 + 1024, usage());
|
| - EXPECT_EQ(512, unlimited_usage());
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4 + 8 + 16 + 256, usage());
|
| - EXPECT_EQ(8, unlimited_usage());
|
| -}
|
| -
|
| -void QuotaManagerTest::GetUsage_WithModifyTestBody(const StorageType type) {
|
| - const MockOriginData data[] = {
|
| - { "http://foo.com/", type, 10 },
|
| - { "http://foo.com:1/", type, 20 },
|
| - };
|
| - MockStorageClient* client = CreateClient(data, ARRAYSIZE_UNSAFE(data),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| -
|
| - client->ModifyOriginAndNotify(GURL("http://foo.com/"), type, 30);
|
| - client->ModifyOriginAndNotify(GURL("http://foo.com:1/"), type, -5);
|
| - client->AddOriginAndNotify(GURL("https://foo.com/"), type, 1);
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20 + 30 - 5 + 1, usage());
|
| - int foo_usage = usage();
|
| -
|
| - client->AddOriginAndNotify(GURL("http://bar.com/"), type, 40);
|
| - GetUsageAndQuotaForWebApps(GURL("http://bar.com/"), type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(40, usage());
|
| -
|
| - GetGlobalUsage(type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(foo_usage + 40, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsage_WithModify) {
|
| - GetUsage_WithModifyTestBody(kTemp);
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_WithAdditionalTasks) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com:8080/", kTemp, 20 },
|
| - { "http://bar.com/", kTemp, 13 },
|
| - { "http://foo.com/", kPerm, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| - SetTemporaryGlobalQuota(100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| - EXPECT_EQ(kPerHostQuota, quota());
|
| -
|
| - set_additional_callback_count(0);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
|
| - kTemp);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| - EXPECT_EQ(kPerHostQuota, quota());
|
| - EXPECT_EQ(2, additional_callback_count());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_NukeManager) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com:8080/", kTemp, 20 },
|
| - { "http://bar.com/", kTemp, 13 },
|
| - { "http://foo.com/", kPerm, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| - SetTemporaryGlobalQuota(100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - set_additional_callback_count(0);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
|
| - kTemp);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"),
|
| - kTemp);
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
|
| - DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
|
| -
|
| - // Nuke before waiting for callbacks.
|
| - set_quota_manager(NULL);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaErrorAbort, status());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Overbudget) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://usage1/", kTemp, 1 },
|
| - { "http://usage10/", kTemp, 10 },
|
| - { "http://usage200/", kTemp, 200 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| - SetTemporaryGlobalQuota(100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - const int kPerHostQuota = 100 / QuotaManager::kPerHostTemporaryPortion;
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage1/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(1, usage());
|
| - EXPECT_EQ(1, quota()); // should be clamped to our current usage
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_EQ(10, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage200/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(200, usage());
|
| - EXPECT_EQ(kPerHostQuota, quota()); // should be clamped to the nominal quota
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetTemporaryUsageAndQuota_Unlimited) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://usage10/", kTemp, 10 },
|
| - { "http://usage50/", kTemp, 50 },
|
| - { "http://unlimited/", kTemp, 4000 },
|
| - };
|
| - mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - // Test when not overbugdet.
|
| - SetTemporaryGlobalQuota(1000);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(10 + 50 + 4000, usage());
|
| - EXPECT_EQ(4000, unlimited_usage());
|
| -
|
| - const int kPerHostQuotaFor1000 =
|
| - 1000 / QuotaManager::kPerHostTemporaryPortion;
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor1000, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(50, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor1000, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4000, usage());
|
| - EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
|
| -
|
| - GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(QuotaManager::kNoLimit, quota());
|
| -
|
| - // Test when overbugdet.
|
| - SetTemporaryGlobalQuota(100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - const int kPerHostQuotaFor100 =
|
| - 100 / QuotaManager::kPerHostTemporaryPortion;
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor100, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(50, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor100, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4000, usage());
|
| - EXPECT_EQ(kAvailableSpaceForApp + usage(), quota());
|
| -
|
| - GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(QuotaManager::kNoLimit, quota());
|
| -
|
| - // Revoke the unlimited rights and make sure the change is noticed.
|
| - mock_special_storage_policy()->Reset();
|
| - mock_special_storage_policy()->NotifyCleared();
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(10 + 50 + 4000, usage());
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage10/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_EQ(10, quota()); // should be clamped to our current usage
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://usage50/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(50, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor100, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4000, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor100, quota());
|
| -
|
| - GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(4000, usage());
|
| - EXPECT_EQ(kPerHostQuotaFor100, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, OriginInUse) {
|
| - const GURL kFooOrigin("http://foo.com/");
|
| - const GURL kBarOrigin("http://bar.com/");
|
| -
|
| - EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
|
| - quota_manager()->NotifyOriginInUse(kFooOrigin); // count of 1
|
| - EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
|
| - quota_manager()->NotifyOriginInUse(kFooOrigin); // count of 2
|
| - EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
|
| - quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin); // count of 1
|
| - EXPECT_TRUE(quota_manager()->IsOriginInUse(kFooOrigin));
|
| -
|
| - EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
|
| - quota_manager()->NotifyOriginInUse(kBarOrigin);
|
| - EXPECT_TRUE(quota_manager()->IsOriginInUse(kBarOrigin));
|
| - quota_manager()->NotifyOriginNoLongerInUse(kBarOrigin);
|
| - EXPECT_FALSE(quota_manager()->IsOriginInUse(kBarOrigin));
|
| -
|
| - quota_manager()->NotifyOriginNoLongerInUse(kFooOrigin);
|
| - EXPECT_FALSE(quota_manager()->IsOriginInUse(kFooOrigin));
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetAndSetPerststentHostQuota) {
|
| - RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
|
| -
|
| - GetPersistentHostQuota("foo.com");
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, quota());
|
| -
|
| - SetPersistentHostQuota("foo.com", 100);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(100, quota());
|
| -
|
| - GetPersistentHostQuota("foo.com");
|
| - SetPersistentHostQuota("foo.com", 200);
|
| - GetPersistentHostQuota("foo.com");
|
| - SetPersistentHostQuota("foo.com", 300000000000ll);
|
| - GetPersistentHostQuota("foo.com");
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(300000000000ll, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetAndSetPersistentUsageAndQuota) {
|
| - RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(0, quota());
|
| -
|
| - SetPersistentHostQuota("foo.com", 100);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(100, quota());
|
| -
|
| - // For installed app GetUsageAndQuotaForWebApps returns the capped quota.
|
| - mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
|
| - SetPersistentHostQuota("installed", kAvailableSpaceForApp + 100);
|
| - GetUsageAndQuotaForWebApps(GURL("http://installed/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kAvailableSpaceForApp, quota());
|
| -
|
| - // Ditto for unlimited apps.
|
| - mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
|
| - GetUsageAndQuotaForWebApps(GURL("http://unlimited/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kAvailableSpaceForApp, quota());
|
| -
|
| - // GetUsageAndQuotaForStorageClient should just return 0 usage and
|
| - // kNoLimit quota.
|
| - GetUsageAndQuotaForStorageClient(GURL("http://unlimited/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(QuotaManager::kNoLimit, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetSyncableQuota) {
|
| - RegisterClient(CreateClient(NULL, 0, QuotaClient::kFileSystem));
|
| -
|
| - // Pre-condition check: available disk space (for testing) is less than
|
| - // the default quota for syncable storage.
|
| - EXPECT_LE(kAvailableSpaceForApp,
|
| - QuotaManager::kSyncableStorageDefaultHostQuota);
|
| -
|
| - // For installed apps the quota manager should return
|
| - // kAvailableSpaceForApp as syncable quota (because of the pre-condition).
|
| - mock_special_storage_policy()->GrantQueryDiskSize(GURL("http://installed/"));
|
| - GetUsageAndQuotaForWebApps(GURL("http://installed/"), kSync);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(kAvailableSpaceForApp, quota());
|
| -
|
| - // If it's not installed (which shouldn't happen in real case) it
|
| - // should just return the default host quota for syncable.
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo/"), kSync);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, usage());
|
| - EXPECT_EQ(QuotaManager::kSyncableStorageDefaultHostQuota, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_MultiOrigins) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kPerm, 10 },
|
| - { "http://foo.com:8080/", kPerm, 20 },
|
| - { "https://foo.com/", kPerm, 13 },
|
| - { "https://foo.com:8081/", kPerm, 19 },
|
| - { "http://bar.com/", kPerm, 5 },
|
| - { "https://bar.com/", kPerm, 7 },
|
| - { "http://baz.com/", kPerm, 30 },
|
| - { "http://foo.com/", kTemp, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| -
|
| - SetPersistentHostQuota("foo.com", 100);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20 + 13 + 19, usage());
|
| - EXPECT_EQ(100, quota());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetPersistentUsage_WithModify) {
|
| - GetUsage_WithModifyTestBody(kPerm);
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_WithAdditionalTasks) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kPerm, 10 },
|
| - { "http://foo.com:8080/", kPerm, 20 },
|
| - { "http://bar.com/", kPerm, 13 },
|
| - { "http://foo.com/", kTemp, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| - SetPersistentHostQuota("foo.com", 100);
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| - EXPECT_EQ(100, quota());
|
| -
|
| - set_additional_callback_count(0);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"),
|
| - kPerm);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10 + 20, usage());
|
| - EXPECT_EQ(2, additional_callback_count());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetPersistentUsageAndQuota_NukeManager) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kPerm, 10 },
|
| - { "http://foo.com:8080/", kPerm, 20 },
|
| - { "http://bar.com/", kPerm, 13 },
|
| - { "http://foo.com/", kTemp, 40 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| - SetPersistentHostQuota("foo.com", 100);
|
| -
|
| - set_additional_callback_count(0);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://foo.com/"), kPerm);
|
| - RunAdditionalUsageAndQuotaTask(GURL("http://bar.com/"), kPerm);
|
| -
|
| - // Nuke before waiting for callbacks.
|
| - set_quota_manager(NULL);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaErrorAbort, status());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_Simple) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kPerm, 1 },
|
| - { "http://foo.com:1/", kPerm, 20 },
|
| - { "http://bar.com/", kTemp, 300 },
|
| - { "https://buz.com/", kTemp, 4000 },
|
| - { "http://buz.com/", kTemp, 50000 },
|
| - { "http://bar.com:1/", kPerm, 600000 },
|
| - { "http://foo.com/", kTemp, 7000000 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 1 + 20 + 600000);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 1 + 20);
|
| -
|
| - GetHostUsage("buz.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 4000 + 50000);
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_WithModification) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kPerm, 1 },
|
| - { "http://foo.com:1/", kPerm, 20 },
|
| - { "http://bar.com/", kTemp, 300 },
|
| - { "https://buz.com/", kTemp, 4000 },
|
| - { "http://buz.com/", kTemp, 50000 },
|
| - { "http://bar.com:1/", kPerm, 600000 },
|
| - { "http://foo.com/", kTemp, 7000000 },
|
| - };
|
| -
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 1 + 20 + 600000);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - client->ModifyOriginAndNotify(
|
| - GURL("http://foo.com/"), kPerm, 80000000);
|
| -
|
| - GetGlobalUsage(kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 1 + 20 + 600000 + 80000000);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - client->ModifyOriginAndNotify(
|
| - GURL("http://foo.com/"), kTemp, 1);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 300 + 4000 + 50000 + 7000000 + 1);
|
| - EXPECT_EQ(0, unlimited_usage());
|
| -
|
| - GetHostUsage("buz.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 4000 + 50000);
|
| -
|
| - client->ModifyOriginAndNotify(
|
| - GURL("http://buz.com/"), kTemp, 900000000);
|
| -
|
| - GetHostUsage("buz.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(usage(), 4000 + 50000 + 900000000);
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsage_WithDeleteOrigin) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://bar.com/", kTemp, 4000 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_pers = usage();
|
| -
|
| - DeleteClientOriginData(client, GURL("http://foo.com/"),
|
| - kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp - 1, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_tmp - 1, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_pers, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetAvailableSpaceTest) {
|
| - GetAvailableSpace();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_LE(0, available_space());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, EvictOriginData) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://bar.com/", kTemp, 4000 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com/", kTemp, 50000 },
|
| - { "http://foo.com:1/", kTemp, 6000 },
|
| - { "http://foo.com/", kPerm, 700 },
|
| - { "https://foo.com/", kTemp, 80 },
|
| - { "http://bar.com/", kTemp, 9 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_pers = usage();
|
| -
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
|
| - quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
|
| - GURL(kData1[i].origin), kData1[i].type);
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
|
| - quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
|
| - GURL(kData2[i].origin), kData2[i].type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - EvictOriginData(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - DumpOriginInfoTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - typedef OriginInfoTableEntries::const_iterator iterator;
|
| - for (iterator itr(origin_info_entries().begin()),
|
| - end(origin_info_entries().end());
|
| - itr != end; ++itr) {
|
| - if (itr->type == kTemp)
|
| - EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
|
| - }
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp - (1 + 50000), usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_tmp - (1 + 50000), usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_pers, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, EvictOriginDataWithDeletionError) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://bar.com/", kTemp, 4000 },
|
| - };
|
| - static const int kNumberOfTemporaryOrigins = 3;
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_pers = usage();
|
| -
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i)
|
| - NotifyStorageAccessed(client, GURL(kData[i].origin), kData[i].type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - client->AddOriginToErrorSet(GURL("http://foo.com/"), kTemp);
|
| -
|
| - for (int i = 0;
|
| - i < QuotaManager::kThresholdOfErrorsToBeBlacklisted + 1;
|
| - ++i) {
|
| - EvictOriginData(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaErrorInvalidModification, status());
|
| - }
|
| -
|
| - DumpOriginInfoTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - bool found_origin_in_database = false;
|
| - typedef OriginInfoTableEntries::const_iterator iterator;
|
| - for (iterator itr(origin_info_entries().begin()),
|
| - end(origin_info_entries().end());
|
| - itr != end; ++itr) {
|
| - if (itr->type == kTemp &&
|
| - GURL("http://foo.com/") == itr->origin) {
|
| - found_origin_in_database = true;
|
| - break;
|
| - }
|
| - }
|
| - // The origin "http://foo.com/" should be in the database.
|
| - EXPECT_TRUE(found_origin_in_database);
|
| -
|
| - for (size_t i = 0; i < kNumberOfTemporaryOrigins - 1; ++i) {
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_FALSE(lru_origin().is_empty());
|
| - // The origin "http://foo.com/" should not be in the LRU list.
|
| - EXPECT_NE(std::string("http://foo.com/"), lru_origin().spec());
|
| - DeleteOriginFromDatabase(lru_origin(), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - }
|
| -
|
| - // Now the LRU list must be empty.
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(lru_origin().is_empty());
|
| -
|
| - // Deleting origins from the database should not affect the results of the
|
| - // following checks.
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_tmp, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_pers, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsageAndQuotaForEviction) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://unlimited/", kTemp, 4000 },
|
| - };
|
| -
|
| - mock_special_storage_policy()->AddUnlimited(GURL("http://unlimited/"));
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - SetTemporaryGlobalQuota(10000000);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - GetUsageAndQuotaForEviction();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(21, limited_usage());
|
| - EXPECT_EQ(10000000, quota());
|
| - EXPECT_LE(0, available_space());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteHostDataSimple) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - int64 predelete_host_pers = usage();
|
| -
|
| - DeleteHostData(std::string(), kTemp, kAllClients);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_tmp, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_pers, usage());
|
| -
|
| - DeleteHostData("foo.com", kTemp, kAllClients);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp - 1, usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_tmp - 1, usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_host_pers, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteHostDataMultiple) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://bar.com/", kTemp, 4000 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com/", kTemp, 50000 },
|
| - { "http://foo.com:1/", kTemp, 6000 },
|
| - { "http://foo.com/", kPerm, 700 },
|
| - { "https://foo.com/", kTemp, 80 },
|
| - { "http://bar.com/", kTemp, 9 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - GetHostUsage("bar.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_bar_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_pers = usage();
|
| -
|
| - GetHostUsage("bar.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_bar_pers = usage();
|
| -
|
| - reset_status_callback_count();
|
| - DeleteHostData("foo.com", kTemp, kAllClients);
|
| - DeleteHostData("bar.com", kTemp, kAllClients);
|
| - DeleteHostData("foo.com", kTemp, kAllClients);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - EXPECT_EQ(3, status_callback_count());
|
| -
|
| - DumpOriginInfoTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - typedef OriginInfoTableEntries::const_iterator iterator;
|
| - for (iterator itr(origin_info_entries().begin()),
|
| - end(origin_info_entries().end());
|
| - itr != end; ++itr) {
|
| - if (itr->type == kTemp) {
|
| - EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
|
| - EXPECT_NE(std::string("http://foo.com:1/"), itr->origin.spec());
|
| - EXPECT_NE(std::string("https://foo.com/"), itr->origin.spec());
|
| - EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
|
| - }
|
| - }
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp - (1 + 20 + 4000 + 50000 + 6000 + 80 + 9),
|
| - usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - (1 + 20 + 50000 + 6000 + 80), usage());
|
| -
|
| - GetHostUsage("bar.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_pers, usage());
|
| -
|
| - GetHostUsage("bar.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_bar_pers, usage());
|
| -}
|
| -
|
| -// Single-run DeleteOriginData cases must be well covered by
|
| -// EvictOriginData tests.
|
| -TEST_F(QuotaManagerTest, DeleteOriginDataMultiple) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - { "http://foo.com:1/", kTemp, 20 },
|
| - { "http://foo.com/", kPerm, 300 },
|
| - { "http://bar.com/", kTemp, 4000 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com/", kTemp, 50000 },
|
| - { "http://foo.com:1/", kTemp, 6000 },
|
| - { "http://foo.com/", kPerm, 700 },
|
| - { "https://foo.com/", kTemp, 80 },
|
| - { "http://bar.com/", kTemp, 9 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_global_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - GetHostUsage("bar.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_bar_tmp = usage();
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_pers = usage();
|
| -
|
| - GetHostUsage("bar.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_bar_pers = usage();
|
| -
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData1); ++i)
|
| - quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
|
| - GURL(kData1[i].origin), kData1[i].type);
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData2); ++i)
|
| - quota_manager()->NotifyStorageAccessed(QuotaClient::kUnknown,
|
| - GURL(kData2[i].origin), kData2[i].type);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - reset_status_callback_count();
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
|
| - DeleteOriginData(GURL("http://bar.com/"), kTemp, kAllClients);
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, kAllClients);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - EXPECT_EQ(3, status_callback_count());
|
| -
|
| - DumpOriginInfoTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - typedef OriginInfoTableEntries::const_iterator iterator;
|
| - for (iterator itr(origin_info_entries().begin()),
|
| - end(origin_info_entries().end());
|
| - itr != end; ++itr) {
|
| - if (itr->type == kTemp) {
|
| - EXPECT_NE(std::string("http://foo.com/"), itr->origin.spec());
|
| - EXPECT_NE(std::string("http://bar.com/"), itr->origin.spec());
|
| - }
|
| - }
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_global_tmp - (1 + 4000 + 50000 + 9), usage());
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - (1 + 50000), usage());
|
| -
|
| - GetHostUsage("bar.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_bar_tmp - (4000 + 9), usage());
|
| -
|
| - GetHostUsage("foo.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_pers, usage());
|
| -
|
| - GetHostUsage("bar.com", kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_bar_pers, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetCachedOrigins) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://a.com/", kTemp, 1 },
|
| - { "http://a.com:1/", kTemp, 20 },
|
| - { "http://b.com/", kPerm, 300 },
|
| - { "http://c.com/", kTemp, 4000 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - // TODO(kinuko): Be careful when we add cache pruner.
|
| -
|
| - std::set<GURL> origins;
|
| - GetCachedOrigins(kTemp, &origins);
|
| - EXPECT_TRUE(origins.empty());
|
| -
|
| - // No matter how we make queries the quota manager tries to cache all
|
| - // the origins at startup.
|
| - GetHostUsage("a.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetCachedOrigins(kTemp, &origins);
|
| - EXPECT_EQ(3U, origins.size());
|
| -
|
| - GetHostUsage("b.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetCachedOrigins(kTemp, &origins);
|
| - EXPECT_EQ(3U, origins.size());
|
| -
|
| - GetCachedOrigins(kPerm, &origins);
|
| - EXPECT_TRUE(origins.empty());
|
| -
|
| - GetGlobalUsage(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetCachedOrigins(kTemp, &origins);
|
| - EXPECT_EQ(3U, origins.size());
|
| -
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
|
| - if (kData[i].type == kTemp)
|
| - EXPECT_TRUE(origins.find(GURL(kData[i].origin)) != origins.end());
|
| - }
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, NotifyAndLRUOrigin) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://a.com/", kTemp, 0 },
|
| - { "http://a.com:1/", kTemp, 0 },
|
| - { "https://a.com/", kTemp, 0 },
|
| - { "http://b.com/", kPerm, 0 }, // persistent
|
| - { "http://c.com/", kTemp, 0 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GURL origin;
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(lru_origin().is_empty());
|
| -
|
| - NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("http://a.com/", lru_origin().spec());
|
| -
|
| - NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
|
| - NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
|
| - NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("http://a.com/", lru_origin().spec());
|
| -
|
| - DeleteOriginFromDatabase(lru_origin(), kTemp);
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("https://a.com/", lru_origin().spec());
|
| -
|
| - DeleteOriginFromDatabase(lru_origin(), kTemp);
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("http://c.com/", lru_origin().spec());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetLRUOriginWithOriginInUse) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://a.com/", kTemp, 0 },
|
| - { "http://a.com:1/", kTemp, 0 },
|
| - { "https://a.com/", kTemp, 0 },
|
| - { "http://b.com/", kPerm, 0 }, // persistent
|
| - { "http://c.com/", kTemp, 0 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GURL origin;
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(lru_origin().is_empty());
|
| -
|
| - NotifyStorageAccessed(client, GURL("http://a.com/"), kTemp);
|
| - NotifyStorageAccessed(client, GURL("http://b.com/"), kPerm);
|
| - NotifyStorageAccessed(client, GURL("https://a.com/"), kTemp);
|
| - NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
|
| -
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("http://a.com/", lru_origin().spec());
|
| -
|
| - // Notify origin http://a.com is in use.
|
| - NotifyOriginInUse(GURL("http://a.com/"));
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("https://a.com/", lru_origin().spec());
|
| -
|
| - // Notify origin https://a.com is in use while GetLRUOrigin is running.
|
| - GetLRUOrigin(kTemp);
|
| - NotifyOriginInUse(GURL("https://a.com/"));
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - // Post-filtering must have excluded the returned origin, so we will
|
| - // see empty result here.
|
| - EXPECT_TRUE(lru_origin().is_empty());
|
| -
|
| - // Notify access for http://c.com while GetLRUOrigin is running.
|
| - GetLRUOrigin(kTemp);
|
| - NotifyStorageAccessed(client, GURL("http://c.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - // Post-filtering must have excluded the returned origin, so we will
|
| - // see empty result here.
|
| - EXPECT_TRUE(lru_origin().is_empty());
|
| -
|
| - NotifyOriginNoLongerInUse(GURL("http://a.com/"));
|
| - NotifyOriginNoLongerInUse(GURL("https://a.com/"));
|
| - GetLRUOrigin(kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ("http://a.com/", lru_origin().spec());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetOriginsModifiedSince) {
|
| - static const MockOriginData kData[] = {
|
| - { "http://a.com/", kTemp, 0 },
|
| - { "http://a.com:1/", kTemp, 0 },
|
| - { "https://a.com/", kTemp, 0 },
|
| - { "http://b.com/", kPerm, 0 }, // persistent
|
| - { "http://c.com/", kTemp, 0 },
|
| - };
|
| - MockStorageClient* client = CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem);
|
| - RegisterClient(client);
|
| -
|
| - GetOriginsModifiedSince(kTemp, base::Time());
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(modified_origins().empty());
|
| - EXPECT_EQ(modified_origins_type(), kTemp);
|
| -
|
| - base::Time time1 = client->IncrementMockTime();
|
| - client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
|
| - client->ModifyOriginAndNotify(GURL("http://a.com:1/"), kTemp, 10);
|
| - client->ModifyOriginAndNotify(GURL("http://b.com/"), kPerm, 10);
|
| - base::Time time2 = client->IncrementMockTime();
|
| - client->ModifyOriginAndNotify(GURL("https://a.com/"), kTemp, 10);
|
| - client->ModifyOriginAndNotify(GURL("http://c.com/"), kTemp, 10);
|
| - base::Time time3 = client->IncrementMockTime();
|
| -
|
| - GetOriginsModifiedSince(kTemp, time1);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(4U, modified_origins().size());
|
| - EXPECT_EQ(modified_origins_type(), kTemp);
|
| - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kData); ++i) {
|
| - if (kData[i].type == kTemp)
|
| - EXPECT_EQ(1U, modified_origins().count(GURL(kData[i].origin)));
|
| - }
|
| -
|
| - GetOriginsModifiedSince(kTemp, time2);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(2U, modified_origins().size());
|
| -
|
| - GetOriginsModifiedSince(kTemp, time3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_TRUE(modified_origins().empty());
|
| - EXPECT_EQ(modified_origins_type(), kTemp);
|
| -
|
| - client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10);
|
| -
|
| - GetOriginsModifiedSince(kTemp, time3);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(1U, modified_origins().size());
|
| - EXPECT_EQ(1U, modified_origins().count(GURL("http://a.com/")));
|
| - EXPECT_EQ(modified_origins_type(), kTemp);
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DumpQuotaTable) {
|
| - SetPersistentHostQuota("example1.com", 1);
|
| - SetPersistentHostQuota("example2.com", 20);
|
| - SetPersistentHostQuota("example3.com", 300);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - DumpQuotaTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - const QuotaTableEntry kEntries[] = {
|
| - QuotaTableEntry("example1.com", kPerm, 1),
|
| - QuotaTableEntry("example2.com", kPerm, 20),
|
| - QuotaTableEntry("example3.com", kPerm, 300),
|
| - };
|
| - std::set<QuotaTableEntry> entries
|
| - (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
|
| -
|
| - typedef QuotaTableEntries::const_iterator iterator;
|
| - for (iterator itr(quota_entries().begin()), end(quota_entries().end());
|
| - itr != end; ++itr) {
|
| - SCOPED_TRACE(testing::Message()
|
| - << "host = " << itr->host << ", "
|
| - << "quota = " << itr->quota);
|
| - EXPECT_EQ(1u, entries.erase(*itr));
|
| - }
|
| - EXPECT_TRUE(entries.empty());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DumpOriginInfoTable) {
|
| - using std::make_pair;
|
| -
|
| - quota_manager()->NotifyStorageAccessed(
|
| - QuotaClient::kUnknown,
|
| - GURL("http://example.com/"),
|
| - kTemp);
|
| - quota_manager()->NotifyStorageAccessed(
|
| - QuotaClient::kUnknown,
|
| - GURL("http://example.com/"),
|
| - kPerm);
|
| - quota_manager()->NotifyStorageAccessed(
|
| - QuotaClient::kUnknown,
|
| - GURL("http://example.com/"),
|
| - kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - DumpOriginInfoTable();
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| -
|
| - typedef std::pair<GURL, StorageType> TypedOrigin;
|
| - typedef std::pair<TypedOrigin, int> Entry;
|
| - const Entry kEntries[] = {
|
| - make_pair(make_pair(GURL("http://example.com/"), kTemp), 1),
|
| - make_pair(make_pair(GURL("http://example.com/"), kPerm), 2),
|
| - };
|
| - std::set<Entry> entries
|
| - (kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries));
|
| -
|
| - typedef OriginInfoTableEntries::const_iterator iterator;
|
| - for (iterator itr(origin_info_entries().begin()),
|
| - end(origin_info_entries().end());
|
| - itr != end; ++itr) {
|
| - SCOPED_TRACE(testing::Message()
|
| - << "host = " << itr->origin << ", "
|
| - << "type = " << itr->type << ", "
|
| - << "used_count = " << itr->used_count);
|
| - EXPECT_EQ(1u, entries.erase(
|
| - make_pair(make_pair(itr->origin, itr->type),
|
| - itr->used_count)));
|
| - }
|
| - EXPECT_TRUE(entries.empty());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, QuotaForEmptyHost) {
|
| - GetPersistentHostQuota(std::string());
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(0, quota());
|
| -
|
| - SetPersistentHostQuota(std::string(), 10);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaErrorNotSupported, status());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleOrigin) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com/", kTemp, 2 },
|
| - };
|
| - static const MockOriginData kData3[] = {
|
| - { "http://foo.com/", kTemp, 4 },
|
| - };
|
| - static const MockOriginData kData4[] = {
|
| - { "http://foo.com/", kTemp, 8 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kAppcache);
|
| - MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
|
| - QuotaClient::kDatabase);
|
| - MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
|
| - QuotaClient::kIndexedDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| - RegisterClient(client3);
|
| - RegisterClient(client4);
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kFileSystem);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 1, usage());
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kAppcache);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp, QuotaClient::kDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp,
|
| - QuotaClient::kIndexedDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteSpecificClientTypeSingleHost) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com:1111/", kTemp, 1 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com:2222/", kTemp, 2 },
|
| - };
|
| - static const MockOriginData kData3[] = {
|
| - { "http://foo.com:3333/", kTemp, 4 },
|
| - };
|
| - static const MockOriginData kData4[] = {
|
| - { "http://foo.com:4444/", kTemp, 8 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kAppcache);
|
| - MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
|
| - QuotaClient::kDatabase);
|
| - MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
|
| - QuotaClient::kIndexedDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| - RegisterClient(client3);
|
| - RegisterClient(client4);
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - DeleteHostData("foo.com", kTemp, QuotaClient::kFileSystem);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 1, usage());
|
| -
|
| - DeleteHostData("foo.com", kTemp, QuotaClient::kAppcache);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
|
| -
|
| - DeleteHostData("foo.com", kTemp, QuotaClient::kDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 4 - 2 - 1, usage());
|
| -
|
| - DeleteHostData("foo.com", kTemp, QuotaClient::kIndexedDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleOrigin) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com/", kTemp, 1 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com/", kTemp, 2 },
|
| - };
|
| - static const MockOriginData kData3[] = {
|
| - { "http://foo.com/", kTemp, 4 },
|
| - };
|
| - static const MockOriginData kData4[] = {
|
| - { "http://foo.com/", kTemp, 8 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kAppcache);
|
| - MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
|
| - QuotaClient::kDatabase);
|
| - MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
|
| - QuotaClient::kIndexedDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| - RegisterClient(client3);
|
| - RegisterClient(client4);
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp,
|
| - QuotaClient::kFileSystem | QuotaClient::kDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 4 - 1, usage());
|
| -
|
| - DeleteOriginData(GURL("http://foo.com/"), kTemp,
|
| - QuotaClient::kAppcache | QuotaClient::kIndexedDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, DeleteMultipleClientTypesSingleHost) {
|
| - static const MockOriginData kData1[] = {
|
| - { "http://foo.com:1111/", kTemp, 1 },
|
| - };
|
| - static const MockOriginData kData2[] = {
|
| - { "http://foo.com:2222/", kTemp, 2 },
|
| - };
|
| - static const MockOriginData kData3[] = {
|
| - { "http://foo.com:3333/", kTemp, 4 },
|
| - };
|
| - static const MockOriginData kData4[] = {
|
| - { "http://foo.com:4444/", kTemp, 8 },
|
| - };
|
| - MockStorageClient* client1 = CreateClient(kData1, ARRAYSIZE_UNSAFE(kData1),
|
| - QuotaClient::kFileSystem);
|
| - MockStorageClient* client2 = CreateClient(kData2, ARRAYSIZE_UNSAFE(kData2),
|
| - QuotaClient::kAppcache);
|
| - MockStorageClient* client3 = CreateClient(kData3, ARRAYSIZE_UNSAFE(kData3),
|
| - QuotaClient::kDatabase);
|
| - MockStorageClient* client4 = CreateClient(kData4, ARRAYSIZE_UNSAFE(kData4),
|
| - QuotaClient::kIndexedDatabase);
|
| - RegisterClient(client1);
|
| - RegisterClient(client2);
|
| - RegisterClient(client3);
|
| - RegisterClient(client4);
|
| -
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - const int64 predelete_foo_tmp = usage();
|
| -
|
| - DeleteHostData("foo.com", kTemp,
|
| - QuotaClient::kFileSystem | QuotaClient::kAppcache);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 2 - 1, usage());
|
| -
|
| - DeleteHostData("foo.com", kTemp,
|
| - QuotaClient::kDatabase | QuotaClient::kIndexedDatabase);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - GetHostUsage("foo.com", kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(predelete_foo_tmp - 8 - 4 - 2 - 1, usage());
|
| -}
|
| -
|
| -TEST_F(QuotaManagerTest, GetUsageAndQuota_Incognito) {
|
| - ResetQuotaManager(true);
|
| -
|
| - static const MockOriginData kData[] = {
|
| - { "http://foo.com/", kTemp, 10 },
|
| - { "http://foo.com/", kPerm, 80 },
|
| - };
|
| - RegisterClient(CreateClient(kData, ARRAYSIZE_UNSAFE(kData),
|
| - QuotaClient::kFileSystem));
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(80, usage());
|
| - EXPECT_EQ(0, quota());
|
| -
|
| - SetTemporaryGlobalQuota(100);
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_LE(std::min(static_cast<int64>(100 / kPerHostTemporaryPortion),
|
| - QuotaManager::kIncognitoDefaultQuotaLimit), quota());
|
| -
|
| - mock_special_storage_policy()->AddUnlimited(GURL("http://foo.com/"));
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kPerm);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(80, usage());
|
| - EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
|
| -
|
| - GetUsageAndQuotaForWebApps(GURL("http://foo.com/"), kTemp);
|
| - base::MessageLoop::current()->RunUntilIdle();
|
| - EXPECT_EQ(kQuotaStatusOk, status());
|
| - EXPECT_EQ(10, usage());
|
| - EXPECT_EQ(QuotaManager::kIncognitoDefaultQuotaLimit, quota());
|
| -}
|
| -
|
| -} // namespace quota
|
|
|