| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 namespace { | 32 namespace { |
| 33 | 33 |
| 34 const char kOrigin1Url[] = "http://origin1"; | 34 const char kOrigin1Url[] = "http://origin1"; |
| 35 const char kOrigin2Url[] = "http://protected_origin2"; | 35 const char kOrigin2Url[] = "http://protected_origin2"; |
| 36 | 36 |
| 37 class TestObserver : public storage::DatabaseTracker::Observer { | 37 class TestObserver : public storage::DatabaseTracker::Observer { |
| 38 public: | 38 public: |
| 39 TestObserver() | 39 TestObserver() |
| 40 : new_notification_received_(false), | 40 : new_notification_received_(false), |
| 41 observe_size_changes_(true), | 41 observe_size_changes_(true), |
| 42 observe_scheduled_deletions_(true) { | 42 observe_scheduled_deletions_(true) {} |
| 43 } | |
| 44 TestObserver(bool observe_size_changes, bool observe_scheduled_deletions) | 43 TestObserver(bool observe_size_changes, bool observe_scheduled_deletions) |
| 45 : new_notification_received_(false), | 44 : new_notification_received_(false), |
| 46 observe_size_changes_(observe_size_changes), | 45 observe_size_changes_(observe_size_changes), |
| 47 observe_scheduled_deletions_(observe_scheduled_deletions) { | 46 observe_scheduled_deletions_(observe_scheduled_deletions) {} |
| 48 } | |
| 49 | 47 |
| 50 ~TestObserver() override {} | 48 ~TestObserver() override {} |
| 51 void OnDatabaseSizeChanged(const std::string& origin_identifier, | 49 void OnDatabaseSizeChanged(const std::string& origin_identifier, |
| 52 const base::string16& database_name, | 50 const base::string16& database_name, |
| 53 int64_t database_size) override { | 51 int64_t database_size) override { |
| 54 if (!observe_size_changes_) | 52 if (!observe_size_changes_) |
| 55 return; | 53 return; |
| 56 new_notification_received_ = true; | 54 new_notification_received_ = true; |
| 57 origin_identifier_ = origin_identifier; | 55 origin_identifier_ = origin_identifier; |
| 58 database_name_ = database_name; | 56 database_name_ = database_name; |
| 59 database_size_ = database_size; | 57 database_size_ = database_size; |
| 60 } | 58 } |
| 61 void OnDatabaseScheduledForDeletion( | 59 void OnDatabaseScheduledForDeletion( |
| 62 const std::string& origin_identifier, | 60 const std::string& origin_identifier, |
| 63 const base::string16& database_name) override { | 61 const base::string16& database_name) override { |
| 64 if (!observe_scheduled_deletions_) | 62 if (!observe_scheduled_deletions_) |
| 65 return; | 63 return; |
| 66 new_notification_received_ = true; | 64 new_notification_received_ = true; |
| 67 origin_identifier_ = origin_identifier; | 65 origin_identifier_ = origin_identifier; |
| 68 database_name_ = database_name; | 66 database_name_ = database_name; |
| 69 } | 67 } |
| 70 bool DidReceiveNewNotification() { | 68 bool DidReceiveNewNotification() { |
| 71 bool temp_new_notification_received = new_notification_received_; | 69 bool temp_new_notification_received = new_notification_received_; |
| 72 new_notification_received_ = false; | 70 new_notification_received_ = false; |
| 73 return temp_new_notification_received; | 71 return temp_new_notification_received; |
| 74 } | 72 } |
| 75 std::string GetNotificationOriginIdentifier() { | 73 std::string GetNotificationOriginIdentifier() { return origin_identifier_; } |
| 76 return origin_identifier_; | |
| 77 } | |
| 78 base::string16 GetNotificationDatabaseName() { return database_name_; } | 74 base::string16 GetNotificationDatabaseName() { return database_name_; } |
| 79 int64_t GetNotificationDatabaseSize() { return database_size_; } | 75 int64_t GetNotificationDatabaseSize() { return database_size_; } |
| 80 | 76 |
| 81 private: | 77 private: |
| 82 bool new_notification_received_; | 78 bool new_notification_received_; |
| 83 bool observe_size_changes_; | 79 bool observe_size_changes_; |
| 84 bool observe_scheduled_deletions_; | 80 bool observe_scheduled_deletions_; |
| 85 std::string origin_identifier_; | 81 std::string origin_identifier_; |
| 86 base::string16 database_name_; | 82 base::string16 database_name_; |
| 87 int64_t database_size_; | 83 int64_t database_size_; |
| 88 }; | 84 }; |
| 89 | 85 |
| 90 void CheckNotificationReceived(TestObserver* observer, | 86 void CheckNotificationReceived(TestObserver* observer, |
| 91 const std::string& expected_origin_identifier, | 87 const std::string& expected_origin_identifier, |
| 92 const base::string16& expected_database_name, | 88 const base::string16& expected_database_name, |
| 93 int64_t expected_database_size) { | 89 int64_t expected_database_size) { |
| 94 EXPECT_TRUE(observer->DidReceiveNewNotification()); | 90 EXPECT_TRUE(observer->DidReceiveNewNotification()); |
| 95 EXPECT_EQ(expected_origin_identifier, | 91 EXPECT_EQ(expected_origin_identifier, |
| 96 observer->GetNotificationOriginIdentifier()); | 92 observer->GetNotificationOriginIdentifier()); |
| 97 EXPECT_EQ(expected_database_name, | 93 EXPECT_EQ(expected_database_name, observer->GetNotificationDatabaseName()); |
| 98 observer->GetNotificationDatabaseName()); | 94 EXPECT_EQ(expected_database_size, observer->GetNotificationDatabaseSize()); |
| 99 EXPECT_EQ(expected_database_size, | |
| 100 observer->GetNotificationDatabaseSize()); | |
| 101 } | 95 } |
| 102 | 96 |
| 103 class TestQuotaManagerProxy : public storage::QuotaManagerProxy { | 97 class TestQuotaManagerProxy : public storage::QuotaManagerProxy { |
| 104 public: | 98 public: |
| 105 TestQuotaManagerProxy() | 99 TestQuotaManagerProxy() |
| 106 : QuotaManagerProxy(NULL, NULL), | 100 : QuotaManagerProxy(NULL, NULL), registered_client_(NULL) {} |
| 107 registered_client_(NULL) { | |
| 108 } | |
| 109 | 101 |
| 110 void RegisterClient(storage::QuotaClient* client) override { | 102 void RegisterClient(storage::QuotaClient* client) override { |
| 111 EXPECT_FALSE(registered_client_); | 103 EXPECT_FALSE(registered_client_); |
| 112 registered_client_ = client; | 104 registered_client_ = client; |
| 113 } | 105 } |
| 114 | 106 |
| 115 void NotifyStorageAccessed(storage::QuotaClient::ID client_id, | 107 void NotifyStorageAccessed(storage::QuotaClient::ID client_id, |
| 116 const GURL& origin, | 108 const GURL& origin, |
| 117 storage::StorageType type) override { | 109 storage::StorageType type) override { |
| 118 EXPECT_EQ(storage::QuotaClient::kDatabase, client_id); | 110 EXPECT_EQ(storage::QuotaClient::kDatabase, client_id); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 142 storage::StorageType type, | 134 storage::StorageType type, |
| 143 const UsageAndQuotaCallback& callback) override {} | 135 const UsageAndQuotaCallback& callback) override {} |
| 144 | 136 |
| 145 void SimulateQuotaManagerDestroyed() { | 137 void SimulateQuotaManagerDestroyed() { |
| 146 if (registered_client_) { | 138 if (registered_client_) { |
| 147 registered_client_->OnQuotaManagerDestroyed(); | 139 registered_client_->OnQuotaManagerDestroyed(); |
| 148 registered_client_ = NULL; | 140 registered_client_ = NULL; |
| 149 } | 141 } |
| 150 } | 142 } |
| 151 | 143 |
| 152 bool WasAccessNotified(const GURL& origin) { | 144 bool WasAccessNotified(const GURL& origin) { return accesses_[origin] != 0; } |
| 153 return accesses_[origin] != 0; | |
| 154 } | |
| 155 | 145 |
| 156 bool WasModificationNotified(const GURL& origin, int64_t amount) { | 146 bool WasModificationNotified(const GURL& origin, int64_t amount) { |
| 157 return modifications_[origin].first != 0 && | 147 return modifications_[origin].first != 0 && |
| 158 modifications_[origin].second == amount; | 148 modifications_[origin].second == amount; |
| 159 } | 149 } |
| 160 | 150 |
| 161 void reset() { | 151 void reset() { |
| 162 accesses_.clear(); | 152 accesses_.clear(); |
| 163 modifications_.clear(); | 153 modifications_.clear(); |
| 164 } | 154 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 int64_t database_size = 0; | 199 int64_t database_size = 0; |
| 210 const std::string kOrigin1 = | 200 const std::string kOrigin1 = |
| 211 storage::GetIdentifierFromOrigin(GURL(kOrigin1Url)); | 201 storage::GetIdentifierFromOrigin(GURL(kOrigin1Url)); |
| 212 const std::string kOrigin2 = | 202 const std::string kOrigin2 = |
| 213 storage::GetIdentifierFromOrigin(GURL(kOrigin2Url)); | 203 storage::GetIdentifierFromOrigin(GURL(kOrigin2Url)); |
| 214 const base::string16 kDB1 = ASCIIToUTF16("db1"); | 204 const base::string16 kDB1 = ASCIIToUTF16("db1"); |
| 215 const base::string16 kDB2 = ASCIIToUTF16("db2"); | 205 const base::string16 kDB2 = ASCIIToUTF16("db2"); |
| 216 const base::string16 kDB3 = ASCIIToUTF16("db3"); | 206 const base::string16 kDB3 = ASCIIToUTF16("db3"); |
| 217 const base::string16 kDescription = ASCIIToUTF16("database_description"); | 207 const base::string16 kDescription = ASCIIToUTF16("database_description"); |
| 218 | 208 |
| 219 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 209 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 220 &database_size); | 210 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, &database_size); |
| 221 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 211 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0, &database_size); |
| 222 &database_size); | |
| 223 tracker->DatabaseOpened(kOrigin2, kDB3, kDescription, 0, | |
| 224 &database_size); | |
| 225 | 212 |
| 226 EXPECT_TRUE(base::CreateDirectory( | 213 EXPECT_TRUE(base::CreateDirectory( |
| 227 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( | 214 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( |
| 228 tracker->GetOriginDirectory(kOrigin1))))); | 215 tracker->GetOriginDirectory(kOrigin1))))); |
| 229 EXPECT_TRUE(base::CreateDirectory( | 216 EXPECT_TRUE(base::CreateDirectory( |
| 230 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( | 217 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( |
| 231 tracker->GetOriginDirectory(kOrigin2))))); | 218 tracker->GetOriginDirectory(kOrigin2))))); |
| 232 EXPECT_EQ(1, base::WriteFile( | 219 EXPECT_EQ( |
| 233 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 220 1, base::WriteFile(tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 234 EXPECT_EQ(2, base::WriteFile( | 221 EXPECT_EQ(2, base::WriteFile(tracker->GetFullDBFilePath(kOrigin2, kDB2), |
| 235 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); | 222 "aa", 2)); |
| 236 EXPECT_EQ(3, base::WriteFile( | 223 EXPECT_EQ(3, base::WriteFile(tracker->GetFullDBFilePath(kOrigin2, kDB3), |
| 237 tracker->GetFullDBFilePath(kOrigin2, kDB3), "aaa", 3)); | 224 "aaa", 3)); |
| 238 tracker->DatabaseModified(kOrigin1, kDB1); | 225 tracker->DatabaseModified(kOrigin1, kDB1); |
| 239 tracker->DatabaseModified(kOrigin2, kDB2); | 226 tracker->DatabaseModified(kOrigin2, kDB2); |
| 240 tracker->DatabaseModified(kOrigin2, kDB3); | 227 tracker->DatabaseModified(kOrigin2, kDB3); |
| 241 | 228 |
| 242 // Delete db1. Should also delete origin1. | 229 // Delete db1. Should also delete origin1. |
| 243 TestObserver observer; | 230 TestObserver observer; |
| 244 tracker->AddObserver(&observer); | 231 tracker->AddObserver(&observer); |
| 245 net::TestCompletionCallback callback; | 232 net::TestCompletionCallback callback; |
| 246 int result = tracker->DeleteDatabase(kOrigin1, kDB1, callback.callback()); | 233 int result = tracker->DeleteDatabase(kOrigin1, kDB1, callback.callback()); |
| 247 EXPECT_EQ(net::ERR_IO_PENDING, result); | 234 EXPECT_EQ(net::ERR_IO_PENDING, result); |
| 248 ASSERT_FALSE(callback.have_result()); | 235 ASSERT_FALSE(callback.have_result()); |
| 249 EXPECT_TRUE(observer.DidReceiveNewNotification()); | 236 EXPECT_TRUE(observer.DidReceiveNewNotification()); |
| 250 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier()); | 237 EXPECT_EQ(kOrigin1, observer.GetNotificationOriginIdentifier()); |
| 251 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName()); | 238 EXPECT_EQ(kDB1, observer.GetNotificationDatabaseName()); |
| 252 tracker->DatabaseClosed(kOrigin1, kDB1); | 239 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 253 result = callback.GetResult(result); | 240 result = callback.GetResult(result); |
| 254 EXPECT_EQ(net::OK, result); | 241 EXPECT_EQ(net::OK, result); |
| 255 EXPECT_FALSE(base::PathExists( | 242 EXPECT_FALSE( |
| 256 tracker->DatabaseDirectory().AppendASCII(kOrigin1))); | 243 base::PathExists(tracker->DatabaseDirectory().AppendASCII(kOrigin1))); |
| 257 | 244 |
| 258 // Recreate db1. | 245 // Recreate db1. |
| 259 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 246 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 260 &database_size); | |
| 261 EXPECT_TRUE(base::CreateDirectory( | 247 EXPECT_TRUE(base::CreateDirectory( |
| 262 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( | 248 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( |
| 263 tracker->GetOriginDirectory(kOrigin1))))); | 249 tracker->GetOriginDirectory(kOrigin1))))); |
| 264 EXPECT_EQ(1, base::WriteFile( | 250 EXPECT_EQ( |
| 265 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 251 1, base::WriteFile(tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 266 tracker->DatabaseModified(kOrigin1, kDB1); | 252 tracker->DatabaseModified(kOrigin1, kDB1); |
| 267 | 253 |
| 268 // Setup file modification times. db1 and db2 are modified now, db3 three | 254 // Setup file modification times. db1 and db2 are modified now, db3 three |
| 269 // days ago. | 255 // days ago. |
| 270 base::Time now = base::Time::Now(); | 256 base::Time now = base::Time::Now(); |
| 271 EXPECT_TRUE(base::TouchFile(tracker->GetFullDBFilePath(kOrigin1, kDB1), | 257 EXPECT_TRUE( |
| 272 now, now)); | 258 base::TouchFile(tracker->GetFullDBFilePath(kOrigin1, kDB1), now, now)); |
| 273 EXPECT_TRUE(base::TouchFile(tracker->GetFullDBFilePath(kOrigin2, kDB2), | 259 EXPECT_TRUE( |
| 274 now, now)); | 260 base::TouchFile(tracker->GetFullDBFilePath(kOrigin2, kDB2), now, now)); |
| 275 base::Time three_days_ago = now - base::TimeDelta::FromDays(3); | 261 base::Time three_days_ago = now - base::TimeDelta::FromDays(3); |
| 276 EXPECT_TRUE(base::TouchFile(tracker->GetFullDBFilePath(kOrigin2, kDB3), | 262 EXPECT_TRUE(base::TouchFile(tracker->GetFullDBFilePath(kOrigin2, kDB3), |
| 277 three_days_ago, three_days_ago)); | 263 three_days_ago, three_days_ago)); |
| 278 | 264 |
| 279 // Delete databases modified since yesterday. db2 is whitelisted. | 265 // Delete databases modified since yesterday. db2 is whitelisted. |
| 280 base::Time yesterday = base::Time::Now(); | 266 base::Time yesterday = base::Time::Now(); |
| 281 yesterday -= base::TimeDelta::FromDays(1); | 267 yesterday -= base::TimeDelta::FromDays(1); |
| 282 result = tracker->DeleteDataModifiedSince( | 268 result = tracker->DeleteDataModifiedSince(yesterday, callback.callback()); |
| 283 yesterday, callback.callback()); | |
| 284 EXPECT_EQ(net::ERR_IO_PENDING, result); | 269 EXPECT_EQ(net::ERR_IO_PENDING, result); |
| 285 ASSERT_FALSE(callback.have_result()); | 270 ASSERT_FALSE(callback.have_result()); |
| 286 EXPECT_TRUE(observer.DidReceiveNewNotification()); | 271 EXPECT_TRUE(observer.DidReceiveNewNotification()); |
| 287 tracker->DatabaseClosed(kOrigin1, kDB1); | 272 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 288 tracker->DatabaseClosed(kOrigin2, kDB2); | 273 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 289 result = callback.GetResult(result); | 274 result = callback.GetResult(result); |
| 290 EXPECT_EQ(net::OK, result); | 275 EXPECT_EQ(net::OK, result); |
| 291 EXPECT_FALSE(base::PathExists( | 276 EXPECT_FALSE( |
| 292 tracker->DatabaseDirectory().AppendASCII(kOrigin1))); | 277 base::PathExists(tracker->DatabaseDirectory().AppendASCII(kOrigin1))); |
| 293 EXPECT_TRUE( | 278 EXPECT_TRUE(base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| 294 base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); | 279 EXPECT_TRUE(base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB3))); |
| 295 EXPECT_TRUE( | |
| 296 base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB3))); | |
| 297 | 280 |
| 298 tracker->DatabaseClosed(kOrigin2, kDB3); | 281 tracker->DatabaseClosed(kOrigin2, kDB3); |
| 299 tracker->RemoveObserver(&observer); | 282 tracker->RemoveObserver(&observer); |
| 300 } | 283 } |
| 301 | 284 |
| 302 static void TestDatabaseTracker(bool incognito_mode) { | 285 static void TestDatabaseTracker(bool incognito_mode) { |
| 303 // Initialize the tracker database. | 286 // Initialize the tracker database. |
| 304 base::ScopedTempDir temp_dir; | 287 base::ScopedTempDir temp_dir; |
| 305 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 288 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 306 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 289 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| (...skipping 21 matching lines...) Expand all Loading... |
| 328 const base::string16 kDescription = ASCIIToUTF16("database_description"); | 311 const base::string16 kDescription = ASCIIToUTF16("database_description"); |
| 329 | 312 |
| 330 // Get the info for kOrigin1 and kOrigin2 | 313 // Get the info for kOrigin1 and kOrigin2 |
| 331 DatabaseTracker::CachedOriginInfo* origin1_info = | 314 DatabaseTracker::CachedOriginInfo* origin1_info = |
| 332 tracker->GetCachedOriginInfo(kOrigin1); | 315 tracker->GetCachedOriginInfo(kOrigin1); |
| 333 DatabaseTracker::CachedOriginInfo* origin2_info = | 316 DatabaseTracker::CachedOriginInfo* origin2_info = |
| 334 tracker->GetCachedOriginInfo(kOrigin1); | 317 tracker->GetCachedOriginInfo(kOrigin1); |
| 335 EXPECT_TRUE(origin1_info); | 318 EXPECT_TRUE(origin1_info); |
| 336 EXPECT_TRUE(origin2_info); | 319 EXPECT_TRUE(origin2_info); |
| 337 | 320 |
| 338 | 321 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 339 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | |
| 340 &database_size); | |
| 341 EXPECT_EQ(0, database_size); | 322 EXPECT_EQ(0, database_size); |
| 342 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 323 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, &database_size); |
| 343 &database_size); | |
| 344 EXPECT_EQ(0, database_size); | 324 EXPECT_EQ(0, database_size); |
| 345 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | 325 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, &database_size); |
| 346 &database_size); | |
| 347 EXPECT_EQ(0, database_size); | 326 EXPECT_EQ(0, database_size); |
| 348 | 327 |
| 349 // Write some data to each file and check that the listeners are | 328 // Write some data to each file and check that the listeners are |
| 350 // called with the appropriate values. | 329 // called with the appropriate values. |
| 351 EXPECT_TRUE(base::CreateDirectory( | 330 EXPECT_TRUE(base::CreateDirectory( |
| 352 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( | 331 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( |
| 353 tracker->GetOriginDirectory(kOrigin1))))); | 332 tracker->GetOriginDirectory(kOrigin1))))); |
| 354 EXPECT_TRUE(base::CreateDirectory( | 333 EXPECT_TRUE(base::CreateDirectory( |
| 355 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( | 334 tracker->DatabaseDirectory().Append(base::FilePath::FromUTF16Unsafe( |
| 356 tracker->GetOriginDirectory(kOrigin2))))); | 335 tracker->GetOriginDirectory(kOrigin2))))); |
| 357 EXPECT_EQ(1, base::WriteFile( | 336 EXPECT_EQ( |
| 358 tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); | 337 1, base::WriteFile(tracker->GetFullDBFilePath(kOrigin1, kDB1), "a", 1)); |
| 359 EXPECT_EQ(2, base::WriteFile( | 338 EXPECT_EQ(2, base::WriteFile(tracker->GetFullDBFilePath(kOrigin2, kDB2), |
| 360 tracker->GetFullDBFilePath(kOrigin2, kDB2), "aa", 2)); | 339 "aa", 2)); |
| 361 EXPECT_EQ(4, base::WriteFile( | 340 EXPECT_EQ(4, base::WriteFile(tracker->GetFullDBFilePath(kOrigin1, kDB3), |
| 362 tracker->GetFullDBFilePath(kOrigin1, kDB3), "aaaa", 4)); | 341 "aaaa", 4)); |
| 363 tracker->DatabaseModified(kOrigin1, kDB1); | 342 tracker->DatabaseModified(kOrigin1, kDB1); |
| 364 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1); | 343 CheckNotificationReceived(&observer1, kOrigin1, kDB1, 1); |
| 365 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1); | 344 CheckNotificationReceived(&observer2, kOrigin1, kDB1, 1); |
| 366 tracker->DatabaseModified(kOrigin2, kDB2); | 345 tracker->DatabaseModified(kOrigin2, kDB2); |
| 367 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2); | 346 CheckNotificationReceived(&observer1, kOrigin2, kDB2, 2); |
| 368 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2); | 347 CheckNotificationReceived(&observer2, kOrigin2, kDB2, 2); |
| 369 tracker->DatabaseModified(kOrigin1, kDB3); | 348 tracker->DatabaseModified(kOrigin1, kDB3); |
| 370 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4); | 349 CheckNotificationReceived(&observer1, kOrigin1, kDB3, 4); |
| 371 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4); | 350 CheckNotificationReceived(&observer2, kOrigin1, kDB3, 4); |
| 372 | 351 |
| 373 // Close all databases | 352 // Close all databases |
| 374 tracker->DatabaseClosed(kOrigin1, kDB1); | 353 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 375 tracker->DatabaseClosed(kOrigin2, kDB2); | 354 tracker->DatabaseClosed(kOrigin2, kDB2); |
| 376 tracker->DatabaseClosed(kOrigin1, kDB3); | 355 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 377 | 356 |
| 378 // Open an existing database and check the reported size | 357 // Open an existing database and check the reported size |
| 379 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 358 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 380 &database_size); | |
| 381 EXPECT_EQ(1, database_size); | 359 EXPECT_EQ(1, database_size); |
| 382 tracker->DatabaseClosed(kOrigin1, kDB1); | 360 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 383 | 361 |
| 384 // Remove an observer; this should clear all caches. | 362 // Remove an observer; this should clear all caches. |
| 385 tracker->RemoveObserver(&observer2); | 363 tracker->RemoveObserver(&observer2); |
| 386 | 364 |
| 387 // Close the tracker database and clear all caches. | 365 // Close the tracker database and clear all caches. |
| 388 // Then make sure that DatabaseOpened() still returns the correct result. | 366 // Then make sure that DatabaseOpened() still returns the correct result. |
| 389 tracker->CloseTrackerDatabaseAndClearCaches(); | 367 tracker->CloseTrackerDatabaseAndClearCaches(); |
| 390 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 368 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 391 &database_size); | |
| 392 EXPECT_EQ(1, database_size); | 369 EXPECT_EQ(1, database_size); |
| 393 tracker->DatabaseClosed(kOrigin1, kDB1); | 370 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 394 | 371 |
| 395 // Remove all observers. | 372 // Remove all observers. |
| 396 tracker->RemoveObserver(&observer1); | 373 tracker->RemoveObserver(&observer1); |
| 397 | 374 |
| 398 // Trying to delete a database in use should fail | 375 // Trying to delete a database in use should fail |
| 399 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, | 376 tracker->DatabaseOpened(kOrigin1, kDB3, kDescription, 0, &database_size); |
| 400 &database_size); | |
| 401 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); | 377 EXPECT_FALSE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); |
| 402 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 378 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 403 EXPECT_TRUE(origin1_info); | 379 EXPECT_TRUE(origin1_info); |
| 404 EXPECT_EQ(4, origin1_info->GetDatabaseSize(kDB3)); | 380 EXPECT_EQ(4, origin1_info->GetDatabaseSize(kDB3)); |
| 405 tracker->DatabaseClosed(kOrigin1, kDB3); | 381 tracker->DatabaseClosed(kOrigin1, kDB3); |
| 406 | 382 |
| 407 // Delete a database and make sure the space used by that origin is updated | 383 // Delete a database and make sure the space used by that origin is updated |
| 408 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); | 384 EXPECT_TRUE(tracker->DeleteClosedDatabase(kOrigin1, kDB3)); |
| 409 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 385 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 410 EXPECT_TRUE(origin1_info); | 386 EXPECT_TRUE(origin1_info); |
| 411 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); | 387 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); |
| 412 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); | 388 EXPECT_EQ(0, origin1_info->GetDatabaseSize(kDB3)); |
| 413 | 389 |
| 414 // Get all data for all origins | 390 // Get all data for all origins |
| 415 std::vector<OriginInfo> origins_info; | 391 std::vector<OriginInfo> origins_info; |
| 416 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 392 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 417 EXPECT_EQ(size_t(2), origins_info.size()); | 393 EXPECT_EQ(size_t(2), origins_info.size()); |
| 418 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); | 394 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); |
| 419 EXPECT_EQ(1, origins_info[0].TotalSize()); | 395 EXPECT_EQ(1, origins_info[0].TotalSize()); |
| 420 EXPECT_EQ(1, origins_info[0].GetDatabaseSize(kDB1)); | 396 EXPECT_EQ(1, origins_info[0].GetDatabaseSize(kDB1)); |
| 421 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3)); | 397 EXPECT_EQ(0, origins_info[0].GetDatabaseSize(kDB3)); |
| 422 | 398 |
| 423 EXPECT_EQ(kOrigin2, origins_info[1].GetOriginIdentifier()); | 399 EXPECT_EQ(kOrigin2, origins_info[1].GetOriginIdentifier()); |
| 424 EXPECT_EQ(2, origins_info[1].TotalSize()); | 400 EXPECT_EQ(2, origins_info[1].TotalSize()); |
| 425 | 401 |
| 426 // Trying to delete an origin with databases in use should fail | 402 // Trying to delete an origin with databases in use should fail |
| 427 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 403 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 428 &database_size); | |
| 429 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1, false)); | 404 EXPECT_FALSE(tracker->DeleteOrigin(kOrigin1, false)); |
| 430 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); | 405 origin1_info = tracker->GetCachedOriginInfo(kOrigin1); |
| 431 EXPECT_TRUE(origin1_info); | 406 EXPECT_TRUE(origin1_info); |
| 432 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); | 407 EXPECT_EQ(1, origin1_info->GetDatabaseSize(kDB1)); |
| 433 tracker->DatabaseClosed(kOrigin1, kDB1); | 408 tracker->DatabaseClosed(kOrigin1, kDB1); |
| 434 | 409 |
| 435 // Delete an origin that doesn't have any database in use | 410 // Delete an origin that doesn't have any database in use |
| 436 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1, false)); | 411 EXPECT_TRUE(tracker->DeleteOrigin(kOrigin1, false)); |
| 437 origins_info.clear(); | 412 origins_info.clear(); |
| 438 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 413 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 458 new TestQuotaManagerProxy); | 433 new TestQuotaManagerProxy); |
| 459 scoped_refptr<DatabaseTracker> tracker( | 434 scoped_refptr<DatabaseTracker> tracker( |
| 460 new DatabaseTracker(temp_dir.GetPath(), false /* incognito */, NULL, | 435 new DatabaseTracker(temp_dir.GetPath(), false /* incognito */, NULL, |
| 461 test_quota_proxy.get(), NULL)); | 436 test_quota_proxy.get(), NULL)); |
| 462 EXPECT_TRUE(test_quota_proxy->registered_client_); | 437 EXPECT_TRUE(test_quota_proxy->registered_client_); |
| 463 | 438 |
| 464 // Create a database and modify it a couple of times, close it, | 439 // Create a database and modify it a couple of times, close it, |
| 465 // then delete it. Observe the tracker notifies accordingly. | 440 // then delete it. Observe the tracker notifies accordingly. |
| 466 | 441 |
| 467 int64_t database_size = 0; | 442 int64_t database_size = 0; |
| 468 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 443 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, &database_size); |
| 469 &database_size); | |
| 470 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 444 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 471 test_quota_proxy->reset(); | 445 test_quota_proxy->reset(); |
| 472 | 446 |
| 473 base::FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName)); | 447 base::FilePath db_file(tracker->GetFullDBFilePath(kOriginId, kName)); |
| 474 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 448 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| 475 EXPECT_TRUE(EnsureFileOfSize(db_file, 10)); | 449 EXPECT_TRUE(EnsureFileOfSize(db_file, 10)); |
| 476 tracker->DatabaseModified(kOriginId, kName); | 450 tracker->DatabaseModified(kOriginId, kName); |
| 477 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10)); | 451 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 10)); |
| 478 test_quota_proxy->reset(); | 452 test_quota_proxy->reset(); |
| 479 | 453 |
| 480 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 454 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 481 tracker->DatabaseModified(kOriginId, kName); | 455 tracker->DatabaseModified(kOriginId, kName); |
| 482 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90)); | 456 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 90)); |
| 483 test_quota_proxy->reset(); | 457 test_quota_proxy->reset(); |
| 484 | 458 |
| 485 tracker->DatabaseClosed(kOriginId, kName); | 459 tracker->DatabaseClosed(kOriginId, kName); |
| 486 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 460 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 487 EXPECT_EQ(net::OK, tracker->DeleteDatabase( | 461 EXPECT_EQ(net::OK, tracker->DeleteDatabase(kOriginId, kName, |
| 488 kOriginId, kName, net::CompletionCallback())); | 462 net::CompletionCallback())); |
| 489 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 463 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 490 test_quota_proxy->reset(); | 464 test_quota_proxy->reset(); |
| 491 | 465 |
| 492 // Create a database and modify it, try to delete it while open, | 466 // Create a database and modify it, try to delete it while open, |
| 493 // then close it (at which time deletion will actually occur). | 467 // then close it (at which time deletion will actually occur). |
| 494 // Observe the tracker notifies accordingly. | 468 // Observe the tracker notifies accordingly. |
| 495 | 469 |
| 496 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 470 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, &database_size); |
| 497 &database_size); | |
| 498 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 471 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 499 test_quota_proxy->reset(); | 472 test_quota_proxy->reset(); |
| 500 | 473 |
| 501 db_file = tracker->GetFullDBFilePath(kOriginId, kName); | 474 db_file = tracker->GetFullDBFilePath(kOriginId, kName); |
| 502 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 475 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| 503 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 476 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 504 tracker->DatabaseModified(kOriginId, kName); | 477 tracker->DatabaseModified(kOriginId, kName); |
| 505 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 478 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 506 test_quota_proxy->reset(); | 479 test_quota_proxy->reset(); |
| 507 | 480 |
| 508 EXPECT_EQ(net::ERR_IO_PENDING, | 481 EXPECT_EQ( |
| 509 tracker->DeleteDatabase(kOriginId, kName, | 482 net::ERR_IO_PENDING, |
| 510 net::CompletionCallback())); | 483 tracker->DeleteDatabase(kOriginId, kName, net::CompletionCallback())); |
| 511 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 484 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 512 | 485 |
| 513 tracker->DatabaseClosed(kOriginId, kName); | 486 tracker->DatabaseClosed(kOriginId, kName); |
| 514 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 487 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 515 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); | 488 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, -100)); |
| 516 test_quota_proxy->reset(); | 489 test_quota_proxy->reset(); |
| 517 | 490 |
| 518 // Create a database and up the file size without telling | 491 // Create a database and up the file size without telling |
| 519 // the tracker about the modification, than simulate a | 492 // the tracker about the modification, than simulate a |
| 520 // a renderer crash. | 493 // a renderer crash. |
| 521 // Observe the tracker notifies accordingly. | 494 // Observe the tracker notifies accordingly. |
| 522 | 495 |
| 523 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 496 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, &database_size); |
| 524 &database_size); | |
| 525 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); | 497 EXPECT_TRUE(test_quota_proxy->WasAccessNotified(kOrigin)); |
| 526 test_quota_proxy->reset(); | 498 test_quota_proxy->reset(); |
| 527 db_file = tracker->GetFullDBFilePath(kOriginId, kName); | 499 db_file = tracker->GetFullDBFilePath(kOriginId, kName); |
| 528 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 500 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| 529 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); | 501 EXPECT_TRUE(EnsureFileOfSize(db_file, 100)); |
| 530 DatabaseConnections crashed_renderer_connections; | 502 DatabaseConnections crashed_renderer_connections; |
| 531 crashed_renderer_connections.AddConnection(kOriginId, kName); | 503 crashed_renderer_connections.AddConnection(kOriginId, kName); |
| 532 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 504 EXPECT_FALSE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| 533 tracker->CloseDatabases(crashed_renderer_connections); | 505 tracker->CloseDatabases(crashed_renderer_connections); |
| 534 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); | 506 EXPECT_TRUE(test_quota_proxy->WasModificationNotified(kOrigin, 100)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 556 base::FilePath origin2_db_dir; | 528 base::FilePath origin2_db_dir; |
| 557 { | 529 { |
| 558 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 530 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 559 new MockSpecialStoragePolicy; | 531 new MockSpecialStoragePolicy; |
| 560 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); | 532 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
| 561 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( | 533 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 562 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, | 534 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, |
| 563 base::ThreadTaskRunnerHandle::Get().get())); | 535 base::ThreadTaskRunnerHandle::Get().get())); |
| 564 | 536 |
| 565 // Open two new databases. | 537 // Open two new databases. |
| 566 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 538 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 567 &database_size); | |
| 568 EXPECT_EQ(0, database_size); | 539 EXPECT_EQ(0, database_size); |
| 569 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 540 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, &database_size); |
| 570 &database_size); | |
| 571 EXPECT_EQ(0, database_size); | 541 EXPECT_EQ(0, database_size); |
| 572 | 542 |
| 573 // Write some data to each file. | 543 // Write some data to each file. |
| 574 base::FilePath db_file; | 544 base::FilePath db_file; |
| 575 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); | 545 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); |
| 576 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 546 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| 577 EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); | 547 EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); |
| 578 | 548 |
| 579 db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); | 549 db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); |
| 580 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 550 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 598 scoped_refptr<DatabaseTracker> tracker( | 568 scoped_refptr<DatabaseTracker> tracker( |
| 599 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); | 569 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); |
| 600 | 570 |
| 601 // Get all data for all origins. | 571 // Get all data for all origins. |
| 602 std::vector<OriginInfo> origins_info; | 572 std::vector<OriginInfo> origins_info; |
| 603 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 573 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 604 // kOrigin1 was not session-only, so it survived. kOrigin2 was session-only | 574 // kOrigin1 was not session-only, so it survived. kOrigin2 was session-only |
| 605 // and it got deleted. | 575 // and it got deleted. |
| 606 EXPECT_EQ(size_t(1), origins_info.size()); | 576 EXPECT_EQ(size_t(1), origins_info.size()); |
| 607 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); | 577 EXPECT_EQ(kOrigin1, origins_info[0].GetOriginIdentifier()); |
| 608 EXPECT_TRUE( | 578 EXPECT_TRUE(base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| 609 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); | |
| 610 EXPECT_EQ(base::FilePath(), tracker->GetFullDBFilePath(kOrigin2, kDB2)); | 579 EXPECT_EQ(base::FilePath(), tracker->GetFullDBFilePath(kOrigin2, kDB2)); |
| 611 | 580 |
| 612 // The origin directory of kOrigin1 remains, but the origin directory of | 581 // The origin directory of kOrigin1 remains, but the origin directory of |
| 613 // kOrigin2 is deleted. | 582 // kOrigin2 is deleted. |
| 614 EXPECT_TRUE(base::PathExists(origin1_db_dir)); | 583 EXPECT_TRUE(base::PathExists(origin1_db_dir)); |
| 615 EXPECT_FALSE(base::PathExists(origin2_db_dir)); | 584 EXPECT_FALSE(base::PathExists(origin2_db_dir)); |
| 616 } | 585 } |
| 617 | 586 |
| 618 static void DatabaseTrackerSetForceKeepSessionState() { | 587 static void DatabaseTrackerSetForceKeepSessionState() { |
| 619 int64_t database_size = 0; | 588 int64_t database_size = 0; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 634 { | 603 { |
| 635 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = | 604 scoped_refptr<MockSpecialStoragePolicy> special_storage_policy = |
| 636 new MockSpecialStoragePolicy; | 605 new MockSpecialStoragePolicy; |
| 637 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); | 606 special_storage_policy->AddSessionOnly(GURL(kOrigin2Url)); |
| 638 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( | 607 scoped_refptr<DatabaseTracker> tracker(new DatabaseTracker( |
| 639 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, | 608 temp_dir.GetPath(), false, special_storage_policy.get(), NULL, |
| 640 base::ThreadTaskRunnerHandle::Get().get())); | 609 base::ThreadTaskRunnerHandle::Get().get())); |
| 641 tracker->SetForceKeepSessionState(); | 610 tracker->SetForceKeepSessionState(); |
| 642 | 611 |
| 643 // Open two new databases. | 612 // Open two new databases. |
| 644 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, | 613 tracker->DatabaseOpened(kOrigin1, kDB1, kDescription, 0, &database_size); |
| 645 &database_size); | |
| 646 EXPECT_EQ(0, database_size); | 614 EXPECT_EQ(0, database_size); |
| 647 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, | 615 tracker->DatabaseOpened(kOrigin2, kDB2, kDescription, 0, &database_size); |
| 648 &database_size); | |
| 649 EXPECT_EQ(0, database_size); | 616 EXPECT_EQ(0, database_size); |
| 650 | 617 |
| 651 // Write some data to each file. | 618 // Write some data to each file. |
| 652 base::FilePath db_file; | 619 base::FilePath db_file; |
| 653 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); | 620 db_file = tracker->GetFullDBFilePath(kOrigin1, kDB1); |
| 654 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 621 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| 655 EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); | 622 EXPECT_TRUE(EnsureFileOfSize(db_file, 1)); |
| 656 | 623 |
| 657 db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); | 624 db_file = tracker->GetFullDBFilePath(kOrigin2, kDB2); |
| 658 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); | 625 EXPECT_TRUE(base::CreateDirectory(db_file.DirName())); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 674 | 641 |
| 675 // At this point, the database tracker should be gone. Create a new one. | 642 // At this point, the database tracker should be gone. Create a new one. |
| 676 scoped_refptr<DatabaseTracker> tracker( | 643 scoped_refptr<DatabaseTracker> tracker( |
| 677 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); | 644 new DatabaseTracker(temp_dir.GetPath(), false, NULL, NULL, NULL)); |
| 678 | 645 |
| 679 // Get all data for all origins. | 646 // Get all data for all origins. |
| 680 std::vector<OriginInfo> origins_info; | 647 std::vector<OriginInfo> origins_info; |
| 681 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); | 648 EXPECT_TRUE(tracker->GetAllOriginsInfo(&origins_info)); |
| 682 // No origins were deleted. | 649 // No origins were deleted. |
| 683 EXPECT_EQ(size_t(2), origins_info.size()); | 650 EXPECT_EQ(size_t(2), origins_info.size()); |
| 684 EXPECT_TRUE( | 651 EXPECT_TRUE(base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); |
| 685 base::PathExists(tracker->GetFullDBFilePath(kOrigin1, kDB1))); | 652 EXPECT_TRUE(base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); |
| 686 EXPECT_TRUE( | |
| 687 base::PathExists(tracker->GetFullDBFilePath(kOrigin2, kDB2))); | |
| 688 | 653 |
| 689 EXPECT_TRUE(base::PathExists(origin1_db_dir)); | 654 EXPECT_TRUE(base::PathExists(origin1_db_dir)); |
| 690 EXPECT_TRUE(base::PathExists(origin2_db_dir)); | 655 EXPECT_TRUE(base::PathExists(origin2_db_dir)); |
| 691 } | 656 } |
| 692 | 657 |
| 693 static void EmptyDatabaseNameIsValid() { | 658 static void EmptyDatabaseNameIsValid() { |
| 694 const GURL kOrigin(kOrigin1Url); | 659 const GURL kOrigin(kOrigin1Url); |
| 695 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); | 660 const std::string kOriginId = storage::GetIdentifierFromOrigin(kOrigin); |
| 696 const base::string16 kEmptyName; | 661 const base::string16 kEmptyName; |
| 697 const base::string16 kDescription(ASCIIToUTF16("description")); | 662 const base::string16 kDescription(ASCIIToUTF16("description")); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 | 721 |
| 757 // Verify does no harm when there is no such database. | 722 // Verify does no harm when there is no such database. |
| 758 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); | 723 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); |
| 759 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); | 724 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); |
| 760 EXPECT_FALSE(observer.DidReceiveNewNotification()); | 725 EXPECT_FALSE(observer.DidReceiveNewNotification()); |
| 761 | 726 |
| 762 // -------------------------------------------------------- | 727 // -------------------------------------------------------- |
| 763 // Create a record of a database in the tracker db and create | 728 // Create a record of a database in the tracker db and create |
| 764 // a spoof_db_file on disk in the expected location. | 729 // a spoof_db_file on disk in the expected location. |
| 765 int64_t database_size = 0; | 730 int64_t database_size = 0; |
| 766 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 731 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, &database_size); |
| 767 &database_size); | |
| 768 base::FilePath spoof_db_file = tracker->GetFullDBFilePath(kOriginId, kName); | 732 base::FilePath spoof_db_file = tracker->GetFullDBFilePath(kOriginId, kName); |
| 769 EXPECT_FALSE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); | 733 EXPECT_FALSE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); |
| 770 EXPECT_TRUE(base::CreateDirectory(spoof_db_file.DirName())); | 734 EXPECT_TRUE(base::CreateDirectory(spoof_db_file.DirName())); |
| 771 EXPECT_TRUE(EnsureFileOfSize(spoof_db_file, 1)); | 735 EXPECT_TRUE(EnsureFileOfSize(spoof_db_file, 1)); |
| 772 | 736 |
| 773 // Verify does no harm with a non-error is reported. | 737 // Verify does no harm with a non-error is reported. |
| 774 tracker->HandleSqliteError(kOriginId, kName, SQLITE_OK); | 738 tracker->HandleSqliteError(kOriginId, kName, SQLITE_OK); |
| 775 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); | 739 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); |
| 776 EXPECT_FALSE(observer.DidReceiveNewNotification()); | 740 EXPECT_FALSE(observer.DidReceiveNewNotification()); |
| 777 | 741 |
| 778 // Verify that with a connection open, the db is scheduled for deletion, | 742 // Verify that with a connection open, the db is scheduled for deletion, |
| 779 // but that the file still exists. | 743 // but that the file still exists. |
| 780 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); | 744 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); |
| 781 EXPECT_TRUE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); | 745 EXPECT_TRUE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); |
| 782 EXPECT_TRUE(observer.DidReceiveNewNotification()); | 746 EXPECT_TRUE(observer.DidReceiveNewNotification()); |
| 783 EXPECT_TRUE(base::PathExists(spoof_db_file)); | 747 EXPECT_TRUE(base::PathExists(spoof_db_file)); |
| 784 | 748 |
| 785 // Verify that once closed, the file is deleted and the record in the | 749 // Verify that once closed, the file is deleted and the record in the |
| 786 // tracker db is removed. | 750 // tracker db is removed. |
| 787 tracker->DatabaseClosed(kOriginId, kName); | 751 tracker->DatabaseClosed(kOriginId, kName); |
| 788 EXPECT_FALSE(base::PathExists(spoof_db_file)); | 752 EXPECT_FALSE(base::PathExists(spoof_db_file)); |
| 789 EXPECT_TRUE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); | 753 EXPECT_TRUE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); |
| 790 | 754 |
| 791 // -------------------------------------------------------- | 755 // -------------------------------------------------------- |
| 792 // Create another record of a database in the tracker db and create | 756 // Create another record of a database in the tracker db and create |
| 793 // a spoof_db_file on disk in the expected location. | 757 // a spoof_db_file on disk in the expected location. |
| 794 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, | 758 tracker->DatabaseOpened(kOriginId, kName, kDescription, 0, &database_size); |
| 795 &database_size); | 759 base::FilePath spoof_db_file2 = |
| 796 base::FilePath spoof_db_file2 = tracker->GetFullDBFilePath(kOriginId, | 760 tracker->GetFullDBFilePath(kOriginId, kName); |
| 797 kName); | |
| 798 EXPECT_FALSE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); | 761 EXPECT_FALSE(tracker->GetFullDBFilePath(kOriginId, kName).empty()); |
| 799 EXPECT_NE(spoof_db_file, spoof_db_file2); | 762 EXPECT_NE(spoof_db_file, spoof_db_file2); |
| 800 EXPECT_TRUE(base::CreateDirectory(spoof_db_file2.DirName())); | 763 EXPECT_TRUE(base::CreateDirectory(spoof_db_file2.DirName())); |
| 801 EXPECT_TRUE(EnsureFileOfSize(spoof_db_file2, 1)); | 764 EXPECT_TRUE(EnsureFileOfSize(spoof_db_file2, 1)); |
| 802 | 765 |
| 803 // Verify that with no connection open, the db is deleted immediately. | 766 // Verify that with no connection open, the db is deleted immediately. |
| 804 tracker->DatabaseClosed(kOriginId, kName); | 767 tracker->DatabaseClosed(kOriginId, kName); |
| 805 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); | 768 tracker->HandleSqliteError(kOriginId, kName, SQLITE_CORRUPT); |
| 806 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); | 769 EXPECT_FALSE(tracker->IsDatabaseScheduledForDeletion(kOriginId, kName)); |
| 807 EXPECT_FALSE(observer.DidReceiveNewNotification()); | 770 EXPECT_FALSE(observer.DidReceiveNewNotification()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 846 | 809 |
| 847 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { | 810 TEST(DatabaseTrackerTest, EmptyDatabaseNameIsValid) { |
| 848 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); | 811 DatabaseTracker_TestHelper_Test::EmptyDatabaseNameIsValid(); |
| 849 } | 812 } |
| 850 | 813 |
| 851 TEST(DatabaseTrackerTest, HandleSqliteError) { | 814 TEST(DatabaseTrackerTest, HandleSqliteError) { |
| 852 DatabaseTracker_TestHelper_Test::HandleSqliteError(); | 815 DatabaseTracker_TestHelper_Test::HandleSqliteError(); |
| 853 } | 816 } |
| 854 | 817 |
| 855 } // namespace content | 818 } // namespace content |
| OLD | NEW |