| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/local_storage_context_mojo.h" | 5 #include "content/browser/dom_storage/local_storage_context_mojo.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "base/metrics/histogram_macros.h" | 8 #include "base/metrics/histogram_macros.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "components/leveldb/public/cpp/util.h" | 10 #include "components/leveldb/public/cpp/util.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 auto serialized_origin = leveldb::StdStringToUint8Vector(origin.Serialize()); | 61 auto serialized_origin = leveldb::StdStringToUint8Vector(origin.Serialize()); |
| 62 std::vector<uint8_t> key; | 62 std::vector<uint8_t> key; |
| 63 key.reserve(arraysize(kMetaPrefix) + serialized_origin.size()); | 63 key.reserve(arraysize(kMetaPrefix) + serialized_origin.size()); |
| 64 key.insert(key.end(), kMetaPrefix, kMetaPrefix + arraysize(kMetaPrefix)); | 64 key.insert(key.end(), kMetaPrefix, kMetaPrefix + arraysize(kMetaPrefix)); |
| 65 key.insert(key.end(), serialized_origin.begin(), serialized_origin.end()); | 65 key.insert(key.end(), serialized_origin.begin(), serialized_origin.end()); |
| 66 return key; | 66 return key; |
| 67 } | 67 } |
| 68 | 68 |
| 69 void NoOpSuccess(bool success) {} | 69 void NoOpSuccess(bool success) {} |
| 70 | 70 |
| 71 std::vector<uint8_t> String16ToUint8Vector(const base::string16& input) { | |
| 72 const uint8_t* data = reinterpret_cast<const uint8_t*>(input.data()); | |
| 73 return std::vector<uint8_t>(data, data + input.size() * sizeof(base::char16)); | |
| 74 } | |
| 75 | |
| 76 void MigrateStorageHelper( | 71 void MigrateStorageHelper( |
| 77 base::FilePath db_path, | 72 base::FilePath db_path, |
| 78 const scoped_refptr<base::SingleThreadTaskRunner> reply_task_runner, | 73 const scoped_refptr<base::SingleThreadTaskRunner> reply_task_runner, |
| 79 base::Callback<void(std::unique_ptr<LevelDBWrapperImpl::ValueMap>)> | 74 base::Callback<void(std::unique_ptr<LevelDBWrapperImpl::ValueMap>)> |
| 80 callback) { | 75 callback) { |
| 81 DOMStorageDatabase db(db_path); | 76 DOMStorageDatabase db(db_path); |
| 82 DOMStorageValuesMap map; | 77 DOMStorageValuesMap map; |
| 83 db.ReadAllValues(&map); | 78 db.ReadAllValues(&map); |
| 84 auto values = base::MakeUnique<LevelDBWrapperImpl::ValueMap>(); | 79 auto values = base::MakeUnique<LevelDBWrapperImpl::ValueMap>(); |
| 85 for (const auto& it : map) { | 80 for (const auto& it : map) { |
| 86 (*values)[String16ToUint8Vector(it.first)] = | 81 (*values)[LocalStorageContextMojo::MigrateString(it.first)] = |
| 87 String16ToUint8Vector(it.second.string()); | 82 LocalStorageContextMojo::MigrateString(it.second.string()); |
| 88 } | 83 } |
| 89 reply_task_runner->PostTask(FROM_HERE, | 84 reply_task_runner->PostTask(FROM_HERE, |
| 90 base::Bind(callback, base::Passed(&values))); | 85 base::Bind(callback, base::Passed(&values))); |
| 91 } | 86 } |
| 92 | 87 |
| 93 // Helper to convert from OnceCallback to Callback. | 88 // Helper to convert from OnceCallback to Callback. |
| 94 void CallMigrationCalback(LevelDBWrapperImpl::ValueMapCallback callback, | 89 void CallMigrationCalback(LevelDBWrapperImpl::ValueMapCallback callback, |
| 95 std::unique_ptr<LevelDBWrapperImpl::ValueMap> data) { | 90 std::unique_ptr<LevelDBWrapperImpl::ValueMap> data) { |
| 96 std::move(callback).Run(std::move(data)); | 91 std::move(callback).Run(std::move(data)); |
| 97 } | 92 } |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 leveldb::mojom::LevelDBDatabaseAssociatedRequest | 283 leveldb::mojom::LevelDBDatabaseAssociatedRequest |
| 289 LocalStorageContextMojo::DatabaseRequestForTesting() { | 284 LocalStorageContextMojo::DatabaseRequestForTesting() { |
| 290 DCHECK_EQ(connection_state_, NO_CONNECTION); | 285 DCHECK_EQ(connection_state_, NO_CONNECTION); |
| 291 connection_state_ = CONNECTION_IN_PROGRESS; | 286 connection_state_ = CONNECTION_IN_PROGRESS; |
| 292 leveldb::mojom::LevelDBDatabaseAssociatedRequest request = | 287 leveldb::mojom::LevelDBDatabaseAssociatedRequest request = |
| 293 MakeIsolatedRequest(&database_); | 288 MakeIsolatedRequest(&database_); |
| 294 OnDatabaseOpened(true, leveldb::mojom::DatabaseError::OK); | 289 OnDatabaseOpened(true, leveldb::mojom::DatabaseError::OK); |
| 295 return request; | 290 return request; |
| 296 } | 291 } |
| 297 | 292 |
| 293 // static |
| 294 std::vector<uint8_t> LocalStorageContextMojo::MigrateString( |
| 295 const base::string16& input) { |
| 296 static const uint8_t kUTF16Format = 0; |
| 297 |
| 298 const uint8_t* data = reinterpret_cast<const uint8_t*>(input.data()); |
| 299 std::vector<uint8_t> result; |
| 300 result.reserve(input.size() * sizeof(base::char16) + 1); |
| 301 result.push_back(kUTF16Format); |
| 302 result.insert(result.end(), data, data + input.size() * sizeof(base::char16)); |
| 303 return result; |
| 304 } |
| 305 |
| 298 void LocalStorageContextMojo::RunWhenConnected(base::OnceClosure callback) { | 306 void LocalStorageContextMojo::RunWhenConnected(base::OnceClosure callback) { |
| 299 // If we don't have a filesystem_connection_, we'll need to establish one. | 307 // If we don't have a filesystem_connection_, we'll need to establish one. |
| 300 if (connection_state_ == NO_CONNECTION) { | 308 if (connection_state_ == NO_CONNECTION) { |
| 301 CHECK(connector_); | 309 CHECK(connector_); |
| 302 file_service_connection_ = connector_->Connect(file::mojom::kServiceName); | 310 file_service_connection_ = connector_->Connect(file::mojom::kServiceName); |
| 303 connection_state_ = CONNECTION_IN_PROGRESS; | 311 connection_state_ = CONNECTION_IN_PROGRESS; |
| 304 file_service_connection_->AddConnectionCompletedClosure( | 312 file_service_connection_->AddConnectionCompletedClosure( |
| 305 base::Bind(&LocalStorageContextMojo::OnUserServiceConnectionComplete, | 313 base::Bind(&LocalStorageContextMojo::OnUserServiceConnectionComplete, |
| 306 weak_ptr_factory_.GetWeakPtr())); | 314 weak_ptr_factory_.GetWeakPtr())); |
| 307 file_service_connection_->SetConnectionLostClosure( | 315 file_service_connection_->SetConnectionLostClosure( |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 for (const auto& info : usage) { | 597 for (const auto& info : usage) { |
| 590 url::Origin origin_candidate(info.origin); | 598 url::Origin origin_candidate(info.origin); |
| 591 if (!origin_candidate.IsSameOriginWith(origin) && | 599 if (!origin_candidate.IsSameOriginWith(origin) && |
| 592 origin_candidate.IsSamePhysicalOriginWith(origin)) | 600 origin_candidate.IsSamePhysicalOriginWith(origin)) |
| 593 DeleteStorage(origin_candidate); | 601 DeleteStorage(origin_candidate); |
| 594 } | 602 } |
| 595 DeleteStorage(origin); | 603 DeleteStorage(origin); |
| 596 } | 604 } |
| 597 | 605 |
| 598 } // namespace content | 606 } // namespace content |
| OLD | NEW |