Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: content/browser/payments/payment_app_database.cc

Issue 2858773002: Revert of PaymentHandler: Implement PaymentInstruments.keys(). (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <map>
8 #include <utility> 7 #include <utility>
9 8
10 #include "base/bind.h" 9 #include "base/bind.h"
11 #include "base/optional.h" 10 #include "base/optional.h"
12 #include "base/time/time.h"
13 #include "content/browser/payments/payment_app.pb.h" 11 #include "content/browser/payments/payment_app.pb.h"
14 #include "content/browser/payments/payment_app_context_impl.h" 12 #include "content/browser/payments/payment_app_context_impl.h"
15 #include "content/browser/service_worker/service_worker_context_wrapper.h" 13 #include "content/browser/service_worker/service_worker_context_wrapper.h"
16 #include "content/browser/service_worker/service_worker_registration.h" 14 #include "content/browser/service_worker/service_worker_registration.h"
17 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
18 16
19 namespace content { 17 namespace content {
20 namespace { 18 namespace {
21 19
22 using ::payments::mojom::PaymentHandlerStatus; 20 using ::payments::mojom::PaymentHandlerStatus;
23 using ::payments::mojom::PaymentInstrument; 21 using ::payments::mojom::PaymentInstrument;
24 using ::payments::mojom::PaymentInstrumentPtr; 22 using ::payments::mojom::PaymentInstrumentPtr;
25 23
26 const char kPaymentAppManifestDataKey[] = "PaymentAppManifestData"; 24 const char kPaymentAppManifestDataKey[] = "PaymentAppManifestData";
27 const char kPaymentInstrumentPrefix[] = "PaymentInstrument:"; 25 const char kPaymentInstrumentKeyPrefix[] = "PaymentInstrument:";
28 const char kPaymentInstrumentKeyInfoPrefix[] = "PaymentInstrumentKeyInfo:";
29 26
30 std::string CreatePaymentInstrumentKey(const std::string& instrument_key) { 27 std::string CreatePaymentInstrumentKey(const std::string& instrument_key) {
31 return kPaymentInstrumentPrefix + instrument_key; 28 return kPaymentInstrumentKeyPrefix + instrument_key;
32 }
33
34 std::string CreatePaymentInstrumentKeyInfoKey(
35 const std::string& instrument_key) {
36 return kPaymentInstrumentKeyInfoPrefix + instrument_key;
37 } 29 }
38 30
39 payments::mojom::PaymentAppManifestPtr DeserializePaymentAppManifest( 31 payments::mojom::PaymentAppManifestPtr DeserializePaymentAppManifest(
40 const std::string& input) { 32 const std::string& input) {
41 PaymentAppManifestProto manifest_proto; 33 PaymentAppManifestProto manifest_proto;
42 if (!manifest_proto.ParseFromString(input)) 34 if (!manifest_proto.ParseFromString(input))
43 return nullptr; 35 return nullptr;
44 36
45 payments::mojom::PaymentAppManifestPtr manifest = 37 payments::mojom::PaymentAppManifestPtr manifest =
46 payments::mojom::PaymentAppManifest::New(); 38 payments::mojom::PaymentAppManifest::New();
47 manifest->name = manifest_proto.name(); 39 manifest->name = manifest_proto.name();
48 if (manifest_proto.has_icon()) 40 if (manifest_proto.has_icon())
49 manifest->icon = manifest_proto.icon(); 41 manifest->icon = manifest_proto.icon();
50 for (const auto& option_proto : manifest_proto.options()) { 42 for (const auto& option_proto : manifest_proto.options()) {
51 payments::mojom::PaymentAppOptionPtr option = 43 payments::mojom::PaymentAppOptionPtr option =
52 payments::mojom::PaymentAppOption::New(); 44 payments::mojom::PaymentAppOption::New();
53 option->name = option_proto.name(); 45 option->name = option_proto.name();
54 if (option_proto.has_icon()) 46 if (option_proto.has_icon())
55 option->icon = option_proto.icon(); 47 option->icon = option_proto.icon();
56 option->id = option_proto.id(); 48 option->id = option_proto.id();
57 for (const auto& method : option_proto.enabled_methods()) 49 for (const auto& method : option_proto.enabled_methods())
58 option->enabled_methods.push_back(method); 50 option->enabled_methods.push_back(method);
59 manifest->options.push_back(std::move(option)); 51 manifest->options.push_back(std::move(option));
60 } 52 }
61 53
62 return manifest; 54 return manifest;
63 } 55 }
64 56
65 std::map<uint64_t, std::string> DeserializePaymentInstrumentKeyInfo(
66 const std::vector<std::string>& inputs) {
67 std::map<uint64_t, std::string> key_info;
68 for (const auto& input : inputs) {
69 PaymentInstrumentKeyInfoProto key_info_proto;
70 if (!key_info_proto.ParseFromString(input))
71 return std::map<uint64_t, std::string>();
72
73 key_info.insert(std::pair<uint64_t, std::string>(
74 key_info_proto.insertion_order(), key_info_proto.key()));
75 }
76
77 return key_info;
78 }
79
80 PaymentInstrumentPtr DeserializePaymentInstrument(const std::string& input) { 57 PaymentInstrumentPtr DeserializePaymentInstrument(const std::string& input) {
81 PaymentInstrumentProto instrument_proto; 58 PaymentInstrumentProto instrument_proto;
82 if (!instrument_proto.ParseFromString(input)) 59 if (!instrument_proto.ParseFromString(input))
83 return nullptr; 60 return nullptr;
84 61
85 PaymentInstrumentPtr instrument = PaymentInstrument::New(); 62 PaymentInstrumentPtr instrument = PaymentInstrument::New();
86 instrument->name = instrument_proto.name(); 63 instrument->name = instrument_proto.name();
87 for (const auto& method : instrument_proto.enabled_methods()) 64 for (const auto& method : instrument_proto.enabled_methods())
88 instrument->enabled_methods.push_back(method); 65 instrument->enabled_methods.push_back(method);
89 instrument->stringified_capabilities = 66 instrument->stringified_capabilities =
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 DCHECK_CURRENTLY_ON(BrowserThread::IO); 133 DCHECK_CURRENTLY_ON(BrowserThread::IO);
157 134
158 service_worker_context_->FindReadyRegistrationForPattern( 135 service_worker_context_->FindReadyRegistrationForPattern(
159 scope, 136 scope,
160 base::Bind( 137 base::Bind(
161 &PaymentAppDatabase::DidFindRegistrationToReadPaymentInstrument, 138 &PaymentAppDatabase::DidFindRegistrationToReadPaymentInstrument,
162 weak_ptr_factory_.GetWeakPtr(), instrument_key, 139 weak_ptr_factory_.GetWeakPtr(), instrument_key,
163 base::Passed(std::move(callback)))); 140 base::Passed(std::move(callback))));
164 } 141 }
165 142
166 void PaymentAppDatabase::KeysOfPaymentInstruments(
167 const GURL& scope,
168 KeysOfPaymentInstrumentsCallback callback) {
169 DCHECK_CURRENTLY_ON(BrowserThread::IO);
170
171 service_worker_context_->FindReadyRegistrationForPattern(
172 scope, base::Bind(&PaymentAppDatabase::DidFindRegistrationToGetKeys,
173 weak_ptr_factory_.GetWeakPtr(),
174 base::Passed(std::move(callback))));
175 }
176
177 void PaymentAppDatabase::HasPaymentInstrument( 143 void PaymentAppDatabase::HasPaymentInstrument(
178 const GURL& scope, 144 const GURL& scope,
179 const std::string& instrument_key, 145 const std::string& instrument_key,
180 HasPaymentInstrumentCallback callback) { 146 HasPaymentInstrumentCallback callback) {
181 DCHECK_CURRENTLY_ON(BrowserThread::IO); 147 DCHECK_CURRENTLY_ON(BrowserThread::IO);
182 148
183 service_worker_context_->FindReadyRegistrationForPattern( 149 service_worker_context_->FindReadyRegistrationForPattern(
184 scope, 150 scope,
185 base::Bind(&PaymentAppDatabase::DidFindRegistrationToHasPaymentInstrument, 151 base::Bind(&PaymentAppDatabase::DidFindRegistrationToHasPaymentInstrument,
186 weak_ptr_factory_.GetWeakPtr(), instrument_key, 152 weak_ptr_factory_.GetWeakPtr(), instrument_key,
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 DeletePaymentInstrumentCallback callback, 305 DeletePaymentInstrumentCallback callback,
340 const std::vector<std::string>& data, 306 const std::vector<std::string>& data,
341 ServiceWorkerStatusCode status) { 307 ServiceWorkerStatusCode status) {
342 DCHECK_CURRENTLY_ON(BrowserThread::IO); 308 DCHECK_CURRENTLY_ON(BrowserThread::IO);
343 if (status != SERVICE_WORKER_OK || data.size() != 1) { 309 if (status != SERVICE_WORKER_OK || data.size() != 1) {
344 std::move(callback).Run(PaymentHandlerStatus::NOT_FOUND); 310 std::move(callback).Run(PaymentHandlerStatus::NOT_FOUND);
345 return; 311 return;
346 } 312 }
347 313
348 service_worker_context_->ClearRegistrationUserData( 314 service_worker_context_->ClearRegistrationUserData(
349 registration_id, 315 registration_id, {CreatePaymentInstrumentKey(instrument_key)},
350 {CreatePaymentInstrumentKey(instrument_key),
351 CreatePaymentInstrumentKeyInfoKey(instrument_key)},
352 base::Bind(&PaymentAppDatabase::DidDeletePaymentInstrument, 316 base::Bind(&PaymentAppDatabase::DidDeletePaymentInstrument,
353 weak_ptr_factory_.GetWeakPtr(), 317 weak_ptr_factory_.GetWeakPtr(),
354 base::Passed(std::move(callback)))); 318 base::Passed(std::move(callback))));
355 } 319 }
356 320
357 void PaymentAppDatabase::DidDeletePaymentInstrument( 321 void PaymentAppDatabase::DidDeletePaymentInstrument(
358 DeletePaymentInstrumentCallback callback, 322 DeletePaymentInstrumentCallback callback,
359 ServiceWorkerStatusCode status) { 323 ServiceWorkerStatusCode status) {
360 DCHECK_CURRENTLY_ON(BrowserThread::IO); 324 DCHECK_CURRENTLY_ON(BrowserThread::IO);
361 return std::move(callback).Run(status == SERVICE_WORKER_OK 325 return std::move(callback).Run(status == SERVICE_WORKER_OK
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 PaymentInstrumentPtr instrument = DeserializePaymentInstrument(data[0]); 360 PaymentInstrumentPtr instrument = DeserializePaymentInstrument(data[0]);
397 if (!instrument) { 361 if (!instrument) {
398 std::move(callback).Run(PaymentInstrument::New(), 362 std::move(callback).Run(PaymentInstrument::New(),
399 PaymentHandlerStatus::STORAGE_OPERATION_FAILED); 363 PaymentHandlerStatus::STORAGE_OPERATION_FAILED);
400 return; 364 return;
401 } 365 }
402 366
403 std::move(callback).Run(std::move(instrument), PaymentHandlerStatus::SUCCESS); 367 std::move(callback).Run(std::move(instrument), PaymentHandlerStatus::SUCCESS);
404 } 368 }
405 369
406 void PaymentAppDatabase::DidFindRegistrationToGetKeys(
407 KeysOfPaymentInstrumentsCallback callback,
408 ServiceWorkerStatusCode status,
409 scoped_refptr<ServiceWorkerRegistration> registration) {
410 DCHECK_CURRENTLY_ON(BrowserThread::IO);
411 if (status != SERVICE_WORKER_OK) {
412 std::move(callback).Run(std::vector<std::string>(),
413 PaymentHandlerStatus::NO_ACTIVE_WORKER);
414 return;
415 }
416
417 service_worker_context_->GetRegistrationUserDataByKeyPrefix(
418 registration->id(), {kPaymentInstrumentKeyInfoPrefix},
419 base::Bind(&PaymentAppDatabase::DidGetKeysOfPaymentInstruments,
420 weak_ptr_factory_.GetWeakPtr(),
421 base::Passed(std::move(callback))));
422 }
423
424 void PaymentAppDatabase::DidGetKeysOfPaymentInstruments(
425 KeysOfPaymentInstrumentsCallback callback,
426 const std::vector<std::string>& data,
427 ServiceWorkerStatusCode status) {
428 DCHECK_CURRENTLY_ON(BrowserThread::IO);
429 if (status != SERVICE_WORKER_OK) {
430 std::move(callback).Run(std::vector<std::string>(),
431 PaymentHandlerStatus::NOT_FOUND);
432 return;
433 }
434
435 std::vector<std::string> keys;
436 for (const auto& key_info : DeserializePaymentInstrumentKeyInfo(data)) {
437 keys.push_back(key_info.second);
438 }
439
440 std::move(callback).Run(keys, PaymentHandlerStatus::SUCCESS);
441 }
442
443 void PaymentAppDatabase::DidFindRegistrationToHasPaymentInstrument( 370 void PaymentAppDatabase::DidFindRegistrationToHasPaymentInstrument(
444 const std::string& instrument_key, 371 const std::string& instrument_key,
445 HasPaymentInstrumentCallback callback, 372 HasPaymentInstrumentCallback callback,
446 ServiceWorkerStatusCode status, 373 ServiceWorkerStatusCode status,
447 scoped_refptr<ServiceWorkerRegistration> registration) { 374 scoped_refptr<ServiceWorkerRegistration> registration) {
448 DCHECK_CURRENTLY_ON(BrowserThread::IO); 375 DCHECK_CURRENTLY_ON(BrowserThread::IO);
449 if (status != SERVICE_WORKER_OK) { 376 if (status != SERVICE_WORKER_OK) {
450 std::move(callback).Run(PaymentHandlerStatus::NO_ACTIVE_WORKER); 377 std::move(callback).Run(PaymentHandlerStatus::NO_ACTIVE_WORKER);
451 return; 378 return;
452 } 379 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 } 413 }
487 414
488 PaymentInstrumentProto instrument_proto; 415 PaymentInstrumentProto instrument_proto;
489 instrument_proto.set_name(instrument->name); 416 instrument_proto.set_name(instrument->name);
490 for (const auto& method : instrument->enabled_methods) { 417 for (const auto& method : instrument->enabled_methods) {
491 instrument_proto.add_enabled_methods(method); 418 instrument_proto.add_enabled_methods(method);
492 } 419 }
493 instrument_proto.set_stringified_capabilities( 420 instrument_proto.set_stringified_capabilities(
494 instrument->stringified_capabilities); 421 instrument->stringified_capabilities);
495 422
496 std::string serialized_instrument; 423 std::string serialized;
497 DCHECK(instrument_proto.SerializeToString(&serialized_instrument)); 424 bool success = instrument_proto.SerializeToString(&serialized);
498 425 DCHECK(success);
499 PaymentInstrumentKeyInfoProto key_info_proto;
500 key_info_proto.set_key(instrument_key);
501 key_info_proto.set_insertion_order(base::Time::Now().ToInternalValue());
502
503 std::string serialized_key_info;
504 DCHECK(key_info_proto.SerializeToString(&serialized_key_info));
505 426
506 service_worker_context_->StoreRegistrationUserData( 427 service_worker_context_->StoreRegistrationUserData(
507 registration->id(), registration->pattern().GetOrigin(), 428 registration->id(), registration->pattern().GetOrigin(),
508 {{CreatePaymentInstrumentKey(instrument_key), serialized_instrument}, 429 {{CreatePaymentInstrumentKey(instrument_key), serialized}},
509 {CreatePaymentInstrumentKeyInfoKey(instrument_key),
510 serialized_key_info}},
511 base::Bind(&PaymentAppDatabase::DidWritePaymentInstrument, 430 base::Bind(&PaymentAppDatabase::DidWritePaymentInstrument,
512 weak_ptr_factory_.GetWeakPtr(), 431 weak_ptr_factory_.GetWeakPtr(),
513 base::Passed(std::move(callback)))); 432 base::Passed(std::move(callback))));
514 } 433 }
515 434
516 void PaymentAppDatabase::DidWritePaymentInstrument( 435 void PaymentAppDatabase::DidWritePaymentInstrument(
517 WritePaymentInstrumentCallback callback, 436 WritePaymentInstrumentCallback callback,
518 ServiceWorkerStatusCode status) { 437 ServiceWorkerStatusCode status) {
519 DCHECK_CURRENTLY_ON(BrowserThread::IO); 438 DCHECK_CURRENTLY_ON(BrowserThread::IO);
520 return std::move(callback).Run( 439 return std::move(callback).Run(
521 status == SERVICE_WORKER_OK 440 status == SERVICE_WORKER_OK
522 ? PaymentHandlerStatus::SUCCESS 441 ? PaymentHandlerStatus::SUCCESS
523 : PaymentHandlerStatus::STORAGE_OPERATION_FAILED); 442 : PaymentHandlerStatus::STORAGE_OPERATION_FAILED);
524 } 443 }
525 444
526 } // namespace content 445 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/payments/payment_app_database.h ('k') | content/browser/payments/payment_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698