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

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentRequestTest.cpp

Issue 2192413002: Timeout if website never completes the transaction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Marijn's comments Created 4 years, 4 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 "modules/payments/PaymentRequest.h" 5 #include "modules/payments/PaymentRequest.h"
6 6
7 #include "bindings/core/v8/JSONValuesForV8.h" 7 #include "bindings/core/v8/JSONValuesForV8.h"
8 #include "bindings/core/v8/V8BindingForTesting.h" 8 #include "bindings/core/v8/V8BindingForTesting.h"
9 #include "core/dom/Document.h" 9 #include "core/dom/Document.h"
10 #include "core/dom/ExceptionCode.h" 10 #include "core/dom/ExceptionCode.h"
11 #include "modules/payments/PaymentAddress.h"
12 #include "modules/payments/PaymentTestHelper.h" 11 #include "modules/payments/PaymentTestHelper.h"
13 #include "platform/heap/HeapAllocator.h" 12 #include "platform/heap/HeapAllocator.h"
14 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
15 14
16 namespace blink { 15 namespace blink {
17 namespace { 16 namespace {
18 17
19 TEST(PaymentRequestTest, SecureContextRequired) 18 TEST(PaymentRequestTest, SecureContextRequired)
20 { 19 {
21 V8TestingScope scope; 20 V8TestingScope scope;
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 V8TestingScope scope; 215 V8TestingScope scope;
217 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); 216 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
218 makePaymentRequestOriginSecure(scope.document()); 217 makePaymentRequestOriginSecure(scope.document());
219 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate()); 218 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
220 EXPECT_FALSE(scope.getExceptionState().hadException()); 219 EXPECT_FALSE(scope.getExceptionState().hadException());
221 request->show(scope.getScriptState()); 220 request->show(scope.getScriptState());
222 221
223 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall()); 222 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall());
224 } 223 }
225 224
226 TEST(PaymentRequestTest, CannotCallCompleteTwice)
227 {
228 V8TestingScope scope;
229 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
230 makePaymentRequestOriginSecure(scope.document());
231 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
232 EXPECT_FALSE(scope.getExceptionState().hadException());
233 request->show(scope.getScriptState());
234 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
235 request->complete(scope.getScriptState(), Fail);
236
237 request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall() , funcs.expectCall());
238 }
239
240 TEST(PaymentRequestTest, RejectShowPromiseOnErrorPaymentMethodNotSupported) 225 TEST(PaymentRequestTest, RejectShowPromiseOnErrorPaymentMethodNotSupported)
241 { 226 {
242 V8TestingScope scope; 227 V8TestingScope scope;
243 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); 228 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
244 makePaymentRequestOriginSecure(scope.document()); 229 makePaymentRequestOriginSecure(scope.document());
245 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate()); 230 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
246 EXPECT_FALSE(scope.getExceptionState().hadException()); 231 EXPECT_FALSE(scope.getExceptionState().hadException());
247 232
248 String errorMessage; 233 String errorMessage;
249 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage)); 234 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage));
(...skipping 14 matching lines...) Expand all
264 249
265 String errorMessage; 250 String errorMessage;
266 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage)); 251 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage));
267 252
268 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(mojom::bl ink::PaymentErrorReason::USER_CANCEL); 253 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(mojom::bl ink::PaymentErrorReason::USER_CANCEL);
269 254
270 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); 255 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
271 EXPECT_EQ("Request cancelled", errorMessage); 256 EXPECT_EQ("Request cancelled", errorMessage);
272 } 257 }
273 258
274 TEST(PaymentRequestTest, RejectCompletePromiseOnError)
275 {
276 V8TestingScope scope;
277 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
278 makePaymentRequestOriginSecure(scope.document());
279 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
280 EXPECT_FALSE(scope.getExceptionState().hadException());
281 request->show(scope.getScriptState());
282 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
283
284 String errorMessage;
285 request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall() , funcs.expectCall(&errorMessage));
286
287 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(mojom::bl ink::PaymentErrorReason::UNKNOWN);
288
289 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
290 EXPECT_EQ("UnknownError: Request failed", errorMessage);
291 }
292
293 // If user cancels the transaction during processing, the complete() promise
294 // should be rejected.
295 TEST(PaymentRequestTest, RejectCompletePromiseAfterError)
296 {
297 V8TestingScope scope;
298 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
299 makePaymentRequestOriginSecure(scope.document());
300 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
301 EXPECT_FALSE(scope.getExceptionState().hadException());
302 request->show(scope.getScriptState());
303 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
304 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnError(mojom::bl ink::PaymentErrorReason::USER_CANCEL);
305
306 request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall() , funcs.expectCall());
307 }
308
309 TEST(PaymentRequestTest, ResolvePromiseOnComplete)
310 {
311 V8TestingScope scope;
312 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
313 makePaymentRequestOriginSecure(scope.document());
314 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
315 EXPECT_FALSE(scope.getExceptionState().hadException());
316 request->show(scope.getScriptState());
317 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
318
319 request->complete(scope.getScriptState(), Success).then(funcs.expectCall(), funcs.expectNoCall());
320
321 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnComplete();
322 }
323
324 TEST(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure) 259 TEST(PaymentRequestTest, RejectShowPromiseOnUpdateDetailsFailure)
325 { 260 {
326 V8TestingScope scope; 261 V8TestingScope scope;
327 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); 262 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
328 makePaymentRequestOriginSecure(scope.document()); 263 makePaymentRequestOriginSecure(scope.document());
329 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate()); 264 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
330 EXPECT_FALSE(scope.getExceptionState().hadException()); 265 EXPECT_FALSE(scope.getExceptionState().hadException());
331 266
332 String errorMessage; 267 String errorMessage;
333 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage)); 268 request->show(scope.getScriptState()).then(funcs.expectNoCall(), funcs.expec tCall(&errorMessage));
334 269
335 request->onUpdatePaymentDetailsFailure("oops"); 270 request->onUpdatePaymentDetailsFailure("oops");
336 271
337 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate()); 272 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
338 EXPECT_EQ("AbortError: oops", errorMessage); 273 EXPECT_EQ("AbortError: oops", errorMessage);
339 } 274 }
340 275
341 TEST(PaymentRequestTest, RejectCompletePromiseOnUpdateDetailsFailure)
342 {
343 V8TestingScope scope;
344 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
345 makePaymentRequestOriginSecure(scope.document());
346 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
347 EXPECT_FALSE(scope.getExceptionState().hadException());
348 request->show(scope.getScriptState()).then(funcs.expectCall(), funcs.expectN oCall());
349 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
350
351 String errorMessage;
352 request->complete(scope.getScriptState(), Success).then(funcs.expectNoCall() , funcs.expectCall(&errorMessage));
353
354 request->onUpdatePaymentDetailsFailure("oops");
355
356 v8::MicrotasksScope::PerformCheckpoint(scope.getScriptState()->isolate());
357 EXPECT_EQ("AbortError: oops", errorMessage);
358 }
359
360 TEST(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved) 276 TEST(PaymentRequestTest, IgnoreUpdatePaymentDetailsAfterShowPromiseResolved)
361 { 277 {
362 V8TestingScope scope; 278 V8TestingScope scope;
363 PaymentRequestMockFunctionScope funcs(scope.getScriptState()); 279 PaymentRequestMockFunctionScope funcs(scope.getScriptState());
364 makePaymentRequestOriginSecure(scope.document()); 280 makePaymentRequestOriginSecure(scope.document());
365 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate()); 281 PaymentRequest* request = PaymentRequest::create(scope.getScriptState(), bui ldPaymentMethodDataForTest(), buildPaymentDetailsForTest(), scope.getExceptionSt ate());
366 EXPECT_FALSE(scope.getExceptionState().hadException()); 282 EXPECT_FALSE(scope.getExceptionState().hadException());
367 request->show(scope.getScriptState()).then(funcs.expectCall(), funcs.expectN oCall()); 283 request->show(scope.getScriptState()).then(funcs.expectCall(), funcs.expectN oCall());
368 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest()); 284 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (buildPaymentResponseForTest());
369 285
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}, \"selected\": true}]}"; 374 "{\"id\": \"fast\", \"label\": \"Fast\", \"amount\": {\"currency\": \"US D\", \"value\": \"50.00\"}, \"selected\": true}]}";
459 375
460 request->onUpdatePaymentDetails(ScriptValue::from(scope.getScriptState(), fr omJSONString(scope.getScriptState(), detail, scope.getExceptionState()))); 376 request->onUpdatePaymentDetails(ScriptValue::from(scope.getScriptState(), fr omJSONString(scope.getScriptState(), detail, scope.getExceptionState())));
461 EXPECT_FALSE(scope.getExceptionState().hadException()); 377 EXPECT_FALSE(scope.getExceptionState().hadException());
462 378
463 EXPECT_EQ("fast", request->shippingOption()); 379 EXPECT_EQ("fast", request->shippingOption());
464 } 380 }
465 381
466 } // namespace 382 } // namespace
467 } // namespace blink 383 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698