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

Side by Side Diff: chrome/browser/payments/android/payment_manifest_web_data_service_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 "chrome/browser/payments/android/payment_manifest_web_data_service_andr oid.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h"
10 #include "base/logging.h"
11 #include "base/memory/ptr_util.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "chrome/browser/web_data_service_factory.h"
14 #include "components/keyed_service/core/service_access_type.h"
15 #include "jni/PaymentManifestWebDataService_jni.h"
16
17 namespace payments {
please use gerrit instead 2017/04/24 18:22:31 Add an empty line after the namespace start.
gogerald1 2017/04/26 13:46:32 Done.
18 // static
19 bool PaymentManifestWebDataServiceAndroid::Register(JNIEnv* env) {
20 return RegisterNativesImpl(env);
21 }
22
23 PaymentManifestWebDataServiceAndroid::PaymentManifestWebDataServiceAndroid(
24 JNIEnv* env,
25 jobject obj)
26 : weak_java_obj_(env, obj) {}
27
28 void PaymentManifestWebDataServiceAndroid::OnWebDataServiceRequestDone(
29 WebDataServiceBase::Handle h,
30 std::unique_ptr<WDTypedResult> result) {
31 JNIEnv* env = base::android::AttachCurrentThread();
32 if (weak_java_obj_.get(env).is_null())
33 return;
34
35 if (web_data_service_requests_.find(h) == web_data_service_requests_.end())
36 return;
37
38 switch (result->GetType()) {
39 case PAYMENT_WEB_APP_MANIFEST:
please use gerrit instead 2017/04/24 18:22:32 Question: Where is this defined?
gogerald1 2017/04/26 13:46:32 web_data_results.h
please use gerrit instead 2017/04/26 15:00:43 Include it?
gogerald1 2017/04/26 17:30:30 Done.
40 OnWebAppManifestRequestDone(env, h, result.get());
41 break;
42 case PAYMENT_METHOD_MANIFEST:
43 OnPaymentMethodManifestRequestDone(env, h, result.get());
44 break;
45 default:
46 NOTREACHED() << "unsupported data type";
47 }
48 }
49
50 void PaymentManifestWebDataServiceAndroid::OnWebAppManifestRequestDone(
51 JNIEnv* env,
52 WebDataServiceBase::Handle h,
53 WDTypedResult* result) {
54 const std::vector<mojom::WebAppManifestSectionPtr>* manifest = &(
55 static_cast<
56 const WDResult<std::vector<mojom::WebAppManifestSectionPtr>>*>(result)
57 ->GetValue());
please use gerrit instead 2017/04/24 18:22:31 Ouch, this is confusing. Please separate this into
gogerald1 2017/04/26 13:46:32 Done.
58
59 base::android::ScopedJavaLocalRef<jobjectArray> jmanifest =
60 Java_PaymentManifestWebDataService_createManifest(env, manifest->size());
61
62 for (size_t i = 0; i < manifest->size(); ++i) {
63 const mojom::WebAppManifestSectionPtr& section = (*manifest)[i];
please use gerrit instead 2017/04/24 18:22:32 manifest->get(i) is less ugly, IMHO.
gogerald1 2017/04/26 13:46:32 Done.
64 DCHECK_GE(100U, section->fingerprints.size());
65
66 Java_PaymentManifestWebDataService_addSectionToManifest(
67 env, jmanifest.obj(), base::checked_cast<int>(i),
please use gerrit instead 2017/04/24 18:22:31 #include "base/numerics/safe_conversions.h"
gogerald1 2017/04/26 13:46:32 Done.
68 base::android::ConvertUTF8ToJavaString(env, section->id),
69 section->min_version,
70 base::checked_cast<int>(section->fingerprints.size()));
71
72 for (size_t j = 0; j < section->fingerprints.size(); ++j) {
73 const std::vector<uint8_t>& fingerprint = section->fingerprints[j];
74 Java_PaymentManifestWebDataService_addFingerprintToSection(
75 env, jmanifest.obj(), base::checked_cast<int>(i),
76 base::checked_cast<int>(j),
77 base::android::ToJavaByteArray(env, fingerprint));
78 }
79 }
80
81 Java_PaymentManifestWebDataServiceCallback_onPaymentWebAppManifestFetched(
82 env, web_data_service_requests_[h]->obj(), jmanifest.obj());
83 web_data_service_requests_.erase(h);
84 }
85
86 void PaymentManifestWebDataServiceAndroid::OnPaymentMethodManifestRequestDone(
87 JNIEnv* env,
88 WebDataServiceBase::Handle h,
89 WDTypedResult* result) {
90 const std::vector<std::string>* web_apps_ids =
please use gerrit instead 2017/04/24 18:22:32 #include <string>
gogerald1 2017/04/26 13:46:32 Done.
91 &(static_cast<const WDResult<std::vector<std::string>>*>(result)
92 ->GetValue());
please use gerrit instead 2017/04/24 18:22:32 Confusing. Please separate into several statements
gogerald1 2017/04/26 13:46:32 Done.
93
94 Java_PaymentManifestWebDataServiceCallback_onPaymentMethodManifestFetched(
95 env, web_data_service_requests_[h]->obj(),
96 base::android::ToJavaArrayOfStrings(env, *web_apps_ids));
97 web_data_service_requests_.erase(h);
98 }
99
100 bool PaymentManifestWebDataServiceAndroid::GetPaymentMethodManifest(
101 JNIEnv* env,
102 const base::android::JavaParamRef<jobject>& unused_obj,
103 const base::android::JavaParamRef<jstring>& jmethod_name,
104 const base::android::JavaParamRef<jobject>& jcallback) {
105 scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
106 WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
107 ProfileManager::GetActiveUserProfile(),
108 ServiceAccessType::EXPLICIT_ACCESS);
109 if (web_data_service == nullptr)
110 return false;
111
112 WebDataServiceBase::Handle handle =
113 web_data_service->GetPaymentMethodManifest(
114 base::android::ConvertJavaStringToUTF8(env, jmethod_name), this);
115 web_data_service_requests_[handle] =
116 base::MakeUnique<base::android::ScopedJavaGlobalRef<jobject>>(jcallback);
117
118 return true;
119 }
120
121 void PaymentManifestWebDataServiceAndroid::AddPaymentMethodManifest(
122 JNIEnv* env,
123 const base::android::JavaParamRef<jobject>& unused_obj,
124 const base::android::JavaParamRef<jstring>& jmethod_name,
125 const base::android::JavaParamRef<jobjectArray>& jweb_apps_ids) {
126 std::vector<std::string> web_apps_ids;
127 base::android::AppendJavaStringArrayToStringVector(env, jweb_apps_ids,
128 &web_apps_ids);
129
130 scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
131 WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
132 ProfileManager::GetActiveUserProfile(),
133 ServiceAccessType::EXPLICIT_ACCESS);
134 if (web_data_service == nullptr)
135 return;
136
137 web_data_service->AddPaymentMethodManifest(
138 base::android::ConvertJavaStringToUTF8(jmethod_name), web_apps_ids);
139 }
140
141 bool PaymentManifestWebDataServiceAndroid::GetPaymentWebAppManifest(
142 JNIEnv* env,
143 const base::android::JavaParamRef<jobject>& unused_obj,
144 const base::android::JavaParamRef<jstring>& jweb_app_id,
145 const base::android::JavaParamRef<jobject>& jcallback) {
146 scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
147 WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
148 ProfileManager::GetActiveUserProfile(),
149 ServiceAccessType::EXPLICIT_ACCESS);
150 if (web_data_service == nullptr)
151 return false;
152
153 WebDataServiceBase::Handle handle =
154 web_data_service->GetPaymentWebAppManifest(
155 base::android::ConvertJavaStringToUTF8(env, jweb_app_id), this);
156 web_data_service_requests_[handle] =
157 base::MakeUnique<base::android::ScopedJavaGlobalRef<jobject>>(jcallback);
158
159 return true;
160 }
161
162 void PaymentManifestWebDataServiceAndroid::AddPaymentWebAppManifest(
163 const std::vector<mojom::WebAppManifestSectionPtr>& manifest) {
164 scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
165 WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
166 ProfileManager::GetActiveUserProfile(),
167 ServiceAccessType::EXPLICIT_ACCESS);
168 if (web_data_service != nullptr)
169 web_data_service->AddPaymentWebAppManifest(manifest);
170 }
171
172 static jlong Init(JNIEnv* env,
173 const base::android::JavaParamRef<jobject>& obj) {
174 PaymentManifestWebDataServiceAndroid* manifest_web_data_service_android =
175 new PaymentManifestWebDataServiceAndroid(env, obj);
176 return reinterpret_cast<intptr_t>(manifest_web_data_service_android);
177 }
178
179 } // namespace payments
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698