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

Side by Side Diff: components/payments/content/android/payment_manifest_parser_android.cc

Issue 2838433002: [Payments] Cache payment manifests. (Closed)
Patch Set: fix tests 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/payments/content/android/payment_manifest_parser_android.h"
6
7 #include <stddef.h>
8
9 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h"
11 #include "base/bind.h"
12 #include "base/logging.h"
13 #include "base/memory/ptr_util.h"
14 #include "base/numerics/safe_conversions.h"
15 #include "jni/PaymentManifestParser_jni.h"
16 #include "url/gurl.h"
17
18 namespace payments {
19 namespace {
20
21 class ParseCallback {
22 public:
23 explicit ParseCallback(const base::android::JavaParamRef<jobject>& jcallback)
24 : jcallback_(jcallback) {}
25
26 ~ParseCallback() {}
27
28 // Copies payment method manifest into Java.
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 bool is_valid_uri = 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 DCHECK(is_valid_uri);
49 }
50
51 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
52 Java_ManifestParseCallback_onPaymentMethodManifestParseSuccess(
53 env, jcallback_, juris.obj());
54 }
55
56 // Copies web app manifest into Java.
57 void OnWebAppManifestParsed(
58 std::vector<mojom::WebAppManifestSectionPtr> manifest) {
59 DCHECK_GE(100U, manifest.size());
60 JNIEnv* env = base::android::AttachCurrentThread();
61
62 if (manifest.empty()) {
63 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
64 Java_ManifestParseCallback_onManifestParseFailure(env, jcallback_);
65 return;
66 }
67
68 base::android::ScopedJavaLocalRef<jobjectArray> jmanifest =
69 Java_PaymentManifestParser_createManifest(env, manifest.size());
70
71 for (size_t i = 0; i < manifest.size(); ++i) {
72 const mojom::WebAppManifestSectionPtr& section = manifest[i];
73 DCHECK_GE(100U, section->fingerprints.size());
74
75 Java_PaymentManifestParser_addSectionToManifest(
76 env, jmanifest.obj(), base::checked_cast<int>(i),
77 base::android::ConvertUTF8ToJavaString(env, section->id),
78 section->min_version,
79 base::checked_cast<int>(section->fingerprints.size()));
80
81 for (size_t j = 0; j < section->fingerprints.size(); ++j) {
82 const std::vector<uint8_t>& fingerprint = section->fingerprints[j];
83 Java_PaymentManifestParser_addFingerprintToSection(
84 env, jmanifest.obj(), base::checked_cast<int>(i),
85 base::checked_cast<int>(j),
86 base::android::ToJavaByteArray(env, fingerprint));
87 }
88 }
89
90 // Can trigger synchronous deletion of PaymentManifestParserAndroid.
91 Java_ManifestParseCallback_onWebAppManifestParseSuccess(env, jcallback_,
92 jmanifest.obj());
93 }
94
95 private:
96 base::android::ScopedJavaGlobalRef<jobject> jcallback_;
97
98 DISALLOW_COPY_AND_ASSIGN(ParseCallback);
99 };
100
101 } // namespace
102
103 PaymentManifestParserAndroid::PaymentManifestParserAndroid() {}
104
105 PaymentManifestParserAndroid::~PaymentManifestParserAndroid() {}
106
107 void PaymentManifestParserAndroid::StartUtilityProcess(
108 JNIEnv* env,
109 const base::android::JavaParamRef<jobject>& jcaller) {
110 host_.StartUtilityProcess();
111 }
112
113 void PaymentManifestParserAndroid::ParsePaymentMethodManifest(
114 JNIEnv* env,
115 const base::android::JavaParamRef<jobject>& jcaller,
116 const base::android::JavaParamRef<jstring>& jcontent,
117 const base::android::JavaParamRef<jobject>& jcallback) {
118 host_.ParsePaymentMethodManifest(
119 base::android::ConvertJavaStringToUTF8(env, jcontent),
120 base::BindOnce(&ParseCallback::OnPaymentMethodManifestParsed,
121 base::MakeUnique<ParseCallback>(jcallback)));
122 }
123
124 void PaymentManifestParserAndroid::ParseWebAppManifest(
125 JNIEnv* env,
126 const base::android::JavaParamRef<jobject>& jcaller,
127 const base::android::JavaParamRef<jstring>& jcontent,
128 const base::android::JavaParamRef<jobject>& jcallback) {
129 host_.ParseWebAppManifest(
130 base::android::ConvertJavaStringToUTF8(env, jcontent),
131 base::BindOnce(&ParseCallback::OnWebAppManifestParsed,
132 base::MakeUnique<ParseCallback>(jcallback)));
133 }
134
135 void PaymentManifestParserAndroid::StopUtilityProcess(
136 JNIEnv* env,
137 const base::android::JavaParamRef<jobject>& jcaller) {
138 delete this;
139 }
140
141 bool RegisterPaymentManifestParser(JNIEnv* env) {
142 return RegisterNativesImpl(env);
143 }
144
145 // Caller owns the result.
146 jlong CreatePaymentManifestParserAndroid(
147 JNIEnv* env,
148 const base::android::JavaParamRef<jclass>& jcaller) {
149 return reinterpret_cast<jlong>(new PaymentManifestParserAndroid);
150 }
151
152 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698