Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java

Issue 2838433002: [Payments] Cache payment manifests. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
index 7a9000f3164c463193fae6b0dc8feb39e73aa5ff..b9f85f0f2001742a0111c9b1cd08918d27bca740 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -70,6 +70,7 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
private final Set<String> mNonUriPaymentMethods;
private final Set<URI> mUriPaymentMethods;
private final PaymentManifestDownloader mDownloader;
+ private final PaymentManifestWebDataService mWebDataService;
private final PaymentManifestParser mParser;
private final PackageManagerDelegate mPackageManagerDelegate;
private final PaymentAppCreatedCallback mCallback;
@@ -83,6 +84,12 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
*/
private final Map<URI, Set<ResolveInfo>> mPendingApps;
+ /**
+ * List of payment manifest verifiers. Note that each non basic card payment method has a
+ * dedicated payment manifest verifier.
+ */
+ private final List<PaymentManifestVerifier> mManifestVerifiers;
+
/** A map of Android package name to the payment app. */
private final Map<String, AndroidPaymentApp> mResult;
@@ -93,6 +100,7 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
* @param methods The list of payment methods requested by the merchant. For
* example, "https://bobpay.com", "https://android.com/pay",
* "basic-card".
+ * @param webDataService The web data service to cache manifest.
* @param downloader The manifest downloader.
* @param parser The manifest parser.
* @param packageManagerDelegate The package information retriever.
@@ -100,16 +108,18 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
* all Android payment apps have been found.
*/
public static void find(WebContents webContents, Set<String> methods,
- PaymentManifestDownloader downloader, PaymentManifestParser parser,
- PackageManagerDelegate packageManagerDelegate, PaymentAppCreatedCallback callback) {
- new AndroidPaymentAppFinder(
- webContents, methods, downloader, parser, packageManagerDelegate, callback)
+ PaymentManifestWebDataService webDataService, PaymentManifestDownloader downloader,
+ PaymentManifestParser parser, PackageManagerDelegate packageManagerDelegate,
+ PaymentAppCreatedCallback callback) {
+ new AndroidPaymentAppFinder(webContents, methods, webDataService, downloader, parser,
+ packageManagerDelegate, callback)
.findAndroidPaymentApps();
}
private AndroidPaymentAppFinder(WebContents webContents, Set<String> methods,
- PaymentManifestDownloader downloader, PaymentManifestParser parser,
- PackageManagerDelegate packageManagerDelegate, PaymentAppCreatedCallback callback) {
+ PaymentManifestWebDataService webDataService, PaymentManifestDownloader downloader,
+ PaymentManifestParser parser, PackageManagerDelegate packageManagerDelegate,
+ PaymentAppCreatedCallback callback) {
mWebContents = webContents;
// For non-URI payment method names, only names published by W3C should be supported.
@@ -140,10 +150,12 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
}
mDownloader = downloader;
+ mWebDataService = webDataService;
mParser = parser;
mPackageManagerDelegate = packageManagerDelegate;
mCallback = callback;
mPendingApps = new HashMap<>();
+ mManifestVerifiers = new ArrayList<>();
mResult = new HashMap<>();
ChromeActivity activity = ChromeActivity.fromWebContents(mWebContents);
mIsIncognito = activity != null && activity.getCurrentTabModel() != null
@@ -164,7 +176,6 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
appSupportedMethods.add(getPaymentMethodNames(apps.get(i).activityInfo));
}
- List<PaymentManifestVerifier> verifiers = new ArrayList<>();
for (URI uriMethodName : mUriPaymentMethods) {
List<ResolveInfo> supportedApps =
filterAppsByMethodName(apps, appSupportedMethods, uriMethodName.toString());
@@ -174,11 +185,12 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
// manifest file needs to be parsed. The startup can take up to 2 seconds.
if (!mParser.isUtilityProcessRunning()) mParser.startUtilityProcess();
- verifiers.add(new PaymentManifestVerifier(uriMethodName, supportedApps, mDownloader,
- mParser, mPackageManagerDelegate, this /* callback */));
+ mManifestVerifiers.add(
+ new PaymentManifestVerifier(uriMethodName, supportedApps, mWebDataService,
+ mDownloader, mParser, mPackageManagerDelegate, this /* callback */));
mPendingApps.put(uriMethodName, new HashSet<>(supportedApps));
- if (verifiers.size() == MAX_NUMBER_OF_MANIFESTS) {
+ if (mManifestVerifiers.size() == MAX_NUMBER_OF_MANIFESTS) {
Log.d(TAG, "Reached maximum number of allowed payment app manifests.");
break;
}
@@ -193,13 +205,13 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
}
}
- if (verifiers.isEmpty()) {
+ if (mManifestVerifiers.isEmpty()) {
onSearchFinished();
return;
}
- for (int i = 0; i < verifiers.size(); i++) {
- verifiers.get(i).verify();
+ for (int i = 0; i < mManifestVerifiers.size(); i++) {
+ mManifestVerifiers.get(i).verify();
}
}
@@ -290,6 +302,16 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
if (mPendingApps.isEmpty()) onSearchFinished();
}
+ @Override
+ public void onVerifyFinished(PaymentManifestVerifier verifier) {
+ mManifestVerifiers.remove(verifier);
+ if (!mManifestVerifiers.isEmpty()) return;
+
+ assert mPendingApps.isEmpty();
+ mWebDataService.destroy();
+ if (mParser.isUtilityProcessRunning()) mParser.stopUtilityProcess();
+ }
+
/**
* Checks for IS_READY_TO_PAY service in each valid payment app and returns the valid apps
* to the caller. Called when finished verifying all payment methods and apps.
@@ -297,8 +319,6 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
private void onSearchFinished() {
assert mPendingApps.isEmpty();
- if (mParser.isUtilityProcessRunning()) mParser.stopUtilityProcess();
-
if (!mIsIncognito) {
List<ResolveInfo> resolveInfos =
mPackageManagerDelegate.getServicesThatCanRespondToIntent(

Powered by Google App Engine
This is Rietveld 408576698