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

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

Issue 2586213002: PaymentApp: Implement nativeGetAllAppManifests (Closed)
Patch Set: Address review comments Created 4 years 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
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 "base/android/jni_string.h" 7 #include "base/android/jni_string.h"
8 #include "base/android/scoped_java_ref.h" 8 #include "base/android/scoped_java_ref.h"
9 #include "chrome/browser/profiles/profile_manager.h" 9 #include "chrome/browser/profiles/profile_manager.h"
10 #include "components/payments/payment_app.mojom.h" 10 #include "components/payments/payment_app.mojom.h"
11 #include "content/public/browser/service_worker_context.h" 11 #include "content/public/browser/browser_context.h"
12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/payment_app_context.h"
12 #include "content/public/browser/storage_partition.h" 14 #include "content/public/browser/storage_partition.h"
15 #include "content/public/browser/web_contents.h"
13 #include "jni/ServiceWorkerPaymentAppBridge_jni.h" 16 #include "jni/ServiceWorkerPaymentAppBridge_jni.h"
14 17
15 using base::android::ConvertUTF8ToJavaString; 18 using base::android::ConvertUTF8ToJavaString;
16 using base::android::JavaParamRef; 19 using base::android::JavaParamRef;
20 using base::android::JavaRef;
21 using base::android::ScopedJavaGlobalRef;
17 using base::android::ScopedJavaLocalRef; 22 using base::android::ScopedJavaLocalRef;
18 23
19 static ScopedJavaLocalRef<jobject> GetAllAppManifests( 24 namespace {
20 JNIEnv* env,
21 const JavaParamRef<jclass>& jcaller) {
22 // TODO(tommyt): crbug.com/669876. Initialise the following two variables.
23 // At the moment, they are empty, so this function will return an empty
24 // list of manifests. We need to hook this function up to the service worker
25 // payment apps.
26 std::string scope_url;
27 std::vector<payments::mojom::PaymentAppManifestPtr> manifests;
28 25
29 ScopedJavaLocalRef<jobject> java_manifests = 26 void OnGotAllManifests(JNIEnv* env,
30 Java_ServiceWorkerPaymentAppBridge_createManifestList(env); 27 const JavaRef<jobject>& jweb_contents,
31 for (const auto& manifest : manifests) { 28 const JavaRef<jobject>& jcallback,
29 content::PaymentAppContext::Manifests manifests) {
30 for (const auto& entry : manifests) {
32 ScopedJavaLocalRef<jobject> java_manifest = 31 ScopedJavaLocalRef<jobject> java_manifest =
33 Java_ServiceWorkerPaymentAppBridge_createAndAddManifest( 32 Java_ServiceWorkerPaymentAppBridge_createManifest(
34 env, java_manifests, ConvertUTF8ToJavaString(env, scope_url), 33 env, entry.first, ConvertUTF8ToJavaString(env, entry.second->name),
35 ConvertUTF8ToJavaString(env, manifest->name), 34 entry.second->icon
36 manifest->icon ? ConvertUTF8ToJavaString(env, *manifest->icon) 35 ? ConvertUTF8ToJavaString(env, *entry.second->icon)
37 : nullptr); 36 : nullptr);
38 for (const auto& option : manifest->options) { 37 for (const auto& option : entry.second->options) {
39 ScopedJavaLocalRef<jobject> java_option = 38 ScopedJavaLocalRef<jobject> java_option =
40 Java_ServiceWorkerPaymentAppBridge_createAndAddOption( 39 Java_ServiceWorkerPaymentAppBridge_createAndAddOption(
41 env, java_manifest, ConvertUTF8ToJavaString(env, option->id), 40 env, java_manifest, ConvertUTF8ToJavaString(env, option->id),
42 ConvertUTF8ToJavaString(env, option->name), 41 ConvertUTF8ToJavaString(env, option->name),
43 option->icon ? ConvertUTF8ToJavaString(env, *option->icon) 42 option->icon ? ConvertUTF8ToJavaString(env, *option->icon)
44 : nullptr); 43 : nullptr);
45 for (const auto& enabled_method : option->enabled_methods) { 44 for (const auto& enabled_method : option->enabled_methods) {
46 Java_ServiceWorkerPaymentAppBridge_addEnabledMethod( 45 Java_ServiceWorkerPaymentAppBridge_addEnabledMethod(
47 env, java_option, ConvertUTF8ToJavaString(env, enabled_method)); 46 env, java_option, ConvertUTF8ToJavaString(env, enabled_method));
48 } 47 }
49 } 48 }
49
50 Java_ServiceWorkerPaymentAppBridge_onGotManifest(env, java_manifest,
51 jweb_contents, jcallback);
50 } 52 }
51 53
52 return java_manifests; 54 Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
55 }
56
57 } // namespace
58
59 static void GetAllAppManifests(JNIEnv* env,
60 const JavaParamRef<jclass>& jcaller,
61 const JavaParamRef<jobject>& jweb_contents,
62 const JavaParamRef<jobject>& jcallback) {
63 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
64
65 content::WebContents* web_contents =
66 content::WebContents::FromJavaWebContents(jweb_contents);
67
68 if (web_contents == nullptr) {
69 LOG(ERROR) << "Unable to resolve WebContents";
70 Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
71 return;
72 }
73
74 content::BrowserContext* browser_context = web_contents->GetBrowserContext();
75
76 if (browser_context == nullptr) {
77 LOG(ERROR) << "No BrowserContext found";
78 Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
79 return;
80 }
81
82 content::StoragePartition* storage_partition =
83 content::BrowserContext::GetStoragePartition(
84 browser_context, web_contents->GetSiteInstance());
85
86 if (storage_partition == nullptr) {
87 LOG(ERROR) << "No StoragePartition found";
88 Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
89 return;
90 }
91
92 content::PaymentAppContext* payment_app_context =
93 storage_partition->GetPaymentAppContext();
94
95 if (payment_app_context == nullptr) {
96 LOG(ERROR) << "No PaymentAppContext found";
97 Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
98 return;
99 }
100
101 payment_app_context->GetAllManifests(base::Bind(
102 &OnGotAllManifests, env, ScopedJavaGlobalRef<jobject>(env, jweb_contents),
Bernhard Bauer 2016/12/22 14:03:07 Don't bind the JNIEnv into a callback (or hold on
tommyt 2016/12/22 15:09:35 Done.
103 ScopedJavaGlobalRef<jobject>(env, jcallback)));
53 } 104 }
54 105
55 static void InvokePaymentApp(JNIEnv* env, 106 static void InvokePaymentApp(JNIEnv* env,
56 const JavaParamRef<jclass>& jcaller, 107 const JavaParamRef<jclass>& jcaller,
57 const JavaParamRef<jstring>& scopeUrl, 108 const JavaParamRef<jobject>& jweb_contents,
58 const JavaParamRef<jstring>& optionId, 109 jlong registration_id,
59 const JavaParamRef<jobject>& methodDataMap) { 110 const JavaParamRef<jstring>& joption_id,
111 const JavaParamRef<jobjectArray>& jmethod_data) {
112 // TODO(tommyt): crbug.com/669876. Implement this
60 NOTIMPLEMENTED(); 113 NOTIMPLEMENTED();
61 } 114 }
62 115
63 bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) { 116 bool RegisterServiceWorkerPaymentAppBridge(JNIEnv* env) {
64 return RegisterNativesImpl(env); 117 return RegisterNativesImpl(env);
65 } 118 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698