| OLD | NEW | 
 | (Empty) | 
|    1 // Copyright 2014 The Chromium Authors. All rights reserved. |  | 
|    2 // Use of this source code is governed by a BSD-style license that can be |  | 
|    3 // found in the LICENSE file. |  | 
|    4  |  | 
|    5 #include "content/browser/quota/mock_quota_manager.h" |  | 
|    6  |  | 
|    7 #include <memory> |  | 
|    8 #include <set> |  | 
|    9  |  | 
|   10 #include "base/bind.h" |  | 
|   11 #include "base/files/file_util.h" |  | 
|   12 #include "base/files/scoped_temp_dir.h" |  | 
|   13 #include "base/macros.h" |  | 
|   14 #include "base/run_loop.h" |  | 
|   15 #include "base/threading/thread_task_runner_handle.h" |  | 
|   16 #include "content/public/test/mock_special_storage_policy.h" |  | 
|   17 #include "content/public/test/mock_storage_client.h" |  | 
|   18 #include "testing/gtest/include/gtest/gtest.h" |  | 
|   19  |  | 
|   20 using storage::kQuotaStatusOk; |  | 
|   21 using storage::kStorageTypePersistent; |  | 
|   22 using storage::kStorageTypeTemporary; |  | 
|   23  |  | 
|   24 namespace content { |  | 
|   25  |  | 
|   26 const char kTestOrigin1[] = "http://host1:1/"; |  | 
|   27 const char kTestOrigin2[] = "http://host2:1/"; |  | 
|   28 const char kTestOrigin3[] = "http://host3:1/"; |  | 
|   29  |  | 
|   30 const GURL kOrigin1(kTestOrigin1); |  | 
|   31 const GURL kOrigin2(kTestOrigin2); |  | 
|   32 const GURL kOrigin3(kTestOrigin3); |  | 
|   33  |  | 
|   34 const StorageType kTemporary = kStorageTypeTemporary; |  | 
|   35 const StorageType kPersistent = kStorageTypePersistent; |  | 
|   36  |  | 
|   37 const QuotaClient::ID kClientFile = QuotaClient::kFileSystem; |  | 
|   38 const QuotaClient::ID kClientDB = QuotaClient::kIndexedDatabase; |  | 
|   39  |  | 
|   40 class MockQuotaManagerTest : public testing::Test { |  | 
|   41  public: |  | 
|   42   MockQuotaManagerTest() |  | 
|   43     : deletion_callback_count_(0), |  | 
|   44       weak_factory_(this) { |  | 
|   45   } |  | 
|   46  |  | 
|   47   void SetUp() override { |  | 
|   48     ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); |  | 
|   49     policy_ = new MockSpecialStoragePolicy; |  | 
|   50     manager_ = new MockQuotaManager( |  | 
|   51         false /* is_incognito */, data_dir_.GetPath(), |  | 
|   52         base::ThreadTaskRunnerHandle::Get().get(), |  | 
|   53         base::ThreadTaskRunnerHandle::Get().get(), policy_.get()); |  | 
|   54   } |  | 
|   55  |  | 
|   56   void TearDown() override { |  | 
|   57     // Make sure the quota manager cleans up correctly. |  | 
|   58     manager_ = NULL; |  | 
|   59     base::RunLoop().RunUntilIdle(); |  | 
|   60   } |  | 
|   61  |  | 
|   62   void GetModifiedOrigins(StorageType type, base::Time since) { |  | 
|   63     manager_->GetOriginsModifiedSince( |  | 
|   64         type, since, |  | 
|   65         base::Bind(&MockQuotaManagerTest::GotModifiedOrigins, |  | 
|   66                    weak_factory_.GetWeakPtr())); |  | 
|   67   } |  | 
|   68  |  | 
|   69   void GotModifiedOrigins(const std::set<GURL>& origins, StorageType type) { |  | 
|   70     origins_ = origins; |  | 
|   71     type_ = type; |  | 
|   72   } |  | 
|   73  |  | 
|   74   void DeleteOriginData(const GURL& origin, StorageType type, |  | 
|   75       int quota_client_mask) { |  | 
|   76     manager_->DeleteOriginData( |  | 
|   77         origin, type, quota_client_mask, |  | 
|   78         base::Bind(&MockQuotaManagerTest::DeletedOriginData, |  | 
|   79                    weak_factory_.GetWeakPtr())); |  | 
|   80   } |  | 
|   81  |  | 
|   82   void DeletedOriginData(QuotaStatusCode status) { |  | 
|   83     ++deletion_callback_count_; |  | 
|   84     EXPECT_EQ(kQuotaStatusOk, status); |  | 
|   85   } |  | 
|   86  |  | 
|   87   int deletion_callback_count() const { |  | 
|   88     return deletion_callback_count_; |  | 
|   89   } |  | 
|   90  |  | 
|   91   MockQuotaManager* manager() const { |  | 
|   92     return manager_.get(); |  | 
|   93   } |  | 
|   94  |  | 
|   95   const std::set<GURL>& origins() const { |  | 
|   96     return origins_; |  | 
|   97   } |  | 
|   98  |  | 
|   99   const StorageType& type() const { |  | 
|  100     return type_; |  | 
|  101   } |  | 
|  102  |  | 
|  103  private: |  | 
|  104   base::MessageLoop message_loop_; |  | 
|  105   base::ScopedTempDir data_dir_; |  | 
|  106   scoped_refptr<MockQuotaManager> manager_; |  | 
|  107   scoped_refptr<MockSpecialStoragePolicy> policy_; |  | 
|  108  |  | 
|  109   int deletion_callback_count_; |  | 
|  110  |  | 
|  111   std::set<GURL> origins_; |  | 
|  112   StorageType type_; |  | 
|  113  |  | 
|  114   base::WeakPtrFactory<MockQuotaManagerTest> weak_factory_; |  | 
|  115  |  | 
|  116   DISALLOW_COPY_AND_ASSIGN(MockQuotaManagerTest); |  | 
|  117 }; |  | 
|  118  |  | 
|  119 TEST_F(MockQuotaManagerTest, BasicOriginManipulation) { |  | 
|  120   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  121   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB)); |  | 
|  122   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile)); |  | 
|  123   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB)); |  | 
|  124   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  125   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  126   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile)); |  | 
|  127   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB)); |  | 
|  128  |  | 
|  129   manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now()); |  | 
|  130   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  131   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB)); |  | 
|  132   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile)); |  | 
|  133   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB)); |  | 
|  134   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  135   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  136   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile)); |  | 
|  137   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB)); |  | 
|  138  |  | 
|  139   manager()->AddOrigin(kOrigin1, kPersistent, kClientFile, base::Time::Now()); |  | 
|  140   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  141   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB)); |  | 
|  142   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile)); |  | 
|  143   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB)); |  | 
|  144   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  145   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  146   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile)); |  | 
|  147   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB)); |  | 
|  148  |  | 
|  149   manager()->AddOrigin(kOrigin2, kTemporary, kClientFile | kClientDB, |  | 
|  150       base::Time::Now()); |  | 
|  151   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  152   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB)); |  | 
|  153   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile)); |  | 
|  154   EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB)); |  | 
|  155   EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  156   EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  157   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile)); |  | 
|  158   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB)); |  | 
|  159 } |  | 
|  160  |  | 
|  161 TEST_F(MockQuotaManagerTest, OriginDeletion) { |  | 
|  162   manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now()); |  | 
|  163   manager()->AddOrigin(kOrigin2, kTemporary, kClientFile | kClientDB, |  | 
|  164       base::Time::Now()); |  | 
|  165   manager()->AddOrigin(kOrigin3, kTemporary, kClientFile | kClientDB, |  | 
|  166       base::Time::Now()); |  | 
|  167  |  | 
|  168   DeleteOriginData(kOrigin2, kTemporary, kClientFile); |  | 
|  169   base::RunLoop().RunUntilIdle(); |  | 
|  170  |  | 
|  171   EXPECT_EQ(1, deletion_callback_count()); |  | 
|  172   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  173   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  174   EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  175   EXPECT_TRUE(manager()->OriginHasData(kOrigin3, kTemporary, kClientFile)); |  | 
|  176   EXPECT_TRUE(manager()->OriginHasData(kOrigin3, kTemporary, kClientDB)); |  | 
|  177  |  | 
|  178   DeleteOriginData(kOrigin3, kTemporary, kClientFile | kClientDB); |  | 
|  179   base::RunLoop().RunUntilIdle(); |  | 
|  180  |  | 
|  181   EXPECT_EQ(2, deletion_callback_count()); |  | 
|  182   EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile)); |  | 
|  183   EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile)); |  | 
|  184   EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB)); |  | 
|  185   EXPECT_FALSE(manager()->OriginHasData(kOrigin3, kTemporary, kClientFile)); |  | 
|  186   EXPECT_FALSE(manager()->OriginHasData(kOrigin3, kTemporary, kClientDB)); |  | 
|  187 } |  | 
|  188  |  | 
|  189 TEST_F(MockQuotaManagerTest, ModifiedOrigins) { |  | 
|  190   base::Time now = base::Time::Now(); |  | 
|  191   base::Time then = base::Time(); |  | 
|  192   base::TimeDelta an_hour = base::TimeDelta::FromMilliseconds(3600000); |  | 
|  193   base::TimeDelta a_minute = base::TimeDelta::FromMilliseconds(60000); |  | 
|  194  |  | 
|  195   GetModifiedOrigins(kTemporary, then); |  | 
|  196   base::RunLoop().RunUntilIdle(); |  | 
|  197   EXPECT_TRUE(origins().empty()); |  | 
|  198  |  | 
|  199   manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, now - an_hour); |  | 
|  200  |  | 
|  201   GetModifiedOrigins(kTemporary, then); |  | 
|  202   base::RunLoop().RunUntilIdle(); |  | 
|  203  |  | 
|  204   EXPECT_EQ(kTemporary, type()); |  | 
|  205   EXPECT_EQ(1UL, origins().size()); |  | 
|  206   EXPECT_EQ(1UL, origins().count(kOrigin1)); |  | 
|  207   EXPECT_EQ(0UL, origins().count(kOrigin2)); |  | 
|  208  |  | 
|  209   manager()->AddOrigin(kOrigin2, kTemporary, kClientFile, now); |  | 
|  210  |  | 
|  211   GetModifiedOrigins(kTemporary, then); |  | 
|  212   base::RunLoop().RunUntilIdle(); |  | 
|  213  |  | 
|  214   EXPECT_EQ(kTemporary, type()); |  | 
|  215   EXPECT_EQ(2UL, origins().size()); |  | 
|  216   EXPECT_EQ(1UL, origins().count(kOrigin1)); |  | 
|  217   EXPECT_EQ(1UL, origins().count(kOrigin2)); |  | 
|  218  |  | 
|  219   GetModifiedOrigins(kTemporary, now - a_minute); |  | 
|  220   base::RunLoop().RunUntilIdle(); |  | 
|  221  |  | 
|  222   EXPECT_EQ(kTemporary, type()); |  | 
|  223   EXPECT_EQ(1UL, origins().size()); |  | 
|  224   EXPECT_EQ(0UL, origins().count(kOrigin1)); |  | 
|  225   EXPECT_EQ(1UL, origins().count(kOrigin2)); |  | 
|  226 } |  | 
|  227 }  // namespace content |  | 
| OLD | NEW |