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) { |