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

Compile //components payment into //weblayer

Changes:

* This CL compiled the //components payment targets into //weblayer.

* Created WebLayerPaymentRequestFactory as an entry into java
payment request service from web layer.

* Added a base::Feature "WebLayerPayments" in PaymentFeatureList; used
it in WebLayerPaymentRequestFactory to prevent accidental calling
the WebLayer payment request service under construction.

* Shared ChromePaymentRequestFactory#InvalidPaymentRequest with
WebLayerPaymentRequestFactory, and stored it in the newly created
PaymentRequestFactoryUtils.

Bug: 1140798

Change-Id: I1afded32372400cce62a36041002e2247e7caa73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2491124Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Liquan (Max) Gu <maxlg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820542}
parent 6f5e6535
...@@ -9,7 +9,7 @@ import androidx.annotation.Nullable; ...@@ -9,7 +9,7 @@ import androidx.annotation.Nullable;
import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.components.payments.ErrorStrings; import org.chromium.components.payments.InvalidPaymentRequest;
import org.chromium.components.payments.OriginSecurityChecker; import org.chromium.components.payments.OriginSecurityChecker;
import org.chromium.components.payments.PaymentFeatureList; import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.components.payments.PaymentRequestService; import org.chromium.components.payments.PaymentRequestService;
...@@ -21,15 +21,7 @@ import org.chromium.content_public.browser.WebContents; ...@@ -21,15 +21,7 @@ import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsStatics; import org.chromium.content_public.browser.WebContentsStatics;
import org.chromium.mojo.system.MojoException; import org.chromium.mojo.system.MojoException;
import org.chromium.mojo.system.MojoResult; import org.chromium.mojo.system.MojoResult;
import org.chromium.payments.mojom.CanMakePaymentQueryResult;
import org.chromium.payments.mojom.HasEnrolledInstrumentQueryResult;
import org.chromium.payments.mojom.PaymentDetails;
import org.chromium.payments.mojom.PaymentErrorReason;
import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import org.chromium.payments.mojom.PaymentRequest; import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.payments.mojom.PaymentRequestClient;
import org.chromium.payments.mojom.PaymentValidationErrors;
import org.chromium.services.service_manager.InterfaceFactory; import org.chromium.services.service_manager.InterfaceFactory;
/** /**
...@@ -41,66 +33,6 @@ public class ChromePaymentRequestFactory implements InterfaceFactory<PaymentRequ ...@@ -41,66 +33,6 @@ public class ChromePaymentRequestFactory implements InterfaceFactory<PaymentRequ
private final RenderFrameHost mRenderFrameHost; private final RenderFrameHost mRenderFrameHost;
/**
* An implementation of PaymentRequest that immediately rejects all connections.
* Necessary because Mojo does not handle null returned from createImpl().
*/
private static final class InvalidPaymentRequest implements PaymentRequest {
private PaymentRequestClient mClient;
@Override
public void init(PaymentRequestClient client, PaymentMethodData[] methodData,
PaymentDetails details, PaymentOptions options,
boolean unusedGooglePayBridgeEligible) {
mClient = client;
}
@Override
public void show(boolean isUserGesture, boolean waitForUpdatedDetails) {
if (mClient != null) {
mClient.onError(
PaymentErrorReason.USER_CANCEL, ErrorStrings.WEB_PAYMENT_API_DISABLED);
mClient.close();
}
}
@Override
public void updateWith(PaymentDetails details) {}
@Override
public void onPaymentDetailsNotUpdated() {}
@Override
public void abort() {}
@Override
public void complete(int result) {}
@Override
public void retry(PaymentValidationErrors errors) {}
@Override
public void canMakePayment() {
if (mClient != null) {
mClient.onCanMakePayment(CanMakePaymentQueryResult.CANNOT_MAKE_PAYMENT);
}
}
@Override
public void hasEnrolledInstrument() {
if (mClient != null) {
mClient.onHasEnrolledInstrument(
HasEnrolledInstrumentQueryResult.HAS_NO_ENROLLED_INSTRUMENT);
}
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
}
/** /**
* Production implementation of the ChromePaymentRequestService's Delegate. Gives true answers * Production implementation of the ChromePaymentRequestService's Delegate. Gives true answers
* about the system. * about the system.
......
...@@ -113,6 +113,7 @@ android_library("all_java") { ...@@ -113,6 +113,7 @@ android_library("all_java") {
"java/src/org/chromium/components/payments/CanMakePaymentQuery.java", "java/src/org/chromium/components/payments/CanMakePaymentQuery.java",
"java/src/org/chromium/components/payments/CurrencyFormatter.java", "java/src/org/chromium/components/payments/CurrencyFormatter.java",
"java/src/org/chromium/components/payments/ErrorMessageUtil.java", "java/src/org/chromium/components/payments/ErrorMessageUtil.java",
"java/src/org/chromium/components/payments/InvalidPaymentRequest.java",
"java/src/org/chromium/components/payments/JniPaymentApp.java", "java/src/org/chromium/components/payments/JniPaymentApp.java",
"java/src/org/chromium/components/payments/JourneyLogger.java", "java/src/org/chromium/components/payments/JourneyLogger.java",
"java/src/org/chromium/components/payments/MojoPaymentRequestGateKeeper.java", "java/src/org/chromium/components/payments/MojoPaymentRequestGateKeeper.java",
...@@ -150,6 +151,7 @@ android_library("all_java") { ...@@ -150,6 +151,7 @@ android_library("all_java") {
"//content/public/android:content_java", "//content/public/android:content_java",
"//mojo/public/java:bindings_java", "//mojo/public/java:bindings_java",
"//mojo/public/java:system_java", "//mojo/public/java:system_java",
"//services/service_manager/public/java:service_manager_java",
"//third_party/android_deps:androidx_annotation_annotation_java", "//third_party/android_deps:androidx_annotation_annotation_java",
"//third_party/android_deps:androidx_collection_collection_java", "//third_party/android_deps:androidx_collection_collection_java",
"//third_party/blink/public/mojom:android_mojo_bindings_java", "//third_party/blink/public/mojom:android_mojo_bindings_java",
......
// 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;
import org.chromium.mojo.system.MojoException;
import org.chromium.payments.mojom.CanMakePaymentQueryResult;
import org.chromium.payments.mojom.HasEnrolledInstrumentQueryResult;
import org.chromium.payments.mojom.PaymentDetails;
import org.chromium.payments.mojom.PaymentErrorReason;
import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.payments.mojom.PaymentRequestClient;
import org.chromium.payments.mojom.PaymentValidationErrors;
/**
* An implementation of PaymentRequest that immediately rejects all connections.
* Necessary because Mojo does not handle null returned from createImpl().
*/
public final class InvalidPaymentRequest implements PaymentRequest {
private PaymentRequestClient mClient;
@Override
public void init(PaymentRequestClient client, PaymentMethodData[] unusedMethodData,
PaymentDetails unusedDetails, PaymentOptions unusedOptions,
boolean unusedGooglePayBridgeEligible) {
mClient = client;
}
@Override
public void show(boolean unusedIsUserGesture, boolean unusedWaitForUpdatedDetails) {
if (mClient != null) {
mClient.onError(PaymentErrorReason.USER_CANCEL, ErrorStrings.WEB_PAYMENT_API_DISABLED);
mClient.close();
}
}
@Override
public void updateWith(PaymentDetails unusedDetails) {}
@Override
public void onPaymentDetailsNotUpdated() {}
@Override
public void abort() {}
@Override
public void complete(int unusedResult) {}
@Override
public void retry(PaymentValidationErrors unusedErrors) {}
@Override
public void canMakePayment() {
if (mClient != null) {
mClient.onCanMakePayment(CanMakePaymentQueryResult.CANNOT_MAKE_PAYMENT);
}
}
@Override
public void hasEnrolledInstrument() {
if (mClient != null) {
mClient.onHasEnrolledInstrument(
HasEnrolledInstrumentQueryResult.HAS_NO_ENROLLED_INSTRUMENT);
}
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
}
...@@ -25,6 +25,7 @@ public class PaymentFeatureList { ...@@ -25,6 +25,7 @@ public class PaymentFeatureList {
public static final String SERVICE_WORKER_PAYMENT_APPS = "ServiceWorkerPaymentApps"; public static final String SERVICE_WORKER_PAYMENT_APPS = "ServiceWorkerPaymentApps";
public static final String STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT = public static final String STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT =
"StrictHasEnrolledAutofillInstrument"; "StrictHasEnrolledAutofillInstrument";
public static final String WEB_LAYER_PAYMENTS = "WebLayerPayments";
public static final String WEB_PAYMENTS = "WebPayments"; public static final String WEB_PAYMENTS = "WebPayments";
public static final String WEB_PAYMENTS_ALWAYS_ALLOW_JUST_IN_TIME_PAYMENT_APP = public static final String WEB_PAYMENTS_ALWAYS_ALLOW_JUST_IN_TIME_PAYMENT_APP =
"AlwaysAllowJustInTimePaymentApp"; "AlwaysAllowJustInTimePaymentApp";
......
...@@ -38,6 +38,7 @@ const base::Feature* kFeaturesExposedToJava[] = { ...@@ -38,6 +38,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
&features::kWebPaymentsSingleAppUiSkip, &features::kWebPaymentsSingleAppUiSkip,
&kAndroidAppPaymentUpdateEvents, &kAndroidAppPaymentUpdateEvents,
&kScrollToExpandPaymentHandler, &kScrollToExpandPaymentHandler,
&kWebLayerPayments,
}; };
const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) { const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) {
...@@ -58,6 +59,8 @@ const base::Feature kAndroidAppPaymentUpdateEvents{ ...@@ -58,6 +59,8 @@ const base::Feature kAndroidAppPaymentUpdateEvents{
// TODO(crbug.com/1094549): clean up after being stable. // TODO(crbug.com/1094549): clean up after being stable.
const base::Feature kScrollToExpandPaymentHandler{ const base::Feature kScrollToExpandPaymentHandler{
"ScrollToExpandPaymentHandler", base::FEATURE_ENABLED_BY_DEFAULT}; "ScrollToExpandPaymentHandler", base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kWebLayerPayments{"WebLayerPayments",
base::FEATURE_DISABLED_BY_DEFAULT};
static jboolean JNI_PaymentFeatureList_IsEnabled( static jboolean JNI_PaymentFeatureList_IsEnabled(
JNIEnv* env, JNIEnv* env,
......
...@@ -14,6 +14,7 @@ namespace android { ...@@ -14,6 +14,7 @@ namespace android {
// Android only payment features in alphabetical order: // Android only payment features in alphabetical order:
extern const base::Feature kAndroidAppPaymentUpdateEvents; extern const base::Feature kAndroidAppPaymentUpdateEvents;
extern const base::Feature kScrollToExpandPaymentHandler; extern const base::Feature kScrollToExpandPaymentHandler;
extern const base::Feature kWebLayerPayments;
} // namespace android } // namespace android
} // namespace payments } // namespace payments
......
...@@ -616,6 +616,7 @@ source_set("weblayer_lib_base") { ...@@ -616,6 +616,7 @@ source_set("weblayer_lib_base") {
"//components/minidump_uploader", "//components/minidump_uploader",
"//components/navigation_interception", "//components/navigation_interception",
"//components/page_info/android", "//components/page_info/android",
"//components/payments/content/android",
"//components/permissions/android:native", "//components/permissions/android:native",
"//components/resources:android_resources", "//components/resources:android_resources",
"//components/safe_browsing/android:remote_database_manager", "//components/safe_browsing/android:remote_database_manager",
......
...@@ -156,6 +156,7 @@ android_library("java") { ...@@ -156,6 +156,7 @@ android_library("java") {
"org/chromium/weblayer_private/media/MediaStreamManager.java", "org/chromium/weblayer_private/media/MediaStreamManager.java",
"org/chromium/weblayer_private/metrics/MetricsServiceClient.java", "org/chromium/weblayer_private/metrics/MetricsServiceClient.java",
"org/chromium/weblayer_private/metrics/UmaUtils.java", "org/chromium/weblayer_private/metrics/UmaUtils.java",
"org/chromium/weblayer_private/payments/WebLayerPaymentRequestFactory.java",
"org/chromium/weblayer_private/permissions/PermissionRequestUtils.java", "org/chromium/weblayer_private/permissions/PermissionRequestUtils.java",
"org/chromium/weblayer_private/resources/ResourceMapper.java", "org/chromium/weblayer_private/resources/ResourceMapper.java",
_bundle_utils_output, _bundle_utils_output,
...@@ -213,6 +214,8 @@ android_library("java") { ...@@ -213,6 +214,8 @@ android_library("java") {
"//components/navigation_interception/android:navigation_interception_java", "//components/navigation_interception/android:navigation_interception_java",
"//components/omnibox/browser:browser_java", "//components/omnibox/browser:browser_java",
"//components/page_info/android:java", "//components/page_info/android:java",
"//components/payments/content/android:java",
"//components/payments/mojom:mojom_java",
"//components/permissions/android:java", "//components/permissions/android:java",
"//components/safe_browsing/android:safe_browsing_java", "//components/safe_browsing/android:safe_browsing_java",
"//components/security_interstitials/content/android:java", "//components/security_interstitials/content/android:java",
...@@ -227,6 +230,7 @@ android_library("java") { ...@@ -227,6 +230,7 @@ android_library("java") {
"//components/webrtc/android:java", "//components/webrtc/android:java",
"//content/public/android:content_java", "//content/public/android:content_java",
"//mojo/public/java:bindings_java", "//mojo/public/java:bindings_java",
"//mojo/public/java:system_java",
"//net/android:net_java", "//net/android:net_java",
"//services/network/public/mojom:cookies_mojom_java", "//services/network/public/mojom:cookies_mojom_java",
"//services/network/public/mojom:mojom_java", "//services/network/public/mojom:mojom_java",
......
...@@ -8,6 +8,7 @@ include_rules = [ ...@@ -8,6 +8,7 @@ include_rules = [
"+components/location/android/java/src/org/chromium/components/location", "+components/location/android/java/src/org/chromium/components/location",
"+components/minidump_uploader", "+components/minidump_uploader",
"+components/page_info/android/java", "+components/page_info/android/java",
"+components/payments/content/android/java",
"+components/webapk/android/libs", "+components/webapk/android/libs",
"+services/device/public/java/src/org/chromium/device/geolocation", "+services/device/public/java/src/org/chromium/device/geolocation",
......
...@@ -6,8 +6,11 @@ package org.chromium.weblayer_private; ...@@ -6,8 +6,11 @@ package org.chromium.weblayer_private;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.content_public.browser.InterfaceRegistrar; import org.chromium.content_public.browser.InterfaceRegistrar;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.services.service_manager.InterfaceRegistry; import org.chromium.services.service_manager.InterfaceRegistry;
import org.chromium.weblayer_private.payments.WebLayerPaymentRequestFactory;
import org.chromium.webshare.mojom.ShareService; import org.chromium.webshare.mojom.ShareService;
/** /**
...@@ -17,6 +20,8 @@ class MojoInterfaceRegistrar { ...@@ -17,6 +20,8 @@ class MojoInterfaceRegistrar {
@CalledByNative @CalledByNative
private static void registerMojoInterfaces() { private static void registerMojoInterfaces() {
InterfaceRegistrar.Registry.addWebContentsRegistrar(new WebContentsInterfaceRegistrar()); InterfaceRegistrar.Registry.addWebContentsRegistrar(new WebContentsInterfaceRegistrar());
InterfaceRegistrar.Registry.addRenderFrameHostRegistrar(
new RenderFrameHostInterfaceRegistrar());
} }
private static class WebContentsInterfaceRegistrar implements InterfaceRegistrar<WebContents> { private static class WebContentsInterfaceRegistrar implements InterfaceRegistrar<WebContents> {
...@@ -25,4 +30,14 @@ class MojoInterfaceRegistrar { ...@@ -25,4 +30,14 @@ class MojoInterfaceRegistrar {
registry.addInterface(ShareService.MANAGER, new WebShareServiceFactory(webContents)); registry.addInterface(ShareService.MANAGER, new WebShareServiceFactory(webContents));
} }
} }
private static class RenderFrameHostInterfaceRegistrar
implements InterfaceRegistrar<RenderFrameHost> {
@Override
public void registerInterfaces(
InterfaceRegistry registry, final RenderFrameHost renderFrameHost) {
registry.addInterface(
PaymentRequest.MANAGER, new WebLayerPaymentRequestFactory(renderFrameHost));
}
}
} }
// 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.weblayer_private.payments;
import org.chromium.components.payments.InvalidPaymentRequest;
import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.services.service_manager.InterfaceFactory;
/** Creates an instance of PaymentRequest for use in WebLayer. */
public class WebLayerPaymentRequestFactory implements InterfaceFactory<PaymentRequest> {
private final RenderFrameHost mRenderFrameHost;
/**
* Creates an instance of WebLayerPaymentRequestFactory.
* @param renderFrameHost The frame that issues the payment request on the merchant page.
*/
public WebLayerPaymentRequestFactory(RenderFrameHost renderFrameHost) {
mRenderFrameHost = renderFrameHost;
}
@Override
public PaymentRequest createImpl() {
if (!PaymentFeatureList.isEnabled(PaymentFeatureList.WEB_LAYER_PAYMENTS)) {
return new InvalidPaymentRequest();
}
// TODO(maxlg): replace the returned value with a PaymentRequest.
return null;
}
}
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