Log Message
[Payment Request] show() should only be called with user activation https://bugs.webkit.org/show_bug.cgi?id=179056
Reviewed by Sam Weinig. Source/WebCore: Updated existing tests to call PaymentRequest.show() with user activation. * Modules/paymentrequest/PaymentRequest.cpp: (WebCore::PaymentRequest::show): LayoutTests: * http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html: * http/tests/paymentrequest/payment-request-canmakepayment-method.https.html: * http/tests/paymentrequest/payment-request-change-shipping-address.https.html: * http/tests/paymentrequest/payment-request-change-shipping-option.https.html: * http/tests/paymentrequest/payment-request-show-method.https.html: * http/tests/paymentrequest/payment-response-complete-method.https.html: * http/tests/paymentrequest/payment-response-methodName-attribute.https.html: * http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html: * http/tests/paymentrequest/payment-response-payerName-attribute.https.html: * http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html: * http/tests/paymentrequest/resources/helpers.js: (async.getPaymentRequestResponse): * http/tests/paymentrequest/updateWith-method-pmi-handling.https.html: * http/tests/resources/payment-request.js: Added. (activateThen): * http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html: * http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html: * http/tests/ssl/applepay/PaymentRequest.https.html: * resources/ui-helper.js: (window.UIHelper.activateElement):
Modified Paths
- trunk/LayoutTests/ChangeLog
- trunk/LayoutTests/http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-request-canmakepayment-method.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-address.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-option.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-request-show-method.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-response-complete-method.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-response-methodName-attribute.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerName-attribute.https.html
- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html
- trunk/LayoutTests/http/tests/paymentrequest/resources/helpers.js
- trunk/LayoutTests/http/tests/paymentrequest/updateWith-method-pmi-handling.https.html
- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html
- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html
- trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html
- trunk/LayoutTests/resources/ui-helper.js
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (224401 => 224402)
--- trunk/LayoutTests/ChangeLog 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/ChangeLog 2017-11-03 16:35:59 UTC (rev 224402)
@@ -1,3 +1,31 @@
+2017-11-02 Andy Estes <aes...@apple.com>
+
+ [Payment Request] show() should only be called with user activation
+ https://bugs.webkit.org/show_bug.cgi?id=179056
+
+ Reviewed by Sam Weinig.
+
+ * http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html:
+ * http/tests/paymentrequest/payment-request-canmakepayment-method.https.html:
+ * http/tests/paymentrequest/payment-request-change-shipping-address.https.html:
+ * http/tests/paymentrequest/payment-request-change-shipping-option.https.html:
+ * http/tests/paymentrequest/payment-request-show-method.https.html:
+ * http/tests/paymentrequest/payment-response-complete-method.https.html:
+ * http/tests/paymentrequest/payment-response-methodName-attribute.https.html:
+ * http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html:
+ * http/tests/paymentrequest/payment-response-payerName-attribute.https.html:
+ * http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html:
+ * http/tests/paymentrequest/resources/helpers.js:
+ (async.getPaymentRequestResponse):
+ * http/tests/paymentrequest/updateWith-method-pmi-handling.https.html:
+ * http/tests/resources/payment-request.js: Added.
+ (activateThen):
+ * http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html:
+ * http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html:
+ * http/tests/ssl/applepay/PaymentRequest.https.html:
+ * resources/ui-helper.js:
+ (window.UIHelper.activateElement):
+
2017-11-03 Ms2ger <ms2...@igalia.com>
[WPE] Update Event-timestamp-high-resolution.html expectations.
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-address-attributes-and-toJSON-method.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.shippingAddress
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-request-canmakepayment-method.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-request-canmakepayment-method.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-request-canmakepayment-method.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -5,6 +5,8 @@
<meta charset="utf-8">
<title>Tests for PaymentRequest.canMakePayment() method</title>
<link rel="help" href=""
+<script src=""
+<script src=""
<script src=""
<script src=""
<script>
@@ -49,7 +51,7 @@
}
}, `If request.[[state]] is "created", then return a promise that resolves to true for known method.`);
-promise_test(async t => {
+user_activation_test(async t => {
const request = new PaymentRequest(defaultMethods, defaultDetails);
const acceptPromise = request.show(); // Sets state to "interactive"
const canMakePaymentPromise = request.canMakePayment();
@@ -69,7 +71,7 @@
await promise_rejects(t, "InvalidStateError", request.canMakePayment());
}, `If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.`);
-promise_test(async t => {
+user_activation_test(async t => {
const request = new PaymentRequest(defaultMethods, defaultDetails);
const acceptPromise = request.show(); // The state is now "interactive"
acceptPromise.catch(() => {}); // no-op, just to silence unhandled rejection in devtools.
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-address.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-address.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-address.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,8 +4,11 @@
<title>Test for PaymentRequest shippingAddress attribute</title>
<link rel="help" href=""
<link rel="help" href=""
+<script src=""
+<script src=""
<script src=""
<script src=""
+<body>
<script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
@@ -51,7 +54,7 @@
emailAddress: '',
};
internals.mockPaymentCoordinator.setShippingAddress(shippingAddress);
- promise_test(async t => {
+ user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails,
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-option.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-option.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-request-change-shipping-option.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -6,8 +6,11 @@
<title>Test for PaymentRequest shippingOption attribute</title>
<link rel="help" href=""
<link rel="help" href=""
+<script src=""
+<script src=""
<script src=""
<script src=""
+<body>
<script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
@@ -47,7 +50,7 @@
});
function testShippingOptionChanged() {
- promise_test(async t => {
+ user_activation_test(async t => {
const detailsWithShippingOptions = Object.assign({}, validDetails, {
shippingOptions: [validShippingOption1, validShippingOption2],
});
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-request-show-method.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-request-show-method.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-request-show-method.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -5,8 +5,11 @@
<meta charset="utf-8">
<title>Test for PaymentRequest.show() method</title>
<link rel="help" href=""
+<script src=""
+<script src=""
<script src=""
<script src=""
+<body>
<script>
'use strict';
const applePay = Object.freeze({
@@ -40,7 +43,7 @@
}, "Must be possible to construct a payment request");
-promise_test(async t => {
+user_activation_test(async t => {
const request = new PaymentRequest(defaultMethods, defaultDetails);
const acceptPromise = request.show(); // Sets state to "interactive"
await promise_rejects(t, "InvalidStateError", request.show());
@@ -48,7 +51,7 @@
await promise_rejects(t, "AbortError", acceptPromise);
}, `Throws if the promise [[state]] is not "created"`);
-promise_test(async t => {
+user_activation_test(async t => {
const request1 = new PaymentRequest(defaultMethods, defaultDetails);
const request2 = new PaymentRequest(defaultMethods, defaultDetails);
const acceptPromise1 = request1.show();
@@ -58,7 +61,7 @@
await promise_rejects(t, "AbortError", acceptPromise1);
}, `If the user agent's "payment request is showing" boolean is true, then return a promise rejected with an "AbortError" DOMException.`);
-promise_test(async t => {
+user_activation_test(async t => {
const request = new PaymentRequest(
[{ supportedMethods: "this-is-not-supported" }],
defaultDetails);
@@ -66,7 +69,7 @@
await promise_rejects(t, "NotSupportedError", acceptPromise);
}, `If payment method consultation produces no supported method of payment, then return a promise rejected with a "NotSupportedError" DOMException.`);
-promise_test(async t => {
+user_activation_test(async t => {
const request = new PaymentRequest(defaultMethods, defaultDetails);
const acceptPromise = request.show(); // Sets state to "interactive"
internals.mockPaymentCoordinator.cancelPayment();
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-response-complete-method.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-response-complete-method.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-response-complete-method.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.complete() method
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-response-methodName-attribute.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-response-methodName-attribute.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-response-methodName-attribute.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.methodName attribute
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerEmail-attribute.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.payerEmail attribute
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerName-attribute.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerName-attribute.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerName-attribute.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.payerName attribute
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/payment-response-payerPhone-attribute.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,8 @@
<title>
PaymentResponse.prototype.payerPhone attribute
</title>
+<script src=""
+<script src=""
<script src=""
<script src=""
<script src=""
Modified: trunk/LayoutTests/http/tests/paymentrequest/resources/helpers.js (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/resources/helpers.js 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/resources/helpers.js 2017-11-03 16:35:59 UTC (rev 224402)
@@ -98,7 +98,7 @@
ev.complete({});
internals.mockPaymentCoordinator.acceptPayment();
};
- const response = await request.show();
+ const response = await activateThen(() => request.show());
return { request, response };
}
Modified: trunk/LayoutTests/http/tests/paymentrequest/updateWith-method-pmi-handling.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/paymentrequest/updateWith-method-pmi-handling.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/paymentrequest/updateWith-method-pmi-handling.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -3,6 +3,8 @@
<meta charset="utf-8">
<title>Test for validity of payment method identifiers when calling updateWith() method</title>
<link rel="help" href=""
+<script src=""
+<script src=""
<script src=""
<script src=""
<script>
@@ -62,7 +64,7 @@
countryCode: 'US',
},
});
- promise_test(async t => {
+ user_activation_test(async t => {
const request = new PaymentRequest(
[applePay],
validDetails,
Added: trunk/LayoutTests/http/tests/resources/payment-request.js (0 => 224402)
--- trunk/LayoutTests/http/tests/resources/payment-request.js (rev 0)
+++ trunk/LayoutTests/http/tests/resources/payment-request.js 2017-11-03 16:35:59 UTC (rev 224402)
@@ -0,0 +1,20 @@
+function activateThen(completion)
+{
+ return new Promise(resolve => {
+ var button = document.createElement("button");
+ button.style["position"] = "absolute";
+ button._onclick_ = () => {
+ document.body.removeChild(button);
+ resolve(completion());
+ };
+ document.body.insertBefore(button, document.body.firstChild);
+ UIHelper.activateElement(button);
+ });
+}
+
+function user_activation_test(func, name)
+{
+ promise_test(async t => {
+ await activateThen(() => func(t));
+ }, name);
+}
Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayMerchantValidationEvent.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,7 @@
<meta charset="utf-8">
<script src=""
<script src=""
+<script src=""
</head>
<body>
<script>
@@ -36,10 +37,10 @@
var paymentRequest = new PaymentRequest([validPaymentMethod()], validPaymentDetails());
paymentRequest._onapplepayvalidatemerchant_ = (event) => {
test(event, paymentRequest);
- paymentRequest.abort();
+ paymentRequest.abort().catch(() => {});
resolve();
};
- paymentRequest.show().catch(() => {});
+ activateThen(() => paymentRequest.show().catch(() => {}));
});
}
Modified: trunk/LayoutTests/http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/ssl/applepay/ApplePayPaymentMethodUpdateEvent.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -4,6 +4,7 @@
<meta charset="utf-8">
<script src=""
<script src=""
+<script src=""
</head>
<body>
<script>
@@ -62,9 +63,11 @@
document.querySelector("button").remove();
finishJSTest();
};
-
- paymentRequest.show();
- internals.mockPaymentCoordinator.changePaymentMethod(expectedPaymentMethod);
+
+ activateThen(() => {
+ paymentRequest.show();
+ internals.mockPaymentCoordinator.changePaymentMethod(expectedPaymentMethod);
+ });
}
window._onload_ = function() {
Modified: trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html (224401 => 224402)
--- trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/http/tests/ssl/applepay/PaymentRequest.https.html 2017-11-03 16:35:59 UTC (rev 224402)
@@ -2,7 +2,9 @@
<html>
<head>
<meta charset="utf-8">
-<script src=""
+<script src=""
+<script src=""
+<script src=""
</head>
<body>
<script>
@@ -31,23 +33,20 @@
}
function logAndShouldThrow(setup, test) {
- debug("SETUP: " + setup)
- eval(setup)
- shouldThrow(test)
- debug("")
+ return activateThen(() => {
+ debug("SETUP: " + setup);
+ eval(setup);
+ shouldThrow(test);
+ debug("");
+ });
}
-function logAndShouldNotThrow(setup, test) {
- debug("SETUP: " + setup)
- eval(setup)
- shouldNotThrow(test)
- debug("")
-}
-
function logAndShouldReject(setup, test) {
- debug("SETUP: " + setup)
- eval(setup)
- return shouldReject(test)
+ return activateThen(() => {
+ debug("SETUP: " + setup)
+ eval(setup)
+ return shouldReject(test)
+ });
}
async function go() {
@@ -145,59 +144,59 @@
debug("Testing PaymentDetails.total")
debug("")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); delete paymentDetails.total;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = undefined;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = [];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: 'amount' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: '', value: '0' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); delete paymentDetails.total;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = undefined;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = [];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: 'amount' };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: '', value: '0' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value: '0' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
debug("")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value:'-10.00'} };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value:'-10.00'} };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.total = { label: 'label', amount: { currency: 'USD', value: '10000000000.00' } };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
debug("")
debug("Testing PaymentDetails.displayItems")
debug("");
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [''];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [null];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [undefined];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{}];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '10.00', type: 'invalid' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [''];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [null];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [undefined];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{}];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: '10.00', type: 'invalid' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.displayItems = [{ label: 'label', amount: { currency: 'EUR', value: '10.00' } }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
debug("Testing PaymentDetails.shippingOptions")
debug("");
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 'invalid';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
- logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '-1', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = '';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 'invalid';", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = null;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = 7;", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = { };", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
+ await logAndShouldThrow("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: '-1', detail: '', identifier: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
await logAndShouldReject("paymentDetails = validPaymentDetails(); paymentDetails.shippingOptions = [{ amount: { currency: 'EUR', value: '10.00' }, id: '', label: '' }];", "request = new PaymentRequest([validPaymentMethod()], paymentDetails); request.show()")
debug("Testing PaymentOptions")
debug("");
- logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = '';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
- logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 'invalid';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
- logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = null;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
- logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 7;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
- logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = { };", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
+ await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = '';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
+ await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 'invalid';", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
+ await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = null;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
+ await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = 7;", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
+ await logAndShouldThrow("paymentOptions = {}; paymentOptions.shippingType = { };", "new PaymentRequest([validPaymentMethod()], validPaymentDetails(), paymentOptions); request.show()")
document.querySelector("button").remove();
Modified: trunk/LayoutTests/resources/ui-helper.js (224401 => 224402)
--- trunk/LayoutTests/resources/ui-helper.js 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/LayoutTests/resources/ui-helper.js 2017-11-03 16:35:59 UTC (rev 224402)
@@ -47,6 +47,13 @@
});
}
+ static activateElement(element)
+ {
+ const x = element.offsetLeft + element.offsetWidth / 2;
+ const y = element.offsetTop + element.offsetHeight / 2;
+ return UIHelper.activateAt(x, y);
+ }
+
static keyDown(key)
{
if (!this.isWebKit2() || !this.isIOS()) {
Modified: trunk/Source/WebCore/ChangeLog (224401 => 224402)
--- trunk/Source/WebCore/ChangeLog 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/Source/WebCore/ChangeLog 2017-11-03 16:35:59 UTC (rev 224402)
@@ -1,3 +1,15 @@
+2017-11-02 Andy Estes <aes...@apple.com>
+
+ [Payment Request] show() should only be called with user activation
+ https://bugs.webkit.org/show_bug.cgi?id=179056
+
+ Reviewed by Sam Weinig.
+
+ Updated existing tests to call PaymentRequest.show() with user activation.
+
+ * Modules/paymentrequest/PaymentRequest.cpp:
+ (WebCore::PaymentRequest::show):
+
2017-11-03 Daniel Bates <daba...@apple.com>
Invalidate node list when associated form control element is removed
Modified: trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp (224401 => 224402)
--- trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp 2017-11-03 16:33:58 UTC (rev 224401)
+++ trunk/Source/WebCore/Modules/paymentrequest/PaymentRequest.cpp 2017-11-03 16:35:59 UTC (rev 224402)
@@ -382,8 +382,10 @@
// https://www.w3.org/TR/payment-request/#show()-method
void PaymentRequest::show(Document& document, ShowPromise&& promise)
{
- // FIXME: Reject promise with SecurityError if show() was not triggered by a user gesture.
- // Find a way to do this without breaking the payment-request web platform tests.
+ if (!UserGestureIndicator::processingUserGesture()) {
+ promise.reject(Exception { SecurityError, "show() must be triggered by user activation." });
+ return;
+ }
if (m_state != State::Created) {
promise.reject(Exception { InvalidStateError });
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes