Chromium Code Reviews| 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/payments/payment_app_database.h" | 5 #include "content/browser/payments/payment_app_database.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/optional.h" | 10 #include "base/optional.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 option->icon = option_proto.icon(); | 38 option->icon = option_proto.icon(); |
| 39 option->id = option_proto.id(); | 39 option->id = option_proto.id(); |
| 40 for (const auto& method : option_proto.enabled_methods()) | 40 for (const auto& method : option_proto.enabled_methods()) |
| 41 option->enabled_methods.push_back(method); | 41 option->enabled_methods.push_back(method); |
| 42 manifest->options.push_back(std::move(option)); | 42 manifest->options.push_back(std::move(option)); |
| 43 } | 43 } |
| 44 | 44 |
| 45 return manifest; | 45 return manifest; |
| 46 } | 46 } |
| 47 | 47 |
| 48 PaymentInstrumentPtr DeserializePaymentInstrument(const std::string& input) { | |
| 49 PaymentInstrumentProto instrument_proto; | |
| 50 if (!instrument_proto.ParseFromString(input)) | |
| 51 return nullptr; | |
| 52 | |
| 53 PaymentInstrumentPtr instrument = PaymentInstrument::New(); | |
| 54 instrument->name = instrument_proto.name(); | |
| 55 for (const auto& method : instrument_proto.enabled_methods()) | |
| 56 instrument->enabled_methods.push_back(method); | |
|
please use gerrit instead
2017/04/12 19:11:31
Does this work?
instrument->enabled_methods = ins
zino
2017/04/15 05:18:09
We can not, the instrument_proto.enabled_methods()
| |
| 57 instrument->stringified_capabilities = | |
| 58 instrument_proto.stringified_capabilities(); | |
| 59 | |
| 60 return instrument; | |
| 61 } | |
| 62 | |
| 48 } // namespace | 63 } // namespace |
| 49 | 64 |
| 50 PaymentAppDatabase::PaymentAppDatabase( | 65 PaymentAppDatabase::PaymentAppDatabase( |
| 51 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) | 66 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) |
| 52 : service_worker_context_(service_worker_context), weak_ptr_factory_(this) { | 67 : service_worker_context_(service_worker_context), weak_ptr_factory_(this) { |
| 53 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 68 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 54 } | 69 } |
| 55 | 70 |
| 56 PaymentAppDatabase::~PaymentAppDatabase() { | 71 PaymentAppDatabase::~PaymentAppDatabase() { |
| 57 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 72 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 81 void PaymentAppDatabase::ReadAllManifests( | 96 void PaymentAppDatabase::ReadAllManifests( |
| 82 const ReadAllManifestsCallback& callback) { | 97 const ReadAllManifestsCallback& callback) { |
| 83 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 98 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 84 | 99 |
| 85 service_worker_context_->GetUserDataForAllRegistrations( | 100 service_worker_context_->GetUserDataForAllRegistrations( |
| 86 kPaymentAppManifestDataKey, | 101 kPaymentAppManifestDataKey, |
| 87 base::Bind(&PaymentAppDatabase::DidReadAllManifests, | 102 base::Bind(&PaymentAppDatabase::DidReadAllManifests, |
| 88 weak_ptr_factory_.GetWeakPtr(), callback)); | 103 weak_ptr_factory_.GetWeakPtr(), callback)); |
| 89 } | 104 } |
| 90 | 105 |
| 106 void PaymentAppDatabase::ReadPaymentInstrument( | |
| 107 const GURL& scope, | |
| 108 const std::string& instrumentKey, | |
| 109 ReadPaymentInstrumentCallback callback) { | |
| 110 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 111 | |
| 112 service_worker_context_->FindReadyRegistrationForPattern( | |
| 113 scope, | |
| 114 base::Bind( | |
| 115 &PaymentAppDatabase::DidFindRegistrationToReadPaymentInstrument, | |
| 116 weak_ptr_factory_.GetWeakPtr(), instrumentKey, | |
| 117 base::Passed(std::move(callback)))); | |
|
please use gerrit instead
2017/04/12 19:11:31
Is base::Passed(std::move()) wrapper necessary? Yo
zino
2017/04/15 05:18:09
We can not..
The FindReadyRegistrationForPattern s
| |
| 118 } | |
| 119 | |
| 120 void PaymentAppDatabase::WritePaymentInstrument( | |
| 121 const GURL& scope, | |
| 122 const std::string& instrumentKey, | |
| 123 PaymentInstrumentPtr instrument, | |
| 124 WritePaymentInstrumentCallback callback) { | |
| 125 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 126 | |
| 127 service_worker_context_->FindReadyRegistrationForPattern( | |
| 128 scope, | |
| 129 base::Bind( | |
| 130 &PaymentAppDatabase::DidFindRegistrationToWritePaymentInstrument, | |
| 131 weak_ptr_factory_.GetWeakPtr(), instrumentKey, | |
| 132 base::Passed(std::move(instrument)), | |
| 133 base::Passed(std::move(callback)))); | |
| 134 } | |
| 135 | |
| 91 void PaymentAppDatabase::DidFindRegistrationToWriteManifest( | 136 void PaymentAppDatabase::DidFindRegistrationToWriteManifest( |
| 92 payments::mojom::PaymentAppManifestPtr manifest, | 137 payments::mojom::PaymentAppManifestPtr manifest, |
| 93 const WriteManifestCallback& callback, | 138 const WriteManifestCallback& callback, |
| 94 ServiceWorkerStatusCode status, | 139 ServiceWorkerStatusCode status, |
| 95 scoped_refptr<ServiceWorkerRegistration> registration) { | 140 scoped_refptr<ServiceWorkerRegistration> registration) { |
| 96 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 141 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 97 if (status != SERVICE_WORKER_OK) { | 142 if (status != SERVICE_WORKER_OK) { |
| 98 callback.Run(payments::mojom::PaymentAppManifestError::NO_ACTIVE_WORKER); | 143 callback.Run(payments::mojom::PaymentAppManifestError::NO_ACTIVE_WORKER); |
| 99 return; | 144 return; |
| 100 } | 145 } |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 193 if (!manifest) | 238 if (!manifest) |
| 194 continue; | 239 continue; |
| 195 | 240 |
| 196 manifests.push_back( | 241 manifests.push_back( |
| 197 ManifestWithID(item_of_raw_data.first, std::move(manifest))); | 242 ManifestWithID(item_of_raw_data.first, std::move(manifest))); |
| 198 } | 243 } |
| 199 | 244 |
| 200 callback.Run(std::move(manifests)); | 245 callback.Run(std::move(manifests)); |
| 201 } | 246 } |
| 202 | 247 |
| 248 void PaymentAppDatabase::DidFindRegistrationToReadPaymentInstrument( | |
| 249 const std::string& instrumentKey, | |
| 250 ReadPaymentInstrumentCallback callback, | |
| 251 ServiceWorkerStatusCode status, | |
| 252 scoped_refptr<ServiceWorkerRegistration> registration) { | |
| 253 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 254 if (status != SERVICE_WORKER_OK) { | |
| 255 std::move(callback).Run(PaymentInstrument::New(), | |
| 256 PaymentHandlerStatus::NO_ACTIVE_WORKER); | |
| 257 return; | |
| 258 } | |
| 259 | |
| 260 service_worker_context_->GetRegistrationUserData( | |
| 261 registration->id(), {instrumentKey}, | |
| 262 base::Bind(&PaymentAppDatabase::DidReadPaymentInstrument, | |
| 263 weak_ptr_factory_.GetWeakPtr(), | |
| 264 base::Passed(std::move(callback)))); | |
| 265 } | |
| 266 | |
| 267 void PaymentAppDatabase::DidReadPaymentInstrument( | |
| 268 ReadPaymentInstrumentCallback callback, | |
| 269 const std::vector<std::string>& data, | |
| 270 ServiceWorkerStatusCode status) { | |
| 271 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 272 if (status != SERVICE_WORKER_OK || data.size() != 1) { | |
| 273 std::move(callback).Run(PaymentInstrument::New(), | |
| 274 PaymentHandlerStatus::NOT_FOUND); | |
| 275 return; | |
| 276 } | |
| 277 | |
| 278 PaymentInstrumentPtr instrument = DeserializePaymentInstrument(data[0]); | |
| 279 if (!instrument) { | |
| 280 std::move(callback).Run(PaymentInstrument::New(), | |
| 281 PaymentHandlerStatus::STORAGE_OPERATION_FAILED); | |
| 282 return; | |
| 283 } | |
| 284 | |
| 285 std::move(callback).Run(std::move(instrument), PaymentHandlerStatus::SUCCESS); | |
| 286 } | |
| 287 | |
| 288 void PaymentAppDatabase::DidFindRegistrationToWritePaymentInstrument( | |
| 289 const std::string& instrumentKey, | |
| 290 PaymentInstrumentPtr instrument, | |
| 291 WritePaymentInstrumentCallback callback, | |
| 292 ServiceWorkerStatusCode status, | |
| 293 scoped_refptr<ServiceWorkerRegistration> registration) { | |
| 294 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 295 if (status != SERVICE_WORKER_OK) { | |
| 296 std::move(callback).Run(PaymentHandlerStatus::NO_ACTIVE_WORKER); | |
| 297 return; | |
| 298 } | |
| 299 | |
| 300 PaymentInstrumentProto instrument_proto; | |
| 301 instrument_proto.set_name(instrument->name); | |
| 302 for (const auto& method : instrument->enabled_methods) { | |
| 303 instrument_proto.add_enabled_methods(method); | |
| 304 } | |
| 305 instrument_proto.set_stringified_capabilities( | |
| 306 instrument->stringified_capabilities); | |
| 307 | |
| 308 std::string serialized; | |
| 309 bool success = instrument_proto.SerializeToString(&serialized); | |
| 310 DCHECK(success); | |
| 311 | |
| 312 service_worker_context_->StoreRegistrationUserData( | |
| 313 registration->id(), registration->pattern().GetOrigin(), | |
| 314 {{instrumentKey, serialized}}, | |
| 315 base::Bind(&PaymentAppDatabase::DidWritePaymentInstrument, | |
| 316 weak_ptr_factory_.GetWeakPtr(), | |
| 317 base::Passed(std::move(callback)))); | |
| 318 } | |
| 319 | |
| 320 void PaymentAppDatabase::DidWritePaymentInstrument( | |
| 321 WritePaymentInstrumentCallback callback, | |
| 322 ServiceWorkerStatusCode status) { | |
| 323 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 324 return std::move(callback).Run( | |
| 325 status == SERVICE_WORKER_OK | |
| 326 ? PaymentHandlerStatus::SUCCESS | |
| 327 : PaymentHandlerStatus::STORAGE_OPERATION_FAILED); | |
| 328 } | |
| 329 | |
| 203 } // namespace content | 330 } // namespace content |
| OLD | NEW |