Index: webkit/quota/quota_manager_unittest.cc |
diff --git a/webkit/quota/quota_manager_unittest.cc b/webkit/quota/quota_manager_unittest.cc |
index 6cd482ddf4243b70e5353c75e0310f9d56bb6a4e..37b43dee515df8454794341b2bd24936511fe3a5 100644 |
--- a/webkit/quota/quota_manager_unittest.cc |
+++ b/webkit/quota/quota_manager_unittest.cc |
@@ -2,6 +2,7 @@ |
// 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> |
@@ -37,13 +38,13 @@ class QuotaManagerTest : public testing::Test { |
protected: |
typedef QuotaManager::QuotaTableEntry QuotaTableEntry; |
typedef QuotaManager::QuotaTableEntries QuotaTableEntries; |
- typedef QuotaManager::LastAccessTimeTableEntry LastAccessTimeTableEntry; |
- typedef QuotaManager::LastAccessTimeTableEntries LastAccessTimeTableEntries; |
+ typedef QuotaManager::OriginInfoTableEntry OriginInfoTableEntry; |
+ typedef QuotaManager::OriginInfoTableEntries OriginInfoTableEntries; |
public: |
QuotaManagerTest() |
: callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
- virtual_time_counter_(0) { |
+ mock_time_counter_(0) { |
} |
void SetUp() { |
@@ -202,7 +203,7 @@ class QuotaManagerTest : public testing::Test { |
StorageType type) { |
DCHECK(client); |
quota_manager_->NotifyStorageAccessedInternal( |
- client->id(), origin, type, GetCurrentMockTime()); |
+ client->id(), origin, type, IncrementMockTime()); |
} |
void DeleteOriginFromDatabase(const GURL& origin, StorageType type) { |
@@ -223,6 +224,13 @@ class QuotaManagerTest : public testing::Test { |
quota_manager_->NotifyOriginNoLongerInUse(origin); |
} |
+ void GetOriginsModifiedSince(StorageType type, base::Time modified_since) { |
+ modified_origins_.clear(); |
+ quota_manager_->GetOriginsModifiedSince(type, modified_since, |
+ callback_factory_.NewCallback( |
+ &QuotaManagerTest::DidGetModifiedOrigins)); |
+ } |
+ |
void DumpQuotaTable() { |
quota_table_.clear(); |
quota_manager_->DumpQuotaTable( |
@@ -230,11 +238,11 @@ class QuotaManagerTest : public testing::Test { |
&QuotaManagerTest::DidDumpQuotaTable)); |
} |
- void DumpLastAccessTimeTable() { |
- last_access_time_table_.clear(); |
- quota_manager_->DumpLastAccessTimeTable( |
+ void DumpOriginInfoTable() { |
+ origin_info_table_.clear(); |
+ quota_manager_->DumpOriginInfoTable( |
callback_factory_.NewCallback( |
- &QuotaManagerTest::DidDumpLastAccessTimeTable)); |
+ &QuotaManagerTest::DidDumpOriginInfoTable)); |
} |
void DidGetUsageAndQuota(QuotaStatusCode status, int64 usage, int64 quota) { |
@@ -299,12 +307,16 @@ class QuotaManagerTest : public testing::Test { |
lru_origin_ = origin; |
} |
+ void DidGetModifiedOrigins(const std::set<GURL>& origins) { |
+ modified_origins_ = origins; |
+ } |
+ |
void DidDumpQuotaTable(const QuotaTableEntries& entries) { |
quota_table_ = entries; |
} |
- void DidDumpLastAccessTimeTable(const LastAccessTimeTableEntries& entries) { |
- last_access_time_table_ = entries; |
+ void DidDumpOriginInfoTable(const OriginInfoTableEntries& entries) { |
+ origin_info_table_ = entries; |
} |
void GetUsage_WithModifyTestBody(const StorageType type); |
@@ -333,18 +345,19 @@ class QuotaManagerTest : public testing::Test { |
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_; } |
const QuotaTableEntries& quota_table() const { return quota_table_; } |
- const LastAccessTimeTableEntries& last_access_time_table() const { |
- return last_access_time_table_; |
+ const OriginInfoTableEntries& last_access_time_table() const { |
+ return origin_info_table_; |
} |
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 GetCurrentMockTime() { |
- ++virtual_time_counter_; |
- return base::Time::FromDoubleT(virtual_time_counter_ * 10.0); |
+ base::Time IncrementMockTime() { |
+ ++mock_time_counter_; |
+ return base::Time::FromDoubleT(mock_time_counter_ * 10.0); |
} |
ScopedTempDir data_dir_; |
@@ -361,13 +374,14 @@ class QuotaManagerTest : public testing::Test { |
int64 quota_; |
int64 available_space_; |
GURL lru_origin_; |
+ std::set<GURL> modified_origins_; |
QuotaTableEntries quota_table_; |
- LastAccessTimeTableEntries last_access_time_table_; |
+ OriginInfoTableEntries origin_info_table_; |
int status_callback_count_; |
int additional_callback_count_; |
- int virtual_time_counter_; |
+ int mock_time_counter_; |
DISALLOW_COPY_AND_ASSIGN(QuotaManagerTest); |
}; |
@@ -1051,10 +1065,10 @@ TEST_F(QuotaManagerTest, EvictOriginData) { |
EvictOriginData(GURL("http://foo.com/"), kTemp); |
MessageLoop::current()->RunAllPending(); |
- DumpLastAccessTimeTable(); |
+ DumpOriginInfoTable(); |
MessageLoop::current()->RunAllPending(); |
- typedef LastAccessTimeTableEntries::const_iterator iterator; |
+ typedef OriginInfoTableEntries::const_iterator iterator; |
for (iterator itr(last_access_time_table().begin()), |
end(last_access_time_table().end()); |
itr != end; ++itr) { |
@@ -1112,11 +1126,11 @@ TEST_F(QuotaManagerTest, EvictOriginDataWithDeletionError) { |
EXPECT_EQ(kQuotaErrorInvalidModification, status()); |
} |
- DumpLastAccessTimeTable(); |
+ DumpOriginInfoTable(); |
MessageLoop::current()->RunAllPending(); |
bool found_origin_in_database = false; |
- typedef LastAccessTimeTableEntries::const_iterator iterator; |
+ typedef OriginInfoTableEntries::const_iterator iterator; |
for (iterator itr(last_access_time_table().begin()), |
end(last_access_time_table().end()); |
itr != end; ++itr) { |
@@ -1240,10 +1254,10 @@ TEST_F(QuotaManagerTest, DeleteOriginDataMultiple) { |
EXPECT_EQ(3, status_callback_count()); |
- DumpLastAccessTimeTable(); |
+ DumpOriginInfoTable(); |
MessageLoop::current()->RunAllPending(); |
- typedef LastAccessTimeTableEntries::const_iterator iterator; |
+ typedef OriginInfoTableEntries::const_iterator iterator; |
for (iterator itr(last_access_time_table().begin()), |
end(last_access_time_table().end()); |
itr != end; ++itr) { |
@@ -1408,6 +1422,54 @@ TEST_F(QuotaManagerTest, GetLRUOriginWithOriginInUse) { |
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)); |
+ RegisterClient(client); |
+ |
+ GetOriginsModifiedSince(kTemp, base::Time()); |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_TRUE(modified_origins().empty()); |
+ |
+ 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); |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_EQ(4U, modified_origins().size()); |
+ 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); |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_EQ(2U, modified_origins().size()); |
+ |
+ GetOriginsModifiedSince(kTemp, time3); |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_TRUE(modified_origins().empty()); |
+ |
+ client->ModifyOriginAndNotify(GURL("http://a.com/"), kTemp, 10); |
+ |
+ GetOriginsModifiedSince(kTemp, time3); |
+ MessageLoop::current()->RunAllPending(); |
+ EXPECT_EQ(1U, modified_origins().size()); |
+ EXPECT_EQ(1U, modified_origins().count(GURL("http://a.com/"))); |
+} |
+ |
TEST_F(QuotaManagerTest, DumpQuotaTable) { |
SetPersistentHostQuota("example1.com", 1); |
SetPersistentHostQuota("example2.com", 20); |
@@ -1436,7 +1498,7 @@ TEST_F(QuotaManagerTest, DumpQuotaTable) { |
EXPECT_TRUE(entries.empty()); |
} |
-TEST_F(QuotaManagerTest, DumpLastAccessTimeTable) { |
+TEST_F(QuotaManagerTest, DumpOriginInfoTable) { |
using std::make_pair; |
quota_manager()->NotifyStorageAccessed( |
@@ -1453,7 +1515,7 @@ TEST_F(QuotaManagerTest, DumpLastAccessTimeTable) { |
kPerm); |
MessageLoop::current()->RunAllPending(); |
- DumpLastAccessTimeTable(); |
+ DumpOriginInfoTable(); |
MessageLoop::current()->RunAllPending(); |
typedef std::pair<GURL, StorageType> TypedOrigin; |
@@ -1465,7 +1527,7 @@ TEST_F(QuotaManagerTest, DumpLastAccessTimeTable) { |
std::set<Entry> entries |
(kEntries, kEntries + ARRAYSIZE_UNSAFE(kEntries)); |
- typedef LastAccessTimeTableEntries::const_iterator iterator; |
+ typedef OriginInfoTableEntries::const_iterator iterator; |
for (iterator itr(last_access_time_table().begin()), |
end(last_access_time_table().end()); |
itr != end; ++itr) { |