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

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

Powered by Google App Engine
This is Rietveld 408576698