| Index: content/browser/storage_partition_impl_unittest.cc
|
| diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
|
| index 4828ae6529fccae29d94bd7ff6bf6c874fc0739e..034db368c07e2f204e3e135bd1c6019f2cd88fd2 100644
|
| --- a/content/browser/storage_partition_impl_unittest.cc
|
| +++ b/content/browser/storage_partition_impl_unittest.cc
|
| @@ -10,13 +10,43 @@
|
| #include "content/browser/gpu/shader_disk_cache.h"
|
| #include "content/browser/storage_partition_impl.h"
|
| #include "content/public/browser/storage_partition.h"
|
| +#include "content/public/test/test_browser_context.h"
|
| +#include "content/public/test/test_browser_thread.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "net/base/test_completion_callback.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| +#include "webkit/browser/quota/mock_quota_manager.h"
|
| +#include "webkit/browser/quota/mock_special_storage_policy.h"
|
| +#include "webkit/browser/quota/quota_manager.h"
|
|
|
| namespace content {
|
| namespace {
|
|
|
| +const int kDefaultClientId = 42;
|
| +const char kCacheKey[] = "key";
|
| +const char kCacheValue[] = "cached value";
|
| +
|
| +const char kTestOrigin1[] = "http://host1:1/";
|
| +const char kTestOrigin2[] = "http://host2:1/";
|
| +const char kTestOrigin3[] = "http://host3:1/";
|
| +const char kTestOriginDevTools[] = "chrome-devtools://abcdefghijklmnopqrstuvw/";
|
| +
|
| +const GURL kOrigin1(kTestOrigin1);
|
| +const GURL kOrigin2(kTestOrigin2);
|
| +const GURL kOrigin3(kTestOrigin3);
|
| +const GURL kOriginDevTools(kTestOriginDevTools);
|
| +
|
| +const quota::StorageType kTemporary = quota::kStorageTypeTemporary;
|
| +const quota::StorageType kPersistent = quota::kStorageTypePersistent;
|
| +
|
| +const quota::QuotaClient::ID kClientFile = quota::QuotaClient::kFileSystem;
|
| +
|
| +const uint32 kAllQuotaRemoveMask =
|
| + StoragePartition::REMOVE_DATA_MASK_INDEXEDDB |
|
| + StoragePartition::REMOVE_DATA_MASK_WEBSQL |
|
| + StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
|
| + StoragePartition::REMOVE_DATA_MASK_APPCACHE;
|
| +
|
| class TestClosureCallback {
|
| public:
|
| TestClosureCallback()
|
| @@ -42,12 +72,99 @@ class TestClosureCallback {
|
| DISALLOW_COPY_AND_ASSIGN(TestClosureCallback);
|
| };
|
|
|
| -const int kDefaultClientId = 42;
|
| -const char kCacheKey[] = "key";
|
| -const char kCacheValue[] = "cached value";
|
| +bool DoesOriginMatchForUnprotectedWeb(
|
| + const GURL& origin,
|
| + quota::SpecialStoragePolicy* special_storage_policy) {
|
| + // This is used for tests where we are clearing UNPROTECTED_WEB data.
|
| + return !special_storage_policy->IsStorageProtected(origin.GetOrigin());
|
| +}
|
| +
|
| +bool DoesOriginMatchForBothProtectedAndUnprotectedWeb(
|
| + const GURL& origin,
|
| + quota::SpecialStoragePolicy* special_storage_policy) {
|
| + return true;
|
| +}
|
| +
|
| +bool DoesOriginMatchUnprotected(
|
| + const GURL& origin,
|
| + quota::SpecialStoragePolicy* special_storage_policy) {
|
| + return origin.GetOrigin().scheme() != kOriginDevTools.scheme();
|
| +}
|
| +
|
| +void ClearQuotaData(content::StoragePartition* storage_partition,
|
| + const base::Closure& cb) {
|
| + storage_partition->ClearData(
|
| + kAllQuotaRemoveMask,
|
| + StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
|
| + NULL, StoragePartition::OriginMatcherFunction(),
|
| + base::Time(), base::Time::Max(), cb);
|
| +}
|
| +
|
| +void ClearQuotaDataWithOriginMatcher(
|
| + content::StoragePartition* storage_partition,
|
| + const GURL& remove_origin,
|
| + const StoragePartition::OriginMatcherFunction& origin_matcher,
|
| + const base::Time delete_begin,
|
| + const base::Closure& cb) {
|
| + storage_partition->ClearData(kAllQuotaRemoveMask,
|
| + StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
|
| + &remove_origin, origin_matcher, delete_begin,
|
| + base::Time::Max(), cb);
|
| +}
|
| +
|
| +void ClearQuotaDataForOrigin(
|
| + content::StoragePartition* storage_partition,
|
| + const GURL& remove_origin,
|
| + const base::Time delete_begin,
|
| + const base::Closure& cb) {
|
| + ClearQuotaDataWithOriginMatcher(
|
| + storage_partition, remove_origin,
|
| + StoragePartition::OriginMatcherFunction(), delete_begin, cb);
|
| +}
|
| +
|
| +void ClearQuotaDataForNonPersistent(
|
| + content::StoragePartition* storage_partition,
|
| + const base::Time delete_begin,
|
| + const base::Closure& cb) {
|
| + uint32 quota_storage_remove_mask_no_persistent =
|
| + StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL &
|
| + ~StoragePartition::QUOTA_MANAGED_STORAGE_MASK_PERSISTENT;
|
| + storage_partition->ClearData(
|
| + kAllQuotaRemoveMask, quota_storage_remove_mask_no_persistent,
|
| + NULL, StoragePartition::OriginMatcherFunction(),
|
| + delete_begin, base::Time::Max(), cb);
|
| +}
|
|
|
| } // namespace
|
|
|
| +class StoragePartitionImplTest : public testing::Test {
|
| + public:
|
| + StoragePartitionImplTest()
|
| + : browser_context_(new TestBrowserContext()),
|
| + thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {
|
| + }
|
| + virtual ~StoragePartitionImplTest() {}
|
| +
|
| + quota::MockQuotaManager* GetMockManager() {
|
| + if (!quota_manager_.get()) {
|
| + quota_manager_ = new quota::MockQuotaManager(
|
| + browser_context_->IsOffTheRecord(),
|
| + browser_context_->GetPath(),
|
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO).get(),
|
| + BrowserThread::GetMessageLoopProxyForThread(BrowserThread::DB).get(),
|
| + browser_context_->GetSpecialStoragePolicy());
|
| + }
|
| + return quota_manager_.get();
|
| + }
|
| +
|
| + private:
|
| + scoped_ptr<TestBrowserContext> browser_context_;
|
| + scoped_refptr<quota::MockQuotaManager> quota_manager_;
|
| + content::TestBrowserThreadBundle thread_bundle_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(StoragePartitionImplTest);
|
| +};
|
| +
|
| class StoragePartitionShaderClearTest : public testing::Test {
|
| public:
|
| StoragePartitionShaderClearTest()
|
| @@ -98,9 +215,10 @@ class StoragePartitionShaderClearTest : public testing::Test {
|
| void ClearData(content::StoragePartitionImpl* sp,
|
| const base::Closure& cb) {
|
| base::Time time;
|
| - sp->ClearDataForRange(
|
| + sp->ClearData(
|
| StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE,
|
| StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
|
| + NULL, StoragePartition::OriginMatcherFunction(),
|
| time, time, cb);
|
| }
|
|
|
| @@ -109,12 +227,392 @@ TEST_F(StoragePartitionShaderClearTest, ClearShaderCache) {
|
| EXPECT_EQ(1u, Size());
|
|
|
| TestClosureCallback clear_cb;
|
| - StoragePartitionImpl sp(
|
| - cache_path(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + StoragePartitionImpl storage_partition(
|
| + cache_path(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&ClearData, &sp, clear_cb.callback()));
|
| + FROM_HERE, base::Bind(&ClearData, &storage_partition,
|
| + clear_cb.callback()));
|
| clear_cb.WaitForResult();
|
| EXPECT_EQ(0u, Size());
|
| }
|
|
|
| +TEST_F(StoragePartitionImplTest, QuotaClientMaskGeneration) {
|
| + EXPECT_EQ(quota::QuotaClient::kFileSystem,
|
| + StoragePartitionImpl::GenerateQuotaClientMask(
|
| + StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS));
|
| + EXPECT_EQ(quota::QuotaClient::kDatabase,
|
| + StoragePartitionImpl::GenerateQuotaClientMask(
|
| + StoragePartition::REMOVE_DATA_MASK_WEBSQL));
|
| + EXPECT_EQ(quota::QuotaClient::kAppcache,
|
| + StoragePartitionImpl::GenerateQuotaClientMask(
|
| + StoragePartition::REMOVE_DATA_MASK_APPCACHE));
|
| + EXPECT_EQ(quota::QuotaClient::kIndexedDatabase,
|
| + StoragePartitionImpl::GenerateQuotaClientMask(
|
| + StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
|
| + EXPECT_EQ(quota::QuotaClient::kFileSystem |
|
| + quota::QuotaClient::kDatabase |
|
| + quota::QuotaClient::kAppcache |
|
| + quota::QuotaClient::kIndexedDatabase,
|
| + StoragePartitionImpl::GenerateQuotaClientMask(
|
| + StoragePartition::REMOVE_DATA_MASK_FILE_SYSTEMS |
|
| + StoragePartition::REMOVE_DATA_MASK_WEBSQL |
|
| + StoragePartition::REMOVE_DATA_MASK_APPCACHE |
|
| + StoragePartition::REMOVE_DATA_MASK_INDEXEDDB));
|
| +}
|
| +
|
| +void PopulateTestQuotaManagedPersistentData(quota::MockQuotaManager* manager) {
|
| + manager->AddOrigin(kOrigin2, kPersistent, kClientFile, base::Time());
|
| + manager->AddOrigin(kOrigin3, kPersistent, kClientFile,
|
| + base::Time::Now() - base::TimeDelta::FromDays(1));
|
| +
|
| + EXPECT_FALSE(manager->OriginHasData(kOrigin1, kPersistent, kClientFile));
|
| + EXPECT_TRUE(manager->OriginHasData(kOrigin2, kPersistent, kClientFile));
|
| + EXPECT_TRUE(manager->OriginHasData(kOrigin3, kPersistent, kClientFile));
|
| +}
|
| +
|
| +void PopulateTestQuotaManagedTemporaryData(quota::MockQuotaManager* manager) {
|
| + manager->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now());
|
| + manager->AddOrigin(kOrigin3, kTemporary, kClientFile,
|
| + base::Time::Now() - base::TimeDelta::FromDays(1));
|
| +
|
| + EXPECT_TRUE(manager->OriginHasData(kOrigin1, kTemporary, kClientFile));
|
| + EXPECT_FALSE(manager->OriginHasData(kOrigin2, kTemporary, kClientFile));
|
| + EXPECT_TRUE(manager->OriginHasData(kOrigin3, kTemporary, kClientFile));
|
| +}
|
| +
|
| +void PopulateTestQuotaManagedData(quota::MockQuotaManager* manager) {
|
| + // Set up kOrigin1 with a temporary quota, kOrigin2 with a persistent
|
| + // quota, and kOrigin3 with both. kOrigin1 is modified now, kOrigin2
|
| + // is modified at the beginning of time, and kOrigin3 is modified one day
|
| + // ago.
|
| + PopulateTestQuotaManagedPersistentData(manager);
|
| + PopulateTestQuotaManagedTemporaryData(manager);
|
| +}
|
| +
|
| +void PopulateTestQuotaManagedNonBrowsingData(quota::MockQuotaManager* manager) {
|
| + manager->AddOrigin(kOriginDevTools, kTemporary, kClientFile, base::Time());
|
| + manager->AddOrigin(kOriginDevTools, kPersistent, kClientFile, base::Time());
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverBoth) {
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverOnlyTemporary) {
|
| + PopulateTestQuotaManagedTemporaryData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverOnlyPersistent) {
|
| + PopulateTestQuotaManagedPersistentData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverNeither) {
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaData, &sp, clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForeverSpecificOrigin) {
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataForOrigin,
|
| + &sp, kOrigin1, base::Time(), clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForLastHour) {
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataForOrigin,
|
| + &sp, GURL(),
|
| + base::Time::Now() - base::TimeDelta::FromHours(1),
|
| + clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedDataForLastWeek) {
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataForNonPersistent,
|
| + &sp,
|
| + base::Time::Now() - base::TimeDelta::FromDays(7),
|
| + clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedUnprotectedOrigins) {
|
| + // Protect kOrigin1.
|
| + scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy =
|
| + new quota::MockSpecialStoragePolicy;
|
| + mock_policy->AddProtected(kOrigin1.GetOrigin());
|
| +
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + static_cast<StoragePartitionImpl*>(
|
| + &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy);
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher,
|
| + &sp, GURL(),
|
| + base::Bind(&DoesOriginMatchForUnprotectedWeb),
|
| + base::Time(), clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedProtectedSpecificOrigin) {
|
| + // Protect kOrigin1.
|
| + scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy =
|
| + new quota::MockSpecialStoragePolicy;
|
| + mock_policy->AddProtected(kOrigin1.GetOrigin());
|
| +
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + static_cast<StoragePartitionImpl*>(
|
| + &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy);
|
| +
|
| + // Try to remove kOrigin1. Expect failure.
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher,
|
| + &sp, kOrigin1,
|
| + base::Bind(&DoesOriginMatchForUnprotectedWeb),
|
| + base::Time(), clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedProtectedOrigins) {
|
| + // Protect kOrigin1.
|
| + scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy =
|
| + new quota::MockSpecialStoragePolicy;
|
| + mock_policy->AddProtected(kOrigin1.GetOrigin());
|
| +
|
| + PopulateTestQuotaManagedData(GetMockManager());
|
| +
|
| + // Try to remove kOrigin1. Expect success.
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + static_cast<StoragePartitionImpl*>(
|
| + &sp)->OverrideSpecialStoragePolicyForTesting(mock_policy);
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&ClearQuotaDataWithOriginMatcher,
|
| + &sp, GURL(),
|
| + base::Bind(&DoesOriginMatchForBothProtectedAndUnprotectedWeb),
|
| + base::Time(), clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kTemporary,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin1, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin2, kPersistent,
|
| + kClientFile));
|
| + EXPECT_FALSE(GetMockManager()->OriginHasData(kOrigin3, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| +TEST_F(StoragePartitionImplTest, RemoveQuotaManagedIgnoreDevTools) {
|
| + PopulateTestQuotaManagedNonBrowsingData(GetMockManager());
|
| +
|
| + TestClosureCallback clear_cb;
|
| + StoragePartitionImpl sp(
|
| + base::FilePath(), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
| + static_cast<StoragePartitionImpl*>(&sp)->OverrideQuotaManagerForTesting(
|
| + GetMockManager());
|
| + base::MessageLoop::current()->PostTask(
|
| + FROM_HERE, base::Bind(&ClearQuotaDataWithOriginMatcher,
|
| + &sp, GURL(),
|
| + base::Bind(&DoesOriginMatchUnprotected),
|
| + base::Time(), clear_cb.callback()));
|
| + clear_cb.WaitForResult();
|
| +
|
| + // Check that devtools data isn't removed.
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kTemporary,
|
| + kClientFile));
|
| + EXPECT_TRUE(GetMockManager()->OriginHasData(kOriginDevTools, kPersistent,
|
| + kClientFile));
|
| +}
|
| +
|
| } // namespace content
|
|
|