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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..cf5391cb7bf282f8bac5eefd08e9632688d9572d 100644
--- a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
+++ b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
@@ -4,23 +4,33 @@
#include "chrome/browser/android/payments/service_worker_payment_app_bridge.h"
+#include <utility>
+
+#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;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
+using payments::mojom::PaymentAppRequestData;
+using payments::mojom::PaymentAppRequestDataPtr;
+using payments::mojom::PaymentCurrencyAmount;
+using payments::mojom::PaymentDetailsModifier;
+using payments::mojom::PaymentDetailsModifierPtr;
+using payments::mojom::PaymentItem;
+using payments::mojom::PaymentMethodData;
+using payments::mojom::PaymentMethodDataPtr;
namespace {
@@ -79,9 +89,86 @@ 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<jstring>& jorigin,
+ const JavaParamRef<jobjectArray>& jmethod_data,
+ const JavaParamRef<jobject>& jtotal,
+ const JavaParamRef<jobjectArray>& jmodifiers) {
+ content::WebContents* web_contents =
+ content::WebContents::FromJavaWebContents(jweb_contents);
+
+ PaymentAppRequestDataPtr data = PaymentAppRequestData::New();
+
+ data->optionId = ConvertJavaStringToUTF8(env, joption_id);
+ data->origin = GURL(ConvertJavaStringToUTF8(env, jorigin));
+
+ for (jsize i = 0; i < env->GetArrayLength(jmethod_data); i++) {
+ ScopedJavaLocalRef<jobject> element(
+ env, env->GetObjectArrayElement(jmethod_data, i));
+ PaymentMethodDataPtr methodData = PaymentMethodData::New();
+ 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));
+ }
+
+ data->total = PaymentItem::New();
+ data->total->label = ConvertJavaStringToUTF8(
+ env,
+ Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(env, jtotal));
+ data->total->amount = PaymentCurrencyAmount::New();
+ data->total->amount->currency = ConvertJavaStringToUTF8(
+ env, Java_ServiceWorkerPaymentAppBridge_getCurrencyFromPaymentItem(
+ env, jtotal));
+ data->total->amount->value = ConvertJavaStringToUTF8(
+ env,
+ Java_ServiceWorkerPaymentAppBridge_getValueFromPaymentItem(env, jtotal));
+
+ for (jsize i = 0; i < env->GetArrayLength(jmodifiers); i++) {
+ ScopedJavaLocalRef<jobject> jmodifier(
+ env, env->GetObjectArrayElement(jmodifiers, i));
+ PaymentDetailsModifierPtr modifier = PaymentDetailsModifier::New();
+
+ ScopedJavaLocalRef<jobject> jtotal =
+ Java_ServiceWorkerPaymentAppBridge_getTotalFromModifier(env, jmodifier);
+ modifier->total = PaymentItem::New();
+ modifier->total->label = ConvertJavaStringToUTF8(
+ env, Java_ServiceWorkerPaymentAppBridge_getLabelFromPaymentItem(
+ env, jtotal));
+ modifier->total->amount = 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 = 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));
+ }
+
+ content::PaymentAppProvider::GetInstance()->InvokePaymentApp(
+ web_contents->GetBrowserContext(), registration_id, std::move(data));
}
bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) {
« 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