Commit e36efa6b authored by Reilly Grant's avatar Reilly Grant Committed by Commit Bot

Switch Payments LayoutTest to the new Mojo JS bindings

This change rewrites the single Payments API layout test that uses Mojo
mock services to use the new Mojo JS bindings.

Bug: 699569
Change-Id: I6fa74bfb2e926d35ccf3232c87f7a0114592ce9a
Reviewed-on: https://chromium-review.googlesource.com/595246
Commit-Queue: Reilly Grant <reillyg@chromium.org>
Reviewed-by: default avatarYuzhu Shen <yzshen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491080}
parent b5bb5a2b
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/mojo-helpers.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/third_party/WebKit/public/platform/modules/payments/payment_request.mojom.js"></script>
<script src="resources/payment-request-mock.js"></script>
<script>
var details = {
total:
{
label: 'Total',
amount: {currency: 'USD', value: '55.00'}, // US$55.00
}
total: {
label: 'Total',
amount: {currency: 'USD', value: '55.00'}, // US$55.00
}
};
var response_data = {
method_name: 'visa',
stringified_details: '{}'
methodName: 'basic-card',
stringifiedDetails: '{}'
};
promise_test(t => {
var mock;
var completeResult;
return paymentRequestMock
.then(m => {
mock = m;
var result = new PaymentRequest([{'supportedMethods': ['visa']}], details).show();
gc();
mock.onPaymentResponse(response_data);
return result;
})
.then(response => {
completeResult = response.complete("success");
// Return before calling gc() to make sure reference to response
// is gone.
})
.then(() => {
gc();
mock.onComplete();
return completeResult;
});
}, 'Promises resolve even without references to request or response.');
promise_test(async () => {
let result = new PaymentRequest([
{'supportedMethods': ['basic-card']}
], details).show();
gc();
paymentRequestMock.onPaymentResponse(response_data);
let response = await result;
let completeResult = response.complete("success");
response = null;
gc();
paymentRequestMock.onComplete();
return completeResult;
}, 'Promises resolve even without references to request or response.');
</script>
......@@ -4,49 +4,44 @@
"use strict";
let paymentRequestMock = loadMojoModules(
'paymentRequestMock', ['third_party/WebKit/public/platform/modules/payments/payment_request.mojom',
'mojo/public/js/bindings',
]).then(mojo => {
let [paymentRequest, bindings] = mojo.modules;
class PaymentRequestMock {
constructor(interfaceProvider) {
interfaceProvider.addInterfaceOverrideForTesting(
paymentRequest.PaymentRequest.name,
handle => this.bindings_.addBinding(this, handle));
this.interfaceProvider_ = interfaceProvider;
this.pendingResponse_ = null;
this.bindings_ = new bindings.BindingSet(paymentRequest.PaymentRequest);
}
class PaymentRequestMock {
constructor() {
this.pendingResponse_ = null;
this.bindings_ = new mojo.BindingSet(payments.mojom.PaymentRequest);
this.interceptor_ = new MojoInterfaceInterceptor(
payments.mojom.PaymentRequest.name);
this.interceptor_.oninterfacerequest =
e => this.bindings_.addBinding(this, e.handle);
this.interceptor_.start();
}
init(client, supportedMethods, details, options) {
this.client_ = client;
if (this.pendingResponse_) {
let response = this.pendingResponse_;
this.pendingResponse_ = null;
this.onPaymentResponse(response);
}
init(client, supportedMethods, details, options) {
this.client_ = client;
if (this.pendingResponse_) {
let response = this.pendingResponse_;
this.pendingResponse_ = null;
this.onPaymentResponse(response);
}
}
show() {}
show() {}
updateWith(details) {}
updateWith(details) {}
complete(success) {}
complete(success) {}
onPaymentResponse(data) {
if (!this.client_) {
this.pendingResponse_ = data;
return;
}
this.client_.onPaymentResponse(new paymentRequest.PaymentResponse(data));
onPaymentResponse(data) {
if (!this.client_) {
this.pendingResponse_ = data;
return;
}
this.client_.onPaymentResponse(new payments.mojom.PaymentResponse(data));
}
onComplete() {
this.client_.onComplete();
}
onComplete() {
this.client_.onComplete();
}
return new PaymentRequestMock(mojo.frameInterfaces);
});
}
let paymentRequestMock = new PaymentRequestMock(mojo.frameInterfaces);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment