| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
| 7 #include "base/files/scoped_temp_dir.h" |
| 7 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 8 #include "base/message_loop_proxy.h" | 9 #include "base/message_loop_proxy.h" |
| 9 #include "base/scoped_temp_dir.h" | |
| 10 #include "base/threading/sequenced_worker_pool.h" | 10 #include "base/threading/sequenced_worker_pool.h" |
| 11 #include "base/time.h" | 11 #include "base/time.h" |
| 12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "webkit/dom_storage/dom_storage_area.h" | 14 #include "webkit/dom_storage/dom_storage_area.h" |
| 15 #include "webkit/dom_storage/dom_storage_database.h" | 15 #include "webkit/dom_storage/dom_storage_database.h" |
| 16 #include "webkit/dom_storage/dom_storage_database_adapter.h" | 16 #include "webkit/dom_storage/dom_storage_database_adapter.h" |
| 17 #include "webkit/dom_storage/dom_storage_task_runner.h" | 17 #include "webkit/dom_storage/dom_storage_task_runner.h" |
| 18 #include "webkit/dom_storage/dom_storage_types.h" | 18 #include "webkit/dom_storage/dom_storage_types.h" |
| 19 #include "webkit/dom_storage/local_storage_database_adapter.h" | 19 #include "webkit/dom_storage/local_storage_database_adapter.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 EXPECT_EQ(0u, area->Length()); | 117 EXPECT_EQ(0u, area->Length()); |
| 118 EXPECT_TRUE(area->Key(0).is_null()); | 118 EXPECT_TRUE(area->Key(0).is_null()); |
| 119 EXPECT_TRUE(area->GetItem(kKey).is_null()); | 119 EXPECT_TRUE(area->GetItem(kKey).is_null()); |
| 120 EXPECT_FALSE(area->SetItem(kKey, kValue, &old_nullable_value)); | 120 EXPECT_FALSE(area->SetItem(kKey, kValue, &old_nullable_value)); |
| 121 EXPECT_FALSE(area->RemoveItem(kKey, &old_value)); | 121 EXPECT_FALSE(area->RemoveItem(kKey, &old_value)); |
| 122 EXPECT_FALSE(area->Clear()); | 122 EXPECT_FALSE(area->Clear()); |
| 123 } | 123 } |
| 124 | 124 |
| 125 TEST_F(DomStorageAreaTest, BackingDatabaseOpened) { | 125 TEST_F(DomStorageAreaTest, BackingDatabaseOpened) { |
| 126 const int64 kSessionStorageNamespaceId = kLocalStorageNamespaceId + 1; | 126 const int64 kSessionStorageNamespaceId = kLocalStorageNamespaceId + 1; |
| 127 ScopedTempDir temp_dir; | 127 base::ScopedTempDir temp_dir; |
| 128 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 128 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 129 const FilePath kExpectedOriginFilePath = temp_dir.path().Append( | 129 const FilePath kExpectedOriginFilePath = temp_dir.path().Append( |
| 130 DomStorageArea::DatabaseFileNameFromOrigin(kOrigin)); | 130 DomStorageArea::DatabaseFileNameFromOrigin(kOrigin)); |
| 131 | 131 |
| 132 // No directory, backing should be null. | 132 // No directory, backing should be null. |
| 133 { | 133 { |
| 134 scoped_refptr<DomStorageArea> area( | 134 scoped_refptr<DomStorageArea> area( |
| 135 new DomStorageArea(kOrigin, FilePath(), NULL)); | 135 new DomStorageArea(kOrigin, FilePath(), NULL)); |
| 136 EXPECT_EQ(NULL, area->backing_.get()); | 136 EXPECT_EQ(NULL, area->backing_.get()); |
| 137 EXPECT_TRUE(area->is_initial_import_done_); | 137 EXPECT_TRUE(area->is_initial_import_done_); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 | 195 |
| 196 // Verify the content made it to the in memory database. | 196 // Verify the content made it to the in memory database. |
| 197 ValuesMap values; | 197 ValuesMap values; |
| 198 area->backing_->ReadAllValues(&values); | 198 area->backing_->ReadAllValues(&values); |
| 199 EXPECT_EQ(1u, values.size()); | 199 EXPECT_EQ(1u, values.size()); |
| 200 EXPECT_EQ(kValue, values[kKey].string()); | 200 EXPECT_EQ(kValue, values[kKey].string()); |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 TEST_F(DomStorageAreaTest, CommitTasks) { | 204 TEST_F(DomStorageAreaTest, CommitTasks) { |
| 205 ScopedTempDir temp_dir; | 205 base::ScopedTempDir temp_dir; |
| 206 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 206 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 207 | 207 |
| 208 scoped_refptr<DomStorageArea> area( | 208 scoped_refptr<DomStorageArea> area( |
| 209 new DomStorageArea(kOrigin, | 209 new DomStorageArea(kOrigin, |
| 210 temp_dir.path(), | 210 temp_dir.path(), |
| 211 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); | 211 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); |
| 212 // Inject an in-memory db to speed up the test. | 212 // Inject an in-memory db to speed up the test. |
| 213 area->backing_.reset(new LocalStorageDatabaseAdapter()); | 213 area->backing_.reset(new LocalStorageDatabaseAdapter()); |
| 214 | 214 |
| 215 // Unrelated to commits, but while we're here, see that querying Length() | 215 // Unrelated to commits, but while we're here, see that querying Length() |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 EXPECT_FALSE(area->HasUncommittedChanges()); | 273 EXPECT_FALSE(area->HasUncommittedChanges()); |
| 274 // Verify the changes made it to the database. | 274 // Verify the changes made it to the database. |
| 275 values.clear(); | 275 values.clear(); |
| 276 area->backing_->ReadAllValues(&values); | 276 area->backing_->ReadAllValues(&values); |
| 277 EXPECT_EQ(2u, values.size()); | 277 EXPECT_EQ(2u, values.size()); |
| 278 EXPECT_EQ(kValue, values[kKey].string()); | 278 EXPECT_EQ(kValue, values[kKey].string()); |
| 279 EXPECT_EQ(kValue2, values[kKey2].string()); | 279 EXPECT_EQ(kValue2, values[kKey2].string()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 TEST_F(DomStorageAreaTest, CommitChangesAtShutdown) { | 282 TEST_F(DomStorageAreaTest, CommitChangesAtShutdown) { |
| 283 ScopedTempDir temp_dir; | 283 base::ScopedTempDir temp_dir; |
| 284 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 284 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 285 scoped_refptr<DomStorageArea> area( | 285 scoped_refptr<DomStorageArea> area( |
| 286 new DomStorageArea(kOrigin, | 286 new DomStorageArea(kOrigin, |
| 287 temp_dir.path(), | 287 temp_dir.path(), |
| 288 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); | 288 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); |
| 289 | 289 |
| 290 // Inject an in-memory db to speed up the test and also to verify | 290 // Inject an in-memory db to speed up the test and also to verify |
| 291 // the final changes are commited in it's dtor. | 291 // the final changes are commited in it's dtor. |
| 292 static_cast<LocalStorageDatabaseAdapter*>(area->backing_.get())->db_.reset( | 292 static_cast<LocalStorageDatabaseAdapter*>(area->backing_.get())->db_.reset( |
| 293 new VerifyChangesCommittedDatabase()); | 293 new VerifyChangesCommittedDatabase()); |
| 294 | 294 |
| 295 ValuesMap values; | 295 ValuesMap values; |
| 296 NullableString16 old_value; | 296 NullableString16 old_value; |
| 297 EXPECT_TRUE(area->SetItem(kKey, kValue, &old_value)); | 297 EXPECT_TRUE(area->SetItem(kKey, kValue, &old_value)); |
| 298 EXPECT_TRUE(area->HasUncommittedChanges()); | 298 EXPECT_TRUE(area->HasUncommittedChanges()); |
| 299 area->backing_->ReadAllValues(&values); | 299 area->backing_->ReadAllValues(&values); |
| 300 EXPECT_TRUE(values.empty()); // not committed yet | 300 EXPECT_TRUE(values.empty()); // not committed yet |
| 301 area->Shutdown(); | 301 area->Shutdown(); |
| 302 MessageLoop::current()->RunAllPending(); | 302 MessageLoop::current()->RunAllPending(); |
| 303 EXPECT_TRUE(area->HasOneRef()); | 303 EXPECT_TRUE(area->HasOneRef()); |
| 304 EXPECT_FALSE(area->backing_.get()); | 304 EXPECT_FALSE(area->backing_.get()); |
| 305 // The VerifyChangesCommittedDatabase destructor verifies values | 305 // The VerifyChangesCommittedDatabase destructor verifies values |
| 306 // were committed. | 306 // were committed. |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST_F(DomStorageAreaTest, DeleteOrigin) { | 309 TEST_F(DomStorageAreaTest, DeleteOrigin) { |
| 310 ScopedTempDir temp_dir; | 310 base::ScopedTempDir temp_dir; |
| 311 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 311 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 312 scoped_refptr<DomStorageArea> area( | 312 scoped_refptr<DomStorageArea> area( |
| 313 new DomStorageArea(kOrigin, | 313 new DomStorageArea(kOrigin, |
| 314 temp_dir.path(), | 314 temp_dir.path(), |
| 315 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); | 315 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); |
| 316 | 316 |
| 317 // This test puts files on disk. | 317 // This test puts files on disk. |
| 318 FilePath db_file_path = static_cast<LocalStorageDatabaseAdapter*>( | 318 FilePath db_file_path = static_cast<LocalStorageDatabaseAdapter*>( |
| 319 area->backing_.get())->db_->file_path(); | 319 area->backing_.get())->db_->file_path(); |
| 320 FilePath db_journal_file_path = | 320 FilePath db_journal_file_path = |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 EXPECT_FALSE(area->HasUncommittedChanges()); | 361 EXPECT_FALSE(area->HasUncommittedChanges()); |
| 362 // Since the area had uncommitted changes at the time delete | 362 // Since the area had uncommitted changes at the time delete |
| 363 // was called, the file will linger until the shutdown time. | 363 // was called, the file will linger until the shutdown time. |
| 364 EXPECT_TRUE(file_util::PathExists(db_file_path)); | 364 EXPECT_TRUE(file_util::PathExists(db_file_path)); |
| 365 area->Shutdown(); | 365 area->Shutdown(); |
| 366 MessageLoop::current()->RunAllPending(); | 366 MessageLoop::current()->RunAllPending(); |
| 367 EXPECT_FALSE(file_util::PathExists(db_file_path)); | 367 EXPECT_FALSE(file_util::PathExists(db_file_path)); |
| 368 } | 368 } |
| 369 | 369 |
| 370 TEST_F(DomStorageAreaTest, PurgeMemory) { | 370 TEST_F(DomStorageAreaTest, PurgeMemory) { |
| 371 ScopedTempDir temp_dir; | 371 base::ScopedTempDir temp_dir; |
| 372 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 372 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 373 scoped_refptr<DomStorageArea> area( | 373 scoped_refptr<DomStorageArea> area( |
| 374 new DomStorageArea(kOrigin, | 374 new DomStorageArea(kOrigin, |
| 375 temp_dir.path(), | 375 temp_dir.path(), |
| 376 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); | 376 new MockDomStorageTaskRunner(base::MessageLoopProxy::current()))); |
| 377 | 377 |
| 378 // Inject an in-memory db to speed up the test. | 378 // Inject an in-memory db to speed up the test. |
| 379 area->backing_.reset(new LocalStorageDatabaseAdapter()); | 379 area->backing_.reset(new LocalStorageDatabaseAdapter()); |
| 380 | 380 |
| 381 // Unowned ptrs we use to verify that 'purge' has happened. | 381 // Unowned ptrs we use to verify that 'purge' has happened. |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 EXPECT_EQ( | 463 EXPECT_EQ( |
| 464 FilePath().AppendASCII("-journal"), | 464 FilePath().AppendASCII("-journal"), |
| 465 DomStorageDatabase::GetJournalFilePath(FilePath())); | 465 DomStorageDatabase::GetJournalFilePath(FilePath())); |
| 466 EXPECT_EQ( | 466 EXPECT_EQ( |
| 467 FilePath().AppendASCII(".extensiononly-journal"), | 467 FilePath().AppendASCII(".extensiononly-journal"), |
| 468 DomStorageDatabase::GetJournalFilePath( | 468 DomStorageDatabase::GetJournalFilePath( |
| 469 FilePath().AppendASCII(".extensiononly"))); | 469 FilePath().AppendASCII(".extensiononly"))); |
| 470 } | 470 } |
| 471 | 471 |
| 472 } // namespace dom_storage | 472 } // namespace dom_storage |
| OLD | NEW |