Chromium Code Reviews| 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..a5161fff0ea4e361e43d69d070af4f76d6356e0d 100644 |
| --- a/components/payments/content/android/payment_manifest_parser_android.cc |
| +++ b/components/payments/content/android/payment_manifest_parser_android.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/numerics/safe_conversions.h" |
| #include "jni/PaymentManifestParser_jni.h" |
| +#include "url/mojo/url.mojom.h" |
| namespace payments { |
| namespace { |
| @@ -25,8 +26,35 @@ class ParseCallback { |
| ~ParseCallback() {} |
| - void OnManifestParsed( |
| - std::vector<mojom::PaymentManifestSectionPtr> manifest) { |
| + void OnPaymentMethodManifestParsed(std::vector<GURL> webAppManifestUrls) { |
| + DCHECK_GE(100U, webAppManifestUrls.size()); |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + |
| + if (webAppManifestUrls.empty()) { |
|
Mathieu
2017/04/07 13:29:06
c++ case plz
please use gerrit instead
2017/04/07 16:56:29
Done.
|
| + // Can trigger synchronous deletion of PaymentManifestParserAndroid. |
| + Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_); |
| + return; |
| + } |
| + |
| + base::android::ScopedJavaLocalRef<jobjectArray> juris = |
| + Java_PaymentManifestParser_createWebAppManifestUris( |
| + env, webAppManifestUrls.size()); |
| + |
| + for (size_t i = 0; i < webAppManifestUrls.size(); ++i) { |
| + DCHECK(Java_PaymentManifestParser_addUri( |
| + env, juris.obj(), base::checked_cast<int>(i), |
| + base::android::ConvertUTF8ToJavaString( |
| + env, webAppManifestUrls[i].spec()))); |
| + } |
| + |
| + // Can trigger synchronous deletion of PaymentManifestParserAndroid. |
| + Java_ManifestParseCallback_onPaymentMethodManifestParseSuccess( |
| + env, jcallback_, juris.obj()); |
| + } |
| + |
| + void OnWebAppManifestParsed( |
|
Mathieu
2017/04/07 13:29:06
Could benefit from comments. Now that the WebAppMa
please use gerrit instead
2017/04/07 16:56:29
Done. It's strictly a copy.
|
| + std::vector<mojom::WebAppManifestSectionPtr> manifest) { |
| + DCHECK_GE(100U, manifest.size()); |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| if (manifest.empty()) { |
| @@ -38,26 +66,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 +86,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 +108,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))); |
| } |