Chromium Code Reviews| Index: chrome/browser/android/payments/service_worker_payment_app_bridge.cc |
| diff --git a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc |
| index 9ea58f1cf33c3a2ddb2fe77a6d72502f40e25a7b..52aa2865d62353d620422504586f3930991e3d67 100644 |
| --- a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc |
| +++ b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc |
| @@ -4,18 +4,18 @@ |
| #include "chrome/browser/android/payments/service_worker_payment_app_bridge.h" |
| +#include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| #include "base/android/scoped_java_ref.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "components/payments/payment_app.mojom.h" |
| -#include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/payment_app_provider.h" |
| -#include "content/public/browser/storage_partition.h" |
| #include "content/public/browser/web_contents.h" |
| #include "jni/ServiceWorkerPaymentAppBridge_jni.h" |
| using base::android::AttachCurrentThread; |
| +using base::android::ConvertJavaStringToUTF8; |
| using base::android::ConvertUTF8ToJavaString; |
| using base::android::JavaParamRef; |
| using base::android::JavaRef; |
| @@ -79,9 +79,89 @@ static void InvokePaymentApp(JNIEnv* env, |
| const JavaParamRef<jobject>& jweb_contents, |
| jlong registration_id, |
| const JavaParamRef<jstring>& joption_id, |
| - const JavaParamRef<jobjectArray>& jmethod_data) { |
| - // TODO(tommyt): crbug.com/669876. Implement this |
| - NOTIMPLEMENTED(); |
| + const JavaParamRef<jobjectArray>& jmethod_data, |
| + const JavaParamRef<jobject>& jtotal, |
| + const JavaParamRef<jobjectArray>& jmodifiers) { |
| + content::WebContents* web_contents = |
| + content::WebContents::FromJavaWebContents(jweb_contents); |
| + |
| + payments::mojom::PaymentAppRequestDataPtr data = |
|
please use gerrit instead
2017/01/19 16:45:04
using payments::mojom::PaymentAppRequestDataPtr;
tommyt
2017/01/20 09:33:29
Done.
|
| + payments::mojom::PaymentAppRequestData::New(); |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentAppRequestData;
tommyt
2017/01/20 09:33:29
Done.
|
| + |
| + data->origin = web_contents->GetLastCommittedURL().GetOrigin(); |
|
please use gerrit instead
2017/01/19 16:45:05
PaymentRequestImpl.java has mOrigin that it passes
tommyt
2017/01/20 09:33:29
Done.
|
| + |
| + for (int i = 0; i < env->GetArrayLength(jmethod_data); i++) { |
|
please use gerrit instead
2017/01/19 16:45:04
GetArrayLength returns jsize type, so let's use th
tommyt
2017/01/20 09:33:29
Done.
|
| + ScopedJavaLocalRef<jobject> element( |
| + env, env->GetObjectArrayElement(jmethod_data, i)); |
| + payments::mojom::PaymentMethodDataPtr methodData = |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentMethodDataPtr;
tommyt
2017/01/20 09:33:29
Done.
|
| + payments::mojom::PaymentMethodData::New(); |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentMethodData;
tommyt
2017/01/20 09:33:29
Done.
|
| + base::android::AppendJavaStringArrayToStringVector( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getSupportedMethodsFromMethodData( |
| + env, element) |
| + .obj(), |
| + &methodData->supported_methods); |
| + methodData->stringified_data = ConvertJavaStringToUTF8( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getStringifiedDataFromMethodData( |
| + env, element)); |
| + data->methodData.push_back(std::move(methodData)); |
|
please use gerrit instead
2017/01/19 16:45:05
#include <utility>
tommyt
2017/01/20 09:33:29
Done.
|
| + } |
| + |
| + data->total = payments::mojom::PaymentItem::New(); |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentItem;
tommyt
2017/01/20 09:33:29
Done.
|
| + data->total->label = ConvertJavaStringToUTF8( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(env, jtotal)); |
| + data->total->amount = payments::mojom::PaymentCurrencyAmount::New(); |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentCurrencyAmount;
tommyt
2017/01/20 09:33:29
Done.
|
| + data->total->amount->currency = ConvertJavaStringToUTF8( |
| + env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem( |
| + env, jtotal)); |
| + data->total->amount->value = ConvertJavaStringToUTF8( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(env, jtotal)); |
| + |
| + for (int i = 0; i < env->GetArrayLength(jmodifiers); i++) { |
| + ScopedJavaLocalRef<jobject> jmodifier( |
| + env, env->GetObjectArrayElement(jmodifiers, i)); |
| + payments::mojom::PaymentDetailsModifierPtr modifier = |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentDetailsModifierPtr;
tommyt
2017/01/20 09:33:29
Done.
|
| + payments::mojom::PaymentDetailsModifier::New(); |
|
please use gerrit instead
2017/01/19 16:45:05
using payments::mojom::PaymentDetailsModifier;
tommyt
2017/01/20 09:33:29
Done.
|
| + |
| + ScopedJavaLocalRef<jobject> jtotal = |
| + Java_ServiceWorkerPaymentAppBridge_getTotalFromModifier(env, jmodifier); |
| + modifier->total = payments::mojom::PaymentItem::New(); |
| + modifier->total->label = ConvertJavaStringToUTF8( |
| + env, Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem( |
| + env, jtotal)); |
| + modifier->total->amount = payments::mojom::PaymentCurrencyAmount::New(); |
| + modifier->total->amount->currency = ConvertJavaStringToUTF8( |
| + env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem( |
| + env, jtotal)); |
| + modifier->total->amount->value = ConvertJavaStringToUTF8( |
| + env, Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem( |
| + env, jtotal)); |
| + |
| + ScopedJavaLocalRef<jobject> jmodifier_method_data = |
| + Java_ServiceWorkerPaymentAppBridge_getMethodDataFromModifier(env, |
| + jmodifier); |
| + modifier->method_data = payments::mojom::PaymentMethodData::New(); |
| + base::android::AppendJavaStringArrayToStringVector( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getSupportedMethodsFromMethodData( |
| + env, jmodifier_method_data) |
| + .obj(), |
| + &modifier->method_data->supported_methods); |
| + modifier->method_data->stringified_data = ConvertJavaStringToUTF8( |
| + env, |
| + Java_ServiceWorkerPaymentAppBridge_getStringifiedDataFromMethodData( |
| + env, jmodifier_method_data)); |
| + |
| + data->modifiers.push_back(std::move(modifier)); |
| + } |
| + |
| + data->optionId = ConvertJavaStringToUTF8(env, joption_id); |
| + |
| + content::PaymentAppProvider::GetInstance()->InvokePaymentApp( |
| + web_contents->GetBrowserContext(), registration_id, std::move(data)); |
| } |
| bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) { |