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

Unified Diff: components/payments/content/android/payment_manifest_parser_android.cc

Issue 2802043002: Use web-app manifest format for Android payment apps. (Closed)
Patch Set: Address java comments. 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: components/payments/content/android/payment_manifest_parser_android.cc
diff --git a/components/payments/content/android/payment_manifest_parser_android.cc b/components/payments/content/android/payment_manifest_parser_android.cc
index 012d9eadc9d3423be3e0b031fa17a7bcefb74d6f..f32abb67cf5a5fbb60783bf10140a6fdaf62d4d5 100644
--- a/components/payments/content/android/payment_manifest_parser_android.cc
+++ b/components/payments/content/android/payment_manifest_parser_android.cc
@@ -6,14 +6,14 @@
#include <stddef.h>
-#include <climits>
-
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/bind.h"
+#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/numerics/safe_conversions.h"
#include "jni/PaymentManifestParser_jni.h"
+#include "url/gurl.h"
namespace payments {
namespace {
@@ -25,8 +25,37 @@ class ParseCallback {
~ParseCallback() {}
- void OnManifestParsed(
- std::vector<mojom::PaymentManifestSectionPtr> manifest) {
+ // Copies payment method manifest into Java.
+ void OnPaymentMethodManifestParsed(std::vector<GURL> web_app_manifest_urls) {
+ DCHECK_GE(100U, web_app_manifest_urls.size());
+ JNIEnv* env = base::android::AttachCurrentThread();
+
+ if (web_app_manifest_urls.empty()) {
+ // Can trigger synchronous deletion of PaymentManifestParserAndroid.
+ Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_);
+ return;
+ }
+
+ base::android::ScopedJavaLocalRef<jobjectArray> juris =
+ Java_PaymentManifestParser_createWebAppManifestUris(
+ env, web_app_manifest_urls.size());
+
+ for (size_t i = 0; i < web_app_manifest_urls.size(); ++i) {
+ DCHECK(Java_PaymentManifestParser_addUri(
+ env, juris.obj(), base::checked_cast<int>(i),
+ base::android::ConvertUTF8ToJavaString(
+ env, web_app_manifest_urls[i].spec())));
+ }
+
+ // Can trigger synchronous deletion of PaymentManifestParserAndroid.
+ Java_ManifestParseCallback_onPaymentMethodManifestParseSuccess(
+ env, jcallback_, juris.obj());
+ }
+
+ // Copies web app manifest into Java.
+ void OnWebAppManifestParsed(
+ std::vector<mojom::WebAppManifestSectionPtr> manifest) {
+ DCHECK_GE(100U, manifest.size());
JNIEnv* env = base::android::AttachCurrentThread();
if (manifest.empty()) {
@@ -38,26 +67,18 @@ class ParseCallback {
base::android::ScopedJavaLocalRef<jobjectArray> jmanifest =
Java_PaymentManifestParser_createManifest(env, manifest.size());
- // Java array indices must be integers.
- for (size_t i = 0; i < manifest.size() && i <= static_cast<size_t>(INT_MAX);
- ++i) {
- const mojom::PaymentManifestSectionPtr& section = manifest[i];
- if (section->sha256_cert_fingerprints.size() >
- static_cast<size_t>(INT_MAX)) {
- continue;
- }
+ for (size_t i = 0; i < manifest.size(); ++i) {
+ const mojom::WebAppManifestSectionPtr& section = manifest[i];
+ DCHECK_GE(100U, section->fingerprints.size());
Java_PaymentManifestParser_addSectionToManifest(
env, jmanifest.obj(), base::checked_cast<int>(i),
- base::android::ConvertUTF8ToJavaString(env, section->package_name),
- section->version,
- base::checked_cast<int>(section->sha256_cert_fingerprints.size()));
-
- for (size_t j = 0; j < section->sha256_cert_fingerprints.size() &&
- j <= static_cast<size_t>(INT_MAX);
- ++j) {
- const std::vector<uint8_t>& fingerprint =
- section->sha256_cert_fingerprints[j];
+ base::android::ConvertUTF8ToJavaString(env, section->id),
+ section->min_version,
+ base::checked_cast<int>(section->fingerprints.size()));
+
+ for (size_t j = 0; j < section->fingerprints.size(); ++j) {
+ const std::vector<uint8_t>& fingerprint = section->fingerprints[j];
Java_PaymentManifestParser_addFingerprintToSection(
env, jmanifest.obj(), base::checked_cast<int>(i),
base::checked_cast<int>(j),
@@ -66,8 +87,8 @@ class ParseCallback {
}
// Can trigger synchronous deletion of PaymentManifestParserAndroid.
- Java_ManifestParseCallback_onManifestParseSuccess(env, jcallback_,
- jmanifest.obj());
+ Java_ManifestParseCallback_onWebAppManifestParseSuccess(env, jcallback_,
+ jmanifest.obj());
}
private:
@@ -88,14 +109,25 @@ void PaymentManifestParserAndroid::StartUtilityProcess(
host_.StartUtilityProcess();
}
-void PaymentManifestParserAndroid::ParsePaymentManifest(
+void PaymentManifestParserAndroid::ParsePaymentMethodManifest(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jcaller,
+ const base::android::JavaParamRef<jstring>& jcontent,
+ const base::android::JavaParamRef<jobject>& jcallback) {
+ host_.ParsePaymentMethodManifest(
+ base::android::ConvertJavaStringToUTF8(env, jcontent),
+ base::BindOnce(&ParseCallback::OnPaymentMethodManifestParsed,
+ base::MakeUnique<ParseCallback>(jcallback)));
+}
+
+void PaymentManifestParserAndroid::ParseWebAppManifest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller,
const base::android::JavaParamRef<jstring>& jcontent,
const base::android::JavaParamRef<jobject>& jcallback) {
- host_.ParsePaymentManifest(
+ host_.ParseWebAppManifest(
base::android::ConvertJavaStringToUTF8(env, jcontent),
- base::BindOnce(&ParseCallback::OnManifestParsed,
+ base::BindOnce(&ParseCallback::OnWebAppManifestParsed,
base::MakeUnique<ParseCallback>(jcallback)));
}

Powered by Google App Engine
This is Rietveld 408576698