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

Side by Side Diff: webkit/database/database_tracker_unittest.cc

Issue 7056025: More WebSQLDatabase and QuotaManager integration. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 24 matching lines...) Expand all
35 return false; 35 return false;
36 } 36 }
37 }; 37 };
38 38
39 class TestObserver : public webkit_database::DatabaseTracker::Observer { 39 class TestObserver : public webkit_database::DatabaseTracker::Observer {
40 public: 40 public:
41 TestObserver() : new_notification_received_(false) {} 41 TestObserver() : new_notification_received_(false) {}
42 virtual ~TestObserver() {} 42 virtual ~TestObserver() {}
43 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, 43 virtual void OnDatabaseSizeChanged(const string16& origin_identifier,
44 const string16& database_name, 44 const string16& database_name,
45 int64 database_size, 45 int64 database_size) {
46 int64 space_available) {
47 new_notification_received_ = true; 46 new_notification_received_ = true;
48 origin_identifier_ = origin_identifier; 47 origin_identifier_ = origin_identifier;
49 database_name_ = database_name; 48 database_name_ = database_name;
50 database_size_ = database_size; 49 database_size_ = database_size;
51 space_available_ = space_available;
52 } 50 }
53 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier, 51 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier,
54 const string16& database_name) { 52 const string16& database_name) {
55 new_notification_received_ = true; 53 new_notification_received_ = true;
56 origin_identifier_ = origin_identifier; 54 origin_identifier_ = origin_identifier;
57 database_name_ = database_name; 55 database_name_ = database_name;
58 } 56 }
59 bool DidReceiveNewNotification() { 57 bool DidReceiveNewNotification() {
60 bool temp_new_notification_received = new_notification_received_; 58 bool temp_new_notification_received = new_notification_received_;
61 new_notification_received_ = false; 59 new_notification_received_ = false;
62 return temp_new_notification_received; 60 return temp_new_notification_received;
63 } 61 }
64 string16 GetNotificationOriginIdentifier() { return origin_identifier_; } 62 string16 GetNotificationOriginIdentifier() { return origin_identifier_; }
65 string16 GetNotificationDatabaseName() { return database_name_; } 63 string16 GetNotificationDatabaseName() { return database_name_; }
66 int64 GetNotificationDatabaseSize() { return database_size_; } 64 int64 GetNotificationDatabaseSize() { return database_size_; }
67 int64 GetNotificationSpaceAvailable() { return space_available_; }
68 65
69 private: 66 private:
70 bool new_notification_received_; 67 bool new_notification_received_;
71 string16 origin_identifier_; 68 string16 origin_identifier_;
72 string16 database_name_; 69 string16 database_name_;
73 int64 database_size_; 70 int64 database_size_;
74 int64 space_available_;
75 }; 71 };
76 72
77 void CheckNotificationReceived(TestObserver* observer, 73 void CheckNotificationReceived(TestObserver* observer,
78 const string16& expected_origin_identifier, 74 const string16& expected_origin_identifier,
79 const string16& expected_database_name, 75 const string16& expected_database_name,
80 int64 expected_database_size, 76 int64 expected_database_size) {
81 int64 expected_space_available) {
82 EXPECT_TRUE(observer->DidReceiveNewNotification()); 77 EXPECT_TRUE(observer->DidReceiveNewNotification());
83 EXPECT_EQ(expected_origin_identifier, 78 EXPECT_EQ(expected_origin_identifier,
84 observer->GetNotificationOriginIdentifier()); 79 observer->GetNotificationOriginIdentifier());
85 EXPECT_EQ(expected_database_name, 80 EXPECT_EQ(expected_database_name,
86 observer->GetNotificationDatabaseName()); 81 observer->GetNotificationDatabaseName());
87 EXPECT_EQ(expected_database_size, 82 EXPECT_EQ(expected_database_size,
88 observer->GetNotificationDatabaseSize()); 83 observer->GetNotificationDatabaseSize());
89 EXPECT_EQ(expected_space_available,
90 observer->GetNotificationSpaceAvailable());
91 } 84 }
92 85
93 class TestQuotaManagerProxy : public quota::QuotaManagerProxy { 86 class TestQuotaManagerProxy : public quota::QuotaManagerProxy {
94 public: 87 public:
95 TestQuotaManagerProxy() 88 TestQuotaManagerProxy()
96 : QuotaManagerProxy(NULL, NULL), 89 : QuotaManagerProxy(NULL, NULL),
97 registered_client_(NULL) { 90 registered_client_(NULL) {
98 } 91 }
99 92
100 virtual ~TestQuotaManagerProxy() { 93 virtual ~TestQuotaManagerProxy() {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 // Initialize the tracker database. 183 // Initialize the tracker database.
191 ScopedTempDir temp_dir; 184 ScopedTempDir temp_dir;
192 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 185 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
193 scoped_refptr<DatabaseTracker> tracker( 186 scoped_refptr<DatabaseTracker> tracker(
194 new DatabaseTracker(temp_dir.path(), incognito_mode, 187 new DatabaseTracker(temp_dir.path(), incognito_mode,
195 new TestSpecialStoragePolicy, 188 new TestSpecialStoragePolicy,
196 NULL, NULL)); 189 NULL, NULL));
197 190
198 // Create and open three databases. 191 // Create and open three databases.
199 int64 database_size = 0; 192 int64 database_size = 0;
200 int64 space_available = 0;
201 const string16 kOrigin1 = 193 const string16 kOrigin1 =
202 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); 194 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url));
203 const string16 kOrigin2 = 195 const string16 kOrigin2 =
204 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); 196 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url));
205 const string16 kDB1 = ASCIIToUTF16("db1"); 197 const string16 kDB1 = ASCIIToUTF16("db1");
206 const string16 kDB2 = ASCIIToUTF16("db2"); 198 const string16 kDB2 = ASCIIToUTF16("db2");
207 const string16 kDB3 = ASCIIToUTF16("db3"); 199 const string16 kDB3 = ASCIIToUTF16("db3");
208 const string16 kDescription = ASCIIToUTF16("database_description"); 200 const string16 kDescription = ASCIIToUTF16("database_description");
209 201
210 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 202 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
211 &database_size, &space_available); 203 &database_size);
212 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, 204 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0,
213 &database_size, &space_available); 205 &database_size);
214 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0, 206 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0,
215 &database_size, &space_available); 207 &database_size);
216 208
217 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 209 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
218 FilePath::FromWStringHack(UTF16ToWide( 210 FilePath::FromWStringHack(UTF16ToWide(
219 tracker->GetOriginDirectory(kOrigin1)))))); 211 tracker->GetOriginDirectory(kOrigin1))))));
220 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 212 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
221 FilePath::FromWStringHack(UTF16ToWide( 213 FilePath::FromWStringHack(UTF16ToWide(
222 tracker->GetOriginDirectory(kOrigin2)))))); 214 tracker->GetOriginDirectory(kOrigin2))))));
223 EXPECT_EQ(1, file_util::WriteFile( 215 EXPECT_EQ(1, file_util::WriteFile(
224 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); 216 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
225 EXPECT_EQ(2, file_util::WriteFile( 217 EXPECT_EQ(2, file_util::WriteFile(
(...skipping 15 matching lines...) Expand all
241 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier()); 233 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier());
242 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName()); 234 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName());
243 tracker->DatabaseClosed(kOrigin1, kDB1); 235 tracker->DatabaseClosed(kOrigin1, kDB1);
244 result = callback.GetResult(result); 236 result = callback.GetResult(result);
245 EXPECT_EQ(net::OK, result); 237 EXPECT_EQ(net::OK, result);
246 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append( 238 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append(
247 FilePath::FromWStringHack(UTF16ToWide(kOrigin1))))); 239 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
248 240
249 // Recreate db1. 241 // Recreate db1.
250 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 242 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
251 &database_size, &space_available); 243 &database_size);
252 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 244 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
253 FilePath::FromWStringHack(UTF16ToWide( 245 FilePath::FromWStringHack(UTF16ToWide(
254 tracker->GetOriginDirectory(kOrigin1)))))); 246 tracker->GetOriginDirectory(kOrigin1))))));
255 EXPECT_EQ(1, file_util::WriteFile( 247 EXPECT_EQ(1, file_util::WriteFile(
256 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); 248 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
257 tracker->DatabaseModified(kOrigin1, kDB1); 249 tracker->DatabaseModified(kOrigin1, kDB1);
258 250
259 // Setup file modification times. db1 and db2 are modified now, db3 three 251 // Setup file modification times. db1 and db2 are modified now, db3 three
260 // days ago. 252 // days ago.
261 EXPECT_TRUE(file_util::SetLastModifiedTime( 253 EXPECT_TRUE(file_util::SetLastModifiedTime(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 NULL, NULL)); 292 NULL, NULL));
301 293
302 // Add two observers. 294 // Add two observers.
303 TestObserver observer1; 295 TestObserver observer1;
304 TestObserver observer2; 296 TestObserver observer2;
305 tracker->AddObserver(&observer1); 297 tracker->AddObserver(&observer1);
306 tracker->AddObserver(&observer2); 298 tracker->AddObserver(&observer2);
307 299
308 // Open three new databases. 300 // Open three new databases.
309 int64 database_size = 0; 301 int64 database_size = 0;
310 int64 space_available = 0;
311 const string16 kOrigin1 = 302 const string16 kOrigin1 =
312 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url)); 303 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin1Url));
313 const string16 kOrigin2 = 304 const string16 kOrigin2 =
314 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url)); 305 DatabaseUtil::GetOriginIdentifier(GURL(kOrigin2Url));
315 const string16 kDB1 = ASCIIToUTF16("db1"); 306 const string16 kDB1 = ASCIIToUTF16("db1");
316 const string16 kDB2 = ASCIIToUTF16("db2"); 307 const string16 kDB2 = ASCIIToUTF16("db2");
317 const string16 kDB3 = ASCIIToUTF16("db3"); 308 const string16 kDB3 = ASCIIToUTF16("db3");
318 const string16 kDescription = ASCIIToUTF16("database_description"); 309 const string16 kDescription = ASCIIToUTF16("database_description");
319 310
320 // Get the quota for kOrigin1 and kOrigin2 311 // Get the info for kOrigin1 and kOrigin2
321 DatabaseTracker::CachedOriginInfo* origin1_info = 312 DatabaseTracker::CachedOriginInfo* origin1_info =
322 tracker->GetCachedOriginInfo(kOrigin1); 313 tracker->GetCachedOriginInfo(kOrigin1);
323 DatabaseTracker::CachedOriginInfo* origin2_info = 314 DatabaseTracker::CachedOriginInfo* origin2_info =
324 tracker->GetCachedOriginInfo(kOrigin1); 315 tracker->GetCachedOriginInfo(kOrigin1);
325 EXPECT_TRUE(origin1_info); 316 EXPECT_TRUE(origin1_info);
326 EXPECT_TRUE(origin2_info); 317 EXPECT_TRUE(origin2_info);
327 int64 origin1_quota = origin1_info->Quota();
328 int64 origin2_quota = origin2_info->Quota();
329 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
330 EXPECT_EQ(origin2_quota, tracker->GetOriginSpaceAvailable(kOrigin2));
331 318
332 // Set a new quota for kOrigin1
333 origin1_quota *= 2;
334 tracker->SetOriginQuota(kOrigin1, origin1_quota);
335 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
336 EXPECT_TRUE(origin1_info);
337 EXPECT_EQ(origin1_quota, origin1_info->Quota());
338 319
339 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 320 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
340 &database_size, &space_available); 321 &database_size);
341 EXPECT_EQ(0, database_size); 322 EXPECT_EQ(0, database_size);
342 EXPECT_EQ(origin1_quota, space_available);
343 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, 323 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0,
344 &database_size, &space_available); 324 &database_size);
345 EXPECT_EQ(0, database_size); 325 EXPECT_EQ(0, database_size);
346 EXPECT_EQ(origin2_quota, space_available);
347 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, 326 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
348 &database_size, &space_available); 327 &database_size);
349 EXPECT_EQ(0, database_size); 328 EXPECT_EQ(0, database_size);
350 EXPECT_EQ(origin1_quota, space_available);
351
352 // Tell the tracker that a database has changed.
353 // Even though nothing has changed, the observers should be notified.
354 tracker->DatabaseModified(kOrigin1, kDB1);
355 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 0, origin1_quota);
356 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 0, origin1_quota);
357 329
358 // Write some data to each file and check that the listeners are 330 // Write some data to each file and check that the listeners are
359 // called with the appropriate values. 331 // called with the appropriate values.
360 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 332 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
361 FilePath::FromWStringHack(UTF16ToWide( 333 FilePath::FromWStringHack(UTF16ToWide(
362 tracker->GetOriginDirectory(kOrigin1)))))); 334 tracker->GetOriginDirectory(kOrigin1))))));
363 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append( 335 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
364 FilePath::FromWStringHack(UTF16ToWide( 336 FilePath::FromWStringHack(UTF16ToWide(
365 tracker->GetOriginDirectory(kOrigin2)))))); 337 tracker->GetOriginDirectory(kOrigin2))))));
366 EXPECT_EQ(1, file_util::WriteFile( 338 EXPECT_EQ(1, file_util::WriteFile(
367 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); 339 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
368 EXPECT_EQ(2, file_util::WriteFile( 340 EXPECT_EQ(2, file_util::WriteFile(
369 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); 341 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2));
370 EXPECT_EQ(4, file_util::WriteFile( 342 EXPECT_EQ(4, file_util::WriteFile(
371 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); 343 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4));
372 tracker->DatabaseModified(kOrigin1, kDB1); 344 tracker->DatabaseModified(kOrigin1, kDB1);
373 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 1); 345 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1);
374 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 1); 346 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1);
375 tracker->DatabaseModified(kOrigin2, kDB2); 347 tracker->DatabaseModified(kOrigin2, kDB2);
376 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2, origin2_quota - 2); 348 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2);
377 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2, origin2_quota - 2); 349 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2);
378 tracker->DatabaseModified(kOrigin1, kDB3); 350 tracker->DatabaseModified(kOrigin1, kDB3);
379 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4, origin1_quota - 5); 351 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4);
380 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4, origin1_quota - 5); 352 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4);
381
382 // Make sure the available space for kOrigin1 and kOrigin2 changed too.
383 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
384 EXPECT_EQ(origin2_quota - 2, tracker->GetOriginSpaceAvailable(kOrigin2));
385 353
386 // Close all databases 354 // Close all databases
387 tracker->DatabaseClosed(kOrigin1, kDB1); 355 tracker->DatabaseClosed(kOrigin1, kDB1);
388 tracker->DatabaseClosed(kOrigin2, kDB2); 356 tracker->DatabaseClosed(kOrigin2, kDB2);
389 tracker->DatabaseClosed(kOrigin1, kDB3); 357 tracker->DatabaseClosed(kOrigin1, kDB3);
390 358
391 // Open an existing database and check the reported size 359 // Open an existing database and check the reported size
392 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 360 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
393 &database_size, &space_available); 361 &database_size);
394 EXPECT_EQ(1, database_size); 362 EXPECT_EQ(1, database_size);
395 EXPECT_EQ(origin1_quota - 5, space_available);
396
397 // Make sure that the observers are notified even if
398 // the size of the database hasn't changed.
399 EXPECT_EQ(1, file_util::WriteFile(
400 tracker->GetFullDBFilePath(kOrigin1, kDB1), "b", 1));
401 tracker->DatabaseModified(kOrigin1, kDB1);
402 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1, origin1_quota - 5);
403 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1, origin1_quota - 5);
404 tracker->DatabaseClosed(kOrigin1, kDB1); 363 tracker->DatabaseClosed(kOrigin1, kDB1);
405 364
406 // Remove an observer; this should clear all caches. 365 // Remove an observer; this should clear all caches.
407 tracker->RemoveObserver(&observer2); 366 tracker->RemoveObserver(&observer2);
408 367
409 // Change kDB1's and kDB3's size and call tracker->DatabaseModified()
410 // for kDB1 only. If the caches were indeed cleared, then calling
411 // tracker->DatabaseModified() should re-populate the cache for
412 // kOrigin1 == kOrigin1, and thus, should pick up kDB3's size change too.
413 EXPECT_EQ(5, file_util::WriteFile(
414 tracker->GetFullDBFilePath(kOrigin1, kDB1), "ccccc", 5));
415 EXPECT_EQ(6, file_util::WriteFile(
416 tracker->GetFullDBFilePath(kOrigin1, kDB3), "dddddd", 6));
417 tracker->DatabaseModified(kOrigin1, kDB1);
418 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 5,
419 origin1_quota - 11);
420 EXPECT_FALSE(observer2.DidReceiveNewNotification());
421 EXPECT_EQ(origin1_quota - 11, tracker->GetOriginSpaceAvailable(kOrigin1));
422
423 // Close the tracker database and clear all caches. 368 // Close the tracker database and clear all caches.
424 // Then make sure that DatabaseOpened() still returns the correct result. 369 // Then make sure that DatabaseOpened() still returns the correct result.
425 tracker->CloseTrackerDatabaseAndClearCaches(); 370 tracker->CloseTrackerDatabaseAndClearCaches();
426 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 371 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
427 &database_size, &space_available); 372 &database_size);
428 EXPECT_EQ(5, database_size); 373 EXPECT_EQ(1, database_size);
429 EXPECT_EQ(origin1_quota - 11, space_available);
430
431 // Close the tracker database and clear all caches. Then make sure that
432 // DatabaseModified() still calls the observers with correct values.
433 tracker->CloseTrackerDatabaseAndClearCaches();
434 tracker->DatabaseModified(kOrigin1, kDB3);
435 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6,
436 origin1_quota - 11);
437 tracker->DatabaseClosed(kOrigin1, kDB1); 374 tracker->DatabaseClosed(kOrigin1, kDB1);
438 375
439 // Remove all observers. 376 // Remove all observers.
440 tracker->RemoveObserver(&observer1); 377 tracker->RemoveObserver(&observer1);
441 378
442 // Trying to delete a database in use should fail 379 // Trying to delete a database in use should fail
443 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, 380 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
444 &database_size, &space_available); 381 &database_size);
445 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); 382 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3));
446 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 383 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
447 EXPECT_TRUE(origin1_info); 384 EXPECT_TRUE(origin1_info);
448 EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3)); 385 EXPECT_EQ(4, origin1_info->GetDatabaseSize(kDB3));
449 tracker->DatabaseClosed(kOrigin1, kDB3); 386 tracker->DatabaseClosed(kOrigin1, kDB3);
450 387
451 // Delete a database and make sure the space used by that origin is updated 388 // Delete a database and make sure the space used by that origin is updated
452 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); 389 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3));
453 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 390 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
454 EXPECT_TRUE(origin1_info); 391 EXPECT_TRUE(origin1_info);
455 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1)); 392 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1));
456 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
457 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); 393 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3));
458 394
459 // Get all data for all origins 395 // Get all data for all origins
460 std::vector<OriginInfo> origins_info; 396 std::vector<OriginInfo> origins_info;
461 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); 397 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
462 EXPECT_EQ(size_t(2), origins_info.size()); 398 EXPECT_EQ(size_t(2), origins_info.size());
463 EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin()); 399 EXPECT_EQ(kOrigin1, origins_info[0].GetOrigin());
464 EXPECT_EQ(5, origins_info[0].TotalSize()); 400 EXPECT_EQ(1, origins_info[0].TotalSize());
465 EXPECT_EQ(origin1_quota, origins_info[0].Quota()); 401 EXPECT_EQ(1, origins_info[0].GetDatabaseSize(kDB1));
466 EXPECT_EQ(5, origins_info[0].GetDatabaseSize(kDB1));
467 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3)); 402 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3));
468 403
469 EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin()); 404 EXPECT_EQ(kOrigin2, origins_info[1].GetOrigin());
470 EXPECT_EQ(2, origins_info[1].TotalSize()); 405 EXPECT_EQ(2, origins_info[1].TotalSize());
471 EXPECT_EQ(origin2_quota, origins_info[1].Quota());
472 406
473 // Trying to delete an origin with databases in use should fail 407 // Trying to delete an origin with databases in use should fail
474 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, 408 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
475 &database_size, &space_available); 409 &database_size);
476 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1)); 410 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1));
477 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 411 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
478 EXPECT_TRUE(origin1_info); 412 EXPECT_TRUE(origin1_info);
479 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1)); 413 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1));
480 tracker->DatabaseClosed(kOrigin1, kDB1); 414 tracker->DatabaseClosed(kOrigin1, kDB1);
481 415
482 // Delete an origin that doesn't have any database in use 416 // Delete an origin that doesn't have any database in use
483 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1)); 417 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1));
484 origins_info.clear(); 418 origins_info.clear();
485 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); 419 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
486 EXPECT_EQ(size_t(1), origins_info.size()); 420 EXPECT_EQ(size_t(1), origins_info.size());
487 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); 421 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin());
488 422
489 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 423 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
490 EXPECT_TRUE(origin1_info); 424 EXPECT_TRUE(origin1_info);
491 EXPECT_EQ(origin1_quota, origin1_info->Quota());
492 EXPECT_EQ(0, origin1_info->TotalSize()); 425 EXPECT_EQ(0, origin1_info->TotalSize());
493 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
494 } 426 }
495 427
496 static void DatabaseTrackerQuotaIntegration() { 428 static void DatabaseTrackerQuotaIntegration() {
497 const GURL kOrigin(kOrigin1Url); 429 const GURL kOrigin(kOrigin1Url);
498 const string16 kOriginId = DatabaseUtil::GetOriginIdentifier(kOrigin); 430 const string16 kOriginId = DatabaseUtil::GetOriginIdentifier(kOrigin);
499 const string16 kName = ASCIIToUTF16("name"); 431 const string16 kName = ASCIIToUTF16("name");
500 const string16 kDescription = ASCIIToUTF16("description"); 432 const string16 kDescription = ASCIIToUTF16("description");
501 433
502 ScopedTempDir temp_dir; 434 ScopedTempDir temp_dir;
503 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 435 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
504 436
505 // Initialize the tracker with a QuotaManagerProxy 437 // Initialize the tracker with a QuotaManagerProxy
506 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy( 438 scoped_refptr<TestQuotaManagerProxy> test_quota_proxy(
507 new TestQuotaManagerProxy); 439 new TestQuotaManagerProxy);
508 scoped_refptr<DatabaseTracker> tracker( 440 scoped_refptr<DatabaseTracker> tracker(
509 new DatabaseTracker(temp_dir.path(), false /* incognito */, 441 new DatabaseTracker(temp_dir.path(), false /* incognito */,
510 NULL, test_quota_proxy, NULL)); 442 NULL, test_quota_proxy, NULL));
511 EXPECT_TRUE(test_quota_proxy->registered_client_); 443 EXPECT_TRUE(test_quota_proxy->registered_client_);
512 444
513 // Create a database and modify it a couple of times, close it, 445 // Create a database and modify it a couple of times, close it,
514 // then delete it. Observe the tracker notifies accordingly. 446 // then delete it. Observe the tracker notifies accordingly.
515 447
516 int64 database_size = 0; 448 int64 database_size = 0;
517 int64 space_available = 0;
518 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, 449 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0,
519 &database_size, &space_available); 450 &database_size);
520 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); 451 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin));
521 test_quota_proxy->reset(); 452 test_quota_proxy->reset();
522 453
523 FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName)); 454 FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName));
524 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); 455 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName()));
525 EXPECT_TRUE(EnsureFileOfSize(db_file, 10)); 456 EXPECT_TRUE(EnsureFileOfSize(db_file, 10));
526 tracker->DatabaseModified(kOriginId, kName); 457 tracker->DatabaseModified(kOriginId, kName);
527 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10)); 458 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10));
528 test_quota_proxy->reset(); 459 test_quota_proxy->reset();
529 460
530 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); 461 EXPECT_TRUE(EnsureFileOfSize(db_file, 100));
531 tracker->DatabaseModified(kOriginId, kName); 462 tracker->DatabaseModified(kOriginId, kName);
532 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90)); 463 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90));
533 test_quota_proxy->reset(); 464 test_quota_proxy->reset();
534 465
535 tracker->DatabaseClosed(kOriginId, kName); 466 tracker->DatabaseClosed(kOriginId, kName);
467 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin));
536 EXPECT_EQ(net::OK, tracker->DeleteDatabase(kOriginId, kName, NULL)); 468 EXPECT_EQ(net::OK, tracker->DeleteDatabase(kOriginId, kName, NULL));
537 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); 469 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100));
470 test_quota_proxy->reset();
538 471
539 // Create a database and modify it, try to delete it while open, 472 // Create a database and modify it, try to delete it while open,
540 // then close it (at which time deletion will actually occur). 473 // then close it (at which time deletion will actually occur).
541 // Observe the tracker notifies accordingly. 474 // Observe the tracker notifies accordingly.
542 475
543 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, 476 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0,
544 &database_size, &space_available); 477 &database_size);
545 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); 478 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin));
546 test_quota_proxy->reset(); 479 test_quota_proxy->reset();
547 480
548 db_file = tracker->GetFullDBFilePath(kOriginId, kName); 481 db_file = tracker->GetFullDBFilePath(kOriginId, kName);
549 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); 482 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName()));
550 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); 483 EXPECT_TRUE(EnsureFileOfSize(db_file, 100));
551 tracker->DatabaseModified(kOriginId, kName); 484 tracker->DatabaseModified(kOriginId, kName);
552 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); 485 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100));
553 test_quota_proxy->reset(); 486 test_quota_proxy->reset();
554 487
555 EXPECT_EQ(net::ERR_IO_PENDING, 488 EXPECT_EQ(net::ERR_IO_PENDING,
556 tracker->DeleteDatabase(kOriginId, kName, NULL)); 489 tracker->DeleteDatabase(kOriginId, kName, NULL));
557 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); 490 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100));
558 491
559 tracker->DatabaseClosed(kOriginId, kName); 492 tracker->DatabaseClosed(kOriginId, kName);
493 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin));
560 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); 494 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100));
495 test_quota_proxy->reset();
561 496
562 // Create a database and up the file size without telling 497 // Create a database and up the file size without telling
563 // the tracker about the modification, than simulate a 498 // the tracker about the modification, than simulate a
564 // a renderer crash. 499 // a renderer crash.
565 // Observe the tracker notifies accordingly. 500 // Observe the tracker notifies accordingly.
566 501
567 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, 502 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0,
568 &database_size, &space_available); 503 &database_size);
569 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); 504 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin));
570 test_quota_proxy->reset(); 505 test_quota_proxy->reset();
571 db_file = tracker->GetFullDBFilePath(kOriginId, kName); 506 db_file = tracker->GetFullDBFilePath(kOriginId, kName);
572 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName())); 507 EXPECT_TRUE(file_util::CreateDirectory(db_file.DirName()));
573 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); 508 EXPECT_TRUE(EnsureFileOfSize(db_file, 100));
574 DatabaseConnections crashed_renderer_connections; 509 DatabaseConnections crashed_renderer_connections;
575 crashed_renderer_connections.AddConnection(kOriginId, kName); 510 crashed_renderer_connections.AddConnection(kOriginId, kName);
576 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); 511 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100));
577 tracker->CloseDatabases(crashed_renderer_connections); 512 tracker->CloseDatabases(crashed_renderer_connections);
578 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); 513 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100));
(...skipping 19 matching lines...) Expand all
598 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) { 533 TEST(DatabaseTrackerTest, DatabaseTrackerIncognitoMode) {
599 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true); 534 DatabaseTracker_TestHelper_Test::TestDatabaseTracker(true);
600 } 535 }
601 536
602 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) { 537 TEST(DatabaseTrackerTest, DatabaseTrackerQuotaIntegration) {
603 // There is no difference in behavior between incognito and not. 538 // There is no difference in behavior between incognito and not.
604 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration(); 539 DatabaseTracker_TestHelper_Test::DatabaseTrackerQuotaIntegration();
605 } 540 }
606 541
607 } // namespace webkit_database 542 } // namespace webkit_database
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698