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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/payments/content/android/payment_manifest_parser_android.h" 5 #include "components/payments/content/android/payment_manifest_parser_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <climits>
10
11 #include "base/android/jni_array.h" 9 #include "base/android/jni_array.h"
12 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
13 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/logging.h"
14 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
15 #include "base/numerics/safe_conversions.h" 14 #include "base/numerics/safe_conversions.h"
16 #include "jni/PaymentManifestParser_jni.h" 15 #include "jni/PaymentManifestParser_jni.h"
16 #include "url/gurl.h"
17 17
18 namespace payments { 18 namespace payments {
19 namespace { 19 namespace {
20 20
21 class ParseCallback { 21 class ParseCallback {
22 public: 22 public:
23 explicit ParseCallback(const base::android::JavaParamRef<jobject>& jcallback) 23 explicit ParseCallback(const base::android::JavaParamRef<jobject>& jcallback)
24 : jcallback_(jcallback) {} 24 : jcallback_(jcallback) {}
25 25
26 ~ParseCallback() {} 26 ~ParseCallback() {}
27 27
28 void OnManifestParsed( 28 // Copies payment method manifest into Java.
29 std::vector<mojom::PaymentManifestSectionPtr> manifest) { 29 void OnPaymentMethodManifestParsed(std::vector<GURL> web_app_manifest_urls) {
30 DCHECK_GE(100U, web_app_manifest_urls.size());
31 JNIEnv* env = base::android::AttachCurrentThread();
32
33 if (web_app_manifest_urls.empty()) {
34 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
35 Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_);
36 return;
37 }
38
39 base::android::ScopedJavaLocalRef<jobjectArray> juris =
40 Java_PaymentManifestParser_createWebAppManifestUris(
41 env, web_app_manifest_urls.size());
42
43 for (size_t i = 0; i < web_app_manifest_urls.size(); ++i) {
44 DCHECK(Java_PaymentManifestParser_addUri(
45 env, juris.obj(), base::checked_cast<int>(i),
46 base::android::ConvertUTF8ToJavaString(
47 env, web_app_manifest_urls[i].spec())));
48 }
49
50 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
51 Java_ManifestParseCallback_onPaymentMethodManifestParseSuccess(
52 env, jcallback_, juris.obj());
53 }
54
55 // Copies web app manifest into Java.
56 void OnWebAppManifestParsed(
57 std::vector<mojom::WebAppManifestSectionPtr> manifest) {
58 DCHECK_GE(100U, manifest.size());
30 JNIEnv* env = base::android::AttachCurrentThread(); 59 JNIEnv* env = base::android::AttachCurrentThread();
31 60
32 if (manifest.empty()) { 61 if (manifest.empty()) {
33 // Can trigger synchronous deletion of PaymentManifestParserAndroid. 62 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
34 Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_); 63 Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_);
35 return; 64 return;
36 } 65 }
37 66
38 base::android::ScopedJavaLocalRef<jobjectArray> jmanifest = 67 base::android::ScopedJavaLocalRef<jobjectArray> jmanifest =
39 Java_PaymentManifestParser_createManifest(env, manifest.size()); 68 Java_PaymentManifestParser_createManifest(env, manifest.size());
40 69
41 // Java array indices must be integers. 70 for (size_t i = 0; i < manifest.size(); ++i) {
42 for (size_t i = 0; i < manifest.size() && i <= static_cast<size_t>(INT_MAX); 71 const mojom::WebAppManifestSectionPtr& section = manifest[i];
43 ++i) { 72 DCHECK_GE(100U, section->fingerprints.size());
44 const mojom::PaymentManifestSectionPtr& section = manifest[i];
45 if (section->sha256_cert_fingerprints.size() >
46 static_cast<size_t>(INT_MAX)) {
47 continue;
48 }
49 73
50 Java_PaymentManifestParser_addSectionToManifest( 74 Java_PaymentManifestParser_addSectionToManifest(
51 env, jmanifest.obj(), base::checked_cast<int>(i), 75 env, jmanifest.obj(), base::checked_cast<int>(i),
52 base::android::ConvertUTF8ToJavaString(env, section->package_name), 76 base::android::ConvertUTF8ToJavaString(env, section->id),
53 section->version, 77 section->min_version,
54 base::checked_cast<int>(section->sha256_cert_fingerprints.size())); 78 base::checked_cast<int>(section->fingerprints.size()));
55 79
56 for (size_t j = 0; j < section->sha256_cert_fingerprints.size() && 80 for (size_t j = 0; j < section->fingerprints.size(); ++j) {
57 j <= static_cast<size_t>(INT_MAX); 81 const std::vector<uint8_t>& fingerprint = section->fingerprints[j];
58 ++j) {
59 const std::vector<uint8_t>& fingerprint =
60 section->sha256_cert_fingerprints[j];
61 Java_PaymentManifestParser_addFingerprintToSection( 82 Java_PaymentManifestParser_addFingerprintToSection(
62 env, jmanifest.obj(), base::checked_cast<int>(i), 83 env, jmanifest.obj(), base::checked_cast<int>(i),
63 base::checked_cast<int>(j), 84 base::checked_cast<int>(j),
64 base::android::ToJavaByteArray(env, fingerprint)); 85 base::android::ToJavaByteArray(env, fingerprint));
65 } 86 }
66 } 87 }
67 88
68 // Can trigger synchronous deletion of PaymentManifestParserAndroid. 89 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
69 Java_ManifestParseCallback_onManifestParseSuccess(env, jcallback_, 90 Java_ManifestParseCallback_onWebAppManifestParseSuccess(env, jcallback_,
70 jmanifest.obj()); 91 jmanifest.obj());
71 } 92 }
72 93
73 private: 94 private:
74 base::android::ScopedJavaGlobalRef<jobject> jcallback_; 95 base::android::ScopedJavaGlobalRef<jobject> jcallback_;
75 96
76 DISALLOW_COPY_AND_ASSIGN(ParseCallback); 97 DISALLOW_COPY_AND_ASSIGN(ParseCallback);
77 }; 98 };
78 99
79 } // namespace 100 } // namespace
80 101
81 PaymentManifestParserAndroid::PaymentManifestParserAndroid() {} 102 PaymentManifestParserAndroid::PaymentManifestParserAndroid() {}
82 103
83 PaymentManifestParserAndroid::~PaymentManifestParserAndroid() {} 104 PaymentManifestParserAndroid::~PaymentManifestParserAndroid() {}
84 105
85 void PaymentManifestParserAndroid::StartUtilityProcess( 106 void PaymentManifestParserAndroid::StartUtilityProcess(
86 JNIEnv* env, 107 JNIEnv* env,
87 const base::android::JavaParamRef<jobject>& jcaller) { 108 const base::android::JavaParamRef<jobject>& jcaller) {
88 host_.StartUtilityProcess(); 109 host_.StartUtilityProcess();
89 } 110 }
90 111
91 void PaymentManifestParserAndroid::ParsePaymentManifest( 112 void PaymentManifestParserAndroid::ParsePaymentMethodManifest(
92 JNIEnv* env, 113 JNIEnv* env,
93 const base::android::JavaParamRef<jobject>& jcaller, 114 const base::android::JavaParamRef<jobject>& jcaller,
94 const base::android::JavaParamRef<jstring>& jcontent, 115 const base::android::JavaParamRef<jstring>& jcontent,
95 const base::android::JavaParamRef<jobject>& jcallback) { 116 const base::android::JavaParamRef<jobject>& jcallback) {
96 host_.ParsePaymentManifest( 117 host_.ParsePaymentMethodManifest(
97 base::android::ConvertJavaStringToUTF8(env, jcontent), 118 base::android::ConvertJavaStringToUTF8(env, jcontent),
98 base::BindOnce(&ParseCallback::OnManifestParsed, 119 base::BindOnce(&ParseCallback::OnPaymentMethodManifestParsed,
99 base::MakeUnique<ParseCallback>(jcallback))); 120 base::MakeUnique<ParseCallback>(jcallback)));
100 } 121 }
101 122
123 void PaymentManifestParserAndroid::ParseWebAppManifest(
124 JNIEnv* env,
125 const base::android::JavaParamRef<jobject>& jcaller,
126 const base::android::JavaParamRef<jstring>& jcontent,
127 const base::android::JavaParamRef<jobject>& jcallback) {
128 host_.ParseWebAppManifest(
129 base::android::ConvertJavaStringToUTF8(env, jcontent),
130 base::BindOnce(&ParseCallback::OnWebAppManifestParsed,
131 base::MakeUnique<ParseCallback>(jcallback)));
132 }
133
102 void PaymentManifestParserAndroid::StopUtilityProcess( 134 void PaymentManifestParserAndroid::StopUtilityProcess(
103 JNIEnv* env, 135 JNIEnv* env,
104 const base::android::JavaParamRef<jobject>& jcaller) { 136 const base::android::JavaParamRef<jobject>& jcaller) {
105 delete this; 137 delete this;
106 } 138 }
107 139
108 bool RegisterPaymentManifestParser(JNIEnv* env) { 140 bool RegisterPaymentManifestParser(JNIEnv* env) {
109 return RegisterNativesImpl(env); 141 return RegisterNativesImpl(env);
110 } 142 }
111 143
112 // Caller owns the result. 144 // Caller owns the result.
113 jlong CreatePaymentManifestParserAndroid( 145 jlong CreatePaymentManifestParserAndroid(
114 JNIEnv* env, 146 JNIEnv* env,
115 const base::android::JavaParamRef<jclass>& jcaller) { 147 const base::android::JavaParamRef<jclass>& jcaller) {
116 return reinterpret_cast<jlong>(new PaymentManifestParserAndroid); 148 return reinterpret_cast<jlong>(new PaymentManifestParserAndroid);
117 } 149 }
118 150
119 } // namespace payments 151 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698