blob: 214415f0fd6650d020ff63865de005f41f1eb358 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/ui-helper.js"></script>
<script src="../resources/inspector-test.js"></script>
<script>
const method = {
supportedMethods: "https://apple.com/apple-pay",
data: {
version: 2,
merchantIdentifier: "",
merchantCapabilities: ["supports3DS"],
supportedNetworks: ["visa", "masterCard"],
countryCode: "US",
},
};
const simpleDetails = {
total: {
label: "Total",
amount: {currency: "USD", value: "9.99"}
}
};
const largeDetails = {
total: {
label: "Total",
amount: {currency: "USD", value: "99.00"},
},
displayItems: [
{
label: "Item 1",
amount: {currency: "USD", value: "90.00"},
}, {
label: "Item 2",
amount: {currency: "USD", value: "90.00"},
pending: true,
}, {
label: "Item 3",
amount: {currency: "USD", value: "9.00"},
}
],
shippingOptions: [
{
id: "shippingId1",
label: "Shipping Label 1",
amount: {currency: "USD", value: "5.00"},
selected: false,
}, {
id: "shippingId2",
label: "Shipping Label 2",
amount: {currency: "USD", value: "10.00"},
selected: true,
}
],
modifiers: [
{
supportedMethods: "basic-card",
total: {
label: "Total",
amount: {currency: "USD", value: "99.00"},
},
}
],
};
let currentRequest = null;
function createPaymentRequest() {
if (currentRequest)
currentRequest.abort().catch(() => {});
currentRequest = new PaymentRequest([method], simpleDetails, {requestShipping: true});
return currentRequest;
}
function triggerLargePaymentRequest() {
let request = new PaymentRequest([method], largeDetails, {requestShipping: true});
Promise.resolve().then(() => { TestPage.dispatchEventToFrontend("Continue"); });
return request;
}
function triggerCreatedPaymentRequest() {
let request = createPaymentRequest();
Promise.resolve().then(() => { TestPage.dispatchEventToFrontend("Continue"); });
return request;
}
function triggerInitiatedPaymentRequest() {
let request = createPaymentRequest();
UIHelper.withUserGesture(async () => {
request.show().catch(() => {});
TestPage.dispatchEventToFrontend("Continue");
});
return request;
}
function triggerClosedPaymentRequest() {
let request = createPaymentRequest();
UIHelper.withUserGesture(async () => {
request.show().catch(() => {});
await request.abort();
TestPage.dispatchEventToFrontend("Continue");
});
return request;
}
// ----
function test()
{
async function propertyDescriptorString(propertyDescriptor) {
function inspectedPage_internalValue_JSON() {
return JSON.stringify(this, (key, value) => {
if (key === "id")
return "<filtered>";
return value;
}, 2);
}
// Primitive. We have the value.
if (propertyDescriptor.value.type !== "object")
return propertyDescriptor.name + ": " + JSON.stringify(propertyDescriptor.value.description);
// Object. Stringify on the page.
let [jsonValue] = await promisify((cb) => { propertyDescriptor.value.callFunctionJSON(inspectedPage_internalValue_JSON, undefined, cb); });
return propertyDescriptor.name + ": " + jsonValue;
}
let suite = InspectorTest.createAsyncSuite("RemoteObject.InternalProperties.PaymentRequest");
function addTestCase({name, description, expression}) {
suite.addTestCase({
name, description,
async test() {
let [remoteObject, _] = await Promise.all([
InspectorTest.evaluateInPage(expression, null, {remoteObjectOnly: true}),
InspectorTest.awaitEvent("Continue"),
]);
let [propertyDescriptors] = await promisify((cb) => { remoteObject.getPropertyDescriptors(cb); });
for (let propertyDescriptor of propertyDescriptors.reverse()) {
if (propertyDescriptor.isInternalProperty) {
let displayString = await propertyDescriptorString(propertyDescriptor);
InspectorTest.log("INTERNAL PROPERTY: " + displayString);
}
}
}
});
}
addTestCase({
name: "RemoteObject.InternalProperties.PaymentRequest.Created.Large",
expression: `triggerLargePaymentRequest()`,
});
addTestCase({
name: "RemoteObject.InternalProperties.PaymentRequest.Created",
expression: `triggerCreatedPaymentRequest()`,
});
addTestCase({
name: "RemoteObject.InternalProperties.PaymentRequest.Initiated",
expression: `triggerInitiatedPaymentRequest()`,
});
addTestCase({
name: "RemoteObject.InternalProperties.PaymentRequest.Closed",
expression: `triggerClosedPaymentRequest()`,
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Internal properties of a PaymentRequest.</p>
</body>
</html>