Commit b8a091bd authored by Liquan (Max) Gu's avatar Liquan (Max) Gu Committed by Commit Bot

[PlayBilling] Remove WebPaymentIntentHelper deps on Chromium Types

Description:
This CL removes the WebPaymentIntentHelper dependency on some Chromium
types, e.g., PaymentDetailsModifier, PaymentItem.

Before Change:
WebPaymentIntentHelper depends on Chromium types.

After Change:
WebPaymentIntentHelper doesn't depend on Chromium types.

Change:
* Create new types mirroring those in org.chromium.payments.mojom.
* Create converter to convert the mojom types to the new types.
* Convert types before passing them into WebPaymentIntentHelper.

Bug: 1057488

Change-Id: I5dd9fbdbc91ae38f5cd78ec48288ecfcf10c75ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2088236
Commit-Queue: Liquan (Max) Gu <maxlg@chromium.org>
Reviewed-by: default avatarEmily Stark <estark@chromium.org>
Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#747852}
parent 804beaf6
...@@ -1281,7 +1281,7 @@ chrome_java_sources = [ ...@@ -1281,7 +1281,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/payments/SslValidityChecker.java", "java/src/org/chromium/chrome/browser/payments/SslValidityChecker.java",
"java/src/org/chromium/chrome/browser/payments/SupportedDelegations.java", "java/src/org/chromium/chrome/browser/payments/SupportedDelegations.java",
"java/src/org/chromium/chrome/browser/payments/UriUtils.java", "java/src/org/chromium/chrome/browser/payments/UriUtils.java",
"java/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelper.java", "java/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTypeConverter.java",
"java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java", "java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerCoordinator.java",
"java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java", "java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerMediator.java",
"java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerProperties.java", "java/src/org/chromium/chrome/browser/payments/handler/PaymentHandlerProperties.java",
......
...@@ -26,6 +26,7 @@ import org.chromium.base.task.PostTask; ...@@ -26,6 +26,7 @@ import org.chromium.base.task.PostTask;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.components.payments.ErrorStrings; import org.chromium.components.payments.ErrorStrings;
import org.chromium.components.payments.intent.WebPaymentIntentHelper;
import org.chromium.components.url_formatter.SchemeDisplay; import org.chromium.components.url_formatter.SchemeDisplay;
import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.UiThreadTaskTraits;
...@@ -172,8 +173,9 @@ public class AndroidPaymentApp extends PaymentApp implements WindowAndroid.Inten ...@@ -172,8 +173,9 @@ public class AndroidPaymentApp extends PaymentApp implements WindowAndroid.Inten
mIsReadyToPayIntent.putExtras(WebPaymentIntentHelper.buildExtras(null /* id */, mIsReadyToPayIntent.putExtras(WebPaymentIntentHelper.buildExtras(null /* id */,
null /* merchantName */, removeUrlScheme(origin), removeUrlScheme(iframeOrigin), null /* merchantName */, removeUrlScheme(origin), removeUrlScheme(iframeOrigin),
certificateChain, methodDataMap, null /* total */, null /* displayItems */, certificateChain,
null /* modifiers */)); WebPaymentIntentHelperTypeConverter.fromMojoPaymentMethodDataMap(methodDataMap),
null /* total */, null /* displayItems */, null /* modifiers */));
if (mBypassIsReadyToPayServiceInTest) { if (mBypassIsReadyToPayServiceInTest) {
respondToIsReadyToPayQuery(true); respondToIsReadyToPayQuery(true);
...@@ -321,7 +323,11 @@ public class AndroidPaymentApp extends PaymentApp implements WindowAndroid.Inten ...@@ -321,7 +323,11 @@ public class AndroidPaymentApp extends PaymentApp implements WindowAndroid.Inten
} }
mPayIntent.putExtras(WebPaymentIntentHelper.buildExtras(id, merchantName, origin, mPayIntent.putExtras(WebPaymentIntentHelper.buildExtras(id, merchantName, origin,
iframeOrigin, certificateChain, methodDataMap, total, displayItems, modifiers)); iframeOrigin, certificateChain,
WebPaymentIntentHelperTypeConverter.fromMojoPaymentMethodDataMap(methodDataMap),
WebPaymentIntentHelperTypeConverter.fromMojoPaymentItem(total),
WebPaymentIntentHelperTypeConverter.fromMojoPaymentItems(displayItems),
WebPaymentIntentHelperTypeConverter.fromMojoPaymentDetailsModifierMap(modifiers)));
try { try {
if (!window.showIntent(mPayIntent, this, R.string.payments_android_app_error)) { if (!window.showIntent(mPayIntent, this, R.string.payments_android_app_error)) {
notifyErrorInvokingPaymentApp(ErrorStrings.PAYMENT_APP_LAUNCH_FAIL); notifyErrorInvokingPaymentApp(ErrorStrings.PAYMENT_APP_LAUNCH_FAIL);
......
...@@ -12,6 +12,7 @@ import android.util.Pair; ...@@ -12,6 +12,7 @@ import android.util.Pair;
import org.chromium.components.payments.PaymentManifestDownloader; import org.chromium.components.payments.PaymentManifestDownloader;
import org.chromium.components.payments.PaymentManifestParser; import org.chromium.components.payments.PaymentManifestParser;
import org.chromium.components.payments.intent.WebPaymentIntentHelper;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
......
...@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVeri ...@@ -19,6 +19,7 @@ import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVeri
import org.chromium.components.payments.MethodStrings; import org.chromium.components.payments.MethodStrings;
import org.chromium.components.payments.PaymentManifestDownloader; import org.chromium.components.payments.PaymentManifestDownloader;
import org.chromium.components.payments.PaymentManifestParser; import org.chromium.components.payments.PaymentManifestParser;
import org.chromium.components.payments.intent.WebPaymentIntentHelper;
import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.payments.mojom.PaymentDetailsModifier;
import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.url.URI; import org.chromium.url.URI;
......
...@@ -4,4 +4,7 @@ per-file JourneyLogger.java=sebsg@chromium.org ...@@ -4,4 +4,7 @@ per-file JourneyLogger.java=sebsg@chromium.org
per-file PaymentRequestMetrics.java=sebsg@chromium.org per-file PaymentRequestMetrics.java=sebsg@chromium.org
per-file PaymentResponseHelper.java=sebsg@chromium.org per-file PaymentResponseHelper.java=sebsg@chromium.org
per-file *TypeConverter*.*=set noparent
per-file *TypeConverter*.*=file://ipc/SECURITY_OWNERS
# COMPONENT: UI>Browser>Payments # COMPONENT: UI>Browser>Payments
// Copyright 2020 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.
package org.chromium.chrome.browser.payments;
import androidx.annotation.Nullable;
import org.chromium.base.CollectionUtil;
import org.chromium.components.payments.intent.WebPaymentIntentHelperType;
import org.chromium.payments.mojom.PaymentCurrencyAmount;
import org.chromium.payments.mojom.PaymentDetailsModifier;
import org.chromium.payments.mojom.PaymentItem;
import org.chromium.payments.mojom.PaymentMethodData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* This class defines the utility functions that convert the payment info types in
* org.chromium.payments.mojom to their counterparts in WebPaymentIntentHelperType.
*/
public final class WebPaymentIntentHelperTypeConverter {
public static WebPaymentIntentHelperType.PaymentCurrencyAmount fromMojoPaymentCurrencyAmount(
@Nullable PaymentCurrencyAmount currencyAmount) {
if (currencyAmount == null) return null;
return new WebPaymentIntentHelperType.PaymentCurrencyAmount(
/*currency=*/currencyAmount.currency, /*value=*/currencyAmount.value);
}
public static WebPaymentIntentHelperType.PaymentItem fromMojoPaymentItem(
@Nullable PaymentItem item) {
if (item == null) return null;
return new WebPaymentIntentHelperType.PaymentItem(
fromMojoPaymentCurrencyAmount(item.amount));
}
public static WebPaymentIntentHelperType.PaymentDetailsModifier fromMojoPaymentDetailsModifier(
@Nullable PaymentDetailsModifier detailsModifier) {
if (detailsModifier == null) return null;
return new WebPaymentIntentHelperType.PaymentDetailsModifier(
fromMojoPaymentItem(detailsModifier.total),
fromMojoPaymentMethodData(detailsModifier.methodData));
}
public static WebPaymentIntentHelperType.PaymentMethodData fromMojoPaymentMethodData(
@Nullable PaymentMethodData methodData) {
if (methodData == null) return null;
return new WebPaymentIntentHelperType.PaymentMethodData(
/*supportedMethod=*/methodData.supportedMethod,
/*stringifiedData=*/methodData.stringifiedData);
}
public static Map<String, WebPaymentIntentHelperType.PaymentMethodData>
fromMojoPaymentMethodDataMap(@Nullable Map<String, PaymentMethodData> methodDataMap) {
if (methodDataMap == null) return null;
Map<String, WebPaymentIntentHelperType.PaymentMethodData> compatibleMethodDataMap =
new HashMap<>();
CollectionUtil.forEach(methodDataMap,
entry
-> compatibleMethodDataMap.put(entry.getKey(),
WebPaymentIntentHelperTypeConverter.fromMojoPaymentMethodData(
entry.getValue())));
return compatibleMethodDataMap;
}
public static Map<String, WebPaymentIntentHelperType.PaymentDetailsModifier>
fromMojoPaymentDetailsModifierMap(@Nullable Map<String, PaymentDetailsModifier> modifiers) {
if (modifiers == null) return null;
Map<String, WebPaymentIntentHelperType.PaymentDetailsModifier> compatibleModifiers =
new HashMap<>();
CollectionUtil.forEach(modifiers,
entry
-> compatibleModifiers.put(entry.getKey(),
WebPaymentIntentHelperTypeConverter.fromMojoPaymentDetailsModifier(
entry.getValue())));
return compatibleModifiers;
}
public static List<WebPaymentIntentHelperType.PaymentItem> fromMojoPaymentItems(
@Nullable List<PaymentItem> paymentItems) {
if (paymentItems == null) return null;
List<WebPaymentIntentHelperType.PaymentItem> compatiblePaymentItems = new ArrayList<>();
CollectionUtil.forEach(paymentItems,
element
-> compatiblePaymentItems.add(
WebPaymentIntentHelperTypeConverter.fromMojoPaymentItem(element)));
return compatiblePaymentItems;
}
}
...@@ -61,6 +61,8 @@ android_library("java") { ...@@ -61,6 +61,8 @@ android_library("java") {
"java/src/org/chromium/components/payments/PaymentValidator.java", "java/src/org/chromium/components/payments/PaymentValidator.java",
"java/src/org/chromium/components/payments/UrlUtil.java", "java/src/org/chromium/components/payments/UrlUtil.java",
"java/src/org/chromium/components/payments/WebAppManifestSection.java", "java/src/org/chromium/components/payments/WebAppManifestSection.java",
"java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java",
"java/src/org/chromium/components/payments/intent/WebPaymentIntentHelperType.java",
] ]
deps = [ deps = [
"//base:base_java", "//base:base_java",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.chrome.browser.payments; package org.chromium.components.payments.intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable; import android.os.Parcelable;
...@@ -10,10 +10,10 @@ import android.util.JsonWriter; ...@@ -10,10 +10,10 @@ import android.util.JsonWriter;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.payments.mojom.PaymentCurrencyAmount; import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentCurrencyAmount;
import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentDetailsModifier;
import org.chromium.payments.mojom.PaymentItem; import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentItem;
import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.components.payments.intent.WebPaymentIntentHelperType.PaymentMethodData;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter; import java.io.StringWriter;
...@@ -70,7 +70,7 @@ public class WebPaymentIntentHelper { ...@@ -70,7 +70,7 @@ public class WebPaymentIntentHelper {
* @param modifiers The relevant payment details modifiers. * @param modifiers The relevant payment details modifiers.
* @return the 'extra' property built for the intent. * @return the 'extra' property built for the intent.
*/ */
/* package */ static Bundle buildExtras(@Nullable String id, @Nullable String merchantName, public static Bundle buildExtras(@Nullable String id, @Nullable String merchantName,
String schemelessOrigin, String schemelessIframeOrigin, String schemelessOrigin, String schemelessIframeOrigin,
@Nullable byte[][] certificateChain, Map<String, PaymentMethodData> methodDataMap, @Nullable byte[][] certificateChain, Map<String, PaymentMethodData> methodDataMap,
@Nullable PaymentItem total, @Nullable List<PaymentItem> displayItems, @Nullable PaymentItem total, @Nullable List<PaymentItem> displayItems,
......
// Copyright 2020 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.
package org.chromium.components.payments.intent;
/**
* The types that mirror the corresponding types in org.chromium.payments.mojom. This class should
* be independent of the org.chromium package.
*/
public final class WebPaymentIntentHelperType {
/** The class that mirrors mojom.PaymentCurrencyAmount. */
public static final class PaymentCurrencyAmount {
public final String currency;
public final String value;
public PaymentCurrencyAmount(String currency, String value) {
this.currency = currency;
this.value = value;
}
}
/** The class that mirrors mojom.PaymentItem. */
public static final class PaymentItem {
public final PaymentCurrencyAmount amount;
public PaymentItem(PaymentCurrencyAmount amount) {
this.amount = amount;
}
}
/** The class that mirrors mojom.PaymentDetailsModifier. */
public static final class PaymentDetailsModifier {
public final PaymentItem total;
public final PaymentMethodData methodData;
public PaymentDetailsModifier(PaymentItem total, PaymentMethodData methodData) {
this.total = total;
this.methodData = methodData;
}
}
/** The class that mirrors mojom.PaymentMethodData. */
public static final class PaymentMethodData {
public final String supportedMethod;
public final String stringifiedData;
public PaymentMethodData(String supportedMethod, String stringifiedData) {
this.supportedMethod = supportedMethod;
this.stringifiedData = stringifiedData;
}
}
}
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