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

Side by Side Diff: ios/chrome/browser/payments/payment_request.mm

Issue 2712053003: [Payment Request] Displays Contact Info in the payment summary view (Closed)
Patch Set: rebase Created 3 years, 9 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "ios/chrome/browser/payments/payment_request.h" 5 #include "ios/chrome/browser/payments/payment_request.h"
6 6
7 #include <unordered_set> 7 #include <unordered_set>
8 8
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "components/autofill/core/browser/autofill_data_util.h" 10 #include "components/autofill/core/browser/autofill_data_util.h"
11 #include "components/autofill/core/browser/autofill_profile.h" 11 #include "components/autofill/core/browser/autofill_profile.h"
12 #include "components/autofill/core/browser/credit_card.h" 12 #include "components/autofill/core/browser/credit_card.h"
13 #include "components/autofill/core/browser/personal_data_manager.h" 13 #include "components/autofill/core/browser/personal_data_manager.h"
14 #include "components/payments/core/currency_formatter.h" 14 #include "components/payments/core/currency_formatter.h"
15 #include "ios/chrome/browser/application_context.h" 15 #include "ios/chrome/browser/application_context.h"
16 #include "ios/web/public/payments/payment_request.h" 16 #include "ios/web/public/payments/payment_request.h"
17 17
18 #if !defined(__has_feature) || !__has_feature(objc_arc) 18 #if !defined(__has_feature) || !__has_feature(objc_arc)
19 #error "This file requires ARC support." 19 #error "This file requires ARC support."
20 #endif 20 #endif
21 21
22 PaymentRequest::PaymentRequest( 22 PaymentRequest::PaymentRequest(
23 std::unique_ptr<web::PaymentRequest> web_payment_request, 23 std::unique_ptr<web::PaymentRequest> web_payment_request,
24 autofill::PersonalDataManager* personal_data_manager) 24 autofill::PersonalDataManager* personal_data_manager)
25 : web_payment_request_(std::move(web_payment_request)), 25 : web_payment_request_(std::move(web_payment_request)),
26 personal_data_manager_(personal_data_manager), 26 personal_data_manager_(personal_data_manager),
27 selected_shipping_profile_(nullptr), 27 selected_shipping_profile_(nullptr),
28 selected_contact_profile_(nullptr),
28 selected_credit_card_(nullptr), 29 selected_credit_card_(nullptr),
29 selected_shipping_option_(nullptr) { 30 selected_shipping_option_(nullptr) {
30 PopulateProfileCache(); 31 PopulateProfileCache();
31 PopulateCreditCardCache(); 32 PopulateCreditCardCache();
32 PopulateShippingOptionCache(); 33 PopulateShippingOptionCache();
33 } 34 }
34 35
35 PaymentRequest::~PaymentRequest() {} 36 PaymentRequest::~PaymentRequest() {}
36 37
37 void PaymentRequest::set_payment_details(const web::PaymentDetails& details) { 38 void PaymentRequest::set_payment_details(const web::PaymentDetails& details) {
(...skipping 11 matching lines...) Expand all
49 web_payment_request_->details.total.amount.currency_system), 50 web_payment_request_->details.total.amount.currency_system),
50 GetApplicationContext()->GetApplicationLocale())); 51 GetApplicationContext()->GetApplicationLocale()));
51 } 52 }
52 return currency_formatter_.get(); 53 return currency_formatter_.get();
53 } 54 }
54 55
55 void PaymentRequest::PopulateProfileCache() { 56 void PaymentRequest::PopulateProfileCache() {
56 for (const auto& profile : personal_data_manager_->GetProfilesToSuggest()) { 57 for (const auto& profile : personal_data_manager_->GetProfilesToSuggest()) {
57 profile_cache_.push_back( 58 profile_cache_.push_back(
58 base::MakeUnique<autofill::AutofillProfile>(*profile)); 59 base::MakeUnique<autofill::AutofillProfile>(*profile));
59 profiles_.push_back(profile_cache_.back().get()); 60 shipping_profiles_.push_back(profile_cache_.back().get());
61 // TODO(crbug.com/602666): Implement deduplication rules for profiles.
62 contact_profiles_.push_back(profile_cache_.back().get());
60 } 63 }
61 64
62 if (!profiles_.empty()) 65 // TODO(crbug.com/602666): Implement prioritization rules for shipping and
63 selected_shipping_profile_ = profiles_[0]; 66 // contact profiles.
67
68 if (!shipping_profiles_.empty())
69 selected_shipping_profile_ = shipping_profiles_[0];
70 if (!contact_profiles_.empty())
71 selected_contact_profile_ = contact_profiles_[0];
64 } 72 }
65 73
66 void PaymentRequest::PopulateCreditCardCache() { 74 void PaymentRequest::PopulateCreditCardCache() {
67 DCHECK(web_payment_request_); 75 DCHECK(web_payment_request_);
68 std::unordered_set<base::string16> supported_method_types; 76 std::unordered_set<base::string16> supported_method_types;
69 for (const auto& method_data : web_payment_request_->method_data) { 77 for (const auto& method_data : web_payment_request_->method_data) {
70 for (const auto& supported_method : method_data.supported_methods) 78 for (const auto& supported_method : method_data.supported_methods)
71 supported_method_types.insert(supported_method); 79 supported_method_types.insert(supported_method);
72 } 80 }
73 81
74 std::vector<autofill::CreditCard*> credit_cards = 82 std::vector<autofill::CreditCard*> credit_cards =
75 personal_data_manager_->GetCreditCardsToSuggest(); 83 personal_data_manager_->GetCreditCardsToSuggest();
76 84
77 for (const auto& credit_card : credit_cards) { 85 for (const auto& credit_card : credit_cards) {
78 std::string spec_card_type = 86 std::string spec_card_type =
79 autofill::data_util::GetPaymentRequestData(credit_card->type()) 87 autofill::data_util::GetPaymentRequestData(credit_card->type())
80 .basic_card_payment_type; 88 .basic_card_payment_type;
81 if (supported_method_types.find(base::ASCIIToUTF16(spec_card_type)) != 89 if (supported_method_types.find(base::ASCIIToUTF16(spec_card_type)) !=
82 supported_method_types.end()) { 90 supported_method_types.end()) {
83 credit_card_cache_.push_back( 91 credit_card_cache_.push_back(
84 base::MakeUnique<autofill::CreditCard>(*credit_card)); 92 base::MakeUnique<autofill::CreditCard>(*credit_card));
85 credit_cards_.push_back(credit_card_cache_.back().get()); 93 credit_cards_.push_back(credit_card_cache_.back().get());
86 } 94 }
87 } 95 }
88 96
97 // TODO(crbug.com/602666): Implement prioritization rules for credit cards.
98
89 if (!credit_cards_.empty()) 99 if (!credit_cards_.empty())
90 selected_credit_card_ = credit_cards_[0]; 100 selected_credit_card_ = credit_cards_[0];
91 } 101 }
92 102
93 void PaymentRequest::PopulateShippingOptionCache() { 103 void PaymentRequest::PopulateShippingOptionCache() {
94 DCHECK(web_payment_request_); 104 DCHECK(web_payment_request_);
95 shipping_options_.clear(); 105 shipping_options_.clear();
96 shipping_options_.reserve( 106 shipping_options_.reserve(
97 web_payment_request_->details.shipping_options.size()); 107 web_payment_request_->details.shipping_options.size());
98 std::transform(std::begin(web_payment_request_->details.shipping_options), 108 std::transform(std::begin(web_payment_request_->details.shipping_options),
99 std::end(web_payment_request_->details.shipping_options), 109 std::end(web_payment_request_->details.shipping_options),
100 std::back_inserter(shipping_options_), 110 std::back_inserter(shipping_options_),
101 [](web::PaymentShippingOption& option) { return &option; }); 111 [](web::PaymentShippingOption& option) { return &option; });
102 112
103 selected_shipping_option_ = nullptr; 113 selected_shipping_option_ = nullptr;
104 for (const auto& shipping_option : shipping_options_) { 114 for (const auto& shipping_option : shipping_options_) {
105 if (shipping_option->selected) { 115 if (shipping_option->selected) {
106 // If more than one option has |selected| set, the last one in the 116 // If more than one option has |selected| set, the last one in the
107 // sequence should be treated as the selected item. 117 // sequence should be treated as the selected item.
108 selected_shipping_option_ = shipping_option; 118 selected_shipping_option_ = shipping_option;
109 } 119 }
110 } 120 }
111 } 121 }
OLDNEW
« no previous file with comments | « ios/chrome/browser/payments/payment_request.h ('k') | ios/chrome/browser/payments/payment_request_coordinator.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698