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

Side by Side Diff: chrome/browser/android/payments/service_worker_payment_app_bridge.cc

Issue 2640743005: PaymentApp: Implement invokePaymentApp for Android (Closed)
Patch Set: Fix a compile error Created 3 years, 11 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
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestBase.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chrome/browser/android/payments/service_worker_payment_app_bridge.h" 5 #include "chrome/browser/android/payments/service_worker_payment_app_bridge.h"
6 6
7 #include <utility>
8
9 #include "base/android/jni_array.h"
7 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
8 #include "base/android/scoped_java_ref.h" 11 #include "base/android/scoped_java_ref.h"
9 #include "chrome/browser/profiles/profile_manager.h" 12 #include "chrome/browser/profiles/profile_manager.h"
10 #include "components/payments/payment_app.mojom.h" 13 #include "components/payments/payment_app.mojom.h"
11 #include "content/public/browser/browser_context.h"
12 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/payment_app_provider.h" 15 #include "content/public/browser/payment_app_provider.h"
14 #include "content/public/browser/storage_partition.h"
15 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
16 #include "jni/ServiceWorkerPaymentAppBridge_jni.h" 17 #include "jni/ServiceWorkerPaymentAppBridge_jni.h"
17 18
18 using base::android::AttachCurrentThread; 19 using base::android::AttachCurrentThread;
20 using base::android::ConvertJavaStringToUTF8;
19 using base::android::ConvertUTF8ToJavaString; 21 using base::android::ConvertUTF8ToJavaString;
20 using base::android::JavaParamRef; 22 using base::android::JavaParamRef;
21 using base::android::JavaRef; 23 using base::android::JavaRef;
22 using base::android::ScopedJavaGlobalRef; 24 using base::android::ScopedJavaGlobalRef;
23 using base::android::ScopedJavaLocalRef; 25 using base::android::ScopedJavaLocalRef;
26 using payments::mojom::PaymentAppRequestData;
27 using payments::mojom::PaymentAppRequestDataPtr;
28 using payments::mojom::PaymentCurrencyAmount;
29 using payments::mojom::PaymentDetailsModifier;
30 using payments::mojom::PaymentDetailsModifierPtr;
31 using payments::mojom::PaymentItem;
32 using payments::mojom::PaymentMethodData;
33 using payments::mojom::PaymentMethodDataPtr;
24 34
25 namespace { 35 namespace {
26 36
27 void OnGotAllManifests(const JavaRef<jobject>& jweb_contents, 37 void OnGotAllManifests(const JavaRef<jobject>& jweb_contents,
28 const JavaRef<jobject>& jcallback, 38 const JavaRef<jobject>& jcallback,
29 content::PaymentAppProvider::Manifests manifests) { 39 content::PaymentAppProvider::Manifests manifests) {
30 JNIEnv* env = AttachCurrentThread(); 40 JNIEnv* env = AttachCurrentThread();
31 41
32 for (const auto& entry : manifests) { 42 for (const auto& entry : manifests) {
33 ScopedJavaLocalRef<jobject> java_manifest = 43 ScopedJavaLocalRef<jobject> java_manifest =
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 base::Bind(&OnGotAllManifests, 82 base::Bind(&OnGotAllManifests,
73 ScopedJavaGlobalRef<jobject>(env, jweb_contents), 83 ScopedJavaGlobalRef<jobject>(env, jweb_contents),
74 ScopedJavaGlobalRef<jobject>(env, jcallback))); 84 ScopedJavaGlobalRef<jobject>(env, jcallback)));
75 } 85 }
76 86
77 static void InvokePaymentApp(JNIEnv* env, 87 static void InvokePaymentApp(JNIEnv* env,
78 const JavaParamRef<jclass>& jcaller, 88 const JavaParamRef<jclass>& jcaller,
79 const JavaParamRef<jobject>& jweb_contents, 89 const JavaParamRef<jobject>& jweb_contents,
80 jlong registration_id, 90 jlong registration_id,
81 const JavaParamRef<jstring>& joption_id, 91 const JavaParamRef<jstring>& joption_id,
82 const JavaParamRef<jobjectArray>& jmethod_data) { 92 const JavaParamRef<jstring>& jorigin,
83 // TODO(tommyt): crbug.com/669876. Implement this 93 const JavaParamRef<jobjectArray>& jmethod_data,
84 NOTIMPLEMENTED(); 94 const JavaParamRef<jobject>& jtotal,
95 const JavaParamRef<jobjectArray>& jmodifiers) {
96 content::WebContents* web_contents =
97 content::WebContents::FromJavaWebContents(jweb_contents);
98
99 PaymentAppRequestDataPtr data = PaymentAppRequestData::New();
100
101 data->optionId = ConvertJavaStringToUTF8(env, joption_id);
102 data->origin = GURL(ConvertJavaStringToUTF8(env, jorigin));
103
104 for (jsize i = 0; i < env->GetArrayLength(jmethod_data); i++) {
105 ScopedJavaLocalRef<jobject> element(
106 env, env->GetObjectArrayElement(jmethod_data, i));
107 PaymentMethodDataPtr methodData = PaymentMethodData::New();
108 base::android::AppendJavaStringArrayToStringVector(
109 env,
110 Java_ServiceWorkerPaymentAppBridge_getSupportedMethodsFromMethodData(
111 env, element)
112 .obj(),
113 &methodData->supported_methods);
114 methodData->stringified_data = ConvertJavaStringToUTF8(
115 env,
116 Java_ServiceWorkerPaymentAppBridge_getStringifiedDataFromMethodData(
117 env, element));
118 data->methodData.push_back(std::move(methodData));
119 }
120
121 data->total = PaymentItem::New();
122 data->total->label = ConvertJavaStringToUTF8(
123 env,
124 Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(env, jtotal));
125 data->total->amount = PaymentCurrencyAmount::New();
126 data->total->amount->currency = ConvertJavaStringToUTF8(
127 env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem(
128 env, jtotal));
129 data->total->amount->value = ConvertJavaStringToUTF8(
130 env,
131 Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(env, jtotal));
132
133 for (jsize i = 0; i < env->GetArrayLength(jmodifiers); i++) {
134 ScopedJavaLocalRef<jobject> jmodifier(
135 env, env->GetObjectArrayElement(jmodifiers, i));
136 PaymentDetailsModifierPtr modifier = PaymentDetailsModifier::New();
137
138 ScopedJavaLocalRef<jobject> jtotal =
139 Java_ServiceWorkerPaymentAppBridge_getTotalFromModifier(env, jmodifier);
140 modifier->total = PaymentItem::New();
141 modifier->total->label = ConvertJavaStringToUTF8(
142 env, Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(
143 env, jtotal));
144 modifier->total->amount = PaymentCurrencyAmount::New();
145 modifier->total->amount->currency = ConvertJavaStringToUTF8(
146 env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem(
147 env, jtotal));
148 modifier->total->amount->value = ConvertJavaStringToUTF8(
149 env, Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(
150 env, jtotal));
151
152 ScopedJavaLocalRef<jobject> jmodifier_method_data =
153 Java_ServiceWorkerPaymentAppBridge_getMethodDataFromModifier(env,
154 jmodifier);
155 modifier->method_data = PaymentMethodData::New();
156 base::android::AppendJavaStringArrayToStringVector(
157 env,
158 Java_ServiceWorkerPaymentAppBridge_getSupportedMethodsFromMethodData(
159 env, jmodifier_method_data)
160 .obj(),
161 &modifier->method_data->supported_methods);
162 modifier->method_data->stringified_data = ConvertJavaStringToUTF8(
163 env,
164 Java_ServiceWorkerPaymentAppBridge_getStringifiedDataFromMethodData(
165 env, jmodifier_method_data));
166
167 data->modifiers.push_back(std::move(modifier));
168 }
169
170 content::PaymentAppProvider::GetInstance()->InvokePaymentApp(
171 web_contents->GetBrowserContext(), registration_id, std::move(data));
85 } 172 }
86 173
87 bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) { 174 bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) {
88 return RegisterNativesImpl(env); 175 return RegisterNativesImpl(env);
89 } 176 }
OLDNEW
« no previous file with comments | « chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestTestBase.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698