| Index: third_party/WebKit/public/platform/modules/payments/payment_request.mojom | 
| diff --git a/third_party/WebKit/public/platform/modules/payments/payment_request.mojom b/third_party/WebKit/public/platform/modules/payments/payment_request.mojom | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..e42dd6d658ea66206dba9e1bbe1c67d18ce43b96 | 
| --- /dev/null | 
| +++ b/third_party/WebKit/public/platform/modules/payments/payment_request.mojom | 
| @@ -0,0 +1,105 @@ | 
| +// Copyright 2016 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +[JavaPackage="org.chromium.mojom.payments"] | 
| +module mojom; | 
| + | 
| +// The shipping address that the browser process provides to the renderer | 
| +// process. Built either by the browser or a payment app. | 
| +struct ShippingAddress { | 
| +  // ISO 3166 country code. Two upper case ASCII letters. | 
| +  string region_code; | 
| + | 
| +  array<string> address_line; | 
| +  string administrative_area; | 
| +  string locality; | 
| +  string dependent_locality; | 
| +  string postal_code; | 
| +  string sorting_code; | 
| + | 
| +  // Optional shortest ISO 639 language code. Two or three lower case ASCII | 
| +  // letters. | 
| +  string language_code; | 
| + | 
| +  // Optional ISO 1524 script code. Four ASCII letters. The first letter is | 
| +  // upper case; the rest are lower case. | 
| +  string script_code; | 
| + | 
| +  string organization; | 
| +  string recipient; | 
| +}; | 
| + | 
| +struct PaymentResponse { | 
| +  string method_name; | 
| + | 
| +  // Payment method specific JSON string that is built either by the browser or | 
| +  // a payment app, for example Android Pay. Browser ensures that the string can | 
| +  // be successfully parsed into base::JSONParser. Renderer parses this string | 
| +  // via v8::JSON::Parse() and hands off the result to the merchant website. | 
| +  // There's no one format for this object, so richer types cannot be used. A | 
| +  // simple example: | 
| +  // | 
| +  // {"nameOnCard": "Jon Doe", "pan": "4111 1111 1111 1111"} | 
| +  string stringified_details; | 
| +}; | 
| + | 
| +interface PaymentRequestClient { | 
| +  OnShippingAddressChange(ShippingAddress address); | 
| +  OnShippingOptionChange(string shipping_option_id); | 
| +  OnPaymentResponse(PaymentResponse response); | 
| +  OnError(); | 
| +  OnComplete(); | 
| +}; | 
| + | 
| +// The currency amount that the renderer provides to the browser process. The | 
| +// browser shows the amount in UI and forwards it on to the payment app, if it | 
| +// requires the amount. | 
| +struct CurrencyAmount { | 
| +  // ISO 4217 currency code. Three upper case ASCII letters. | 
| +  string currency_code; | 
| + | 
| +  // ISO 20022 CurrencyAnd30Amount. Up to 30 total digits. Up to 10 fraction | 
| +  // digits. Separated by a dot. | 
| +  string value; | 
| +}; | 
| + | 
| +struct PaymentItem { | 
| +  string id; | 
| +  string label; | 
| +  CurrencyAmount amount; | 
| +}; | 
| + | 
| +struct ShippingOption { | 
| +  string id; | 
| +  string label; | 
| +  CurrencyAmount amount; | 
| +}; | 
| + | 
| +struct PaymentDetails { | 
| +  array<PaymentItem> items; | 
| +  array<ShippingOption> shipping_options; | 
| +}; | 
| + | 
| +struct PaymentOptions { | 
| +  bool request_shipping; | 
| +}; | 
| + | 
| +interface PaymentRequest { | 
| +  SetClient(PaymentRequestClient client); | 
| +  Show(array<string> supported_methods, | 
| +       PaymentDetails details, | 
| +       PaymentOptions options, | 
| +       // A JSON string built by the renderer from a JavaScript object that the | 
| +       // merchant website provides. The renderer uses | 
| +       // blink::JSONObject::toJSONString() to generate this string. The browser | 
| +       // parses the string via base::JSONParser and passes a part of the JSON | 
| +       // object to the payment app, for example Android Pay. There's no one | 
| +       // format for this object, so richer types cannot be used. A simple | 
| +       // example: | 
| +       // | 
| +       // {"https://android.com/pay": {"gateway": "stripe"}} | 
| +       string stringified_data); | 
| +  Abort(); | 
| +  Complete(bool success); | 
| +}; | 
|  |