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

[PRImpl] Move initial states into CPRImpl

Change:
Move the following references into CPRImpl, and provides PRImpl with
getters to access them:
* mRenderFrameHost
* mPaymentRequestOrigin
* mPaymentRequestSecurityOrigin
* mTopLevelOrigin
* mMerchantName
* mCertificateChain
* mIsOffTheRecord

Acronym:
CPRImpl = ComponentPaymentRequestImpl
PRImpl = PaymentRequestImpl

Bug: 1102522

Change-Id: I7e501efed0ab8b4ddc061cebe5170e19be99ab73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2357630Reviewed-by: default avatarBalazs Engedy <engedy@chromium.org>
Reviewed-by: default avatarDanyao Wang <danyao@chromium.org>
Commit-Queue: Liquan (Max) Gu <maxlg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800628}
parent b29b9a25
......@@ -199,8 +199,7 @@ public class PaymentRequestFactory implements InterfaceFactory<PaymentRequest> {
return ComponentPaymentRequestImpl.createPaymentRequest(mRenderFrameHost,
/*isOffTheRecord=*/delegate.isOffTheRecord(webContents),
/*skipUiForBasicCard=*/delegate.skipUiForBasicCard(),
(renderFrameHost, componentPaymentRequest, isOffTheRecord)
-> new PaymentRequestImpl(renderFrameHost, componentPaymentRequest,
isOffTheRecord, delegate));
(componentPaymentRequest)
-> new PaymentRequestImpl(componentPaymentRequest, delegate));
}
}
......@@ -4,6 +4,7 @@ include_rules = [
"+components/autofill",
"+components/keyed_service/content",
"+components/keyed_service/core",
"+components/page_info",
"+components/prefs",
"+components/strings",
"+components/ukm/content",
......
......@@ -121,7 +121,9 @@ android_library("java") {
"//base:base_java",
"//base:jni_java",
"//components/autofill/android:autofill_java",
"//components/page_info/android:java",
"//components/payments/mojom:mojom_java",
"//components/url_formatter/android:url_formatter_java",
"//content/public/android:content_java",
"//mojo/public/java:bindings_java",
"//mojo/public/java:system_java",
......
......@@ -6,7 +6,6 @@ package org.chromium.components.payments;
import androidx.annotation.Nullable;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.payments.mojom.PaymentDetails;
import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
......@@ -22,15 +21,12 @@ public interface BrowserPaymentRequest {
interface Factory {
/**
* Create an instance of {@link BrowserPaymentRequest}.
* @param renderFrameHost The RenderFrameHost of the merchant page.
* @param componentPaymentRequestImpl The ComponentPaymentRequestImpl to work together with
* the BrowserPaymentRequest instance.
* @param isOffTheRecord Whether the merchant page is in an OffTheRecord (e.g., incognito,
* guest mode) Tab.
* the BrowserPaymentRequest instance, cannot be null.
* @return An instance of BrowserPaymentRequest, cannot be null.
*/
BrowserPaymentRequest createBrowserPaymentRequest(RenderFrameHost renderFrameHost,
ComponentPaymentRequestImpl componentPaymentRequestImpl, boolean isOffTheRecord);
BrowserPaymentRequest createBrowserPaymentRequest(
ComponentPaymentRequestImpl componentPaymentRequestImpl);
}
/**
......
......@@ -9,6 +9,8 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.Log;
import org.chromium.components.autofill.EditableOption;
import org.chromium.components.page_info.CertificateChainHelper;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsStatics;
......@@ -23,6 +25,7 @@ import org.chromium.payments.mojom.PaymentRequest;
import org.chromium.payments.mojom.PaymentRequestClient;
import org.chromium.payments.mojom.PaymentResponse;
import org.chromium.payments.mojom.PaymentValidationErrors;
import org.chromium.url.Origin;
import java.util.List;
......@@ -44,6 +47,14 @@ public class ComponentPaymentRequestImpl {
private final Runnable mOnClosedListener;
private final WebContents mWebContents;
private final JourneyLogger mJourneyLogger;
private final RenderFrameHost mRenderFrameHost;
private final String mTopLevelOrigin;
private final String mPaymentRequestOrigin;
private final Origin mPaymentRequestSecurityOrigin;
private final String mMerchantName;
@Nullable
private final byte[][] mCertificateChain;
private final boolean mIsOffTheRecord;
private boolean mSkipUiForNonUrlPaymentMethodIdentifiers;
private PaymentRequestLifecycleObserver mPaymentRequestLifecycleObserver;
private boolean mHasClosed;
......@@ -210,8 +221,9 @@ public class ComponentPaymentRequestImpl {
return null;
}
ComponentPaymentRequestImpl instance = new ComponentPaymentRequestImpl(client,
renderFrameHost, webContents, journeyLogger, skipUiForBasicCard, onClosedListener);
ComponentPaymentRequestImpl instance =
new ComponentPaymentRequestImpl(client, renderFrameHost, webContents, journeyLogger,
skipUiForBasicCard, isOffTheRecord, onClosedListener);
instance.onCreated();
boolean valid = instance.initAndValidate(renderFrameHost, browserPaymentRequestFactory,
methodData, details, options, googlePayBridgeEligible, isOffTheRecord);
......@@ -238,15 +250,27 @@ public class ComponentPaymentRequestImpl {
private ComponentPaymentRequestImpl(PaymentRequestClient client,
RenderFrameHost renderFrameHost, WebContents webContents, JourneyLogger journeyLogger,
boolean skipUiForBasicCard, Runnable onClosedListener) {
boolean skipUiForBasicCard, boolean isOffTheRecord, Runnable onClosedListener) {
assert client != null;
assert renderFrameHost != null;
assert webContents != null;
assert journeyLogger != null;
mRenderFrameHost = renderFrameHost;
mPaymentRequestSecurityOrigin = mRenderFrameHost.getLastCommittedOrigin();
mWebContents = webContents;
// TODO(crbug.com/992593): replace UrlFormatter with GURL operations.
mPaymentRequestOrigin =
UrlFormatter.formatUrlForSecurityDisplay(mRenderFrameHost.getLastCommittedURL());
mTopLevelOrigin =
UrlFormatter.formatUrlForSecurityDisplay(mWebContents.getLastCommittedUrl());
mMerchantName = mWebContents.getTitle();
mCertificateChain = CertificateChainHelper.getCertificateChain(mWebContents);
mIsOffTheRecord = isOffTheRecord;
mSkipUiForNonUrlPaymentMethodIdentifiers = skipUiForBasicCard;
mClient = client;
mWebContents = webContents;
mJourneyLogger = journeyLogger;
mOnClosedListener = onClosedListener;
mHasClosed = false;
......@@ -272,8 +296,7 @@ public class ComponentPaymentRequestImpl {
BrowserPaymentRequest.Factory factory, @Nullable PaymentMethodData[] methodData,
@Nullable PaymentDetails details, @Nullable PaymentOptions options,
boolean googlePayBridgeEligible, boolean isOffTheRecord) {
mBrowserPaymentRequest =
factory.createBrowserPaymentRequest(renderFrameHost, this, isOffTheRecord);
mBrowserPaymentRequest = factory.createBrowserPaymentRequest(this);
return mBrowserPaymentRequest.initAndValidate(
methodData, details, options, googlePayBridgeEligible);
}
......@@ -564,4 +587,43 @@ public class ComponentPaymentRequestImpl {
public WebContents getWebContents() {
return mWebContents;
}
/** @return Whether the WebContents is currently showing an off-the-record tab. */
public boolean isOffTheRecord() {
return mIsOffTheRecord;
}
/** @return The certificate chain from the merchant page's WebContents. */
public byte[][] getCertificateChain() {
return mCertificateChain;
}
/** @return The origin of the page at which the PaymentRequest is created. */
public String getPaymentRequestOrigin() {
return mPaymentRequestOrigin;
}
/** @return The merchant page's title. */
public String getMerchantName() {
return mMerchantName;
}
/** @return The origin of the top level frame of the merchant page. */
public String getTopLevelOrigin() {
return mTopLevelOrigin;
}
/** @return The RendererFrameHost of the merchant page. */
public RenderFrameHost getRenderFrameHost() {
return mRenderFrameHost;
}
/**
* @return The origin of the iframe that invoked the PaymentRequest API. Can be opaque. Used by
* security features like 'Sec-Fetch-Site' and 'Cross-Origin-Resource-Policy'. Should not be
* null.
*/
public Origin getPaymentRequestSecurityOrigin() {
return mPaymentRequestSecurityOrigin;
}
}
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