| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/dom_storage/session_storage_database.h" | 5 #include "content/browser/dom_storage/session_storage_database.h" |
| 6 | 6 |
| 7 #include <inttypes.h> | 7 #include <inttypes.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 if (!DatabaseErrorCheck(it->status().ok())) { | 291 if (!DatabaseErrorCheck(it->status().ok())) { |
| 292 db_->ReleaseSnapshot(options.snapshot); | 292 db_->ReleaseSnapshot(options.snapshot); |
| 293 return false; | 293 return false; |
| 294 } | 294 } |
| 295 | 295 |
| 296 // Skip the dummy entry "namespace-" and iterate the namespaces. | 296 // Skip the dummy entry "namespace-" and iterate the namespaces. |
| 297 std::string current_namespace_start_key; | 297 std::string current_namespace_start_key; |
| 298 std::string current_namespace_id; | 298 std::string current_namespace_id; |
| 299 for (it->Next(); it->Valid(); it->Next()) { | 299 for (it->Next(); it->Valid(); it->Next()) { |
| 300 std::string key = it->key().ToString(); | 300 std::string key = it->key().ToString(); |
| 301 if (!base::StartsWith(key, namespace_prefix, | 301 if (key.find(namespace_prefix) != 0) { |
| 302 base::CompareCase::SENSITIVE)) { | |
| 303 // Iterated past the "namespace-" keys. | 302 // Iterated past the "namespace-" keys. |
| 304 break; | 303 break; |
| 305 } | 304 } |
| 306 // For each namespace, the first key is "namespace-<namespaceid>-", and the | 305 // For each namespace, the first key is "namespace-<namespaceid>-", and the |
| 307 // subsequent keys are "namespace-<namespaceid>-<origin>". Read the unique | 306 // subsequent keys are "namespace-<namespaceid>-<origin>". Read the unique |
| 308 // "<namespaceid>" parts from the keys. | 307 // "<namespaceid>" parts from the keys. |
| 309 if (current_namespace_start_key.empty() || | 308 if (current_namespace_start_key.empty() || |
| 310 key.substr(0, current_namespace_start_key.length()) != | 309 key.substr(0, current_namespace_start_key.length()) != |
| 311 current_namespace_start_key) { | 310 current_namespace_start_key) { |
| 312 // The key is of the form "namespace-<namespaceid>-" for a new | 311 // The key is of the form "namespace-<namespaceid>-" for a new |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 // The namespace_start_key is not found when the namespace doesn't contain | 490 // The namespace_start_key is not found when the namespace doesn't contain |
| 492 // any areas. We don't need to do anything. | 491 // any areas. We don't need to do anything. |
| 493 return true; | 492 return true; |
| 494 } | 493 } |
| 495 if (!DatabaseErrorCheck(it->status().ok())) | 494 if (!DatabaseErrorCheck(it->status().ok())) |
| 496 return false; | 495 return false; |
| 497 | 496 |
| 498 // Skip the dummy entry "namespace-<namespaceid>-" and iterate the origins. | 497 // Skip the dummy entry "namespace-<namespaceid>-" and iterate the origins. |
| 499 for (it->Next(); it->Valid(); it->Next()) { | 498 for (it->Next(); it->Valid(); it->Next()) { |
| 500 std::string key = it->key().ToString(); | 499 std::string key = it->key().ToString(); |
| 501 if (!base::StartsWith(key, namespace_start_key, | 500 if (key.find(namespace_start_key) != 0) { |
| 502 base::CompareCase::SENSITIVE)) { | |
| 503 // Iterated past the origins for this namespace. | 501 // Iterated past the origins for this namespace. |
| 504 break; | 502 break; |
| 505 } | 503 } |
| 506 std::string origin = key.substr(namespace_start_key.length()); | 504 std::string origin = key.substr(namespace_start_key.length()); |
| 507 std::string map_id = it->value().ToString(); | 505 std::string map_id = it->value().ToString(); |
| 508 (*areas)[origin] = map_id; | 506 (*areas)[origin] = map_id; |
| 509 } | 507 } |
| 510 return true; | 508 return true; |
| 511 } | 509 } |
| 512 | 510 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 return false; | 542 return false; |
| 545 // Advance the iterator 2 times (we still haven't really deleted | 543 // Advance the iterator 2 times (we still haven't really deleted |
| 546 // namespace_key). | 544 // namespace_key). |
| 547 it->Next(); | 545 it->Next(); |
| 548 if (!ConsistencyCheck(it->Valid())) | 546 if (!ConsistencyCheck(it->Valid())) |
| 549 return false; | 547 return false; |
| 550 it->Next(); | 548 it->Next(); |
| 551 if (!it->Valid()) | 549 if (!it->Valid()) |
| 552 return true; | 550 return true; |
| 553 std::string key = it->key().ToString(); | 551 std::string key = it->key().ToString(); |
| 554 if (!base::StartsWith(key, namespace_start_key, base::CompareCase::SENSITIVE)) | 552 if (key.find(namespace_start_key) != 0) |
| 555 batch->Delete(namespace_start_key); | 553 batch->Delete(namespace_start_key); |
| 556 return true; | 554 return true; |
| 557 } | 555 } |
| 558 | 556 |
| 559 bool SessionStorageDatabase::GetMapForArea(const std::string& namespace_id, | 557 bool SessionStorageDatabase::GetMapForArea(const std::string& namespace_id, |
| 560 const std::string& origin, | 558 const std::string& origin, |
| 561 const leveldb::ReadOptions& options, | 559 const leveldb::ReadOptions& options, |
| 562 bool* exists, std::string* map_id) { | 560 bool* exists, std::string* map_id) { |
| 563 std::string namespace_key = NamespaceKey(namespace_id, origin); | 561 std::string namespace_key = NamespaceKey(namespace_id, origin); |
| 564 leveldb::Status s = db_->Get(options, namespace_key, map_id); | 562 leveldb::Status s = db_->Get(options, namespace_key, map_id); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 // If the key is not found, the status of the iterator won't be IsNotFound(), | 601 // If the key is not found, the status of the iterator won't be IsNotFound(), |
| 604 // but the iterator will be invalid. The map needs to exist, otherwise we have | 602 // but the iterator will be invalid. The map needs to exist, otherwise we have |
| 605 // a stale map_id in the database. | 603 // a stale map_id in the database. |
| 606 if (!ConsistencyCheck(it->Valid())) | 604 if (!ConsistencyCheck(it->Valid())) |
| 607 return false; | 605 return false; |
| 608 if (!DatabaseErrorCheck(it->status().ok())) | 606 if (!DatabaseErrorCheck(it->status().ok())) |
| 609 return false; | 607 return false; |
| 610 // Skip the dummy entry "map-<mapid>-". | 608 // Skip the dummy entry "map-<mapid>-". |
| 611 for (it->Next(); it->Valid(); it->Next()) { | 609 for (it->Next(); it->Valid(); it->Next()) { |
| 612 std::string key = it->key().ToString(); | 610 std::string key = it->key().ToString(); |
| 613 if (!base::StartsWith(key, map_start_key, base::CompareCase::SENSITIVE)) { | 611 if (key.find(map_start_key) != 0) { |
| 614 // Iterated past the keys in this map. | 612 // Iterated past the keys in this map. |
| 615 break; | 613 break; |
| 616 } | 614 } |
| 617 // Key is of the form "map-<mapid>-<key>". | 615 // Key is of the form "map-<mapid>-<key>". |
| 618 base::string16 key16 = | 616 base::string16 key16 = |
| 619 base::UTF8ToUTF16(key.substr(map_start_key.length())); | 617 base::UTF8ToUTF16(key.substr(map_start_key.length())); |
| 620 if (only_keys) { | 618 if (only_keys) { |
| 621 (*result)[key16] = base::NullableString16(); | 619 (*result)[key16] = base::NullableString16(); |
| 622 } else { | 620 } else { |
| 623 // Convert the raw data stored in std::string (it->value()) to raw data | 621 // Convert the raw data stored in std::string (it->value()) to raw data |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 std::string SessionStorageDatabase::MapKey(const std::string& map_id, | 762 std::string SessionStorageDatabase::MapKey(const std::string& map_id, |
| 765 const std::string& key) { | 763 const std::string& key) { |
| 766 return base::StringPrintf("map-%s-%s", map_id.c_str(), key.c_str()); | 764 return base::StringPrintf("map-%s-%s", map_id.c_str(), key.c_str()); |
| 767 } | 765 } |
| 768 | 766 |
| 769 const char* SessionStorageDatabase::NextMapIdKey() { | 767 const char* SessionStorageDatabase::NextMapIdKey() { |
| 770 return "next-map-id"; | 768 return "next-map-id"; |
| 771 } | 769 } |
| 772 | 770 |
| 773 } // namespace content | 771 } // namespace content |
| OLD | NEW |