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

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

Issue 7322005: Revert 91690 - Implement QM::GetOriginsModifiedSince for browser data deleter support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 5 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
« no previous file with comments | « webkit/quota/quota_database.cc ('k') | webkit/quota/quota_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/meta_table.h"
11 #include "app/sql/statement.h" 10 #include "app/sql/statement.h"
12 #include "app/sql/transaction.h" 11 #include "app/sql/transaction.h"
13 #include "base/bind.h" 12 #include "base/bind.h"
14 #include "base/callback.h" 13 #include "base/callback.h"
15 #include "base/file_util.h" 14 #include "base/file_util.h"
16 #include "base/scoped_temp_dir.h" 15 #include "base/scoped_temp_dir.h"
17 #include "googleurl/src/gurl.h" 16 #include "googleurl/src/gurl.h"
18 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webkit/quota/mock_special_storage_policy.h" 18 #include "webkit/quota/mock_special_storage_policy.h"
20 #include "webkit/quota/quota_database.h" 19 #include "webkit/quota/quota_database.h"
21 20
22 namespace quota {
23 namespace { 21 namespace {
24 22
25 const base::Time kZeroTime; 23 const base::Time kZeroTime;
26 24
27 class TestErrorDelegate : public sql::ErrorDelegate { 25 class TestErrorDelegate : public sql::ErrorDelegate {
28 public: 26 public:
29 virtual ~TestErrorDelegate() { } 27 virtual ~TestErrorDelegate() { }
30 virtual int OnError( 28 virtual int OnError(
31 int error, sql::Connection* connection, sql::Statement* stmt) { 29 int error, sql::Connection* connection, sql::Statement* stmt) {
32 return error; 30 return error;
33 } 31 }
34 }; 32 };
33 } // namespace
35 34
36 } // namespace 35 namespace quota {
37 36
38 class QuotaDatabaseTest : public testing::Test { 37 class QuotaDatabaseTest : public testing::Test {
39 protected: 38 protected:
40 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry; 39 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
41 typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback; 40 typedef QuotaDatabase::QuotaTableCallback QuotaTableCallback;
42 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry; 41 typedef QuotaDatabase::LastAccessTimeTableEntry LastAccessTimeTableEntry;
43 typedef QuotaDatabase::OriginInfoTableCallback 42 typedef QuotaDatabase::LastAccessTimeTableCallback
44 OriginInfoTableCallback; 43 LastAccessTimeTableCallback;
44
45 template <typename Iterator>
46 bool AssignQuotaTable(
47 QuotaDatabase* quota_database, Iterator itr, Iterator end) {
48 if (!quota_database->LazyOpen(true))
49 return false;
50
51 for (; itr != end; ++itr) {
52 const char* kSql =
53 "INSERT INTO HostQuotaTable"
54 " (host, type, quota)"
55 " VALUES (?, ?, ?)";
56 sql::Statement statement;
57 statement.Assign(
58 quota_database->db_->GetCachedStatement(
59 SQL_FROM_HERE, kSql));
60 EXPECT_TRUE(statement.is_valid());
61
62 statement.BindString(0, itr->host);
63 statement.BindInt(1, static_cast<int>(itr->type));
64 statement.BindInt64(2, itr->quota);
65 if (!statement.Run())
66 return false;
67 }
68
69 quota_database->Commit();
70 return true;
71 }
72
73 template <typename Iterator>
74 bool AssignLastAccessTimeTable(
75 QuotaDatabase* quota_database, Iterator itr, Iterator end) {
76 if (!quota_database->LazyOpen(true))
77 return false;
78
79 for (; itr != end; ++itr) {
80 const char* kSql =
81 "INSERT INTO OriginLastAccessTable"
82 " (origin, type, used_count, last_access_time)"
83 " VALUES (?, ?, ?, ?)";
84 sql::Statement statement;
85 statement.Assign(
86 quota_database->db_->GetCachedStatement(
87 SQL_FROM_HERE, kSql));
88 EXPECT_TRUE(statement.is_valid());
89
90 statement.BindString(0, itr->origin.spec());
91 statement.BindInt(1, static_cast<int>(itr->type));
92 statement.BindInt(2, itr->used_count);
93 statement.BindInt64(3, itr->last_access_time.ToInternalValue());
94 if (!statement.Run())
95 return false;
96 }
97
98 quota_database->Commit();
99 return true;
100 }
45 101
46 void LazyOpen(const FilePath& kDbFile) { 102 void LazyOpen(const FilePath& kDbFile) {
47 QuotaDatabase db(kDbFile); 103 QuotaDatabase db(kDbFile);
48 EXPECT_FALSE(db.LazyOpen(false)); 104 EXPECT_FALSE(db.LazyOpen(false));
49 ASSERT_TRUE(db.LazyOpen(true)); 105 ASSERT_TRUE(db.LazyOpen(true));
50 EXPECT_TRUE(db.db_.get()); 106 EXPECT_TRUE(db.db_.get());
51 EXPECT_TRUE(kDbFile.empty() || file_util::PathExists(kDbFile)); 107 EXPECT_TRUE(kDbFile.empty() || file_util::PathExists(kDbFile));
52 } 108 }
53 109
54 void UpgradeSchemaV2toV3(const FilePath& kDbFile) {
55 const QuotaTableEntry entries[] = {
56 { "a", kStorageTypeTemporary, 1 },
57 { "b", kStorageTypeTemporary, 2 },
58 { "c", kStorageTypePersistent, 3 },
59 };
60
61 CreateV2Database(kDbFile, entries, ARRAYSIZE_UNSAFE(entries));
62
63 QuotaDatabase db(kDbFile);
64 EXPECT_TRUE(db.LazyOpen(true));
65 EXPECT_TRUE(db.db_.get());
66
67 typedef EntryVerifier<QuotaTableEntry> Verifier;
68 Verifier verifier(entries, entries + ARRAYSIZE_UNSAFE(entries));
69 EXPECT_TRUE(db.DumpQuotaTable(
70 new QuotaTableCallback(
71 base::Bind(&Verifier::Run,
72 base::Unretained(&verifier)))));
73 EXPECT_TRUE(verifier.table.empty());
74 }
75
76 void HostQuota(const FilePath& kDbFile) { 110 void HostQuota(const FilePath& kDbFile) {
77 QuotaDatabase db(kDbFile); 111 QuotaDatabase db(kDbFile);
78 ASSERT_TRUE(db.LazyOpen(true)); 112 ASSERT_TRUE(db.LazyOpen(true));
79 113
80 const char* kHost = "foo.com"; 114 const char* kHost = "foo.com";
81 const int kQuota1 = 13579; 115 const int kQuota1 = 13579;
82 const int kQuota2 = kQuota1 + 1024; 116 const int kQuota2 = kQuota1 + 1024;
83 117
84 int64 quota = -1; 118 int64 quota = -1;
85 EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota)); 119 EXPECT_FALSE(db.GetHostQuota(kHost, kStorageTypeTemporary, &quota));
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 216
183 exceptions.insert(kOrigin3); 217 exceptions.insert(kOrigin3);
184 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 218 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
185 NULL, &origin)); 219 NULL, &origin));
186 EXPECT_TRUE(origin.is_empty()); 220 EXPECT_TRUE(origin.is_empty());
187 221
188 EXPECT_TRUE(db.SetOriginLastAccessTime( 222 EXPECT_TRUE(db.SetOriginLastAccessTime(
189 kOrigin1, kStorageTypeTemporary, base::Time::Now())); 223 kOrigin1, kStorageTypeTemporary, base::Time::Now()));
190 224
191 // Delete origin/type last access time information. 225 // Delete origin/type last access time information.
192 EXPECT_TRUE(db.DeleteOriginInfo(kOrigin3, kStorageTypeTemporary)); 226 EXPECT_TRUE(db.DeleteOriginLastAccessTime(kOrigin3, kStorageTypeTemporary));
193 227
194 // Querying again to see if the deletion has worked. 228 // Querying again to see if the deletion has worked.
195 exceptions.clear(); 229 exceptions.clear();
196 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 230 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
197 NULL, &origin)); 231 NULL, &origin));
198 EXPECT_EQ(kOrigin2.spec(), origin.spec()); 232 EXPECT_EQ(kOrigin2.spec(), origin.spec());
199 233
200 exceptions.insert(kOrigin1); 234 exceptions.insert(kOrigin1);
201 exceptions.insert(kOrigin2); 235 exceptions.insert(kOrigin2);
202 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions, 236 EXPECT_TRUE(db.GetLRUOrigin(kStorageTypeTemporary, exceptions,
203 NULL, &origin)); 237 NULL, &origin));
204 EXPECT_TRUE(origin.is_empty()); 238 EXPECT_TRUE(origin.is_empty());
205 } 239 }
206 240
207 void OriginLastModifiedSince(const FilePath& kDbFile) { 241 void RegisterOrigins(const FilePath& kDbFile) {
208 QuotaDatabase db(kDbFile);
209 ASSERT_TRUE(db.LazyOpen(true));
210
211 std::set<GURL> origins;
212 EXPECT_TRUE(db.GetOriginsModifiedSince(
213 kStorageTypeTemporary, &origins, base::Time()));
214 EXPECT_TRUE(origins.empty());
215
216 const GURL kOrigin1("http://a/");
217 const GURL kOrigin2("http://b/");
218 const GURL kOrigin3("http://c/");
219
220 // Report last mod time for the test origins.
221 EXPECT_TRUE(db.SetOriginLastModifiedTime(
222 kOrigin1, kStorageTypeTemporary, base::Time::FromInternalValue(10)));
223 EXPECT_TRUE(db.SetOriginLastModifiedTime(
224 kOrigin2, kStorageTypeTemporary, base::Time::FromInternalValue(20)));
225 EXPECT_TRUE(db.SetOriginLastModifiedTime(
226 kOrigin3, kStorageTypeTemporary, base::Time::FromInternalValue(30)));
227
228 EXPECT_TRUE(db.GetOriginsModifiedSince(
229 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
230 EXPECT_EQ(2U, origins.size());
231 EXPECT_EQ(0U, origins.count(kOrigin1));
232 EXPECT_EQ(1U, origins.count(kOrigin2));
233 EXPECT_EQ(1U, origins.count(kOrigin3));
234
235 EXPECT_TRUE(db.GetOriginsModifiedSince(
236 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(25)));
237 EXPECT_EQ(1U, origins.size());
238 EXPECT_EQ(0U, origins.count(kOrigin1));
239 EXPECT_EQ(0U, origins.count(kOrigin2));
240 EXPECT_EQ(1U, origins.count(kOrigin3));
241
242 EXPECT_TRUE(db.GetOriginsModifiedSince(
243 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(35)));
244 EXPECT_TRUE(origins.empty());
245
246 // Update origin1's mod time but for persistent storage.
247 EXPECT_TRUE(db.SetOriginLastModifiedTime(
248 kOrigin1, kStorageTypePersistent, base::Time::FromInternalValue(40)));
249
250 // Must have no effects on temporary origins info.
251 EXPECT_TRUE(db.GetOriginsModifiedSince(
252 kStorageTypeTemporary, &origins, base::Time::FromInternalValue(15)));
253 EXPECT_EQ(2U, origins.size());
254 EXPECT_EQ(0U, origins.count(kOrigin1));
255 EXPECT_EQ(1U, origins.count(kOrigin2));
256 EXPECT_EQ(1U, origins.count(kOrigin3));
257
258 // One more update for persistent origin2.
259 EXPECT_TRUE(db.SetOriginLastModifiedTime(
260 kOrigin2, kStorageTypePersistent, base::Time::FromInternalValue(50)));
261
262 EXPECT_TRUE(db.GetOriginsModifiedSince(
263 kStorageTypePersistent, &origins, base::Time::FromInternalValue(35)));
264 EXPECT_EQ(2U, origins.size());
265 EXPECT_EQ(1U, origins.count(kOrigin1));
266 EXPECT_EQ(1U, origins.count(kOrigin2));
267 EXPECT_EQ(0U, origins.count(kOrigin3));
268
269 EXPECT_TRUE(db.GetOriginsModifiedSince(
270 kStorageTypePersistent, &origins, base::Time::FromInternalValue(45)));
271 EXPECT_EQ(1U, origins.size());
272 EXPECT_EQ(0U, origins.count(kOrigin1));
273 EXPECT_EQ(1U, origins.count(kOrigin2));
274 EXPECT_EQ(0U, origins.count(kOrigin3));
275 }
276
277 void RegisterInitialOriginInfo(const FilePath& kDbFile) {
278 QuotaDatabase db(kDbFile); 242 QuotaDatabase db(kDbFile);
279 243
280 const GURL kOrigins[] = { 244 const GURL kOrigins[] = {
281 GURL("http://a/"), 245 GURL("http://a/"),
282 GURL("http://b/"), 246 GURL("http://b/"),
283 GURL("http://c/") }; 247 GURL("http://c/") };
284 std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins)); 248 std::set<GURL> origins(kOrigins, kOrigins + ARRAYSIZE_UNSAFE(kOrigins));
285 249
286 EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary)); 250 EXPECT_TRUE(db.RegisterOrigins(origins,
251 kStorageTypeTemporary,
252 base::Time()));
287 253
288 int used_count = -1; 254 int used_count = -1;
289 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"), 255 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
290 kStorageTypeTemporary, 256 kStorageTypeTemporary,
291 &used_count)); 257 &used_count));
292 EXPECT_EQ(0, used_count); 258 EXPECT_EQ(0, used_count);
293 259
294 EXPECT_TRUE(db.SetOriginLastAccessTime( 260 EXPECT_TRUE(db.SetOriginLastAccessTime(
295 GURL("http://a/"), kStorageTypeTemporary, 261 GURL("http://a/"), kStorageTypeTemporary,
296 base::Time::FromDoubleT(1.0))); 262 base::Time::FromDoubleT(1.0)));
297 used_count = -1; 263 used_count = -1;
298 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"), 264 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
299 kStorageTypeTemporary, 265 kStorageTypeTemporary,
300 &used_count)); 266 &used_count));
301 EXPECT_EQ(1, used_count); 267 EXPECT_EQ(1, used_count);
302 268
303 EXPECT_TRUE(db.RegisterInitialOriginInfo(origins, kStorageTypeTemporary)); 269 EXPECT_TRUE(db.RegisterOrigins(origins,
270 kStorageTypeTemporary,
271 base::Time()));
304 272
305 used_count = -1; 273 used_count = -1;
306 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"), 274 EXPECT_TRUE(db.FindOriginUsedCount(GURL("http://a/"),
307 kStorageTypeTemporary, 275 kStorageTypeTemporary,
308 &used_count)); 276 &used_count));
309 EXPECT_EQ(1, used_count); 277 EXPECT_EQ(1, used_count);
310 } 278 }
311 279
312 template <typename EntryType> 280 template <typename EntryType>
313 struct EntryVerifier { 281 struct EntryVerifier {
(...skipping 12 matching lines...) Expand all
326 void DumpQuotaTable(const FilePath& kDbFile) { 294 void DumpQuotaTable(const FilePath& kDbFile) {
327 QuotaTableEntry kTableEntries[] = { 295 QuotaTableEntry kTableEntries[] = {
328 {"http://go/", kStorageTypeTemporary, 1}, 296 {"http://go/", kStorageTypeTemporary, 1},
329 {"http://oo/", kStorageTypeTemporary, 2}, 297 {"http://oo/", kStorageTypeTemporary, 2},
330 {"http://gle/", kStorageTypePersistent, 3} 298 {"http://gle/", kStorageTypePersistent, 3}
331 }; 299 };
332 QuotaTableEntry* begin = kTableEntries; 300 QuotaTableEntry* begin = kTableEntries;
333 QuotaTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries); 301 QuotaTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries);
334 302
335 QuotaDatabase db(kDbFile); 303 QuotaDatabase db(kDbFile);
336 EXPECT_TRUE(db.LazyOpen(true)); 304 EXPECT_TRUE(AssignQuotaTable(&db, begin, end));
337 AssignQuotaTable(db.db_.get(), begin, end);
338 db.Commit();
339 305
340 typedef EntryVerifier<QuotaTableEntry> Verifier; 306 typedef EntryVerifier<QuotaTableEntry> Verifier;
341 Verifier verifier(begin, end); 307 Verifier verifier(begin, end);
342 EXPECT_TRUE(db.DumpQuotaTable( 308 EXPECT_TRUE(db.DumpQuotaTable(
343 new QuotaTableCallback( 309 new QuotaTableCallback(
344 base::Bind(&Verifier::Run, 310 base::Bind(&Verifier::Run,
345 base::Unretained(&verifier))))); 311 base::Unretained(&verifier)))));
346 EXPECT_TRUE(verifier.table.empty()); 312 EXPECT_TRUE(verifier.table.empty());
347 } 313 }
348 314
349 void DumpOriginInfoTable(const FilePath& kDbFile) { 315 void DumpLastAccessTimeTable(const FilePath& kDbFile) {
350 base::Time now(base::Time::Now()); 316 base::Time now(base::Time::Now());
351 OriginInfoTableEntry kTableEntries[] = { 317 LastAccessTimeTableEntry kTableEntries[] = {
352 {GURL("http://go/"), kStorageTypeTemporary, 2147483647, now, now}, 318 {GURL("http://go/"), kStorageTypeTemporary, 2147483647, now},
353 {GURL("http://oo/"), kStorageTypeTemporary, 0, now, now}, 319 {GURL("http://oo/"), kStorageTypeTemporary, 0, now},
354 {GURL("http://gle/"), kStorageTypeTemporary, 1, now, now}, 320 {GURL("http://gle/"), kStorageTypeTemporary, 1, now},
355 }; 321 };
356 OriginInfoTableEntry* begin = kTableEntries; 322 LastAccessTimeTableEntry* begin = kTableEntries;
357 OriginInfoTableEntry* end = kTableEntries + ARRAYSIZE_UNSAFE(kTableEntries); 323 LastAccessTimeTableEntry* end = kTableEntries +
324 ARRAYSIZE_UNSAFE(kTableEntries);
358 325
359 QuotaDatabase db(kDbFile); 326 QuotaDatabase db(kDbFile);
360 EXPECT_TRUE(db.LazyOpen(true)); 327 EXPECT_TRUE(AssignLastAccessTimeTable(&db, begin, end));
361 AssignOriginInfoTable(db.db_.get(), begin, end);
362 db.Commit();
363 328
364 typedef EntryVerifier<OriginInfoTableEntry> Verifier; 329 typedef EntryVerifier<LastAccessTimeTableEntry> Verifier;
365 Verifier verifier(begin, end); 330 Verifier verifier(begin, end);
366 EXPECT_TRUE(db.DumpOriginInfoTable( 331 EXPECT_TRUE(db.DumpLastAccessTimeTable(
367 new OriginInfoTableCallback( 332 new LastAccessTimeTableCallback(
368 base::Bind(&Verifier::Run, 333 base::Bind(&Verifier::Run,
369 base::Unretained(&verifier))))); 334 base::Unretained(&verifier)))));
370 EXPECT_TRUE(verifier.table.empty()); 335 EXPECT_TRUE(verifier.table.empty());
371 } 336 }
372
373 private:
374 template <typename Iterator>
375 void AssignQuotaTable(sql::Connection* db, Iterator itr, Iterator end) {
376 ASSERT_NE(db, (sql::Connection*)NULL);
377 for (; itr != end; ++itr) {
378 const char* kSql =
379 "INSERT INTO HostQuotaTable"
380 " (host, type, quota)"
381 " VALUES (?, ?, ?)";
382 sql::Statement statement;
383 statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
384 ASSERT_TRUE(statement.is_valid());
385
386 statement.BindString(0, itr->host);
387 statement.BindInt(1, static_cast<int>(itr->type));
388 statement.BindInt64(2, itr->quota);
389 EXPECT_TRUE(statement.Run());
390 }
391 }
392
393 template <typename Iterator>
394 void AssignOriginInfoTable(sql::Connection* db, Iterator itr, Iterator end) {
395 ASSERT_NE(db, (sql::Connection*)NULL);
396 for (; itr != end; ++itr) {
397 const char* kSql =
398 "INSERT INTO OriginInfoTable"
399 " (origin, type, used_count, last_access_time, last_modified_time)"
400 " VALUES (?, ?, ?, ?, ?)";
401 sql::Statement statement;
402 statement.Assign(db->GetCachedStatement(SQL_FROM_HERE, kSql));
403 ASSERT_TRUE(statement.is_valid());
404
405 statement.BindString(0, itr->origin.spec());
406 statement.BindInt(1, static_cast<int>(itr->type));
407 statement.BindInt(2, itr->used_count);
408 statement.BindInt64(3, itr->last_access_time.ToInternalValue());
409 statement.BindInt64(4, itr->last_modified_time.ToInternalValue());
410 EXPECT_TRUE(statement.Run());
411 }
412 }
413
414 bool OpenDatabase(sql::Connection* db, const FilePath& kDbFile) {
415 if (kDbFile.empty()) {
416 db->OpenInMemory();
417 return true;
418 }
419 if (!file_util::CreateDirectory(kDbFile.DirName()))
420 return false;
421 if (!db->Open(kDbFile))
422 return false;
423 db->Preload();
424 return true;
425 }
426
427 // Create V2 database and populate some data.
428 void CreateV2Database(
429 const FilePath& kDbFile,
430 const QuotaTableEntry* entries,
431 size_t entries_size) {
432 scoped_ptr<sql::Connection> db(new sql::Connection);
433 scoped_ptr<sql::MetaTable> meta_table(new sql::MetaTable);
434
435 // V2 schema definitions.
436 static const int kCurrentVersion = 2;
437 static const int kCompatibleVersion = 2;
438 static const char kHostQuotaTable[] = "HostQuotaTable";
439 static const char kOriginLastAccessTable[] = "OriginLastAccessTable";
440 static const QuotaDatabase::TableSchema kTables[] = {
441 { kHostQuotaTable,
442 "(host TEXT NOT NULL,"
443 " type INTEGER NOT NULL,"
444 " quota INTEGER,"
445 " UNIQUE(host, type))" },
446 { kOriginLastAccessTable,
447 "(origin TEXT NOT NULL,"
448 " type INTEGER NOT NULL,"
449 " used_count INTEGER,"
450 " last_access_time INTEGER,"
451 " UNIQUE(origin, type))" },
452 };
453 static const QuotaDatabase::IndexSchema kIndexes[] = {
454 { "HostIndex",
455 kHostQuotaTable,
456 "(host)",
457 false },
458 { "OriginLastAccessIndex",
459 kOriginLastAccessTable,
460 "(origin, last_access_time)",
461 false },
462 };
463
464 ASSERT_TRUE(OpenDatabase(db.get(), kDbFile));
465 EXPECT_TRUE(QuotaDatabase::CreateSchema(
466 db.get(), meta_table.get(),
467 kCurrentVersion, kCompatibleVersion,
468 kTables, ARRAYSIZE_UNSAFE(kTables),
469 kIndexes, ARRAYSIZE_UNSAFE(kIndexes)));
470
471 // V2 and V3 QuotaTable are compatible, so we can simply use
472 // AssignQuotaTable to poplulate v2 database here.
473 db->BeginTransaction();
474 AssignQuotaTable(db.get(), entries, entries + entries_size);
475 db->CommitTransaction();
476 }
477 }; 337 };
478 338
479 TEST_F(QuotaDatabaseTest, LazyOpen) { 339 TEST_F(QuotaDatabaseTest, LazyOpen) {
480 ScopedTempDir data_dir; 340 ScopedTempDir data_dir;
481 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 341 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
482 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 342 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
483 LazyOpen(kDbFile); 343 LazyOpen(kDbFile);
484 LazyOpen(FilePath()); 344 LazyOpen(FilePath());
485 } 345 }
486 346
487 TEST_F(QuotaDatabaseTest, UpgradeSchema) {
488 ScopedTempDir data_dir;
489 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
490 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
491 UpgradeSchemaV2toV3(kDbFile);
492 }
493
494 TEST_F(QuotaDatabaseTest, HostQuota) { 347 TEST_F(QuotaDatabaseTest, HostQuota) {
495 ScopedTempDir data_dir; 348 ScopedTempDir data_dir;
496 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 349 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
497 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 350 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
498 HostQuota(kDbFile); 351 HostQuota(kDbFile);
499 HostQuota(FilePath()); 352 HostQuota(FilePath());
500 } 353 }
501 354
502 TEST_F(QuotaDatabaseTest, GlobalQuota) { 355 TEST_F(QuotaDatabaseTest, GlobalQuota) {
503 ScopedTempDir data_dir; 356 ScopedTempDir data_dir;
504 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 357 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
505 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 358 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
506 GlobalQuota(kDbFile); 359 GlobalQuota(kDbFile);
507 GlobalQuota(FilePath()); 360 GlobalQuota(FilePath());
508 } 361 }
509 362
510 TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) { 363 TEST_F(QuotaDatabaseTest, OriginLastAccessTimeLRU) {
511 ScopedTempDir data_dir; 364 ScopedTempDir data_dir;
512 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 365 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
513 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 366 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
514 OriginLastAccessTimeLRU(kDbFile); 367 OriginLastAccessTimeLRU(kDbFile);
515 OriginLastAccessTimeLRU(FilePath()); 368 OriginLastAccessTimeLRU(FilePath());
516 } 369 }
517 370
518 TEST_F(QuotaDatabaseTest, OriginLastModifiedSince) {
519 ScopedTempDir data_dir;
520 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
521 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
522 OriginLastModifiedSince(kDbFile);
523 OriginLastModifiedSince(FilePath());
524 }
525
526 TEST_F(QuotaDatabaseTest, BootstrapFlag) { 371 TEST_F(QuotaDatabaseTest, BootstrapFlag) {
527 ScopedTempDir data_dir; 372 ScopedTempDir data_dir;
528 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 373 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
529 374
530 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 375 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
531 QuotaDatabase db(kDbFile); 376 QuotaDatabase db(kDbFile);
532 377
533 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped()); 378 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
534 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true)); 379 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(true));
535 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped()); 380 EXPECT_TRUE(db.IsOriginDatabaseBootstrapped());
536 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(false)); 381 EXPECT_TRUE(db.SetOriginDatabaseBootstrapped(false));
537 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped()); 382 EXPECT_FALSE(db.IsOriginDatabaseBootstrapped());
538 } 383 }
539 384
540 TEST_F(QuotaDatabaseTest, RegisterInitialOriginInfo) { 385 TEST_F(QuotaDatabaseTest, RegisterOrigins) {
541 ScopedTempDir data_dir; 386 ScopedTempDir data_dir;
542 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 387 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
543 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 388 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
544 RegisterInitialOriginInfo(kDbFile); 389 RegisterOrigins(kDbFile);
545 RegisterInitialOriginInfo(FilePath()); 390 RegisterOrigins(FilePath());
546 } 391 }
547 392
548 TEST_F(QuotaDatabaseTest, DumpQuotaTable) { 393 TEST_F(QuotaDatabaseTest, DumpQuotaTable) {
549 ScopedTempDir data_dir; 394 ScopedTempDir data_dir;
550 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 395 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
551 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 396 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
552 DumpQuotaTable(kDbFile); 397 DumpQuotaTable(kDbFile);
553 DumpQuotaTable(FilePath()); 398 DumpQuotaTable(FilePath());
554 } 399 }
555 400
556 TEST_F(QuotaDatabaseTest, DumpOriginInfoTable) { 401 TEST_F(QuotaDatabaseTest, DumpLastAccessTimeTable) {
557 ScopedTempDir data_dir; 402 ScopedTempDir data_dir;
558 ASSERT_TRUE(data_dir.CreateUniqueTempDir()); 403 ASSERT_TRUE(data_dir.CreateUniqueTempDir());
559 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db"); 404 const FilePath kDbFile = data_dir.path().AppendASCII("quota_manager.db");
560 DumpOriginInfoTable(kDbFile); 405 DumpLastAccessTimeTable(kDbFile);
561 DumpOriginInfoTable(FilePath()); 406 DumpLastAccessTimeTable(FilePath());
562 } 407 }
563 } // namespace quota 408 } // namespace quota
OLDNEW
« no previous file with comments | « webkit/quota/quota_database.cc ('k') | webkit/quota/quota_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698