Add a flag to omit deprecated parameters in payment Android intents
Feature flag: AndroidPaymentIntentsOmitDeprecatedParameters
(Disabled by default)
Design: go/google-pay-in-webview-android-intents-dd
Bug: 40849135
Fixed: 376270117
Change-Id: I7d14521ef0cc90abac5e8970f219503835a569ab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6020055
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Darwin Yang <darwinyang@chromium.org>
Commit-Queue: Rouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1383776}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
index 828474b..f97eedf 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinderUnitTest.java
@@ -69,6 +69,7 @@
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(AndroidPaymentAppFinderUnitTest.PAYMENTS_BROWSER_UNIT_TESTS)
@Features.EnableFeatures({PaymentFeatureList.UPDATE_PAYMENT_DETAILS_INTENT_FILTER_IN_PAYMENT_APP})
+@Features.DisableFeatures({PaymentFeatureList.ANDROID_PAYMENT_INTENTS_OMIT_DEPRECATED_PARAMETERS})
public class AndroidPaymentAppFinderUnitTest extends BlankUiTestActivityTestCase {
// Collection of payments unit tests that require the browser process to be initialized.
static final String PAYMENTS_BROWSER_UNIT_TESTS = "PaymentsBrowserUnitTests";
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
index 362a2668..b20ead5f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/WebPaymentIntentHelperTest.java
@@ -133,7 +133,8 @@
displayItems,
modifiers,
paymentOptions,
- shippingOptions);
+ shippingOptions,
+ /* removeDeprecatedFields= */ false);
Assert.assertEquals(WebPaymentIntentHelper.ACTION_PAY, intent.getAction());
Assert.assertEquals("package.name", intent.getComponent().getPackageName());
Assert.assertEquals("activity.name", intent.getComponent().getClassName());
@@ -251,7 +252,8 @@
displayItems,
modifiers,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
Bundle bundle = intent.getExtras();
Assert.assertNotNull(bundle);
@@ -291,6 +293,58 @@
@Test
@SmallTest
@Feature({"Payments"})
+ public void verifyRemoveDeprecatedFieldsFromPayIntent() throws Throwable {
+ Map<String, PaymentMethodData> methodDataMap = new HashMap<String, PaymentMethodData>();
+ PaymentMethodData bobPayMethodData = new PaymentMethodData("method", "null");
+ methodDataMap.put("bobPay", bobPayMethodData);
+
+ PaymentItem total = new PaymentItem(new PaymentCurrencyAmount("CAD", "200"));
+
+ List<PaymentItem> displayItems = new ArrayList<PaymentItem>();
+ displayItems.add(new PaymentItem(new PaymentCurrencyAmount("CAD", "50")));
+ displayItems.add(new PaymentItem(new PaymentCurrencyAmount("CAD", "150")));
+
+ Map<String, PaymentDetailsModifier> modifiers =
+ new HashMap<String, PaymentDetailsModifier>();
+ PaymentDetailsModifier modifier = new PaymentDetailsModifier(total, bobPayMethodData);
+ modifiers.put("modifier_key", modifier);
+
+ byte[][] certificateChain = new byte[][] {{0}};
+
+ Intent intent =
+ WebPaymentIntentHelper.createPayIntent(
+ "package.name",
+ "activity.name",
+ "payment.request.id",
+ "merchant.name",
+ "schemeless.origin",
+ "schemeless.iframe.origin",
+ certificateChain,
+ methodDataMap,
+ total,
+ displayItems,
+ modifiers,
+ /* paymentOptions= */ null,
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ true);
+ Bundle bundle = intent.getExtras();
+ Assert.assertNotNull(bundle);
+
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_ID));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_ORIGIN));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_IFRAME_ORIGIN));
+ Assert.assertNull(
+ bundle.getParcelableArray(
+ WebPaymentIntentHelper.EXTRA_DEPRECATED_CERTIFICATE_CHAIN));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_METHOD_NAME));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA));
+ Assert.assertNull(bundle.getParcelable(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA_MAP));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_DETAILS));
+ }
+
+ @Test
+ @SmallTest
+ @Feature({"Payments"})
public void nullPackageNameExceptionTest() throws Throwable {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("packageName should not be null or empty.");
@@ -314,7 +368,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -343,7 +398,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -372,7 +428,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -401,7 +458,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -430,7 +488,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -456,7 +515,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -485,7 +545,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -514,7 +575,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -543,7 +605,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -572,7 +635,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -603,7 +667,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
// Verify that a null value in methodDataMap would trigger an exception.
@@ -632,7 +697,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
// Verify that a null methodDataMap would trigger an exception.
@@ -658,7 +724,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
// Verify that an empty methodDataMap would trigger an exception.
@@ -686,7 +753,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -713,7 +781,8 @@
/* displayItems= */ null,
/* modifiers= */ null,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
// Verify that a null value in the modifier map would trigger an exception.
@@ -747,7 +816,8 @@
/* displayItems= */ null,
modifiers,
/* paymentOptions= */ null,
- /* shippingOptions= */ null);
+ /* shippingOptions= */ null,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -1065,7 +1135,8 @@
"schemeless.iframe.origin",
certificateChain,
methodDataMap,
- /* clearIdFields= */ false);
+ /* clearIdFields= */ false,
+ /* removeDeprecatedFields= */ false);
Assert.assertEquals("package.name", intent.getComponent().getPackageName());
Assert.assertEquals("service.name", intent.getComponent().getClassName());
Bundle bundle = intent.getExtras();
@@ -1097,6 +1168,82 @@
@Test
@SmallTest
@Feature({"Payments"})
+ public void verifyDeprecatedFieldsInIsReadyToPayIntent() throws Throwable {
+ Map<String, PaymentMethodData> methodDataMap = new HashMap<String, PaymentMethodData>();
+ PaymentMethodData bobPayMethodData =
+ new PaymentMethodData("bobPayMethod", "{\"key\":\"value\"}");
+ PaymentMethodData maxPayMethodData = new PaymentMethodData("maxPayMethod", "{}");
+ methodDataMap.put("bobPay", bobPayMethodData);
+ methodDataMap.put("maxPay", maxPayMethodData);
+
+ byte[][] certificateChain = new byte[][] {{0}};
+
+ Intent intent =
+ WebPaymentIntentHelper.createIsReadyToPayIntent(
+ "package.name",
+ "service.name",
+ "schemeless.origin",
+ "schemeless.iframe.origin",
+ certificateChain,
+ methodDataMap,
+ /* clearIdFields= */ false,
+ /* removeDeprecatedFields= */ false);
+ Bundle bundle = intent.getExtras();
+ Assert.assertNotNull(bundle);
+ Assert.assertEquals(
+ "schemeless.origin", bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_ORIGIN));
+ Assert.assertEquals(
+ "schemeless.iframe.origin",
+ bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_IFRAME_ORIGIN));
+ Assert.assertNotNull(
+ bundle.getParcelableArray(
+ WebPaymentIntentHelper.EXTRA_DEPRECATED_CERTIFICATE_CHAIN));
+ Assert.assertEquals(
+ "bobPay", bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_METHOD_NAME));
+ Assert.assertEquals(
+ "{\"key\":\"value\"}", bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA));
+ Assert.assertNotNull(
+ bundle.getParcelable(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA_MAP));
+ }
+
+ @Test
+ @SmallTest
+ @Feature({"Payments"})
+ public void verifyRemoveDeprecatedFieldsFromIsReadyToPayIntent() throws Throwable {
+ Map<String, PaymentMethodData> methodDataMap = new HashMap<String, PaymentMethodData>();
+ PaymentMethodData bobPayMethodData =
+ new PaymentMethodData("bobPayMethod", "{\"key\":\"value\"}");
+ PaymentMethodData maxPayMethodData = new PaymentMethodData("maxPayMethod", "{}");
+ methodDataMap.put("bobPay", bobPayMethodData);
+ methodDataMap.put("maxPay", maxPayMethodData);
+
+ byte[][] certificateChain = new byte[][] {{0}};
+
+ Intent intent =
+ WebPaymentIntentHelper.createIsReadyToPayIntent(
+ "package.name",
+ "service.name",
+ "schemeless.origin",
+ "schemeless.iframe.origin",
+ certificateChain,
+ methodDataMap,
+ /* clearIdFields= */ false,
+ /* removeDeprecatedFields= */ true);
+ Bundle bundle = intent.getExtras();
+ Assert.assertNotNull(bundle);
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_ORIGIN));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_IFRAME_ORIGIN));
+ Assert.assertNull(
+ bundle.getParcelableArray(
+ WebPaymentIntentHelper.EXTRA_DEPRECATED_CERTIFICATE_CHAIN));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_METHOD_NAME));
+ Assert.assertNull(bundle.get(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA));
+ Assert.assertNull(bundle.getParcelable(WebPaymentIntentHelper.EXTRA_DEPRECATED_DATA_MAP));
+ }
+
+ @Test
+ @SmallTest
+ @Feature({"Payments"})
public void createIsReadyToPayIntentWithoutIdentity() throws Throwable {
Map<String, PaymentMethodData> methodDataMap = new HashMap<String, PaymentMethodData>();
PaymentMethodData bobPayMethodData =
@@ -1115,7 +1262,8 @@
"schemeless.iframe.origin",
certificateChain,
methodDataMap,
- /* clearIdFields= */ true);
+ /* clearIdFields= */ true,
+ /* removeDeprecatedFields= */ false);
Assert.assertEquals("package.name", intent.getComponent().getPackageName());
Assert.assertEquals("service.name", intent.getComponent().getClassName());
Bundle bundle = intent.getExtras();
@@ -1151,7 +1299,8 @@
"schemeless.iframe.origin",
/* certificateChain= */ null,
methodDataMap,
- /* clearIdFields= */ false);
+ /* clearIdFields= */ false,
+ /* removeDeprecatedFields= */ false);
}
@Test
@@ -1173,7 +1322,8 @@
"schemeless.iframe.origin",
/* certificateChain= */ null,
methodDataMap,
- /* clearIdFields= */ true);
+ /* clearIdFields= */ true,
+ /* removeDeprecatedFields= */ false);
}
@Test
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentApp.java b/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentApp.java
index c25ceba..34cdd32 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentApp.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentApp.java
@@ -57,6 +57,7 @@
@Nullable private final String mPaymentDetailsUpdateServiceName;
private final SupportedDelegations mSupportedDelegations;
private final boolean mShowReadyToPayDebugInfo;
+ private final boolean mRemoveDeprecatedFields;
private IsReadyToPayCallback mIsReadyToPayCallback;
private InstrumentDetailsCallback mInstrumentDetailsCallback;
@@ -233,6 +234,7 @@
* @param supportedDelegations Delegations which this app can support.
* @param showReadyToPayDebugInfo Whether IS_READY_TO_PAY intent should be displayed in a debug
* dialog.
+ * @param removeDeprecatedFields Whether intents should omit deprecated fields.
*/
public AndroidPaymentApp(
Launcher launcher,
@@ -245,7 +247,8 @@
boolean isIncognito,
@Nullable String appToHide,
SupportedDelegations supportedDelegations,
- boolean showReadyToPayDebugInfo) {
+ boolean showReadyToPayDebugInfo,
+ boolean removeDeprecatedFields) {
super(packageName, label, null, icon);
ThreadUtils.assertOnUiThread();
mHandler = new Handler();
@@ -265,6 +268,7 @@
mApplicationIdentifierToHide = appToHide;
mSupportedDelegations = supportedDelegations;
mShowReadyToPayDebugInfo = showReadyToPayDebugInfo;
+ mRemoveDeprecatedFields = removeDeprecatedFields;
mIsPreferred = false;
}
@@ -358,7 +362,8 @@
methodDataMap),
// TODO(crbug.com/40212375): Re-enable clearing of identity for
// IS_READY_TO_PAY
- /* clearIdFields= */ false);
+ /* clearIdFields= */ false,
+ mRemoveDeprecatedFields);
if (mBypassIsReadyToPayServiceInTest) {
respondToIsReadyToPayQuery(true);
return;
@@ -513,7 +518,8 @@
modifiers),
mPaymentOptions,
WebPaymentIntentHelperTypeConverter.fromMojoShippingOptionList(
- shippingOptions));
+ shippingOptions),
+ mRemoveDeprecatedFields);
mLauncher.launchPaymentApp(
payIntent, this::notifyErrorInvokingPaymentApp, this::onIntentCompleted);
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentAppFinder.java b/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentAppFinder.java
index 8f73035..c5c07dcc 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentAppFinder.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/AndroidPaymentAppFinder.java
@@ -700,7 +700,11 @@
webAppIdCanDeduped,
appSupportedDelegations,
PaymentFeatureList.isEnabled(
- PaymentFeatureList.SHOW_READY_TO_PAY_DEBUG_INFO));
+ PaymentFeatureList.SHOW_READY_TO_PAY_DEBUG_INFO),
+ /* removeDeprecatedFields= */ PaymentFeatureList
+ .isEnabledOrExperimentalFeaturesEnabled(
+ PaymentFeatureList
+ .ANDROID_PAYMENT_INTENTS_OMIT_DEPRECATED_PARAMETERS));
mValidApps.put(packageName, app);
}
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentFeatureList.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentFeatureList.java
index 6ca50ac..0431f5f 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentFeatureList.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentFeatureList.java
@@ -16,6 +16,8 @@
@JNINamespace("payments::android")
public abstract class PaymentFeatureList {
/** Alphabetical: */
+ public static final String ANDROID_PAYMENT_INTENTS_OMIT_DEPRECATED_PARAMETERS =
+ "AndroidPaymentIntentsOmitDeprecatedParameters";
public static final String ENFORCE_FULL_DELEGATION = "EnforceFullDelegation";
public static final String GOOGLE_PAY_VIA_ANDROID_INTENTS = "GooglePayViaAndroidIntents";
public static final String GPAY_APP_DYNAMIC_UPDATE = "GPayAppDynamicUpdate";
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
index bdf95c5..706a335 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/intent/WebPaymentIntentHelper.java
@@ -249,6 +249,8 @@
* @param paymentOptions The relevant merchant requested payment options. OK to be null.
* @param shippingOptions Merchant specified available shipping options. Should be non-empty
* when paymentOptions.requestShipping is true.
+ * @param removeDeprecatedFields Whether the deprecated fields should be omitted from the
+ * intent.
* @return The intent to invoke the payment app.
*/
public static Intent createPayIntent(
@@ -264,7 +266,8 @@
@Nullable List<PaymentItem> displayItems,
@Nullable Map<String, PaymentDetailsModifier> modifiers,
@Nullable PaymentOptions paymentOptions,
- @Nullable List<PaymentShippingOption> shippingOptions) {
+ @Nullable List<PaymentShippingOption> shippingOptions,
+ boolean removeDeprecatedFields) {
Intent payIntent = new Intent();
checkStringNotEmpty(activityName, "activityName");
checkStringNotEmpty(packageName, "packageName");
@@ -282,7 +285,8 @@
displayItems,
modifiers,
paymentOptions,
- shippingOptions));
+ shippingOptions,
+ removeDeprecatedFields));
return payIntent;
}
@@ -321,6 +325,8 @@
* a public key. The map should have at least one entry.
* @param clearIdFields When this feature flag is enabled, the IS_READY_TO_PAY intent should NOT
* pass merchant and user identity to the payment app.
+ * @param removeDeprecatedFields Whether the deprecated fields should be omitted from the
+ * intent.
* @return The intent to invoke the service.
*/
public static Intent createIsReadyToPayIntent(
@@ -330,7 +336,8 @@
String schemelessIframeOrigin,
@Nullable byte[][] certificateChain,
Map<String, PaymentMethodData> methodDataMap,
- boolean clearIdFields) {
+ boolean clearIdFields,
+ boolean removeDeprecatedFields) {
Intent isReadyToPayIntent = new Intent();
checkStringNotEmpty(serviceName, "serviceName");
checkStringNotEmpty(packageName, "packageName");
@@ -342,6 +349,7 @@
schemelessIframeOrigin,
certificateChain,
methodDataMap,
+ removeDeprecatedFields,
extras);
}
isReadyToPayIntent.putExtras(extras);
@@ -375,7 +383,8 @@
@Nullable List<PaymentItem> displayItems,
@Nullable Map<String, PaymentDetailsModifier> modifiers,
@Nullable PaymentOptions paymentOptions,
- @Nullable List<PaymentShippingOption> shippingOptions) {
+ @Nullable List<PaymentShippingOption> shippingOptions,
+ boolean removeDeprecatedFields) {
Bundle extras = new Bundle();
checkStringNotEmpty(id, "id");
extras.putString(EXTRA_PAYMENT_REQUEST_ID, id);
@@ -415,9 +424,16 @@
}
addCommonExtrasWithIdentity(
- schemelessOrigin, schemelessIframeOrigin, certificateChain, methodDataMap, extras);
+ schemelessOrigin,
+ schemelessIframeOrigin,
+ certificateChain,
+ methodDataMap,
+ removeDeprecatedFields,
+ extras);
- return addDeprecatedPayIntentExtras(id, total, displayItems, extras);
+ return removeDeprecatedFields
+ ? extras
+ : addDeprecatedPayIntentExtras(id, total, displayItems, extras);
}
// Adds to the given `extras` bundle the common fields for both the IS_READY_TO_PAY (if identity
@@ -427,6 +443,7 @@
String schemelessIframeOrigin,
@Nullable byte[][] certificateChain,
Map<String, PaymentMethodData> methodDataMap,
+ boolean removeDeprecatedFields,
Bundle extras) {
checkStringNotEmpty(schemelessOrigin, "schemelessOrigin");
extras.putString(EXTRA_TOP_ORIGIN, schemelessOrigin);
@@ -451,13 +468,15 @@
}
extras.putParcelable(EXTRA_METHOD_DATA, methodDataBundle);
- return addDeprecatedCommonExtrasWithIdentity(
- schemelessOrigin,
- schemelessIframeOrigin,
- serializedCertificateChain,
- methodDataMap,
- methodDataBundle,
- extras);
+ return removeDeprecatedFields
+ ? extras
+ : addDeprecatedCommonExtrasWithIdentity(
+ schemelessOrigin,
+ schemelessIframeOrigin,
+ serializedCertificateChain,
+ methodDataMap,
+ methodDataBundle,
+ extras);
}
// TODO(crbug.com/40849135): Remove this method.
diff --git a/components/payments/content/android/javatests/src/org/chromium/components/payments/AndroidPaymentAppUnitTest.java b/components/payments/content/android/javatests/src/org/chromium/components/payments/AndroidPaymentAppUnitTest.java
index 7f795e3..798b8a4 100644
--- a/components/payments/content/android/javatests/src/org/chromium/components/payments/AndroidPaymentAppUnitTest.java
+++ b/components/payments/content/android/javatests/src/org/chromium/components/payments/AndroidPaymentAppUnitTest.java
@@ -131,7 +131,8 @@
/* isIncognito= */ false,
/* appToHide= */ null,
new SupportedDelegations(),
- showReadyToPayDebugInfo);
+ showReadyToPayDebugInfo,
+ /* removeDeprecatedFields= */ false);
app.addMethodName("https://company.com/pay");
return app;
}
diff --git a/components/payments/content/android/payment_feature_map.cc b/components/payments/content/android/payment_feature_map.cc
index 8e34a4b..59c06e3 100644
--- a/components/payments/content/android/payment_feature_map.cc
+++ b/components/payments/content/android/payment_feature_map.cc
@@ -4,6 +4,8 @@
#include "components/payments/content/android/payment_feature_map.h"
+#include <jni.h>
+
#include "base/android/feature_map.h"
#include "base/feature_list.h"
#include "base/no_destructor.h"
@@ -32,6 +34,7 @@
&features::kGPayAppDynamicUpdate,
&features::kWebPaymentsExperimentalFeatures,
&features::kWebPaymentsSingleAppUiSkip,
+ &kAndroidPaymentIntentsOmitDeprecatedParameters,
&kGooglePayViaAndroidIntents,
&kOmitParametersInReadyToPay,
&kShowReadyToPayDebugInfo,
@@ -52,6 +55,9 @@
}
// Android only features.
+BASE_FEATURE(kAndroidPaymentIntentsOmitDeprecatedParameters,
+ "AndroidPaymentIntentsOmitDeprecatedParameters",
+ base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGooglePayViaAndroidIntents,
"GooglePayViaAndroidIntents",
base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/components/payments/content/android/payment_feature_map.h b/components/payments/content/android/payment_feature_map.h
index f9d5ae5..06f38b6a 100644
--- a/components/payments/content/android/payment_feature_map.h
+++ b/components/payments/content/android/payment_feature_map.h
@@ -5,8 +5,6 @@
#ifndef COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_FEATURE_MAP_H_
#define COMPONENTS_PAYMENTS_CONTENT_ANDROID_PAYMENT_FEATURE_MAP_H_
-#include <jni.h>
-
#include "base/feature_list.h"
namespace payments {
@@ -14,6 +12,10 @@
// Android only payment features in alphabetical order:
+// If enabled, remove the deprecated parameters from the intents that are sent
+// to Android payment apps.
+BASE_DECLARE_FEATURE(kAndroidPaymentIntentsOmitDeprecatedParameters);
+
// If enabled, use Android intents for the following payment methods:
// - https://google.com/pay
// - https://pay.google.com/authentication.