Commit a6b3716d authored by Danyao Wang's avatar Danyao Wang Committed by Commit Bot

Reland "[Web Payments] Use PaymentAppServiceBridge JNI in PaymentAppService."

This is a reland of b666bbd0

Original patch: https://crrev.com/2141436
Revert: https://crrev.com/2144682
Reason for revert: broke tests: https://test-results.appspot.com/dashboards/flakiness_dashboard.html#testType=chrome_public_test_apk&tests=org.chromium.chrome.browser.payments.ExpandablePaymentHandlerChangePaymentMethodTest%23testThrowBasicCard
Reason for reland: fixed broken test (moving a function call outside of DCHECK)

Original change's description:
> [Web Payments] Use PaymentAppServiceBridge JNI in PaymentAppService.
>
> This CL contains the final steps to make the Java PaymentAppService
> invoke the C++ PaymentAppService:
> - Moved remaining PaymentHandlerFinder functionality, namely,
>   onInstalledPaymentHandlerFounder() and onInstallablePaymentHandler()
>   from ServiceWorkerPaymentAppBridge to PaymentAppServiceBridge.
> - Exposed the native method fireCanMakePaymentEvent() via a static
>   method on ServiceWorkerPaymentAppBridge so it can be used by
>   PaymentAppServiceBridge.
> - Proxied ServiceWorkerPaymentAppBridge.setCanMakePaymentForTesting
>   to PaymentAppServiceBridge. This will be cleaned up in a subsequent
>   CL.
> - Fixed a bug from a previous CL to pass payment apps to callbacks by
>   value instead of by reference.
>
> Bug: 1063118
> Change-Id: I87e254d6dc11e12f890353c9a0a6dde6cca73c9f
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2141436
> Reviewed-by: Rouslan Solomakhin <rouslan@chromium.org>
> Commit-Queue: Danyao Wang <danyao@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#757827}

Bug: 1063118
Change-Id: Ib2eceb850368e3247876ab303b54a1c41b8943ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2151091
Commit-Queue: Danyao Wang <danyao@chromium.org>
Reviewed-by: default avatarLiquan (Max) Gu <maxlg@chromium.org>
Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759651}
parent 3dc9c3c3
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
package org.chromium.chrome.browser.payments; package org.chromium.chrome.browser.payments;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
...@@ -27,9 +25,7 @@ public class PaymentAppService implements PaymentAppFactoryInterface { ...@@ -27,9 +25,7 @@ public class PaymentAppService implements PaymentAppFactoryInterface {
/** Prevent instantiation. */ /** Prevent instantiation. */
private PaymentAppService() { private PaymentAppService() {
mFactories.add(new AutofillPaymentAppFactory()); mFactories.add(new AutofillPaymentAppFactory());
if (ChromeFeatureList.isEnabled(ChromeFeatureList.SERVICE_WORKER_PAYMENT_APPS)) { mFactories.add(new PaymentAppServiceBridge());
mFactories.add(new ServiceWorkerPaymentAppBridge());
}
mFactories.add(new AndroidPaymentAppFactory()); mFactories.add(new AndroidPaymentAppFactory());
} }
......
...@@ -20,24 +20,26 @@ ...@@ -20,24 +20,26 @@
#include "components/payments/content/payment_app_service.h" #include "components/payments/content/payment_app_service.h"
#include "components/payments/content/payment_app_service_factory.h" #include "components/payments/content/payment_app_service_factory.h"
#include "components/payments/content/payment_manifest_web_data_service.h" #include "components/payments/content/payment_manifest_web_data_service.h"
#include "components/url_formatter/elide_url.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom.h" #include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
#include "third_party/blink/public/mojom/payments/payment_request.mojom.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
#include "ui/gfx/android/java_bitmap.h"
#include "url/origin.h" #include "url/origin.h"
namespace { namespace {
using ::base::android::AttachCurrentThread; using ::base::android::AttachCurrentThread;
using ::base::android::ConvertJavaStringToUTF8; using ::base::android::ConvertJavaStringToUTF8;
using ::base::android::ConvertUTF8ToJavaString; using ::base::android::ConvertUTF8ToJavaString;
using ::base::android::JavaParamRef; using ::base::android::JavaParamRef;
using ::base::android::JavaRef; using ::base::android::JavaRef;
using ::base::android::ScopedJavaGlobalRef; using ::base::android::ScopedJavaGlobalRef;
using ::base::android::ScopedJavaLocalRef;
using ::base::android::ToJavaArrayOfStrings;
using ::base::android::ToJavaIntArray;
using ::payments::android::DeserializeFromJavaByteBufferArray; using ::payments::android::DeserializeFromJavaByteBufferArray;
using ::payments::mojom::BasicCardNetwork;
using ::payments::mojom::PaymentMethodData;
using ::payments::mojom::PaymentMethodDataPtr; using ::payments::mojom::PaymentMethodDataPtr;
// Helper to get the PaymentAppService associated with |render_frame_host|'s // Helper to get the PaymentAppService associated with |render_frame_host|'s
...@@ -50,9 +52,82 @@ payments::PaymentAppService* GetPaymentAppService( ...@@ -50,9 +52,82 @@ payments::PaymentAppService* GetPaymentAppService(
web_contents ? web_contents->GetBrowserContext() : nullptr); web_contents ? web_contents->GetBrowserContext() : nullptr);
} }
void OnPaymentAppCreated(const JavaRef<jobject>& jcallback) { void OnPaymentAppsCreated(
const JavaRef<jobject>& jcallback,
const content::PaymentAppProvider::PaymentApps& apps,
const payments::ServiceWorkerPaymentAppFinder::InstallablePaymentApps&
installable_apps) {
JNIEnv* env = AttachCurrentThread(); JNIEnv* env = AttachCurrentThread();
Java_PaymentAppServiceCallback_onPaymentAppCreated(env, jcallback);
for (const auto& app_info : apps) {
// Sends related application Ids to java side if the app prefers related
// applications.
std::vector<std::string> preferred_related_application_ids;
if (app_info.second->prefer_related_applications) {
for (const auto& related_application :
app_info.second->related_applications) {
// Only consider related applications on Google play for Android.
if (related_application.platform == "play")
preferred_related_application_ids.emplace_back(
related_application.id);
}
}
base::android::ScopedJavaLocalRef<jobjectArray> jcapabilities =
Java_PaymentAppServiceBridge_createCapabilities(
env, app_info.second->capabilities.size());
for (size_t i = 0; i < app_info.second->capabilities.size(); i++) {
Java_PaymentAppServiceBridge_addCapabilities(
env, jcapabilities, base::checked_cast<int>(i),
ToJavaIntArray(
env, app_info.second->capabilities[i].supported_card_networks));
}
base::android::ScopedJavaLocalRef<jobject> jsupported_delegations =
Java_PaymentAppServiceBridge_createSupportedDelegations(
env, app_info.second->supported_delegations.shipping_address,
app_info.second->supported_delegations.payer_name,
app_info.second->supported_delegations.payer_phone,
app_info.second->supported_delegations.payer_email);
// TODO(crbug.com/846077): Find a proper way to make use of user hint.
Java_PaymentAppServiceCallback_onInstalledPaymentHandlerFound(
env, jcallback, app_info.second->registration_id,
ConvertUTF8ToJavaString(env, app_info.second->scope.spec()),
app_info.second->name.empty()
? nullptr
: ConvertUTF8ToJavaString(env, app_info.second->name),
nullptr, ConvertUTF8ToJavaString(env, app_info.second->scope.host()),
app_info.second->icon == nullptr
? nullptr
: gfx::ConvertToJavaBitmap(app_info.second->icon.get()),
ToJavaArrayOfStrings(env, app_info.second->enabled_methods),
app_info.second->has_explicitly_verified_methods, jcapabilities,
ToJavaArrayOfStrings(env, preferred_related_application_ids),
jsupported_delegations);
}
for (const auto& installable_app : installable_apps) {
base::android::ScopedJavaLocalRef<jobject> jsupported_delegations =
Java_PaymentAppServiceBridge_createSupportedDelegations(
env, installable_app.second->supported_delegations.shipping_address,
installable_app.second->supported_delegations.payer_name,
installable_app.second->supported_delegations.payer_phone,
installable_app.second->supported_delegations.payer_email);
Java_PaymentAppServiceCallback_onInstallablePaymentHandlerFound(
env, jcallback,
ConvertUTF8ToJavaString(env, installable_app.second->name),
ConvertUTF8ToJavaString(env, installable_app.second->sw_js_url),
ConvertUTF8ToJavaString(env, installable_app.second->sw_scope),
installable_app.second->sw_use_cache,
installable_app.second->icon == nullptr
? nullptr
: gfx::ConvertToJavaBitmap(installable_app.second->icon.get()),
ConvertUTF8ToJavaString(env, installable_app.first.spec()),
ToJavaArrayOfStrings(env, installable_app.second->preferred_app_ids),
jsupported_delegations);
}
} }
void OnPaymentAppCreationError(const JavaRef<jobject>& jcallback, void OnPaymentAppCreationError(const JavaRef<jobject>& jcallback,
...@@ -84,7 +159,9 @@ void JNI_PaymentAppServiceBridge_Create( ...@@ -84,7 +159,9 @@ void JNI_PaymentAppServiceBridge_Create(
std::string top_origin = ConvertJavaStringToUTF8(jtop_origin); std::string top_origin = ConvertJavaStringToUTF8(jtop_origin);
std::vector<PaymentMethodDataPtr> method_data; std::vector<PaymentMethodDataPtr> method_data;
DCHECK(DeserializeFromJavaByteBufferArray(env, jmethod_data, &method_data)); bool success =
DeserializeFromJavaByteBufferArray(env, jmethod_data, &method_data);
DCHECK(success);
scoped_refptr<payments::PaymentManifestWebDataService> web_data_service = scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
WebDataServiceFactory::GetPaymentManifestWebDataForProfile( WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
...@@ -99,7 +176,7 @@ void JNI_PaymentAppServiceBridge_Create( ...@@ -99,7 +176,7 @@ void JNI_PaymentAppServiceBridge_Create(
service->GetNumberOfFactories(), render_frame_host, GURL(top_origin), service->GetNumberOfFactories(), render_frame_host, GURL(top_origin),
std::move(method_data), web_data_service, std::move(method_data), web_data_service,
jmay_crawl_for_installable_payment_apps, jmay_crawl_for_installable_payment_apps,
base::BindRepeating(&OnPaymentAppCreated, base::BindRepeating(&OnPaymentAppsCreated,
ScopedJavaGlobalRef<jobject>(env, jcallback)), ScopedJavaGlobalRef<jobject>(env, jcallback)),
base::BindRepeating(&OnPaymentAppCreationError, base::BindRepeating(&OnPaymentAppCreationError,
ScopedJavaGlobalRef<jobject>(env, jcallback)), ScopedJavaGlobalRef<jobject>(env, jcallback)),
...@@ -151,14 +228,14 @@ PaymentAppServiceBridge* PaymentAppServiceBridge::Create( ...@@ -151,14 +228,14 @@ PaymentAppServiceBridge* PaymentAppServiceBridge::Create(
std::vector<mojom::PaymentMethodDataPtr> request_method_data, std::vector<mojom::PaymentMethodDataPtr> request_method_data,
scoped_refptr<PaymentManifestWebDataService> web_data_service, scoped_refptr<PaymentManifestWebDataService> web_data_service,
bool may_crawl_for_installable_payment_apps, bool may_crawl_for_installable_payment_apps,
PaymentAppCreatedCallback payment_app_created_callback, PaymentAppsCreatedCallback payment_apps_created_callback,
PaymentAppCreationErrorCallback payment_app_creation_error_callback, PaymentAppCreationErrorCallback payment_app_creation_error_callback,
base::OnceClosure done_creating_payment_apps_callback) { base::OnceClosure done_creating_payment_apps_callback) {
std::unique_ptr<PaymentAppServiceBridge> bridge(new PaymentAppServiceBridge( std::unique_ptr<PaymentAppServiceBridge> bridge(new PaymentAppServiceBridge(
number_of_factories, render_frame_host, top_origin, number_of_factories, render_frame_host, top_origin,
std::move(request_method_data), std::move(web_data_service), std::move(request_method_data), std::move(web_data_service),
may_crawl_for_installable_payment_apps, may_crawl_for_installable_payment_apps,
std::move(payment_app_created_callback), std::move(payment_apps_created_callback),
std::move(payment_app_creation_error_callback), std::move(payment_app_creation_error_callback),
std::move(done_creating_payment_apps_callback))); std::move(done_creating_payment_apps_callback)));
return PaymentAppServiceBridgeStorage::GetInstance()->Add(std::move(bridge)); return PaymentAppServiceBridgeStorage::GetInstance()->Add(std::move(bridge));
...@@ -171,7 +248,7 @@ PaymentAppServiceBridge::PaymentAppServiceBridge( ...@@ -171,7 +248,7 @@ PaymentAppServiceBridge::PaymentAppServiceBridge(
std::vector<mojom::PaymentMethodDataPtr> request_method_data, std::vector<mojom::PaymentMethodDataPtr> request_method_data,
scoped_refptr<PaymentManifestWebDataService> web_data_service, scoped_refptr<PaymentManifestWebDataService> web_data_service,
bool may_crawl_for_installable_payment_apps, bool may_crawl_for_installable_payment_apps,
PaymentAppCreatedCallback payment_app_created_callback, PaymentAppsCreatedCallback payment_apps_created_callback,
PaymentAppCreationErrorCallback payment_app_creation_error_callback, PaymentAppCreationErrorCallback payment_app_creation_error_callback,
base::OnceClosure done_creating_payment_apps_callback) base::OnceClosure done_creating_payment_apps_callback)
: number_of_pending_factories_(number_of_factories), : number_of_pending_factories_(number_of_factories),
...@@ -179,13 +256,14 @@ PaymentAppServiceBridge::PaymentAppServiceBridge( ...@@ -179,13 +256,14 @@ PaymentAppServiceBridge::PaymentAppServiceBridge(
content::WebContents::FromRenderFrameHost(render_frame_host)), content::WebContents::FromRenderFrameHost(render_frame_host)),
render_frame_host_(render_frame_host), render_frame_host_(render_frame_host),
top_origin_(top_origin), top_origin_(top_origin),
frame_origin_(render_frame_host->GetLastCommittedURL()), frame_origin_(url_formatter::FormatUrlForSecurityDisplay(
render_frame_host->GetLastCommittedURL())),
frame_security_origin_(render_frame_host->GetLastCommittedOrigin()), frame_security_origin_(render_frame_host->GetLastCommittedOrigin()),
request_method_data_(std::move(request_method_data)), request_method_data_(std::move(request_method_data)),
payment_manifest_web_data_service_(web_data_service), payment_manifest_web_data_service_(web_data_service),
may_crawl_for_installable_payment_apps_( may_crawl_for_installable_payment_apps_(
may_crawl_for_installable_payment_apps), may_crawl_for_installable_payment_apps),
payment_app_created_callback_(std::move(payment_app_created_callback)), payment_apps_created_callback_(std::move(payment_apps_created_callback)),
payment_app_creation_error_callback_( payment_app_creation_error_callback_(
std::move(payment_app_creation_error_callback)), std::move(payment_app_creation_error_callback)),
done_creating_payment_apps_callback_( done_creating_payment_apps_callback_(
...@@ -271,11 +349,9 @@ bool PaymentAppServiceBridge::SkipCreatingNativePaymentApps() const { ...@@ -271,11 +349,9 @@ bool PaymentAppServiceBridge::SkipCreatingNativePaymentApps() const {
} }
void PaymentAppServiceBridge::OnCreatingNativePaymentAppsSkipped( void PaymentAppServiceBridge::OnCreatingNativePaymentAppsSkipped(
const content::PaymentAppProvider::PaymentApps& apps, content::PaymentAppProvider::PaymentApps apps,
const ServiceWorkerPaymentAppFinder::InstallablePaymentApps& ServiceWorkerPaymentAppFinder::InstallablePaymentApps installable_apps) {
installable_apps) { payment_apps_created_callback_.Run(apps, installable_apps);
// TODO(crbug.com/1063118): call back to Java with apps information.
payment_app_created_callback_.Run();
} }
void PaymentAppServiceBridge::OnPaymentAppCreationError( void PaymentAppServiceBridge::OnPaymentAppCreationError(
......
...@@ -32,9 +32,9 @@ namespace payments { ...@@ -32,9 +32,9 @@ namespace payments {
// callbacks from PaymentAppFactory to callbacks set by the caller. // callbacks from PaymentAppFactory to callbacks set by the caller.
class PaymentAppServiceBridge : public PaymentAppFactory::Delegate { class PaymentAppServiceBridge : public PaymentAppFactory::Delegate {
public: public:
// TODO(crbug.com/1063118): add more parameter to this callback to actually using PaymentAppsCreatedCallback = base::RepeatingCallback<void(
// pass payment app data back to Java side. const content::PaymentAppProvider::PaymentApps&,
using PaymentAppCreatedCallback = base::RepeatingCallback<void()>; const payments::ServiceWorkerPaymentAppFinder::InstallablePaymentApps&)>;
using PaymentAppCreationErrorCallback = using PaymentAppCreationErrorCallback =
base::RepeatingCallback<void(const std::string&)>; base::RepeatingCallback<void(const std::string&)>;
...@@ -48,7 +48,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate { ...@@ -48,7 +48,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate {
std::vector<mojom::PaymentMethodDataPtr> request_method_data, std::vector<mojom::PaymentMethodDataPtr> request_method_data,
scoped_refptr<PaymentManifestWebDataService> web_data_service, scoped_refptr<PaymentManifestWebDataService> web_data_service,
bool may_crawl_for_installable_payment_apps, bool may_crawl_for_installable_payment_apps,
PaymentAppCreatedCallback payment_app_created_callback, PaymentAppsCreatedCallback payment_apps_created_callback,
PaymentAppCreationErrorCallback payment_app_creation_error_callback, PaymentAppCreationErrorCallback payment_app_creation_error_callback,
base::OnceClosure done_creating_payment_apps_callback); base::OnceClosure done_creating_payment_apps_callback);
...@@ -81,9 +81,9 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate { ...@@ -81,9 +81,9 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate {
void OnPaymentAppCreationError(const std::string& error_message) override; void OnPaymentAppCreationError(const std::string& error_message) override;
bool SkipCreatingNativePaymentApps() const override; bool SkipCreatingNativePaymentApps() const override;
void OnCreatingNativePaymentAppsSkipped( void OnCreatingNativePaymentAppsSkipped(
const content::PaymentAppProvider::PaymentApps& apps, content::PaymentAppProvider::PaymentApps apps,
const ServiceWorkerPaymentAppFinder::InstallablePaymentApps& ServiceWorkerPaymentAppFinder::InstallablePaymentApps installable_apps)
installable_apps) override; override;
void OnDoneCreatingPaymentApps() override; void OnDoneCreatingPaymentApps() override;
private: private:
...@@ -95,7 +95,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate { ...@@ -95,7 +95,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate {
std::vector<mojom::PaymentMethodDataPtr> request_method_data, std::vector<mojom::PaymentMethodDataPtr> request_method_data,
scoped_refptr<PaymentManifestWebDataService> web_data_service, scoped_refptr<PaymentManifestWebDataService> web_data_service,
bool may_crawl_for_installable_payment_apps, bool may_crawl_for_installable_payment_apps,
PaymentAppCreatedCallback payment_app_created_callback, PaymentAppsCreatedCallback payment_apps_created_callback,
PaymentAppCreationErrorCallback payment_app_creation_error_callback, PaymentAppCreationErrorCallback payment_app_creation_error_callback,
base::OnceClosure done_creating_payment_apps_callback); base::OnceClosure done_creating_payment_apps_callback);
...@@ -111,7 +111,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate { ...@@ -111,7 +111,7 @@ class PaymentAppServiceBridge : public PaymentAppFactory::Delegate {
bool may_crawl_for_installable_payment_apps_; bool may_crawl_for_installable_payment_apps_;
std::vector<autofill::AutofillProfile*> dummy_profiles_; std::vector<autofill::AutofillProfile*> dummy_profiles_;
PaymentAppCreatedCallback payment_app_created_callback_; PaymentAppsCreatedCallback payment_apps_created_callback_;
PaymentAppCreationErrorCallback payment_app_creation_error_callback_; PaymentAppCreationErrorCallback payment_app_creation_error_callback_;
base::OnceClosure done_creating_payment_apps_callback_; base::OnceClosure done_creating_payment_apps_callback_;
......
...@@ -24,7 +24,10 @@ namespace payments { ...@@ -24,7 +24,10 @@ namespace payments {
class MockCallback { class MockCallback {
public: public:
MockCallback() = default; MockCallback() = default;
MOCK_METHOD0(NotifyPaymentAppCreated, void(void)); MOCK_METHOD2(NotifyPaymentAppsCreated,
void(const content::PaymentAppProvider::PaymentApps&,
const payments::ServiceWorkerPaymentAppFinder::
InstallablePaymentApps&));
MOCK_METHOD1(NotifyPaymentAppCreationError, void(const std::string& error)); MOCK_METHOD1(NotifyPaymentAppCreationError, void(const std::string& error));
MOCK_METHOD0(NotifyDoneCreatingPaymentApps, void(void)); MOCK_METHOD0(NotifyDoneCreatingPaymentApps, void(void));
}; };
...@@ -68,7 +71,7 @@ TEST_F(PaymentAppServiceBridgeUnitTest, Smoke) { ...@@ -68,7 +71,7 @@ TEST_F(PaymentAppServiceBridgeUnitTest, Smoke) {
/* number_of_factories= */ 3, web_contents_->GetMainFrame(), /* number_of_factories= */ 3, web_contents_->GetMainFrame(),
top_origin_, std::move(method_data), web_data_service_, top_origin_, std::move(method_data), web_data_service_,
/* may_crawl_for_installable_payment_apps= */ true, /* may_crawl_for_installable_payment_apps= */ true,
base::BindRepeating(&MockCallback::NotifyPaymentAppCreated, base::BindRepeating(&MockCallback::NotifyPaymentAppsCreated,
base::Unretained(&mock_callback)), base::Unretained(&mock_callback)),
base::BindRepeating(&MockCallback::NotifyPaymentAppCreationError, base::BindRepeating(&MockCallback::NotifyPaymentAppCreationError,
base::Unretained(&mock_callback)), base::Unretained(&mock_callback)),
...@@ -92,8 +95,10 @@ TEST_F(PaymentAppServiceBridgeUnitTest, Smoke) { ...@@ -92,8 +95,10 @@ TEST_F(PaymentAppServiceBridgeUnitTest, Smoke) {
content::PaymentAppProvider::PaymentApps apps; content::PaymentAppProvider::PaymentApps apps;
ServiceWorkerPaymentAppFinder::InstallablePaymentApps installables; ServiceWorkerPaymentAppFinder::InstallablePaymentApps installables;
EXPECT_CALL(mock_callback, NotifyPaymentAppCreated()); EXPECT_CALL(mock_callback,
bridge->OnCreatingNativePaymentAppsSkipped(apps, installables); NotifyPaymentAppsCreated(::testing::_, ::testing::_));
bridge->OnCreatingNativePaymentAppsSkipped(std::move(apps),
std::move(installables));
EXPECT_CALL(mock_callback, NotifyPaymentAppCreationError("some error")); EXPECT_CALL(mock_callback, NotifyPaymentAppCreationError("some error"));
bridge->OnPaymentAppCreationError("some error"); bridge->OnPaymentAppCreationError("some error");
......
...@@ -60,92 +60,6 @@ using ::payments::mojom::PaymentShippingOption; ...@@ -60,92 +60,6 @@ using ::payments::mojom::PaymentShippingOption;
using ::payments::mojom::PaymentShippingOptionPtr; using ::payments::mojom::PaymentShippingOptionPtr;
using ::payments::mojom::PaymentShippingType; using ::payments::mojom::PaymentShippingType;
void OnGotAllPaymentApps(
const JavaRef<jobject>& jcallback,
content::PaymentAppProvider::PaymentApps apps,
payments::ServiceWorkerPaymentAppFinder::InstallablePaymentApps
installable_apps,
const std::string& error_message) {
JNIEnv* env = AttachCurrentThread();
if (!error_message.empty()) {
Java_PaymentHandlerFinder_onGetPaymentAppsError(
env, jcallback, ConvertUTF8ToJavaString(env, error_message));
}
for (const auto& app_info : apps) {
// Sends related application Ids to java side if the app prefers related
// applications.
std::vector<std::string> preferred_related_application_ids;
if (app_info.second->prefer_related_applications) {
for (const auto& related_application :
app_info.second->related_applications) {
// Only consider related applications on Google play for Android.
if (related_application.platform == "play")
preferred_related_application_ids.emplace_back(
related_application.id);
}
}
base::android::ScopedJavaLocalRef<jobjectArray> jcapabilities =
Java_ServiceWorkerPaymentAppBridge_createCapabilities(
env, app_info.second->capabilities.size());
for (size_t i = 0; i < app_info.second->capabilities.size(); i++) {
Java_ServiceWorkerPaymentAppBridge_addCapabilities(
env, jcapabilities, base::checked_cast<int>(i),
ToJavaIntArray(
env, app_info.second->capabilities[i].supported_card_networks));
}
base::android::ScopedJavaLocalRef<jobject> jsupported_delegations =
Java_ServiceWorkerPaymentAppBridge_createSupportedDelegations(
env, app_info.second->supported_delegations.shipping_address,
app_info.second->supported_delegations.payer_name,
app_info.second->supported_delegations.payer_phone,
app_info.second->supported_delegations.payer_email);
// TODO(crbug.com/846077): Find a proper way to make use of user hint.
Java_PaymentHandlerFinder_onInstalledPaymentHandlerFound(
env, jcallback, app_info.second->registration_id,
ConvertUTF8ToJavaString(env, app_info.second->scope.spec()),
app_info.second->name.empty()
? nullptr
: ConvertUTF8ToJavaString(env, app_info.second->name),
nullptr, ConvertUTF8ToJavaString(env, app_info.second->scope.host()),
app_info.second->icon == nullptr
? nullptr
: gfx::ConvertToJavaBitmap(app_info.second->icon.get()),
ToJavaArrayOfStrings(env, app_info.second->enabled_methods),
app_info.second->has_explicitly_verified_methods, jcapabilities,
ToJavaArrayOfStrings(env, preferred_related_application_ids),
jsupported_delegations);
}
for (const auto& installable_app : installable_apps) {
base::android::ScopedJavaLocalRef<jobject> jsupported_delegations =
Java_ServiceWorkerPaymentAppBridge_createSupportedDelegations(
env, installable_app.second->supported_delegations.shipping_address,
installable_app.second->supported_delegations.payer_name,
installable_app.second->supported_delegations.payer_phone,
installable_app.second->supported_delegations.payer_email);
Java_PaymentHandlerFinder_onInstallablePaymentHandlerFound(
env, jcallback,
ConvertUTF8ToJavaString(env, installable_app.second->name),
ConvertUTF8ToJavaString(env, installable_app.second->sw_js_url),
ConvertUTF8ToJavaString(env, installable_app.second->sw_scope),
installable_app.second->sw_use_cache,
installable_app.second->icon == nullptr
? nullptr
: gfx::ConvertToJavaBitmap(installable_app.second->icon.get()),
ConvertUTF8ToJavaString(env, installable_app.first.spec()),
ToJavaArrayOfStrings(env, installable_app.second->preferred_app_ids),
jsupported_delegations);
}
Java_PaymentHandlerFinder_onAllPaymentAppsCreated(env, jcallback);
}
void OnHasServiceWorkerPaymentAppsResponse( void OnHasServiceWorkerPaymentAppsResponse(
const JavaRef<jobject>& jcallback, const JavaRef<jobject>& jcallback,
content::PaymentAppProvider::PaymentApps apps) { content::PaymentAppProvider::PaymentApps apps) {
...@@ -178,11 +92,10 @@ void OnGetServiceWorkerPaymentAppsInfo( ...@@ -178,11 +92,10 @@ void OnGetServiceWorkerPaymentAppsInfo(
} }
void OnCanMakePayment(const JavaRef<jobject>& jcallback, void OnCanMakePayment(const JavaRef<jobject>& jcallback,
const JavaRef<jobject>& japp,
payments::mojom::CanMakePaymentResponsePtr response) { payments::mojom::CanMakePaymentResponsePtr response) {
JNIEnv* env = AttachCurrentThread(); JNIEnv* env = AttachCurrentThread();
Java_PaymentHandlerFinder_onCanMakePaymentEventResponse( Java_ServiceWorkerPaymentAppBridge_onCanMakePaymentEventResponse(
env, jcallback, japp, env, jcallback,
ConvertUTF8ToJavaString( ConvertUTF8ToJavaString(
env, payments::ConvertCanMakePaymentEventResponseTypeToErrorString( env, payments::ConvertCanMakePaymentEventResponseTypeToErrorString(
response->response_type)), response->response_type)),
...@@ -419,35 +332,6 @@ PaymentRequestEventDataPtr ConvertPaymentRequestEventDataFromJavaToNative( ...@@ -419,35 +332,6 @@ PaymentRequestEventDataPtr ConvertPaymentRequestEventDataFromJavaToNative(
} // namespace } // namespace
static void JNI_ServiceWorkerPaymentAppBridge_GetAllPaymentApps(
JNIEnv* env,
const JavaParamRef<jobject>& jorigin,
const JavaParamRef<jobject>& jrender_frame_host,
const JavaParamRef<jobjectArray>& jmethod_data,
jboolean jmay_crawl_for_installable_payment_apps,
const JavaParamRef<jobject>& jcallback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
content::RenderFrameHost* render_frame_host =
content::RenderFrameHost::FromJavaRenderFrameHost(jrender_frame_host);
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(render_frame_host);
payments::ServiceWorkerPaymentAppFinder::GetInstance()->GetAllPaymentApps(
url::Origin::FromJavaObject(jorigin), render_frame_host, web_contents,
WebDataServiceFactory::GetPaymentManifestWebDataForProfile(
Profile::FromBrowserContext(web_contents->GetBrowserContext()),
ServiceAccessType::EXPLICIT_ACCESS),
ConvertPaymentMethodDataFromJavaToNative(env, jmethod_data),
jmay_crawl_for_installable_payment_apps,
base::BindOnce(&OnGotAllPaymentApps,
ScopedJavaGlobalRef<jobject>(env, jcallback)),
base::BindOnce([]() {
/* Nothing needs to be done after writing cache. This callback is used
* only in tests. */
}));
}
static void JNI_ServiceWorkerPaymentAppBridge_HasServiceWorkerPaymentApps( static void JNI_ServiceWorkerPaymentAppBridge_HasServiceWorkerPaymentApps(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& jcallback) { const JavaParamRef<jobject>& jcallback) {
...@@ -479,8 +363,7 @@ static void JNI_ServiceWorkerPaymentAppBridge_FireCanMakePaymentEvent( ...@@ -479,8 +363,7 @@ static void JNI_ServiceWorkerPaymentAppBridge_FireCanMakePaymentEvent(
const JavaParamRef<jobjectArray>& jmethod_data, const JavaParamRef<jobjectArray>& jmethod_data,
const JavaParamRef<jobjectArray>& jmodifiers, const JavaParamRef<jobjectArray>& jmodifiers,
const JavaParamRef<jstring>& jcurrency, const JavaParamRef<jstring>& jcurrency,
const JavaParamRef<jobject>& jcallback, const JavaParamRef<jobject>& jcallback) {
const JavaParamRef<jobject>& japp) {
content::WebContents* web_contents = content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(jweb_contents); content::WebContents::FromJavaWebContents(jweb_contents);
...@@ -533,8 +416,7 @@ static void JNI_ServiceWorkerPaymentAppBridge_FireCanMakePaymentEvent( ...@@ -533,8 +416,7 @@ static void JNI_ServiceWorkerPaymentAppBridge_FireCanMakePaymentEvent(
GURL(ConvertJavaStringToUTF8(env, jservice_worker_scope))), GURL(ConvertJavaStringToUTF8(env, jservice_worker_scope))),
ConvertJavaStringToUTF8(env, jpayment_request_id), std::move(event_data), ConvertJavaStringToUTF8(env, jpayment_request_id), std::move(event_data),
base::BindOnce(&OnCanMakePayment, base::BindOnce(&OnCanMakePayment,
ScopedJavaGlobalRef<jobject>(env, jcallback), ScopedJavaGlobalRef<jobject>(env, jcallback)));
ScopedJavaGlobalRef<jobject>(env, japp)));
} }
static void JNI_ServiceWorkerPaymentAppBridge_InvokePaymentApp( static void JNI_ServiceWorkerPaymentAppBridge_InvokePaymentApp(
......
...@@ -84,8 +84,8 @@ class PaymentAppFactory { ...@@ -84,8 +84,8 @@ class PaymentAppFactory {
// When SkipCreatingNativePaymentApps() is true, this callback is called // When SkipCreatingNativePaymentApps() is true, this callback is called
// when service-worker payment app info is available. // when service-worker payment app info is available.
virtual void OnCreatingNativePaymentAppsSkipped( virtual void OnCreatingNativePaymentAppsSkipped(
const content::PaymentAppProvider::PaymentApps& apps, content::PaymentAppProvider::PaymentApps apps,
const ServiceWorkerPaymentAppFinder::InstallablePaymentApps& ServiceWorkerPaymentAppFinder::InstallablePaymentApps
installable_apps) = 0; installable_apps) = 0;
// Called when all apps of this factory have been created. // Called when all apps of this factory have been created.
......
...@@ -181,8 +181,8 @@ bool PaymentRequestState::SkipCreatingNativePaymentApps() const { ...@@ -181,8 +181,8 @@ bool PaymentRequestState::SkipCreatingNativePaymentApps() const {
} }
void PaymentRequestState::OnCreatingNativePaymentAppsSkipped( void PaymentRequestState::OnCreatingNativePaymentAppsSkipped(
const content::PaymentAppProvider::PaymentApps& unused_apps, content::PaymentAppProvider::PaymentApps unused_apps,
const ServiceWorkerPaymentAppFinder::InstallablePaymentApps& ServiceWorkerPaymentAppFinder::InstallablePaymentApps
unused_installable_apps) { unused_installable_apps) {
NOTREACHED(); NOTREACHED();
} }
......
...@@ -150,9 +150,9 @@ class PaymentRequestState : public PaymentAppFactory::Delegate, ...@@ -150,9 +150,9 @@ class PaymentRequestState : public PaymentAppFactory::Delegate,
void OnPaymentAppCreationError(const std::string& error_message) override; void OnPaymentAppCreationError(const std::string& error_message) override;
bool SkipCreatingNativePaymentApps() const override; bool SkipCreatingNativePaymentApps() const override;
void OnCreatingNativePaymentAppsSkipped( void OnCreatingNativePaymentAppsSkipped(
const content::PaymentAppProvider::PaymentApps& apps, content::PaymentAppProvider::PaymentApps apps,
const ServiceWorkerPaymentAppFinder::InstallablePaymentApps& ServiceWorkerPaymentAppFinder::InstallablePaymentApps installable_apps)
installable_apps) override; override;
void OnDoneCreatingPaymentApps() override; void OnDoneCreatingPaymentApps() override;
// PaymentResponseHelper::Delegate // PaymentResponseHelper::Delegate
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment