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

Side by Side Diff: components/payments/content/payment_request_spec_unittest.cc

Issue 2815763002: Prevent usage of web payments API over insecure HTTPS. (Closed)
Patch Set: Fix typo Created 3 years, 8 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 "components/payments/content/payment_request_spec.h" 5 #include "components/payments/content/payment_request_spec.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "components/payments/mojom/payment_request.mojom.h" 10 #include "components/payments/mojom/payment_request.mojom.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 12
13 namespace payments { 13 namespace payments {
14 14
15 class PaymentRequestSpecTest : public testing::Test, 15 class PaymentRequestSpecTest : public testing::Test,
16 public PaymentRequestSpec::Observer { 16 public PaymentRequestSpec::Observer {
17 protected: 17 protected:
18 ~PaymentRequestSpecTest() override {} 18 ~PaymentRequestSpecTest() override {}
19 19
20 void OnInvalidSpecProvided() override {
21 on_invalid_spec_provided_called_ = true;
22 }
23 void OnSpecUpdated() override { on_spec_updated_called_ = true; } 20 void OnSpecUpdated() override { on_spec_updated_called_ = true; }
24 21
25 void RecreateSpecWithMethodData( 22 void RecreateSpecWithMethodData(
26 std::vector<mojom::PaymentMethodDataPtr> method_data) { 23 std::vector<mojom::PaymentMethodDataPtr> method_data) {
27 spec_ = base::MakeUnique<PaymentRequestSpec>( 24 spec_ = base::MakeUnique<PaymentRequestSpec>(
28 mojom::PaymentOptions::New(), mojom::PaymentDetails::New(), 25 mojom::PaymentOptions::New(), mojom::PaymentDetails::New(),
29 std::move(method_data), this, "en-US"); 26 std::move(method_data), this, "en-US");
30 } 27 }
31 28
32 void RecreateSpecWithOptionsAndDetails(mojom::PaymentOptionsPtr options, 29 void RecreateSpecWithOptionsAndDetails(mojom::PaymentOptionsPtr options,
33 mojom::PaymentDetailsPtr details) { 30 mojom::PaymentDetailsPtr details) {
34 spec_ = base::MakeUnique<PaymentRequestSpec>( 31 spec_ = base::MakeUnique<PaymentRequestSpec>(
35 std::move(options), std::move(details), 32 std::move(options), std::move(details),
36 std::vector<mojom::PaymentMethodDataPtr>(), this, "en-US"); 33 std::vector<mojom::PaymentMethodDataPtr>(), this, "en-US");
37 } 34 }
38 35
39 PaymentRequestSpec* spec() { return spec_.get(); } 36 PaymentRequestSpec* spec() { return spec_.get(); }
40 bool on_invalid_spec_provided_called() {
41 return on_invalid_spec_provided_called_;
42 }
43 37
44 private: 38 private:
45 std::unique_ptr<PaymentRequestSpec> spec_; 39 std::unique_ptr<PaymentRequestSpec> spec_;
46 bool on_invalid_spec_provided_called_ = false;
47 bool on_spec_updated_called_ = false; 40 bool on_spec_updated_called_ = false;
48 }; 41 };
49 42
50 // Test that empty method data notifies observers of an invalid spec. 43 // Test that empty method data is parsed correctly.
51 TEST_F(PaymentRequestSpecTest, EmptyMethodData) { 44 TEST_F(PaymentRequestSpecTest, EmptyMethodData) {
52 std::vector<mojom::PaymentMethodDataPtr> method_data; 45 std::vector<mojom::PaymentMethodDataPtr> method_data;
53 RecreateSpecWithMethodData(std::move(method_data)); 46 RecreateSpecWithMethodData(std::move(method_data));
54 EXPECT_TRUE(on_invalid_spec_provided_called());
55 47
56 // No supported card networks. 48 // No supported card networks.
57 EXPECT_EQ(0u, spec()->supported_card_networks().size()); 49 EXPECT_EQ(0u, spec()->supported_card_networks().size());
58 } 50 }
59 51
60 TEST_F(PaymentRequestSpecTest, IsMethodSupportedThroughBasicCard) { 52 TEST_F(PaymentRequestSpecTest, IsMethodSupportedThroughBasicCard) {
61 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 53 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
62 entry->supported_methods.push_back("visa"); 54 entry->supported_methods.push_back("visa");
63 entry->supported_methods.push_back("mastercard"); 55 entry->supported_methods.push_back("mastercard");
64 entry->supported_methods.push_back("invalid"); 56 entry->supported_methods.push_back("invalid");
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 112 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
121 entry->supported_methods.push_back("visa"); 113 entry->supported_methods.push_back("visa");
122 entry->supported_methods.push_back("mastercard"); 114 entry->supported_methods.push_back("mastercard");
123 entry->supported_methods.push_back("invalid"); 115 entry->supported_methods.push_back("invalid");
124 entry->supported_methods.push_back(""); 116 entry->supported_methods.push_back("");
125 entry->supported_methods.push_back("visa"); 117 entry->supported_methods.push_back("visa");
126 std::vector<mojom::PaymentMethodDataPtr> method_data; 118 std::vector<mojom::PaymentMethodDataPtr> method_data;
127 method_data.push_back(std::move(entry)); 119 method_data.push_back(std::move(entry));
128 120
129 RecreateSpecWithMethodData(std::move(method_data)); 121 RecreateSpecWithMethodData(std::move(method_data));
130 EXPECT_FALSE(on_invalid_spec_provided_called());
131 122
132 // Only "visa" and "mastercard" remain, in order. 123 // Only "visa" and "mastercard" remain, in order.
133 EXPECT_EQ(2u, spec()->supported_card_networks().size()); 124 EXPECT_EQ(2u, spec()->supported_card_networks().size());
134 EXPECT_EQ("visa", spec()->supported_card_networks()[0]); 125 EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
135 EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]); 126 EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]);
136 } 127 }
137 128
138 // Test that parsing supported methods in different method data entries (with 129 // Test that parsing supported methods in different method data entries (with
139 // invalid values and duplicates) works as expected. 130 // invalid values and duplicates) works as expected.
140 TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries) { 131 TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries) {
141 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 132 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
142 entry->supported_methods.push_back("visa"); 133 entry->supported_methods.push_back("visa");
143 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New(); 134 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
144 entry2->supported_methods.push_back("mastercard"); 135 entry2->supported_methods.push_back("mastercard");
145 mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New(); 136 mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New();
146 entry3->supported_methods.push_back("invalid"); 137 entry3->supported_methods.push_back("invalid");
147 138
148 std::vector<mojom::PaymentMethodDataPtr> method_data; 139 std::vector<mojom::PaymentMethodDataPtr> method_data;
149 method_data.push_back(std::move(entry)); 140 method_data.push_back(std::move(entry));
150 method_data.push_back(std::move(entry2)); 141 method_data.push_back(std::move(entry2));
151 method_data.push_back(std::move(entry3)); 142 method_data.push_back(std::move(entry3));
152 143
153 RecreateSpecWithMethodData(std::move(method_data)); 144 RecreateSpecWithMethodData(std::move(method_data));
154 EXPECT_FALSE(on_invalid_spec_provided_called());
155 145
156 // Only "visa" and "mastercard" remain, in order. 146 // Only "visa" and "mastercard" remain, in order.
157 EXPECT_EQ(2u, spec()->supported_card_networks().size()); 147 EXPECT_EQ(2u, spec()->supported_card_networks().size());
158 EXPECT_EQ("visa", spec()->supported_card_networks()[0]); 148 EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
159 EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]); 149 EXPECT_EQ("mastercard", spec()->supported_card_networks()[1]);
160 } 150 }
161 151
162 // Test that parsing supported methods in different method data entries fails as 152 // Test that parsing supported methods in different method data entries fails as
163 // soon as one entry doesn't specify anything in supported_methods. 153 // soon as one entry doesn't specify anything in supported_methods.
164 TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries_OneEmpty) { 154 TEST_F(PaymentRequestSpecTest, SupportedMethods_MultipleEntries_OneEmpty) {
165 // First entry is valid. 155 // First entry is valid.
166 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 156 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
167 entry->supported_methods.push_back("visa"); 157 entry->supported_methods.push_back("visa");
168 // Empty method data entry. 158 // Empty method data entry.
169 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New(); 159 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
170 // Valid one follows the empty. 160 // Valid one follows the empty.
171 mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New(); 161 mojom::PaymentMethodDataPtr entry3 = mojom::PaymentMethodData::New();
172 entry3->supported_methods.push_back("mastercard"); 162 entry3->supported_methods.push_back("mastercard");
173 163
174 std::vector<mojom::PaymentMethodDataPtr> method_data; 164 std::vector<mojom::PaymentMethodDataPtr> method_data;
175 method_data.push_back(std::move(entry)); 165 method_data.push_back(std::move(entry));
176 method_data.push_back(std::move(entry2)); 166 method_data.push_back(std::move(entry2));
177 method_data.push_back(std::move(entry3)); 167 method_data.push_back(std::move(entry3));
178 168
179 RecreateSpecWithMethodData(std::move(method_data)); 169 RecreateSpecWithMethodData(std::move(method_data));
180 EXPECT_TRUE(on_invalid_spec_provided_called());
181 170
182 // Visa was parsed, but not mastercard. 171 // Visa was parsed, but not mastercard.
183 EXPECT_EQ(1u, spec()->supported_card_networks().size()); 172 EXPECT_EQ(1u, spec()->supported_card_networks().size());
184 EXPECT_EQ("visa", spec()->supported_card_networks()[0]); 173 EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
185 } 174 }
186 175
187 // Test that only specifying basic-card means that all are supported. 176 // Test that only specifying basic-card means that all are supported.
188 TEST_F(PaymentRequestSpecTest, SupportedMethods_OnlyBasicCard) { 177 TEST_F(PaymentRequestSpecTest, SupportedMethods_OnlyBasicCard) {
189 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 178 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
190 entry->supported_methods.push_back("basic-card"); 179 entry->supported_methods.push_back("basic-card");
191 std::vector<mojom::PaymentMethodDataPtr> method_data; 180 std::vector<mojom::PaymentMethodDataPtr> method_data;
192 method_data.push_back(std::move(entry)); 181 method_data.push_back(std::move(entry));
193 182
194 RecreateSpecWithMethodData(std::move(method_data)); 183 RecreateSpecWithMethodData(std::move(method_data));
195 EXPECT_FALSE(on_invalid_spec_provided_called());
196 184
197 // All of the basic card networks are supported. 185 // All of the basic card networks are supported.
198 EXPECT_EQ(8u, spec()->supported_card_networks().size()); 186 EXPECT_EQ(8u, spec()->supported_card_networks().size());
199 EXPECT_EQ("amex", spec()->supported_card_networks()[0]); 187 EXPECT_EQ("amex", spec()->supported_card_networks()[0]);
200 EXPECT_EQ("diners", spec()->supported_card_networks()[1]); 188 EXPECT_EQ("diners", spec()->supported_card_networks()[1]);
201 EXPECT_EQ("discover", spec()->supported_card_networks()[2]); 189 EXPECT_EQ("discover", spec()->supported_card_networks()[2]);
202 EXPECT_EQ("jcb", spec()->supported_card_networks()[3]); 190 EXPECT_EQ("jcb", spec()->supported_card_networks()[3]);
203 EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]); 191 EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]);
204 EXPECT_EQ("mir", spec()->supported_card_networks()[5]); 192 EXPECT_EQ("mir", spec()->supported_card_networks()[5]);
205 EXPECT_EQ("unionpay", spec()->supported_card_networks()[6]); 193 EXPECT_EQ("unionpay", spec()->supported_card_networks()[6]);
206 EXPECT_EQ("visa", spec()->supported_card_networks()[7]); 194 EXPECT_EQ("visa", spec()->supported_card_networks()[7]);
207 } 195 }
208 196
209 // Test that specifying a method AND basic-card means that all are supported, 197 // Test that specifying a method AND basic-card means that all are supported,
210 // but with the method as first. 198 // but with the method as first.
211 TEST_F(PaymentRequestSpecTest, SupportedMethods_BasicCard_WithSpecificMethod) { 199 TEST_F(PaymentRequestSpecTest, SupportedMethods_BasicCard_WithSpecificMethod) {
212 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 200 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
213 entry->supported_methods.push_back("jcb"); 201 entry->supported_methods.push_back("jcb");
214 entry->supported_methods.push_back("basic-card"); 202 entry->supported_methods.push_back("basic-card");
215 std::vector<mojom::PaymentMethodDataPtr> method_data; 203 std::vector<mojom::PaymentMethodDataPtr> method_data;
216 method_data.push_back(std::move(entry)); 204 method_data.push_back(std::move(entry));
217 205
218 RecreateSpecWithMethodData(std::move(method_data)); 206 RecreateSpecWithMethodData(std::move(method_data));
219 EXPECT_FALSE(on_invalid_spec_provided_called());
220 207
221 // All of the basic card networks are supported, but JCB is first because it 208 // All of the basic card networks are supported, but JCB is first because it
222 // was specified first. 209 // was specified first.
223 EXPECT_EQ(8u, spec()->supported_card_networks().size()); 210 EXPECT_EQ(8u, spec()->supported_card_networks().size());
224 EXPECT_EQ("jcb", spec()->supported_card_networks()[0]); 211 EXPECT_EQ("jcb", spec()->supported_card_networks()[0]);
225 EXPECT_EQ("amex", spec()->supported_card_networks()[1]); 212 EXPECT_EQ("amex", spec()->supported_card_networks()[1]);
226 EXPECT_EQ("diners", spec()->supported_card_networks()[2]); 213 EXPECT_EQ("diners", spec()->supported_card_networks()[2]);
227 EXPECT_EQ("discover", spec()->supported_card_networks()[3]); 214 EXPECT_EQ("discover", spec()->supported_card_networks()[3]);
228 EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]); 215 EXPECT_EQ("mastercard", spec()->supported_card_networks()[4]);
229 EXPECT_EQ("mir", spec()->supported_card_networks()[5]); 216 EXPECT_EQ("mir", spec()->supported_card_networks()[5]);
(...skipping 11 matching lines...) Expand all
241 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New(); 228 mojom::PaymentMethodDataPtr entry2 = mojom::PaymentMethodData::New();
242 entry2->supported_methods.push_back("basic-card"); 229 entry2->supported_methods.push_back("basic-card");
243 entry2->supported_networks.push_back(mojom::BasicCardNetwork::VISA); 230 entry2->supported_networks.push_back(mojom::BasicCardNetwork::VISA);
244 entry2->supported_networks.push_back(mojom::BasicCardNetwork::MASTERCARD); 231 entry2->supported_networks.push_back(mojom::BasicCardNetwork::MASTERCARD);
245 entry2->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY); 232 entry2->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY);
246 std::vector<mojom::PaymentMethodDataPtr> method_data; 233 std::vector<mojom::PaymentMethodDataPtr> method_data;
247 method_data.push_back(std::move(entry)); 234 method_data.push_back(std::move(entry));
248 method_data.push_back(std::move(entry2)); 235 method_data.push_back(std::move(entry2));
249 236
250 RecreateSpecWithMethodData(std::move(method_data)); 237 RecreateSpecWithMethodData(std::move(method_data));
251 EXPECT_FALSE(on_invalid_spec_provided_called());
252 238
253 EXPECT_EQ(3u, spec()->supported_card_networks().size()); 239 EXPECT_EQ(3u, spec()->supported_card_networks().size());
254 EXPECT_EQ("mastercard", spec()->supported_card_networks()[0]); 240 EXPECT_EQ("mastercard", spec()->supported_card_networks()[0]);
255 EXPECT_EQ("visa", spec()->supported_card_networks()[1]); 241 EXPECT_EQ("visa", spec()->supported_card_networks()[1]);
256 EXPECT_EQ("unionpay", spec()->supported_card_networks()[2]); 242 EXPECT_EQ("unionpay", spec()->supported_card_networks()[2]);
257 } 243 }
258 244
259 // Test that specifying basic-card with supported networks after specifying 245 // Test that specifying basic-card with supported networks after specifying
260 // some methods 246 // some methods
261 TEST_F(PaymentRequestSpecTest, 247 TEST_F(PaymentRequestSpecTest,
262 SupportedMethods_BasicCard_WithSupportedNetworks) { 248 SupportedMethods_BasicCard_WithSupportedNetworks) {
263 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New(); 249 mojom::PaymentMethodDataPtr entry = mojom::PaymentMethodData::New();
264 entry->supported_methods.push_back("basic-card"); 250 entry->supported_methods.push_back("basic-card");
265 entry->supported_networks.push_back(mojom::BasicCardNetwork::VISA); 251 entry->supported_networks.push_back(mojom::BasicCardNetwork::VISA);
266 entry->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY); 252 entry->supported_networks.push_back(mojom::BasicCardNetwork::UNIONPAY);
267 std::vector<mojom::PaymentMethodDataPtr> method_data; 253 std::vector<mojom::PaymentMethodDataPtr> method_data;
268 method_data.push_back(std::move(entry)); 254 method_data.push_back(std::move(entry));
269 255
270 RecreateSpecWithMethodData(std::move(method_data)); 256 RecreateSpecWithMethodData(std::move(method_data));
271 EXPECT_FALSE(on_invalid_spec_provided_called());
272 257
273 // Only the specified networks are supported. 258 // Only the specified networks are supported.
274 EXPECT_EQ(2u, spec()->supported_card_networks().size()); 259 EXPECT_EQ(2u, spec()->supported_card_networks().size());
275 EXPECT_EQ("visa", spec()->supported_card_networks()[0]); 260 EXPECT_EQ("visa", spec()->supported_card_networks()[0]);
276 EXPECT_EQ("unionpay", spec()->supported_card_networks()[1]); 261 EXPECT_EQ("unionpay", spec()->supported_card_networks()[1]);
277 } 262 }
278 263
279 // Test that the last shipping option is selected, even in the case of 264 // Test that the last shipping option is selected, even in the case of
280 // updateWith. 265 // updateWith.
281 TEST_F(PaymentRequestSpecTest, ShippingOptionsSelection) { 266 TEST_F(PaymentRequestSpecTest, ShippingOptionsSelection) {
(...skipping 26 matching lines...) Expand all
308 new_option2->id = "option:2"; 293 new_option2->id = "option:2";
309 new_option2->selected = true; 294 new_option2->selected = true;
310 new_shipping_options.push_back(std::move(new_option2)); 295 new_shipping_options.push_back(std::move(new_option2));
311 mojom::PaymentDetailsPtr new_details = mojom::PaymentDetails::New(); 296 mojom::PaymentDetailsPtr new_details = mojom::PaymentDetails::New();
312 new_details->shipping_options = std::move(new_shipping_options); 297 new_details->shipping_options = std::move(new_shipping_options);
313 298
314 spec()->UpdateWith(std::move(new_details)); 299 spec()->UpdateWith(std::move(new_details));
315 } 300 }
316 301
317 } // namespace payments 302 } // namespace payments
OLDNEW
« no previous file with comments | « components/payments/content/payment_request_spec.cc ('k') | components/payments/content/payment_request_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698