Index: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
index 864760ea89049ac282d019d0e0e771b0805dbd1c..6653d4d1b91fae281157425d9f3781d5679450fc 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java |
@@ -38,6 +38,7 @@ import org.chromium.ui.base.WindowAndroid; |
import java.io.IOException; |
import java.io.StringWriter; |
import java.util.ArrayList; |
+import java.util.Collection; |
import java.util.Collections; |
import java.util.HashSet; |
import java.util.List; |
@@ -76,6 +77,7 @@ public class AndroidPaymentApp |
private static final String EXTRA_MERCHANT_NAME = "merchantName"; |
private static final String EXTRA_METHOD_DATA = "methodData"; |
private static final String EXTRA_METHOD_NAMES = "methodNames"; |
+ private static final String EXTRA_MODIFIERS = "modifiers"; |
private static final String EXTRA_PAYMENT_REQUEST_ID = "paymentRequestId"; |
private static final String EXTRA_PAYMENT_REQUEST_ORIGIN = "paymentRequestOrigin"; |
private static final String EXTRA_TOP_LEVEL_CERTIFICATE_CHAIN = "topLevelCertificateChain"; |
@@ -376,6 +378,10 @@ public class AndroidPaymentApp |
} |
extras.putParcelable(EXTRA_METHOD_DATA, methodDataBundle); |
+ if (modifiers != null) { |
+ extras.putString(EXTRA_MODIFIERS, serializeModifiers(modifiers.values())); |
+ } |
+ |
String serializedTotalAmount = serializeTotalAmount(total.amount); |
extras.putString(EXTRA_TOTAL, |
serializedTotalAmount == null ? EMPTY_JSON_DATA : serializedTotalAmount); |
@@ -497,6 +503,51 @@ public class AndroidPaymentApp |
// }}} item |
} |
+ private static String serializeModifiers(Collection<PaymentDetailsModifier> modifiers) { |
+ StringWriter stringWriter = new StringWriter(); |
+ JsonWriter json = new JsonWriter(stringWriter); |
+ try { |
+ json.beginArray(); |
+ for (PaymentDetailsModifier modifier : modifiers) { |
+ serializeModifier(modifier, json); |
+ } |
+ json.endArray(); |
+ } catch (IOException e) { |
+ return EMPTY_JSON_DATA; |
+ } |
+ return stringWriter.toString(); |
+ } |
+ |
+ private static void serializeModifier(PaymentDetailsModifier modifier, JsonWriter json) |
+ throws IOException { |
+ // {{{ |
+ json.beginObject(); |
+ |
+ // total {{{ |
+ if (modifier.total != null) { |
+ json.name("total"); |
+ serializePaymentItem(modifier.total, json); |
+ } else { |
+ json.name("total").nullValue(); |
+ } |
+ // }}} total |
+ |
+ // supportedMethods {{{ |
+ json.name("supportedMethods").beginArray(); |
+ for (String method : modifier.methodData.supportedMethods) { |
+ json.value(method); |
+ } |
+ json.endArray(); |
+ // }}} supportedMethods |
+ |
+ // data {{{ |
+ json.name("data").value(modifier.methodData.stringifiedData); |
+ // }}} |
+ |
+ json.endObject(); |
+ // }}} |
+ } |
+ |
@Override |
public void onIntentCompleted(WindowAndroid window, int resultCode, Intent data) { |
ThreadUtils.assertOnUiThread(); |