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

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

Powered by Google App Engine
This is Rietveld 408576698