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;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.preferences.Pref;
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.PaymentFeatureList;
import org.chromium.components.payments.PaymentRequestService;
......@@ -21,15 +21,7 @@ import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsStatics;
import org.chromium.mojo.system.MojoException;
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.PaymentRequestClient;
import org.chromium.payments.mojom.PaymentValidationErrors;
import org.chromium.services.service_manager.InterfaceFactory;
/**
......@@ -41,66 +33,6 @@ public class ChromePaymentRequestFactory implements InterfaceFactory<PaymentRequ
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
* about the system.
......
......@@ -113,6 +113,7 @@ android_library("all_java") {
"java/src/org/chromium/components/payments/CanMakePaymentQuery.java",
"java/src/org/chromium/components/payments/CurrencyFormatter.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/JourneyLogger.java",
"java/src/org/chromium/components/payments/MojoPaymentRequestGateKeeper.java",
......@@ -150,6 +151,7 @@ android_library("all_java") {
"//content/public/android:content_java",
"//mojo/public/java:bindings_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_collection_collection_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 {
public static final String SERVICE_WORKER_PAYMENT_APPS = "ServiceWorkerPaymentApps";
public static final String STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT =
"StrictHasEnrolledAutofillInstrument";
public static final String WEB_LAYER_PAYMENTS = "WebLayerPayments";
public static final String WEB_PAYMENTS = "WebPayments";
public static final String WEB_PAYMENTS_ALWAYS_ALLOW_JUST_IN_TIME_PAYMENT_APP =
"AlwaysAllowJustInTimePaymentApp";
......
......@@ -38,6 +38,7 @@ const base::Feature* kFeaturesExposedToJava[] = {
&features::kWebPaymentsSingleAppUiSkip,
&kAndroidAppPaymentUpdateEvents,
&kScrollToExpandPaymentHandler,
&kWebLayerPayments,
};
const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) {
......@@ -58,6 +59,8 @@ const base::Feature kAndroidAppPaymentUpdateEvents{
// TODO(crbug.com/1094549): clean up after being stable.
const base::Feature kScrollToExpandPaymentHandler{
"ScrollToExpandPaymentHandler", base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kWebLayerPayments{"WebLayerPayments",
base::FEATURE_DISABLED_BY_DEFAULT};
static jboolean JNI_PaymentFeatureList_IsEnabled(
JNIEnv* env,
......
......@@ -14,6 +14,7 @@ namespace android {
// Android only payment features in alphabetical order:
extern const base::Feature kAndroidAppPaymentUpdateEvents;
extern const base::Feature kScrollToExpandPaymentHandler;
extern const base::Feature kWebLayerPayments;
} // namespace android
} // namespace payments
......
......@@ -616,6 +616,7 @@ source_set("weblayer_lib_base") {
"//components/minidump_uploader",
"//components/navigation_interception",
"//components/page_info/android",
"//components/payments/content/android",
"//components/permissions/android:native",
"//components/resources:android_resources",
"//components/safe_browsing/android:remote_database_manager",
......
......@@ -156,6 +156,7 @@ android_library("java") {
"org/chromium/weblayer_private/media/MediaStreamManager.java",
"org/chromium/weblayer_private/metrics/MetricsServiceClient.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/resources/ResourceMapper.java",
_bundle_utils_output,
......@@ -213,6 +214,8 @@ android_library("java") {
"//components/navigation_interception/android:navigation_interception_java",
"//components/omnibox/browser:browser_java",
"//components/page_info/android:java",
"//components/payments/content/android:java",
"//components/payments/mojom:mojom_java",
"//components/permissions/android:java",
"//components/safe_browsing/android:safe_browsing_java",
"//components/security_interstitials/content/android:java",
......@@ -227,6 +230,7 @@ android_library("java") {
"//components/webrtc/android:java",
"//content/public/android:content_java",
"//mojo/public/java:bindings_java",
"//mojo/public/java:system_java",
"//net/android:net_java",
"//services/network/public/mojom:cookies_mojom_java",
"//services/network/public/mojom:mojom_java",
......
......@@ -8,6 +8,7 @@ include_rules = [
"+components/location/android/java/src/org/chromium/components/location",
"+components/minidump_uploader",
"+components/page_info/android/java",
"+components/payments/content/android/java",
"+components/webapk/android/libs",
"+services/device/public/java/src/org/chromium/device/geolocation",
......
......@@ -6,8 +6,11 @@ package org.chromium.weblayer_private;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.content_public.browser.InterfaceRegistrar;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents;
import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.services.service_manager.InterfaceRegistry;
import org.chromium.weblayer_private.payments.WebLayerPaymentRequestFactory;
import org.chromium.webshare.mojom.ShareService;
/**
......@@ -17,6 +20,8 @@ class MojoInterfaceRegistrar {
@CalledByNative
private static void registerMojoInterfaces() {
InterfaceRegistrar.Registry.addWebContentsRegistrar(new WebContentsInterfaceRegistrar());
InterfaceRegistrar.Registry.addRenderFrameHostRegistrar(
new RenderFrameHostInterfaceRegistrar());
}
private static class WebContentsInterfaceRegistrar implements InterfaceRegistrar<WebContents> {
......@@ -25,4 +30,14 @@ class MojoInterfaceRegistrar {
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