1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/mock_quota_manager.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/mock_special_storage_policy.h"
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/browser/quota/mock_storage_client.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace quota {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin1[] = "http://host1:1/";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin2[] = "http://host2:1/";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestOrigin3[] = "http://host3:1/";
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin1(kTestOrigin1);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin2(kTestOrigin2);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const GURL kOrigin3(kTestOrigin3);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StorageType kTemporary = kStorageTypeTemporary;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const StorageType kPersistent = kStorageTypePersistent;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const QuotaClient::ID kClientFile = QuotaClient::kFileSystem;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const QuotaClient::ID kClientDB = QuotaClient::kIndexedDatabase;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockQuotaManagerTest : public testing::Test {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockQuotaManagerTest()
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : weak_factory_(this),
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      deletion_callback_count_(0) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    policy_ = new MockSpecialStoragePolicy;
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    manager_ = new MockQuotaManager(false /* is_incognito */,
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                    data_dir_.path(),
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                    base::MessageLoopProxy::current().get(),
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                    base::MessageLoopProxy::current().get(),
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                    policy_.get());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure the quota manager cleans up correctly.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manager_ = NULL;
55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetModifiedOrigins(StorageType type, base::Time since) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manager_->GetOriginsModifiedSince(
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        type, since,
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&MockQuotaManagerTest::GotModifiedOrigins,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   weak_factory_.GetWeakPtr()));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GotModifiedOrigins(const std::set<GURL>& origins, StorageType type) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    origins_ = origins;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    type_ = type;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DeleteOriginData(const GURL& origin, StorageType type,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int quota_client_mask) {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    manager_->DeleteOriginData(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        origin, type, quota_client_mask,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::Bind(&MockQuotaManagerTest::DeletedOriginData,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   weak_factory_.GetWeakPtr()));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DeletedOriginData(QuotaStatusCode status) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++deletion_callback_count_;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(quota::kQuotaStatusOk, status);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int deletion_callback_count() const {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return deletion_callback_count_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockQuotaManager* manager() const {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return manager_.get();
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::set<GURL>& origins() const {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return origins_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const StorageType& type() const {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type_;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop message_loop_;
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ScopedTempDir data_dir_;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<MockQuotaManagerTest> weak_factory_;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockQuotaManager> manager_;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<MockSpecialStoragePolicy> policy_;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int deletion_callback_count_;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<GURL> origins_;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StorageType type_;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MockQuotaManagerTest);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MockQuotaManagerTest, BasicOriginManipulation) {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile));
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB));
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile));
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB));
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin1, kPersistent, kClientFile, base::Time::Now());
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB));
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB));
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB));
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin2, kTemporary, kClientFile | kClientDB,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Now());
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kTemporary, kClientDB));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kPersistent, kClientFile));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin1, kPersistent, kClientDB));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientFile));
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kPersistent, kClientDB));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MockQuotaManagerTest, OriginDeletion) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, base::Time::Now());
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin2, kTemporary, kClientFile | kClientDB,
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Now());
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin3, kTemporary, kClientFile | kClientDB,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Time::Now());
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DeleteOriginData(kOrigin2, kTemporary, kClientFile);
164b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1, deletion_callback_count());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin3, kTemporary, kClientFile));
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin3, kTemporary, kClientDB));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DeleteOriginData(kOrigin3, kTemporary, kClientFile | kClientDB);
174b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2, deletion_callback_count());
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin1, kTemporary, kClientFile));
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin2, kTemporary, kClientFile));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(manager()->OriginHasData(kOrigin2, kTemporary, kClientDB));
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin3, kTemporary, kClientFile));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(manager()->OriginHasData(kOrigin3, kTemporary, kClientDB));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MockQuotaManagerTest, ModifiedOrigins) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time now = base::Time::Now();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time then = base::Time();
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta an_hour = base::TimeDelta::FromMilliseconds(3600000);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeDelta a_minute = base::TimeDelta::FromMilliseconds(60000);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetModifiedOrigins(kTemporary, then);
191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(origins().empty());
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin1, kTemporary, kClientFile, now - an_hour);
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetModifiedOrigins(kTemporary, then);
197b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kTemporary, type());
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().size());
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().count(kOrigin1));
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0UL, origins().count(kOrigin2));
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  manager()->AddOrigin(kOrigin2, kTemporary, kClientFile, now);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetModifiedOrigins(kTemporary, then);
207b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kTemporary, type());
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(2UL, origins().size());
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().count(kOrigin1));
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().count(kOrigin2));
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetModifiedOrigins(kTemporary, now - a_minute);
215b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  base::MessageLoop::current()->RunUntilIdle();
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(kTemporary, type());
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().size());
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0UL, origins().count(kOrigin1));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(1UL, origins().count(kOrigin2));
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // Namespace quota
223