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

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

Issue 600104: Actually delete databases in CookiesTreeModel. (Closed)
Patch Set: fixed comments Created 10 years, 10 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
« no previous file with comments | « webkit/database/database_tracker.cc ('k') | no next file » | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/time.h"
11 #include "net/base/test_completion_callback.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 #include "webkit/database/database_tracker.h" 13 #include "webkit/database/database_tracker.h"
12 14
13 namespace { 15 namespace {
14 16
15 class TestObserver : public webkit_database::DatabaseTracker::Observer { 17 class TestObserver : public webkit_database::DatabaseTracker::Observer {
16 public: 18 public:
17 TestObserver() : new_notification_received_(false) {} 19 TestObserver() : new_notification_received_(false) {}
18 virtual ~TestObserver() {} 20 virtual ~TestObserver() {}
19 virtual void OnDatabaseSizeChanged(const string16& origin_identifier, 21 virtual void OnDatabaseSizeChanged(const string16& origin_identifier,
20 const string16& database_name, 22 const string16& database_name,
21 int64 database_size, 23 int64 database_size,
22 int64 space_available) { 24 int64 space_available) {
23 new_notification_received_ = true; 25 new_notification_received_ = true;
24 origin_identifier_ = origin_identifier; 26 origin_identifier_ = origin_identifier;
25 database_name_ = database_name; 27 database_name_ = database_name;
26 database_size_ = database_size; 28 database_size_ = database_size;
27 space_available_ = space_available; 29 space_available_ = space_available;
28 } 30 }
29 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier, 31 virtual void OnDatabaseScheduledForDeletion(const string16& origin_identifier,
30 const string16& database_name) { 32 const string16& database_name) {
33 new_notification_received_ = true;
34 origin_identifier_ = origin_identifier;
35 database_name_ = database_name;
31 } 36 }
32 bool DidReceiveNewNotification() { 37 bool DidReceiveNewNotification() {
33 bool temp_new_notification_received = new_notification_received_; 38 bool temp_new_notification_received = new_notification_received_;
34 new_notification_received_ = false; 39 new_notification_received_ = false;
35 return temp_new_notification_received; 40 return temp_new_notification_received;
36 } 41 }
37 string16 GetNotificationOriginIdentifier() { return origin_identifier_; } 42 string16 GetNotificationOriginIdentifier() { return origin_identifier_; }
38 string16 GetNotificationDatabaseName() { return database_name_; } 43 string16 GetNotificationDatabaseName() { return database_name_; }
39 int64 GetNotificationDatabaseSize() { return database_size_; } 44 int64 GetNotificationDatabaseSize() { return database_size_; }
40 int64 GetNotificationSpaceAvailable() { return space_available_; } 45 int64 GetNotificationSpaceAvailable() { return space_available_; }
(...skipping 19 matching lines...) Expand all
60 EXPECT_EQ(expected_database_size, 65 EXPECT_EQ(expected_database_size,
61 observer->GetNotificationDatabaseSize()); 66 observer->GetNotificationDatabaseSize());
62 EXPECT_EQ(expected_space_available, 67 EXPECT_EQ(expected_space_available,
63 observer->GetNotificationSpaceAvailable()); 68 observer->GetNotificationSpaceAvailable());
64 } 69 }
65 70
66 } // namespace 71 } // namespace
67 72
68 namespace webkit_database { 73 namespace webkit_database {
69 74
75 TEST(DatabaseTrackerTest, DeleteOpenDatabase) {
76 // Initialize the tracker database.
77 ScopedTempDir temp_dir;
78 EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
79 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path()));
80
81 // Create and open three databases.
82 int64 database_size = 0;
83 int64 space_available = 0;
84 const string16 kOrigin1 = ASCIIToUTF16("origin1");
85 const string16 kOrigin2 = ASCIIToUTF16("origin2");
86 const string16 kDB1 = ASCIIToUTF16("db1");
87 const string16 kDB2 = ASCIIToUTF16("db2");
88 const string16 kDB3 = ASCIIToUTF16("db3");
89 const string16 kDescription = ASCIIToUTF16("database_description");
90
91 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
92 &database_size, &space_available);
93 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0,
94 &database_size, &space_available);
95 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0,
96 &database_size, &space_available);
97
98 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
99 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
100 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
101 FilePath::FromWStringHack(UTF16ToWide(kOrigin2)))));
102 EXPECT_EQ(1, file_util::WriteFile(
103 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
104 EXPECT_EQ(2, file_util::WriteFile(
105 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2));
106 EXPECT_EQ(3, file_util::WriteFile(
107 tracker->GetFullDBFilePath(kOrigin2, kDB3), "aaa", 3));
108 tracker->DatabaseModified(kOrigin1, kDB1);
109 tracker->DatabaseModified(kOrigin2, kDB2);
110 tracker->DatabaseModified(kOrigin2, kDB3);
111
112 // Delete db1. Should also delete origin1.
113 TestObserver observer;
114 tracker->AddObserver(&observer);
115 TestCompletionCallback callback;
116 int result = tracker->DeleteDatabase(kOrigin1, kDB1, &callback);
117 EXPECT_EQ(net::ERR_IO_PENDING, result);
118 ASSERT_FALSE(callback.have_result());
119 EXPECT_TRUE(observer.DidReceiveNewNotification());
120 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier());
121 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName());
122 tracker->DatabaseClosed(kOrigin1, kDB1);
123 result = callback.GetResult(result);
124 EXPECT_EQ(net::OK, result);
125 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append(
126 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
127
128 // Recreate db1.
129 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0,
130 &database_size, &space_available);
131 EXPECT_TRUE(file_util::CreateDirectory(tracker->DatabaseDirectory().Append(
132 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
133 EXPECT_EQ(1, file_util::WriteFile(
134 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1));
135 tracker->DatabaseModified(kOrigin1, kDB1);
136
137 // Setup file modification times. db1 and db2 are modified now, db3 three
138 // days ago.
139 EXPECT_TRUE(file_util::SetLastModifiedTime(
140 tracker->GetFullDBFilePath(kOrigin1, kDB1), base::Time::Now()));
141 EXPECT_TRUE(file_util::SetLastModifiedTime(
142 tracker->GetFullDBFilePath(kOrigin2, kDB2), base::Time::Now()));
143 base::Time three_days_ago = base::Time::Now();
144 three_days_ago -= base::TimeDelta::FromDays(3);
145 EXPECT_TRUE(file_util::SetLastModifiedTime(
146 tracker->GetFullDBFilePath(kOrigin2, kDB3), three_days_ago));
147
148 // Delete databases modified since yesterday.
149 base::Time yesterday = base::Time::Now();
150 yesterday -= base::TimeDelta::FromDays(1);
151 result = tracker->DeleteDataModifiedSince(yesterday, &callback);
152 EXPECT_EQ(net::ERR_IO_PENDING, result);
153 ASSERT_FALSE(callback.have_result());
154 EXPECT_TRUE(observer.DidReceiveNewNotification());
155 tracker->DatabaseClosed(kOrigin1, kDB1);
156 tracker->DatabaseClosed(kOrigin2, kDB2);
157 result = callback.GetResult(result);
158 EXPECT_EQ(net::OK, result);
159 EXPECT_FALSE(file_util::PathExists(tracker->DatabaseDirectory().Append(
160 FilePath::FromWStringHack(UTF16ToWide(kOrigin1)))));
161 EXPECT_FALSE(
162 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2)));
163 EXPECT_TRUE(
164 file_util::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB3)));
165
166 tracker->DatabaseClosed(kOrigin2, kDB3);
167 tracker->RemoveObserver(&observer);
168 }
169
70 TEST(DatabaseTrackerTest, TestIt) { 170 TEST(DatabaseTrackerTest, TestIt) {
71 // Initialize the tracker database. 171 // Initialize the tracker database.
72 ScopedTempDir temp_dir; 172 ScopedTempDir temp_dir;
73 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); 173 EXPECT_TRUE(temp_dir.CreateUniqueTempDir());
74 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path())); 174 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker(temp_dir.path()));
75 175
76 // Add two observers. 176 // Add two observers.
77 TestObserver observer1; 177 TestObserver observer1;
78 TestObserver observer2; 178 TestObserver observer2;
79 tracker->AddObserver(&observer1); 179 tracker->AddObserver(&observer1);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 tracker->DatabaseModified(kOrigin1, kDB3); 303 tracker->DatabaseModified(kOrigin1, kDB3);
204 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, origin1_quota - 11); 304 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 6, origin1_quota - 11);
205 tracker->DatabaseClosed(kOrigin1, kDB1); 305 tracker->DatabaseClosed(kOrigin1, kDB1);
206 306
207 // Remove all observers. 307 // Remove all observers.
208 tracker->RemoveObserver(&observer1); 308 tracker->RemoveObserver(&observer1);
209 309
210 // Trying to delete a database in use should fail 310 // Trying to delete a database in use should fail
211 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, 311 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0,
212 &database_size, &space_available); 312 &database_size, &space_available);
213 EXPECT_FALSE(tracker->DeleteDatabase(kOrigin1, kDB3)); 313 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3));
214 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 314 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
215 EXPECT_TRUE(origin1_info); 315 EXPECT_TRUE(origin1_info);
216 EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3)); 316 EXPECT_EQ(6, origin1_info->GetDatabaseSize(kDB3));
217 tracker->DatabaseClosed(kOrigin1, kDB3); 317 tracker->DatabaseClosed(kOrigin1, kDB3);
218 318
219 // Delete a database and make sure the space used by that origin is updated 319 // Delete a database and make sure the space used by that origin is updated
220 EXPECT_TRUE(tracker->DeleteDatabase(kOrigin1, kDB3)); 320 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3));
221 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 321 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
222 EXPECT_TRUE(origin1_info); 322 EXPECT_TRUE(origin1_info);
223 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1)); 323 EXPECT_EQ(origin1_quota - 5, tracker->GetOriginSpaceAvailable(kOrigin1));
224 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1)); 324 EXPECT_EQ(5, origin1_info->GetDatabaseSize(kDB1));
225 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); 325 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3));
226 326
227 // Get all data for all origins 327 // Get all data for all origins
228 std::vector<OriginInfo> origins_info; 328 std::vector<OriginInfo> origins_info;
229 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); 329 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info));
230 EXPECT_EQ(size_t(2), origins_info.size()); 330 EXPECT_EQ(size_t(2), origins_info.size());
(...skipping 24 matching lines...) Expand all
255 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin()); 355 EXPECT_EQ(kOrigin2, origins_info[0].GetOrigin());
256 356
257 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); 357 origin1_info = tracker->GetCachedOriginInfo(kOrigin1);
258 EXPECT_TRUE(origin1_info); 358 EXPECT_TRUE(origin1_info);
259 EXPECT_EQ(origin1_quota, origin1_info->Quota()); 359 EXPECT_EQ(origin1_quota, origin1_info->Quota());
260 EXPECT_EQ(0, origin1_info->TotalSize()); 360 EXPECT_EQ(0, origin1_info->TotalSize());
261 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1)); 361 EXPECT_EQ(origin1_quota, tracker->GetOriginSpaceAvailable(kOrigin1));
262 } 362 }
263 363
264 } // namespace webkit_database 364 } // namespace webkit_database
OLDNEW
« no previous file with comments | « webkit/database/database_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698