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

Unified Diff: chrome/browser/android/payments/service_worker_payment_app_bridge.cc

Issue 2640743005: PaymentApp: Implement invokePaymentApp for Android (Closed)
Patch Set: Fix unittest compilation 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698