Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Side by Side Diff: webkit/quota/quota_database_unittest.cc

Issue 7168019: Implement QM::GetOriginsModifiedSince for browser data deleter support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <iterator> 6 #include <iterator>
7 #include <set> 7 #include <set>
8 8
9 #include "app/sql/connection.h" 9 #include "app/sql/connection.h"
10 #include "app/sql/statement.h" 10 #include "app/sql/statement.h"
(...skipping 20 matching lines...) Expand all
31 } 31 }
32 }; 32 };
33 } // namespace 33 } // namespace
34 34
35 namespace quota { 35 namespace quota {
36 36
37 class QuotaDatabaseTest : public testing::Test { 37 class QuotaDatabaseTest : public testing::Test {
38 protected: 38 protected:
39 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry; 39 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
40 typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback; 40 typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback;
41 typedef QuotaDatabase::LastAccessTimeTableEntry LastAccessTimeTableEntry; 41 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry;
42 typedef QuotaDatabase::LastAccessTimeTableCallback 42 typedef QuotaDatabase::OriginInfoTableCallback
43 LastAccessTimeTableCallback; 43 OriginInfoTableCallback;
44 44
45 template <typename Iterator> 45 template <typename Iterator>
46 bool AssignQuotaTable( 46 bool AssignQuotaTable(
47 QuotaDatabase* quota_database, Iterator itr, Iterator end) { 47 QuotaDatabase* quota_database, Iterator itr, Iterator end) {
48 if (!quota_database->LazyOpen(true)) 48 if (!quota_database->LazyOpen(true))
49 return false; 49 return false;
50 50
51 for (; itr != end; ++itr) { 51 for (; itr != end; ++itr) {
52 const char* kSql = 52 const char* kSql =
53 "INSERT INTO HostQuotaTable" 53 "INSERT INTO HostQuotaTable"
(...skipping 10 matching lines...) Expand all
64 statement.BindInt64(2, itr->quota); 64 statement.BindInt64(2, itr->quota);
65 if (!statement.Run()) 65 if (!statement.Run())
66 return false; 66 return false;
67 } 67 }
68 68
69 quota_database->Commit(); 69 quota_database->Commit();
70 return true; 70 return true;
71 } 71 }
72 72
73 template <typename Iterator> 73 template <typename Iterator>
74 bool AssignLastAccessTimeTable( 74 bool AssignOriginInfoTable(
75 QuotaDatabase* quota_database, Iterator itr, Iterator end) { 75 QuotaDatabase* quota_database, Iterator itr, Iterator end) {
76 if (!quota_database->LazyOpen(true)) 76 if (!quota_database->LazyOpen(true))
77 return false; 77 return false;
78 78
79 for (; itr != end; ++itr) { 79 for (; itr != end; ++itr) {
80 const char* kSql = 80 const char* kSql =
81 "INSERT INTO OriginLastAccessTable" 81 "INSERT INTO OriginInfoTable"
82 " (origin, type, used_count, last_access_time)" 82 " (origin, type, used_count, last_access_time, last_modified_time)"
83 " VALUES (?, ?, ?, ?)"; 83 " VALUES (?, ?, ?, ?, ?)";
84 sql::Statement statement; 84 sql::Statement statement;
85 statement.Assign( 85 statement.Assign(
86 quota_database->db_->GetCachedStatement( 86 quota_database->db_->GetCachedStatement(
87 SQL_FROM_HERE, kSql)); 87 SQL_FROM_HERE, kSql));
88 EXPECT_TRUE(statement.is_valid()); 88 EXPECT_TRUE(statement.is_valid());
89 89
90 statement.BindString(0, itr->origin.spec()); 90 statement.BindString(0, itr->origin.spec());
91 statement.BindInt(1, static_cast<int>(itr->type)); 91 statement.BindInt(1, static_cast<int>(itr->type));
92 statement.BindInt(2, itr->used_count); 92 statement.BindInt(2, itr->used_count);
93 statement.BindInt64(3, itr->last_access_time.ToInternalValue()); 93 statement.BindInt64(3, itr->last_access_time.ToInternalValue());
94 statement.BindInt64(4, itr->last_modified_time.ToInternalValue());
94 if (!statement.Run()) 95 if (!statement.Run())
95 return false; 96 return false;
96 } 97 }
97 98
98 quota_database->Commit(); 99 quota_database->Commit();
99 return true; 100 return true;
100 } 101 }
101 102
102 void LazyOpen(const FilePath& kDbFile) { 103 void LazyOpen(const FilePath& kDbFile) {
103 QuotaDatabase db(kDbFile); 104 QuotaDatabase db(kDbFile);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 217
217 exceptions.insert(kOrigin3); 218 exceptions.insert(kOrigin3);
218 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 219 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
219 NULL, &origin)); 220 NULL, &origin));
220 EXPECT_TRUE(origin.is_empty()); 221 EXPECT_TRUE(origin.is_empty());
221 222
222 EXPECT_TRUE(db.SetOriginLastAccessTime( 223 EXPECT_TRUE(db.SetOriginLastAccessTime(
223 kOrigin1, kStorageTypeTemporary, base::Time::Now())); 224 kOrigin1, kStorageTypeTemporary, base::Time::Now()));
224 225
225 // Delete origin/type last access time information. 226 // Delete origin/type last access time information.
226 EXPECT_TRUE(db.DeleteOriginLastAccessTime(kOrigin3, kStorageTypeTemporary)); 227 EXPECT_TRUE(db.DeleteOriginInfo(kOrigin3, kStorageTypeTemporary));
227 228
228 // Querying again to see if the deletion has worked. 229 // Querying again to see if the deletion has worked.
229 exceptions.clear(); 230 exceptions.clear();
230 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 231 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
231 NULL, &origin)); 232 NULL, &origin));
232 EXPECT_EQ(kOrigin2.spec(), origin.spec()); 233 EXPECT_EQ(kOrigin2.spec(), origin.spec());
233 234
234 exceptions.insert(kOrigin1); 235 exceptions.insert(kOrigin1);
235 exceptions.insert(kOrigin2); 236 exceptions.insert(kOrigin2);
236 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 237 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
237 NULL, &origin)); 238 NULL, &origin));
238 EXPECT_TRUE(origin.is_empty()); 239 EXPECT_TRUE(origin.is_empty());
239 } 240 }
240 241
242 void OriginLastModifiedSince(const FilePath& kDbFile) {
243 QuotaDatabase db(kDbFile);
244 ASSERT_TRUE(db.LazyOpen(true));
245
246 std::set<GURL> origins;
247 EXPECT_TRUE(db.GetOriginsModifiedSince(
248 kStorageTypeTemporary, &origins, base::Time()));
249 EXPECT_TRUE(origins.empty());
250
251 const GURL kOrigin1("http://a/");
252 const GURL kOrigin2("http://b/");
253 const GURL kOrigin3("http://c/");
254
255 // Report last mod time for the test origins.
256 EXPECT_TRUE(db.SetOriginLastModifiedTime(
257 kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
258 EXPECT_TRUE(db.SetOriginLastModifiedTime(
259 kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
260 EXPECT_TRUE(db.SetOriginLastModifiedTime(
261 kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30)));
262
263 EXPECT_TRUE(db.GetOriginsModifiedSince(
264 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
265 EXPECT_EQ(2U, origins.size());
266 EXPECT_EQ(0U, origins.count(kOrigin1));
267 EXPECT_EQ(1U, origins.count(kOrigin2));
268 EXPECT_EQ(1U, origins.count(kOrigin3));
269
270 EXPECT_TRUE(db.GetOriginsModifiedSince(
271 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(25)));
272 EXPECT_EQ(1U, origins.size());
273 EXPECT_EQ(0U, origins.count(kOrigin1));
274 EXPECT_EQ(0U, origins.count(kOrigin2));
275 EXPECT_EQ(1U, origins.count(kOrigin3));
276
277 EXPECT_TRUE(db.GetOriginsModifiedSince(
278 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(35)));
279 EXPECT_TRUE(origins.empty());
280
281 // Update origin1's mod time but for persistent storage.
282 EXPECT_TRUE(db.SetOriginLastModifiedTime(
283 kOrigin1, kStorageTypePersistent, base::Time::FromInternalValue(40)));
Mike West 2011/06/16 09:39:33 This is the only place you do anything with persis
kinuko 2011/06/16 12:09:06 Done.
284
285 // Must have no effects on temporary origins info.
286 EXPECT_TRUE(db.GetOriginsModifiedSince(
287 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
288 EXPECT_EQ(2U, origins.size());
289 EXPECT_EQ(0U, origins.count(kOrigin1));
290 EXPECT_EQ(1U, origins.count(kOrigin2));
291 EXPECT_EQ(1U, origins.count(kOrigin3));
292 }
293
241 void RegisterOrigins(const FilePath& kDbFile) { 294 void RegisterOrigins(const FilePath& kDbFile) {
242 QuotaDatabase db(kDbFile); 295 QuotaDatabase db(kDbFile);
243 296
244 const GURL kOrigins[] = { 297 const GURL kOrigins[] = {
245 GURL("http://a/"), 298 GURL("http://a/"),
246 GURL("http://b/"), 299 GURL("http://b/"),
247 GURL("http://c/") }; 300 GURL("http://c/") };
248 std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins)); 301 std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins));
249 302
250 EXPECT_TRUE(db.RegisterOrigins(origins, 303 EXPECT_TRUE(db.RegisterOrigins(origins,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 358
306 typedef EntryVerifier<QuotaTableEntry> Verifier; 359 typedef EntryVerifier<QuotaTableEntry> Verifier;
307 Verifier verifier(begin, end); 360 Verifier verifier(begin, end);
308 EXPECT_TRUE(db.DumpQuotaTable( 361 EXPECT_TRUE(db.DumpQuotaTable(
309 new QuotaTableCallback( 362 new QuotaTableCallback(
310 base::Bind(&Verifier::Run, 363 base::Bind(&Verifier::Run,
311 base::Unretained(&verifier))))); 364 base::Unretained(&verifier)))));
312 EXPECT_TRUE(verifier.table.empty()); 365 EXPECT_TRUE(verifier.table.empty());
313 } 366 }
314 367
315 void DumpLastAccessTimeTable(const FilePath& kDbFile) { 368 void DumpOriginInfoTable(const FilePath& kDbFile) {
316 base::Time now(base::Time::Now()); 369 base::Time now(base::Time::Now());
317 LastAccessTimeTableEntry kTableEntries[] = { 370 OriginInfoTableEntry kTableEntries[] = {
318 {GURL("http://go/"), kStorageTypeTemporary, 2147483647, now}, 371 {GURL("http://go/"), kStorageTypeTemporary, 2147483647, now, now},
319 {GURL("http://oo/"), kStorageTypeTemporary, 0, now}, 372 {GURL("http://oo/"), kStorageTypeTemporary, 0, now, now},
320 {GURL("http://gle/"), kStorageTypeTemporary, 1, now}, 373 {GURL("http://gle/"), kStorageTypeTemporary, 1, now, now},
321 }; 374 };
322 LastAccessTimeTableEntry* begin = kTableEntries; 375 OriginInfoTableEntry* begin = kTableEntries;
323 LastAccessTimeTableEntry* end = kTableEntries + 376 OriginInfoTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
324 ARRAYSIZE_UNSAFE(kTableEntries);
325 377
326 QuotaDatabase db(kDbFile); 378 QuotaDatabase db(kDbFile);
327 EXPECT_TRUE(AssignLastAccessTimeTable(&db, begin, end)); 379 EXPECT_TRUE(AssignOriginInfoTable(&db, begin, end));
328 380
329 typedef EntryVerifier<LastAccessTimeTableEntry> Verifier; 381 typedef EntryVerifier<OriginInfoTableEntry> Verifier;
330 Verifier verifier(begin, end); 382 Verifier verifier(begin, end);
331 EXPECT_TRUE(db.DumpLastAccessTimeTable( 383 EXPECT_TRUE(db.DumpOriginInfoTable(
332 new LastAccessTimeTableCallback( 384 new OriginInfoTableCallback(
333 base::Bind(&Verifier::Run, 385 base::Bind(&Verifier::Run,
334 base::Unretained(&verifier))))); 386 base::Unretained(&verifier)))));
335 EXPECT_TRUE(verifier.table.empty()); 387 EXPECT_TRUE(verifier.table.empty());
336 } 388 }
337 }; 389 };
338 390
339 TEST_F(QuotaDatabaseTest, LazyOpen) { 391 TEST_F(QuotaDatabaseTest, LazyOpen) {
340 ScopedTempDir data_dir; 392 ScopedTempDir data_dir;
341 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 393 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
342 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 394 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
(...skipping 18 matching lines...) Expand all
361 } 413 }
362 414
363 TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) { 415 TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) {
364 ScopedTempDir data_dir; 416 ScopedTempDir data_dir;
365 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 417 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
366 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 418 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
367 OriginLastAccessTimeLRU(kDbFile); 419 OriginLastAccessTimeLRU(kDbFile);
368 OriginLastAccessTimeLRU(FilePath()); 420 OriginLastAccessTimeLRU(FilePath());
369 } 421 }
370 422
423 TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) {
424 ScopedTempDir data_dir;
425 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
426 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
427 OriginLastModifiedSince(kDbFile);
428 OriginLastModifiedSince(FilePath());
429 }
430
371 TEST_F(QuotaDatabaseTest, BootstrapFlag) { 431 TEST_F(QuotaDatabaseTest, BootstrapFlag) {
372 ScopedTempDir data_dir; 432 ScopedTempDir data_dir;
373 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 433 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
374 434
375 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 435 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
376 QuotaDatabase db(kDbFile); 436 QuotaDatabase db(kDbFile);
377 437
378 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped()); 438 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
379 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true)); 439 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true));
380 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped()); 440 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped());
(...skipping 10 matching lines...) Expand all
391 } 451 }
392 452
393 TEST_F(QuotaDatabaseTest, DumpQuotaTable) { 453 TEST_F(QuotaDatabaseTest, DumpQuotaTable) {
394 ScopedTempDir data_dir; 454 ScopedTempDir data_dir;
395 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 455 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
396 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 456 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
397 DumpQuotaTable(kDbFile); 457 DumpQuotaTable(kDbFile);
398 DumpQuotaTable(FilePath()); 458 DumpQuotaTable(FilePath());
399 } 459 }
400 460
401 TEST_F(QuotaDatabaseTest, DumpLastAccessTimeTable) { 461 TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) {
402 ScopedTempDir data_dir; 462 ScopedTempDir data_dir;
403 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 463 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
404 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 464 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
405 DumpLastAccessTimeTable(kDbFile); 465 DumpOriginInfoTable(kDbFile);
406 DumpLastAccessTimeTable(FilePath()); 466 DumpOriginInfoTable(FilePath());
407 } 467 }
408 } // namespace quota 468 } // namespace quota
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698