| 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 | 5 |
| 6 #include "webkit/browser/dom_storage/session_storage_database.h" | 6 #include "content/browser/dom_storage/session_storage_database.h" |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| 11 | 11 |
| 12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
| 13 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 17 #include "content/common/dom_storage/dom_storage_types.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 19 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 19 #include "third_party/leveldatabase/src/include/leveldb/iterator.h" | 20 #include "third_party/leveldatabase/src/include/leveldb/iterator.h" |
| 20 #include "third_party/leveldatabase/src/include/leveldb/options.h" | 21 #include "third_party/leveldatabase/src/include/leveldb/options.h" |
| 21 #include "url/gurl.h" | 22 #include "url/gurl.h" |
| 22 #include "webkit/common/dom_storage/dom_storage_types.h" | |
| 23 | 23 |
| 24 namespace dom_storage { | 24 namespace content { |
| 25 | 25 |
| 26 class SessionStorageDatabaseTest : public testing::Test { | 26 class SessionStorageDatabaseTest : public testing::Test { |
| 27 public: | 27 public: |
| 28 SessionStorageDatabaseTest(); | 28 SessionStorageDatabaseTest(); |
| 29 virtual ~SessionStorageDatabaseTest(); | 29 virtual ~SessionStorageDatabaseTest(); |
| 30 virtual void SetUp() OVERRIDE; | 30 virtual void SetUp() OVERRIDE; |
| 31 | 31 |
| 32 protected: | 32 protected: |
| 33 typedef std::map<std::string, std::string> DataMap; | 33 typedef std::map<std::string, std::string> DataMap; |
| 34 | 34 |
| 35 // Helpers. | 35 // Helpers. |
| 36 static bool IsNamespaceKey(const std::string& key, | 36 static bool IsNamespaceKey(const std::string& key, |
| 37 std::string* namespace_id); | 37 std::string* namespace_id); |
| 38 static bool IsNamespaceOriginKey(const std::string& key, | 38 static bool IsNamespaceOriginKey(const std::string& key, |
| 39 std::string* namespace_id); | 39 std::string* namespace_id); |
| 40 static bool IsMapRefCountKey(const std::string& key, | 40 static bool IsMapRefCountKey(const std::string& key, |
| 41 int64* map_id); | 41 int64* map_id); |
| 42 static bool IsMapValueKey(const std::string& key, | 42 static bool IsMapValueKey(const std::string& key, |
| 43 int64* map_id); | 43 int64* map_id); |
| 44 void ResetDatabase(); | 44 void ResetDatabase(); |
| 45 void ReadData(DataMap* data) const; | 45 void ReadData(DataMap* data) const; |
| 46 void CheckDatabaseConsistency() const; | 46 void CheckDatabaseConsistency() const; |
| 47 void CheckEmptyDatabase() const; | 47 void CheckEmptyDatabase() const; |
| 48 void DumpData() const; | 48 void DumpData() const; |
| 49 void CheckAreaData(const std::string& namespace_id, | 49 void CheckAreaData(const std::string& namespace_id, |
| 50 const GURL& origin, | 50 const GURL& origin, |
| 51 const ValuesMap& reference) const; | 51 const DOMStorageValuesMap& reference) const; |
| 52 void CompareValuesMaps(const ValuesMap& map1, const ValuesMap& map2) const; | 52 void CompareValuesMaps(const DOMStorageValuesMap& map1, |
| 53 const DOMStorageValuesMap& map2) const; |
| 53 void CheckNamespaceIds( | 54 void CheckNamespaceIds( |
| 54 const std::set<std::string>& expected_namespace_ids) const; | 55 const std::set<std::string>& expected_namespace_ids) const; |
| 55 void CheckOrigins( | 56 void CheckOrigins( |
| 56 const std::string& namespace_id, | 57 const std::string& namespace_id, |
| 57 const std::set<GURL>& expected_origins) const; | 58 const std::set<GURL>& expected_origins) const; |
| 58 std::string GetMapForArea(const std::string& namespace_id, | 59 std::string GetMapForArea(const std::string& namespace_id, |
| 59 const GURL& origin) const; | 60 const GURL& origin) const; |
| 60 int64 GetMapRefCount(const std::string& map_id) const; | 61 int64 GetMapRefCount(const std::string& map_id) const; |
| 61 | 62 |
| 62 base::ScopedTempDir temp_dir_; | 63 base::ScopedTempDir temp_dir_; |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 LOG(WARNING) << it->key().ToString() << ": " << value; | 310 LOG(WARNING) << it->key().ToString() << ": " << value; |
| 310 } else { | 311 } else { |
| 311 LOG(WARNING) << it->key().ToString() << ": " << it->value().ToString(); | 312 LOG(WARNING) << it->key().ToString() << ": " << it->value().ToString(); |
| 312 } | 313 } |
| 313 } | 314 } |
| 314 LOG(WARNING) << "----"; | 315 LOG(WARNING) << "----"; |
| 315 } | 316 } |
| 316 | 317 |
| 317 void SessionStorageDatabaseTest::CheckAreaData( | 318 void SessionStorageDatabaseTest::CheckAreaData( |
| 318 const std::string& namespace_id, const GURL& origin, | 319 const std::string& namespace_id, const GURL& origin, |
| 319 const ValuesMap& reference) const { | 320 const DOMStorageValuesMap& reference) const { |
| 320 ValuesMap values; | 321 DOMStorageValuesMap values; |
| 321 db_->ReadAreaValues(namespace_id, origin, &values); | 322 db_->ReadAreaValues(namespace_id, origin, &values); |
| 322 CompareValuesMaps(values, reference); | 323 CompareValuesMaps(values, reference); |
| 323 } | 324 } |
| 324 | 325 |
| 325 void SessionStorageDatabaseTest::CompareValuesMaps( | 326 void SessionStorageDatabaseTest::CompareValuesMaps( |
| 326 const ValuesMap& map1, | 327 const DOMStorageValuesMap& map1, |
| 327 const ValuesMap& map2) const { | 328 const DOMStorageValuesMap& map2) const { |
| 328 ASSERT_EQ(map2.size(), map1.size()); | 329 ASSERT_EQ(map2.size(), map1.size()); |
| 329 for (ValuesMap::const_iterator it = map1.begin(); it != map1.end(); ++it) { | 330 for (DOMStorageValuesMap::const_iterator it = map1.begin(); |
| 331 it != map1.end(); ++it) { |
| 330 base::string16 key = it->first; | 332 base::string16 key = it->first; |
| 331 ASSERT_TRUE(map2.find(key) != map2.end()); | 333 ASSERT_TRUE(map2.find(key) != map2.end()); |
| 332 base::NullableString16 val1 = it->second; | 334 base::NullableString16 val1 = it->second; |
| 333 base::NullableString16 val2 = map2.find(key)->second; | 335 base::NullableString16 val2 = map2.find(key)->second; |
| 334 EXPECT_EQ(val2.is_null(), val1.is_null()); | 336 EXPECT_EQ(val2.is_null(), val1.is_null()); |
| 335 EXPECT_EQ(val2.string(), val1.string()); | 337 EXPECT_EQ(val2.string(), val1.string()); |
| 336 } | 338 } |
| 337 } | 339 } |
| 338 | 340 |
| 339 void SessionStorageDatabaseTest::CheckNamespaceIds( | 341 void SessionStorageDatabaseTest::CheckNamespaceIds( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 return ref_count; | 381 return ref_count; |
| 380 } | 382 } |
| 381 | 383 |
| 382 TEST_F(SessionStorageDatabaseTest, EmptyDatabaseSanityCheck) { | 384 TEST_F(SessionStorageDatabaseTest, EmptyDatabaseSanityCheck) { |
| 383 // An empty database should be valid. | 385 // An empty database should be valid. |
| 384 CheckDatabaseConsistency(); | 386 CheckDatabaseConsistency(); |
| 385 } | 387 } |
| 386 | 388 |
| 387 TEST_F(SessionStorageDatabaseTest, WriteDataForOneOrigin) { | 389 TEST_F(SessionStorageDatabaseTest, WriteDataForOneOrigin) { |
| 388 // Keep track on what the values should look like. | 390 // Keep track on what the values should look like. |
| 389 ValuesMap reference; | 391 DOMStorageValuesMap reference; |
| 390 // Write data. | 392 // Write data. |
| 391 { | 393 { |
| 392 ValuesMap changes; | 394 DOMStorageValuesMap changes; |
| 393 changes[kKey1] = kValue1; | 395 changes[kKey1] = kValue1; |
| 394 changes[kKey2] = kValue2; | 396 changes[kKey2] = kValue2; |
| 395 changes[kKey3] = kValue3; | 397 changes[kKey3] = kValue3; |
| 396 reference[kKey1] = kValue1; | 398 reference[kKey1] = kValue1; |
| 397 reference[kKey2] = kValue2; | 399 reference[kKey2] = kValue2; |
| 398 reference[kKey3] = kValue3; | 400 reference[kKey3] = kValue3; |
| 399 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); | 401 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); |
| 400 } | 402 } |
| 401 CheckDatabaseConsistency(); | 403 CheckDatabaseConsistency(); |
| 402 CheckAreaData(kNamespace1, kOrigin1, reference); | 404 CheckAreaData(kNamespace1, kOrigin1, reference); |
| 403 | 405 |
| 404 // Overwrite and delete values. | 406 // Overwrite and delete values. |
| 405 { | 407 { |
| 406 ValuesMap changes; | 408 DOMStorageValuesMap changes; |
| 407 changes[kKey1] = kValue4; | 409 changes[kKey1] = kValue4; |
| 408 changes[kKey3] = kValueNull; | 410 changes[kKey3] = kValueNull; |
| 409 reference[kKey1] = kValue4; | 411 reference[kKey1] = kValue4; |
| 410 reference.erase(kKey3); | 412 reference.erase(kKey3); |
| 411 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); | 413 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); |
| 412 } | 414 } |
| 413 CheckDatabaseConsistency(); | 415 CheckDatabaseConsistency(); |
| 414 CheckAreaData(kNamespace1, kOrigin1, reference); | 416 CheckAreaData(kNamespace1, kOrigin1, reference); |
| 415 | 417 |
| 416 // Clear data before writing. | 418 // Clear data before writing. |
| 417 { | 419 { |
| 418 ValuesMap changes; | 420 DOMStorageValuesMap changes; |
| 419 changes[kKey2] = kValue2; | 421 changes[kKey2] = kValue2; |
| 420 reference.erase(kKey1); | 422 reference.erase(kKey1); |
| 421 reference[kKey2] = kValue2; | 423 reference[kKey2] = kValue2; |
| 422 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, true, changes)); | 424 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, true, changes)); |
| 423 } | 425 } |
| 424 CheckDatabaseConsistency(); | 426 CheckDatabaseConsistency(); |
| 425 CheckAreaData(kNamespace1, kOrigin1, reference); | 427 CheckAreaData(kNamespace1, kOrigin1, reference); |
| 426 } | 428 } |
| 427 | 429 |
| 428 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoOrigins) { | 430 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoOrigins) { |
| 429 // Write data. | 431 // Write data. |
| 430 ValuesMap data1; | 432 DOMStorageValuesMap data1; |
| 431 data1[kKey1] = kValue1; | 433 data1[kKey1] = kValue1; |
| 432 data1[kKey2] = kValue2; | 434 data1[kKey2] = kValue2; |
| 433 data1[kKey3] = kValue3; | 435 data1[kKey3] = kValue3; |
| 434 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 436 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 435 | 437 |
| 436 ValuesMap data2; | 438 DOMStorageValuesMap data2; |
| 437 data2[kKey1] = kValue4; | 439 data2[kKey1] = kValue4; |
| 438 data2[kKey2] = kValue1; | 440 data2[kKey2] = kValue1; |
| 439 data2[kKey3] = kValue2; | 441 data2[kKey3] = kValue2; |
| 440 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 442 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 441 | 443 |
| 442 CheckDatabaseConsistency(); | 444 CheckDatabaseConsistency(); |
| 443 CheckAreaData(kNamespace1, kOrigin1, data1); | 445 CheckAreaData(kNamespace1, kOrigin1, data1); |
| 444 CheckAreaData(kNamespace1, kOrigin2, data2); | 446 CheckAreaData(kNamespace1, kOrigin2, data2); |
| 445 } | 447 } |
| 446 | 448 |
| 447 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoNamespaces) { | 449 TEST_F(SessionStorageDatabaseTest, WriteDataForTwoNamespaces) { |
| 448 // Write data. | 450 // Write data. |
| 449 ValuesMap data11; | 451 DOMStorageValuesMap data11; |
| 450 data11[kKey1] = kValue1; | 452 data11[kKey1] = kValue1; |
| 451 data11[kKey2] = kValue2; | 453 data11[kKey2] = kValue2; |
| 452 data11[kKey3] = kValue3; | 454 data11[kKey3] = kValue3; |
| 453 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data11)); | 455 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data11)); |
| 454 ValuesMap data12; | 456 DOMStorageValuesMap data12; |
| 455 data12[kKey2] = kValue4; | 457 data12[kKey2] = kValue4; |
| 456 data12[kKey3] = kValue3; | 458 data12[kKey3] = kValue3; |
| 457 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data12)); | 459 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data12)); |
| 458 ValuesMap data21; | 460 DOMStorageValuesMap data21; |
| 459 data21[kKey1] = kValue2; | 461 data21[kKey1] = kValue2; |
| 460 data21[kKey2] = kValue4; | 462 data21[kKey2] = kValue4; |
| 461 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin1, false, data21)); | 463 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin1, false, data21)); |
| 462 ValuesMap data22; | 464 DOMStorageValuesMap data22; |
| 463 data22[kKey2] = kValue1; | 465 data22[kKey2] = kValue1; |
| 464 data22[kKey3] = kValue2; | 466 data22[kKey3] = kValue2; |
| 465 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data22)); | 467 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data22)); |
| 466 CheckDatabaseConsistency(); | 468 CheckDatabaseConsistency(); |
| 467 CheckAreaData(kNamespace1, kOrigin1, data11); | 469 CheckAreaData(kNamespace1, kOrigin1, data11); |
| 468 CheckAreaData(kNamespace1, kOrigin2, data12); | 470 CheckAreaData(kNamespace1, kOrigin2, data12); |
| 469 CheckAreaData(kNamespace2, kOrigin1, data21); | 471 CheckAreaData(kNamespace2, kOrigin1, data21); |
| 470 CheckAreaData(kNamespace2, kOrigin2, data22); | 472 CheckAreaData(kNamespace2, kOrigin2, data22); |
| 471 } | 473 } |
| 472 | 474 |
| 473 TEST_F(SessionStorageDatabaseTest, ShallowCopy) { | 475 TEST_F(SessionStorageDatabaseTest, ShallowCopy) { |
| 474 // Write data for a namespace, for 2 origins. | 476 // Write data for a namespace, for 2 origins. |
| 475 ValuesMap data1; | 477 DOMStorageValuesMap data1; |
| 476 data1[kKey1] = kValue1; | 478 data1[kKey1] = kValue1; |
| 477 data1[kKey2] = kValue2; | 479 data1[kKey2] = kValue2; |
| 478 data1[kKey3] = kValue3; | 480 data1[kKey3] = kValue3; |
| 479 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 481 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 480 ValuesMap data2; | 482 DOMStorageValuesMap data2; |
| 481 data2[kKey1] = kValue2; | 483 data2[kKey1] = kValue2; |
| 482 data2[kKey3] = kValue1; | 484 data2[kKey3] = kValue1; |
| 483 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 485 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 484 // Make a shallow copy. | 486 // Make a shallow copy. |
| 485 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 487 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 486 // Now both namespaces should have the same data. | 488 // Now both namespaces should have the same data. |
| 487 CheckDatabaseConsistency(); | 489 CheckDatabaseConsistency(); |
| 488 CheckAreaData(kNamespace1, kOrigin1, data1); | 490 CheckAreaData(kNamespace1, kOrigin1, data1); |
| 489 CheckAreaData(kNamespace1, kOrigin2, data2); | 491 CheckAreaData(kNamespace1, kOrigin2, data2); |
| 490 CheckAreaData(kNamespaceClone, kOrigin1, data1); | 492 CheckAreaData(kNamespaceClone, kOrigin1, data1); |
| 491 CheckAreaData(kNamespaceClone, kOrigin2, data2); | 493 CheckAreaData(kNamespaceClone, kOrigin2, data2); |
| 492 // Both the namespaces refer to the same maps. | 494 // Both the namespaces refer to the same maps. |
| 493 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin1), | 495 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin1), |
| 494 GetMapForArea(kNamespaceClone, kOrigin1)); | 496 GetMapForArea(kNamespaceClone, kOrigin1)); |
| 495 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), | 497 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), |
| 496 GetMapForArea(kNamespaceClone, kOrigin2)); | 498 GetMapForArea(kNamespaceClone, kOrigin2)); |
| 497 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); | 499 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); |
| 498 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); | 500 EXPECT_EQ(2, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); |
| 499 } | 501 } |
| 500 | 502 |
| 501 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) { | 503 TEST_F(SessionStorageDatabaseTest, WriteIntoShallowCopy) { |
| 502 ValuesMap data1; | 504 DOMStorageValuesMap data1; |
| 503 data1[kKey1] = kValue1; | 505 data1[kKey1] = kValue1; |
| 504 data1[kKey2] = kValue2; | 506 data1[kKey2] = kValue2; |
| 505 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 507 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 506 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 508 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 507 | 509 |
| 508 // Write data into a shallow copy. | 510 // Write data into a shallow copy. |
| 509 ValuesMap changes; | 511 DOMStorageValuesMap changes; |
| 510 ValuesMap reference; | 512 DOMStorageValuesMap reference; |
| 511 changes[kKey1] = kValueNull; | 513 changes[kKey1] = kValueNull; |
| 512 changes[kKey2] = kValue4; | 514 changes[kKey2] = kValue4; |
| 513 changes[kKey3] = kValue4; | 515 changes[kKey3] = kValue4; |
| 514 reference[kKey2] = kValue4; | 516 reference[kKey2] = kValue4; |
| 515 reference[kKey3] = kValue4; | 517 reference[kKey3] = kValue4; |
| 516 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, | 518 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, |
| 517 changes)); | 519 changes)); |
| 518 | 520 |
| 519 // Values in the original namespace were not changed. | 521 // Values in the original namespace were not changed. |
| 520 CheckAreaData(kNamespace1, kOrigin1, data1); | 522 CheckAreaData(kNamespace1, kOrigin1, data1); |
| 521 // But values in the copy were. | 523 // But values in the copy were. |
| 522 CheckAreaData(kNamespaceClone, kOrigin1, reference); | 524 CheckAreaData(kNamespaceClone, kOrigin1, reference); |
| 523 | 525 |
| 524 // The namespaces no longer refer to the same map. | 526 // The namespaces no longer refer to the same map. |
| 525 EXPECT_NE(GetMapForArea(kNamespace1, kOrigin1), | 527 EXPECT_NE(GetMapForArea(kNamespace1, kOrigin1), |
| 526 GetMapForArea(kNamespaceClone, kOrigin1)); | 528 GetMapForArea(kNamespaceClone, kOrigin1)); |
| 527 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); | 529 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); |
| 528 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespaceClone, kOrigin1))); | 530 EXPECT_EQ(1, GetMapRefCount(GetMapForArea(kNamespaceClone, kOrigin1))); |
| 529 } | 531 } |
| 530 | 532 |
| 531 TEST_F(SessionStorageDatabaseTest, ManyShallowCopies) { | 533 TEST_F(SessionStorageDatabaseTest, ManyShallowCopies) { |
| 532 // Write data for a namespace, for 2 origins. | 534 // Write data for a namespace, for 2 origins. |
| 533 ValuesMap data1; | 535 DOMStorageValuesMap data1; |
| 534 data1[kKey1] = kValue1; | 536 data1[kKey1] = kValue1; |
| 535 data1[kKey2] = kValue2; | 537 data1[kKey2] = kValue2; |
| 536 data1[kKey3] = kValue3; | 538 data1[kKey3] = kValue3; |
| 537 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 539 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 538 ValuesMap data2; | 540 DOMStorageValuesMap data2; |
| 539 data2[kKey1] = kValue2; | 541 data2[kKey1] = kValue2; |
| 540 data2[kKey3] = kValue1; | 542 data2[kKey3] = kValue1; |
| 541 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 543 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 542 | 544 |
| 543 // Make a two shallow copies. | 545 // Make a two shallow copies. |
| 544 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 546 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 545 std::string another_clone("another_cloned"); | 547 std::string another_clone("another_cloned"); |
| 546 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, another_clone)); | 548 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, another_clone)); |
| 547 | 549 |
| 548 // Make a shallow copy of a shallow copy. | 550 // Make a shallow copy of a shallow copy. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 573 GetMapForArea(clone_of_clone, kOrigin1)); | 575 GetMapForArea(clone_of_clone, kOrigin1)); |
| 574 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), | 576 EXPECT_EQ(GetMapForArea(kNamespace1, kOrigin2), |
| 575 GetMapForArea(clone_of_clone, kOrigin2)); | 577 GetMapForArea(clone_of_clone, kOrigin2)); |
| 576 | 578 |
| 577 // Check the ref counts. | 579 // Check the ref counts. |
| 578 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); | 580 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin1))); |
| 579 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); | 581 EXPECT_EQ(4, GetMapRefCount(GetMapForArea(kNamespace1, kOrigin2))); |
| 580 } | 582 } |
| 581 | 583 |
| 582 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) { | 584 TEST_F(SessionStorageDatabaseTest, DisassociateShallowCopy) { |
| 583 ValuesMap data1; | 585 DOMStorageValuesMap data1; |
| 584 data1[kKey1] = kValue1; | 586 data1[kKey1] = kValue1; |
| 585 data1[kKey2] = kValue2; | 587 data1[kKey2] = kValue2; |
| 586 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 588 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 587 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 589 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 588 | 590 |
| 589 // Disassoaciate the shallow copy. | 591 // Disassoaciate the shallow copy. |
| 590 EXPECT_TRUE(db_->DeleteArea(kNamespaceClone, kOrigin1)); | 592 EXPECT_TRUE(db_->DeleteArea(kNamespaceClone, kOrigin1)); |
| 591 CheckDatabaseConsistency(); | 593 CheckDatabaseConsistency(); |
| 592 | 594 |
| 593 // Now new data can be written to that map. | 595 // Now new data can be written to that map. |
| 594 ValuesMap reference; | 596 DOMStorageValuesMap reference; |
| 595 ValuesMap changes; | 597 DOMStorageValuesMap changes; |
| 596 changes[kKey1] = kValueNull; | 598 changes[kKey1] = kValueNull; |
| 597 changes[kKey2] = kValue4; | 599 changes[kKey2] = kValue4; |
| 598 changes[kKey3] = kValue4; | 600 changes[kKey3] = kValue4; |
| 599 reference[kKey2] = kValue4; | 601 reference[kKey2] = kValue4; |
| 600 reference[kKey3] = kValue4; | 602 reference[kKey3] = kValue4; |
| 601 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, | 603 EXPECT_TRUE(db_->CommitAreaChanges(kNamespaceClone, kOrigin1, false, |
| 602 changes)); | 604 changes)); |
| 603 | 605 |
| 604 // Values in the original map were not changed. | 606 // Values in the original map were not changed. |
| 605 CheckAreaData(kNamespace1, kOrigin1, data1); | 607 CheckAreaData(kNamespace1, kOrigin1, data1); |
| 606 | 608 |
| 607 // But values in the disassociated map were. | 609 // But values in the disassociated map were. |
| 608 CheckAreaData(kNamespaceClone, kOrigin1, reference); | 610 CheckAreaData(kNamespaceClone, kOrigin1, reference); |
| 609 } | 611 } |
| 610 | 612 |
| 611 TEST_F(SessionStorageDatabaseTest, DeleteNamespace) { | 613 TEST_F(SessionStorageDatabaseTest, DeleteNamespace) { |
| 612 ValuesMap data1; | 614 DOMStorageValuesMap data1; |
| 613 data1[kKey1] = kValue1; | 615 data1[kKey1] = kValue1; |
| 614 data1[kKey2] = kValue2; | 616 data1[kKey2] = kValue2; |
| 615 data1[kKey3] = kValue3; | 617 data1[kKey3] = kValue3; |
| 616 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 618 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 617 ValuesMap data2; | 619 DOMStorageValuesMap data2; |
| 618 data2[kKey2] = kValue4; | 620 data2[kKey2] = kValue4; |
| 619 data2[kKey3] = kValue3; | 621 data2[kKey3] = kValue3; |
| 620 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 622 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 621 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); | 623 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); |
| 622 CheckDatabaseConsistency(); | 624 CheckDatabaseConsistency(); |
| 623 CheckEmptyDatabase(); | 625 CheckEmptyDatabase(); |
| 624 } | 626 } |
| 625 | 627 |
| 626 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceWithShallowCopy) { | 628 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceWithShallowCopy) { |
| 627 // Write data for a namespace, for 2 origins. | 629 // Write data for a namespace, for 2 origins. |
| 628 ValuesMap data1; | 630 DOMStorageValuesMap data1; |
| 629 data1[kKey1] = kValue1; | 631 data1[kKey1] = kValue1; |
| 630 data1[kKey2] = kValue2; | 632 data1[kKey2] = kValue2; |
| 631 data1[kKey3] = kValue3; | 633 data1[kKey3] = kValue3; |
| 632 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 634 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 633 ValuesMap data2; | 635 DOMStorageValuesMap data2; |
| 634 data2[kKey1] = kValue2; | 636 data2[kKey1] = kValue2; |
| 635 data2[kKey3] = kValue1; | 637 data2[kKey3] = kValue1; |
| 636 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 638 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 637 | 639 |
| 638 // Make a shallow copy and delete the original namespace. | 640 // Make a shallow copy and delete the original namespace. |
| 639 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 641 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 640 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); | 642 EXPECT_TRUE(db_->DeleteNamespace(kNamespace1)); |
| 641 | 643 |
| 642 // The original namespace has no data. | 644 // The original namespace has no data. |
| 643 CheckDatabaseConsistency(); | 645 CheckDatabaseConsistency(); |
| 644 CheckAreaData(kNamespace1, kOrigin1, ValuesMap()); | 646 CheckAreaData(kNamespace1, kOrigin1, DOMStorageValuesMap()); |
| 645 CheckAreaData(kNamespace1, kOrigin2, ValuesMap()); | 647 CheckAreaData(kNamespace1, kOrigin2, DOMStorageValuesMap()); |
| 646 // But the copy persists. | 648 // But the copy persists. |
| 647 CheckAreaData(kNamespaceClone, kOrigin1, data1); | 649 CheckAreaData(kNamespaceClone, kOrigin1, data1); |
| 648 CheckAreaData(kNamespaceClone, kOrigin2, data2); | 650 CheckAreaData(kNamespaceClone, kOrigin2, data2); |
| 649 } | 651 } |
| 650 | 652 |
| 651 TEST_F(SessionStorageDatabaseTest, DeleteArea) { | 653 TEST_F(SessionStorageDatabaseTest, DeleteArea) { |
| 652 // Write data for a namespace, for 2 origins. | 654 // Write data for a namespace, for 2 origins. |
| 653 ValuesMap data1; | 655 DOMStorageValuesMap data1; |
| 654 data1[kKey1] = kValue1; | 656 data1[kKey1] = kValue1; |
| 655 data1[kKey2] = kValue2; | 657 data1[kKey2] = kValue2; |
| 656 data1[kKey3] = kValue3; | 658 data1[kKey3] = kValue3; |
| 657 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 659 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 658 ValuesMap data2; | 660 DOMStorageValuesMap data2; |
| 659 data2[kKey1] = kValue2; | 661 data2[kKey1] = kValue2; |
| 660 data2[kKey3] = kValue1; | 662 data2[kKey3] = kValue1; |
| 661 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 663 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 662 | 664 |
| 663 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); | 665 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); |
| 664 CheckDatabaseConsistency(); | 666 CheckDatabaseConsistency(); |
| 665 // The data for the non-deleted origin persists. | 667 // The data for the non-deleted origin persists. |
| 666 CheckAreaData(kNamespace1, kOrigin1, data1); | 668 CheckAreaData(kNamespace1, kOrigin1, data1); |
| 667 // The data for the deleted origin is gone. | 669 // The data for the deleted origin is gone. |
| 668 CheckAreaData(kNamespace1, kOrigin2, ValuesMap()); | 670 CheckAreaData(kNamespace1, kOrigin2, DOMStorageValuesMap()); |
| 669 } | 671 } |
| 670 | 672 |
| 671 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) { | 673 TEST_F(SessionStorageDatabaseTest, DeleteAreaWithShallowCopy) { |
| 672 // Write data for a namespace, for 2 origins. | 674 // Write data for a namespace, for 2 origins. |
| 673 ValuesMap data1; | 675 DOMStorageValuesMap data1; |
| 674 data1[kKey1] = kValue1; | 676 data1[kKey1] = kValue1; |
| 675 data1[kKey2] = kValue2; | 677 data1[kKey2] = kValue2; |
| 676 data1[kKey3] = kValue3; | 678 data1[kKey3] = kValue3; |
| 677 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 679 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 678 ValuesMap data2; | 680 DOMStorageValuesMap data2; |
| 679 data2[kKey1] = kValue2; | 681 data2[kKey1] = kValue2; |
| 680 data2[kKey3] = kValue1; | 682 data2[kKey3] = kValue1; |
| 681 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 683 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 682 | 684 |
| 683 // Make a shallow copy and delete an origin from the original namespace. | 685 // Make a shallow copy and delete an origin from the original namespace. |
| 684 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 686 EXPECT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 685 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); | 687 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); |
| 686 CheckDatabaseConsistency(); | 688 CheckDatabaseConsistency(); |
| 687 | 689 |
| 688 // The original namespace has data for only the non-deleted origin. | 690 // The original namespace has data for only the non-deleted origin. |
| 689 CheckAreaData(kNamespace1, kOrigin1, ValuesMap()); | 691 CheckAreaData(kNamespace1, kOrigin1, DOMStorageValuesMap()); |
| 690 CheckAreaData(kNamespace1, kOrigin2, data2); | 692 CheckAreaData(kNamespace1, kOrigin2, data2); |
| 691 // But the copy persists. | 693 // But the copy persists. |
| 692 CheckAreaData(kNamespaceClone, kOrigin1, data1); | 694 CheckAreaData(kNamespaceClone, kOrigin1, data1); |
| 693 CheckAreaData(kNamespaceClone, kOrigin2, data2); | 695 CheckAreaData(kNamespaceClone, kOrigin2, data2); |
| 694 } | 696 } |
| 695 | 697 |
| 696 TEST_F(SessionStorageDatabaseTest, WriteRawBytes) { | 698 TEST_F(SessionStorageDatabaseTest, WriteRawBytes) { |
| 697 // Write data which is not valid utf8 and contains null bytes. | 699 // Write data which is not valid utf8 and contains null bytes. |
| 698 unsigned char raw_data[10] = {255, 0, 0, 0, 1, 2, 3, 4, 5, 0}; | 700 unsigned char raw_data[10] = {255, 0, 0, 0, 1, 2, 3, 4, 5, 0}; |
| 699 ValuesMap changes; | 701 DOMStorageValuesMap changes; |
| 700 base::string16 string_with_raw_data; | 702 base::string16 string_with_raw_data; |
| 701 string_with_raw_data.assign(reinterpret_cast<char16*>(raw_data), 5); | 703 string_with_raw_data.assign(reinterpret_cast<char16*>(raw_data), 5); |
| 702 changes[kKey1] = base::NullableString16(string_with_raw_data, false); | 704 changes[kKey1] = base::NullableString16(string_with_raw_data, false); |
| 703 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); | 705 EXPECT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, changes)); |
| 704 CheckDatabaseConsistency(); | 706 CheckDatabaseConsistency(); |
| 705 ValuesMap values; | 707 DOMStorageValuesMap values; |
| 706 db_->ReadAreaValues(kNamespace1, kOrigin1, &values); | 708 db_->ReadAreaValues(kNamespace1, kOrigin1, &values); |
| 707 const unsigned char* data = | 709 const unsigned char* data = |
| 708 reinterpret_cast<const unsigned char*>(values[kKey1].string().data()); | 710 reinterpret_cast<const unsigned char*>(values[kKey1].string().data()); |
| 709 for (int i = 0; i < 10; ++i) | 711 for (int i = 0; i < 10; ++i) |
| 710 EXPECT_EQ(raw_data[i], data[i]); | 712 EXPECT_EQ(raw_data[i], data[i]); |
| 711 } | 713 } |
| 712 | 714 |
| 713 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceConfusion) { | 715 TEST_F(SessionStorageDatabaseTest, DeleteNamespaceConfusion) { |
| 714 // Regression test for a bug where a namespace with id 10 prevented deleting | 716 // Regression test for a bug where a namespace with id 10 prevented deleting |
| 715 // the namespace with id 1. | 717 // the namespace with id 1. |
| 716 | 718 |
| 717 ValuesMap data1; | 719 DOMStorageValuesMap data1; |
| 718 data1[kKey1] = kValue1; | 720 data1[kKey1] = kValue1; |
| 719 ASSERT_TRUE(db_->CommitAreaChanges("foobar", kOrigin1, false, data1)); | 721 ASSERT_TRUE(db_->CommitAreaChanges("foobar", kOrigin1, false, data1)); |
| 720 ASSERT_TRUE(db_->CommitAreaChanges("foobarbaz", kOrigin1, false, data1)); | 722 ASSERT_TRUE(db_->CommitAreaChanges("foobarbaz", kOrigin1, false, data1)); |
| 721 | 723 |
| 722 // Delete the namespace with ID 1. | 724 // Delete the namespace with ID 1. |
| 723 EXPECT_TRUE(db_->DeleteNamespace("foobar")); | 725 EXPECT_TRUE(db_->DeleteNamespace("foobar")); |
| 724 } | 726 } |
| 725 | 727 |
| 726 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIds) { | 728 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIds) { |
| 727 ValuesMap data1; | 729 DOMStorageValuesMap data1; |
| 728 data1[kKey1] = kValue1; | 730 data1[kKey1] = kValue1; |
| 729 data1[kKey2] = kValue2; | 731 data1[kKey2] = kValue2; |
| 730 data1[kKey3] = kValue3; | 732 data1[kKey3] = kValue3; |
| 731 std::set<std::string> expected_namespace_ids; | 733 std::set<std::string> expected_namespace_ids; |
| 732 | 734 |
| 733 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 735 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 734 expected_namespace_ids.insert(kNamespace1); | 736 expected_namespace_ids.insert(kNamespace1); |
| 735 CheckNamespaceIds(expected_namespace_ids); | 737 CheckNamespaceIds(expected_namespace_ids); |
| 736 | 738 |
| 737 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 739 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 738 expected_namespace_ids.insert(kNamespaceClone); | 740 expected_namespace_ids.insert(kNamespaceClone); |
| 739 CheckNamespaceIds(expected_namespace_ids); | 741 CheckNamespaceIds(expected_namespace_ids); |
| 740 | 742 |
| 741 ASSERT_TRUE(db_->DeleteNamespace(kNamespace1)); | 743 ASSERT_TRUE(db_->DeleteNamespace(kNamespace1)); |
| 742 expected_namespace_ids.erase(kNamespace1); | 744 expected_namespace_ids.erase(kNamespace1); |
| 743 CheckNamespaceIds(expected_namespace_ids); | 745 CheckNamespaceIds(expected_namespace_ids); |
| 744 | 746 |
| 745 CheckDatabaseConsistency(); | 747 CheckDatabaseConsistency(); |
| 746 } | 748 } |
| 747 | 749 |
| 748 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIdsInEmptyDatabase) { | 750 TEST_F(SessionStorageDatabaseTest, ReadNamespaceIdsInEmptyDatabase) { |
| 749 std::set<std::string> expected_namespace_ids; | 751 std::set<std::string> expected_namespace_ids; |
| 750 CheckNamespaceIds(expected_namespace_ids); | 752 CheckNamespaceIds(expected_namespace_ids); |
| 751 } | 753 } |
| 752 | 754 |
| 753 TEST_F(SessionStorageDatabaseTest, ReadOriginsInNamespace) { | 755 TEST_F(SessionStorageDatabaseTest, ReadOriginsInNamespace) { |
| 754 ValuesMap data1; | 756 DOMStorageValuesMap data1; |
| 755 data1[kKey1] = kValue1; | 757 data1[kKey1] = kValue1; |
| 756 data1[kKey2] = kValue2; | 758 data1[kKey2] = kValue2; |
| 757 data1[kKey3] = kValue3; | 759 data1[kKey3] = kValue3; |
| 758 | 760 |
| 759 std::set<GURL> expected_origins1; | 761 std::set<GURL> expected_origins1; |
| 760 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 762 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 761 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data1)); | 763 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data1)); |
| 762 expected_origins1.insert(kOrigin1); | 764 expected_origins1.insert(kOrigin1); |
| 763 expected_origins1.insert(kOrigin2); | 765 expected_origins1.insert(kOrigin2); |
| 764 CheckOrigins(kNamespace1, expected_origins1); | 766 CheckOrigins(kNamespace1, expected_origins1); |
| 765 | 767 |
| 766 std::set<GURL> expected_origins2; | 768 std::set<GURL> expected_origins2; |
| 767 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data1)); | 769 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace2, kOrigin2, false, data1)); |
| 768 expected_origins2.insert(kOrigin2); | 770 expected_origins2.insert(kOrigin2); |
| 769 CheckOrigins(kNamespace2, expected_origins2); | 771 CheckOrigins(kNamespace2, expected_origins2); |
| 770 | 772 |
| 771 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); | 773 ASSERT_TRUE(db_->CloneNamespace(kNamespace1, kNamespaceClone)); |
| 772 CheckOrigins(kNamespaceClone, expected_origins1); | 774 CheckOrigins(kNamespaceClone, expected_origins1); |
| 773 | 775 |
| 774 ASSERT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); | 776 ASSERT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); |
| 775 expected_origins1.erase(kOrigin2); | 777 expected_origins1.erase(kOrigin2); |
| 776 CheckOrigins(kNamespace1, expected_origins1); | 778 CheckOrigins(kNamespace1, expected_origins1); |
| 777 | 779 |
| 778 CheckDatabaseConsistency(); | 780 CheckDatabaseConsistency(); |
| 779 } | 781 } |
| 780 | 782 |
| 781 TEST_F(SessionStorageDatabaseTest, DeleteAllOrigins) { | 783 TEST_F(SessionStorageDatabaseTest, DeleteAllOrigins) { |
| 782 // Write data for a namespace, for 2 origins. | 784 // Write data for a namespace, for 2 origins. |
| 783 ValuesMap data1; | 785 DOMStorageValuesMap data1; |
| 784 data1[kKey1] = kValue1; | 786 data1[kKey1] = kValue1; |
| 785 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); | 787 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin1, false, data1)); |
| 786 ValuesMap data2; | 788 DOMStorageValuesMap data2; |
| 787 data2[kKey1] = kValue2; | 789 data2[kKey1] = kValue2; |
| 788 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); | 790 ASSERT_TRUE(db_->CommitAreaChanges(kNamespace1, kOrigin2, false, data2)); |
| 789 | 791 |
| 790 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); | 792 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin1)); |
| 791 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); | 793 EXPECT_TRUE(db_->DeleteArea(kNamespace1, kOrigin2)); |
| 792 // Check that also the namespace start key was deleted. | 794 // Check that also the namespace start key was deleted. |
| 793 CheckDatabaseConsistency(); | 795 CheckDatabaseConsistency(); |
| 794 } | 796 } |
| 795 | 797 |
| 796 | 798 |
| 797 } // namespace dom_storage | 799 } // namespace content |
| OLD | NEW |