Commit 3a9b5a1a authored by DongJun Kim's avatar DongJun Kim Committed by Commit Bot

Implement WebContentsUserData in PaymentAppProviderImpl

This patch implements WebContentsUserData in PaymentAppProviderImpl
include below changes.

- PaymentAppProviderImpl will be owned WebContents rather than
it being a singleton.

- GetSourceIdForPaymentAppFromScope, IsValidInstallablePaymentApp
are moved out PaymentAppProviderUtil class.
This is a simple helper class that is not related WebContents.

Bug: 1075687
Change-Id: I62d212a53506e40bc104e59a18540898fd591946
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2282824Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Reviewed-by: default avatarRouslan Solomakhin <rouslan@chromium.org>
Commit-Queue: DongJun Kim <djmix.kim@samsung.com>
Cr-Commit-Position: refs/heads/master@{#809808}
parent 3347e460
......@@ -26,6 +26,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/installed_payment_apps_finder.h"
#include "content/public/browser/payment_app_provider.h"
#include "content/public/browser/payment_app_provider_util.h"
#include "content/public/browser/web_contents.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
......@@ -125,9 +126,9 @@ static void JNI_ServiceWorkerPaymentAppBridge_OnClosingPaymentAppWindow(
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(jweb_contents);
DCHECK(web_contents); // Verified in Java before invoking this function.
content::PaymentAppProvider::GetInstance()->OnClosingOpenedWindow(
web_contents,
static_cast<payments::mojom::PaymentEventResponseType>(reason));
content::PaymentAppProvider::GetOrCreateForWebContents(web_contents)
->OnClosingOpenedWindow(
static_cast<payments::mojom::PaymentEventResponseType>(reason));
}
static jlong
......@@ -138,7 +139,6 @@ JNI_ServiceWorkerPaymentAppBridge_GetSourceIdForPaymentAppFromScope(
// payment app associated with this scope. Since this getter is called inside
// PaymentApp::getUkmSourceId() function which in turn gets called for the
// invoked app inside PaymentRequestImpl::openPaymentHandlerWindowInternal.
return content::PaymentAppProvider::GetInstance()
->GetSourceIdForPaymentAppFromScope(
url::GURLAndroid::ToNativeGURL(env, jscope).get()->GetOrigin());
return content::PaymentAppProviderUtil::GetSourceIdForPaymentAppFromScope(
url::GURLAndroid::ToNativeGURL(env, jscope).get()->GetOrigin());
}
......@@ -18,7 +18,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/global_routing_id.h"
#include "content/public/browser/manifest_icon_downloader.h"
#include "content/public/browser/payment_app_provider.h"
#include "content/public/browser/payment_app_provider_util.h"
#include "content/public/browser/permission_controller.h"
#include "content/public/browser/permission_type.h"
#include "content/public/browser/render_frame_host.h"
......@@ -337,7 +337,7 @@ bool InstallablePaymentAppCrawler::CompleteAndStorePaymentWebAppInfoIfValid(
}
std::string error_message;
if (!content::PaymentAppProvider::GetInstance()->IsValidInstallablePaymentApp(
if (!content::PaymentAppProviderUtil::IsValidInstallablePaymentApp(
web_app_manifest_url, GURL(app_info->sw_js_url),
GURL(app_info->sw_scope), &error_message)) {
SetFirstError(error_message);
......
......@@ -19,6 +19,7 @@
#include "components/payments/core/features.h"
#include "components/payments/core/method_strings.h"
#include "content/public/browser/payment_app_provider.h"
#include "content/public/browser/payment_app_provider_util.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_features.h"
#include "ui/gfx/image/image_skia.h"
......@@ -130,8 +131,12 @@ void ServiceWorkerPaymentApp::ValidateCanMakePayment(
return;
}
content::PaymentAppProvider::GetInstance()->CanMakePayment(
web_contents(), stored_payment_app_info_->registration_id,
auto* payment_app_provider = GetPaymentAppProvider();
if (!payment_app_provider)
return;
payment_app_provider->CanMakePayment(
stored_payment_app_info_->registration_id,
url::Origin::Create(stored_payment_app_info_->scope),
*spec_->details().id, std::move(event_data),
base::BindOnce(&ServiceWorkerPaymentApp::OnCanMakePaymentEventResponded,
......@@ -206,11 +211,13 @@ void ServiceWorkerPaymentApp::OnCanMakePaymentEventResponded(
void ServiceWorkerPaymentApp::InvokePaymentApp(Delegate* delegate) {
delegate_ = delegate;
auto* payment_app_provider = GetPaymentAppProvider();
if (!payment_app_provider)
return;
if (needs_installation_) {
content::PaymentAppProvider::GetInstance()->InstallAndInvokePaymentApp(
web_contents(), CreatePaymentRequestEventData(),
installable_web_app_info_->name,
payment_app_provider->InstallAndInvokePaymentApp(
CreatePaymentRequestEventData(), installable_web_app_info_->name,
installable_web_app_info_->icon == nullptr
? SkBitmap()
: *(installable_web_app_info_->icon),
......@@ -228,8 +235,8 @@ void ServiceWorkerPaymentApp::InvokePaymentApp(Delegate* delegate) {
url::Origin sw_origin =
url::Origin::Create(stored_payment_app_info_->scope);
OnPaymentAppIdentity(sw_origin, stored_payment_app_info_->registration_id);
content::PaymentAppProvider::GetInstance()->InvokePaymentApp(
web_contents(), stored_payment_app_info_->registration_id, sw_origin,
payment_app_provider->InvokePaymentApp(
stored_payment_app_info_->registration_id, sw_origin,
CreatePaymentRequestEventData(),
base::BindOnce(&ServiceWorkerPaymentApp::OnPaymentAppInvoked,
weak_ptr_factory_.GetWeakPtr()));
......@@ -240,8 +247,10 @@ void ServiceWorkerPaymentApp::InvokePaymentApp(Delegate* delegate) {
void ServiceWorkerPaymentApp::OnPaymentAppWindowClosed() {
delegate_ = nullptr;
content::PaymentAppProvider::GetInstance()->OnClosingOpenedWindow(
web_contents(),
auto* payment_app_provider = GetPaymentAppProvider();
if (!payment_app_provider)
return;
payment_app_provider->OnClosingOpenedWindow(
mojom::PaymentEventResponseType::PAYMENT_HANDLER_WINDOW_CLOSING);
}
......@@ -562,8 +571,8 @@ ukm::SourceId ServiceWorkerPaymentApp::UkmSourceId() {
// app since this getter is called for the invoked app inside the
// PaymentRequest::OnPaymentHandlerOpenWindowCalled function.
ukm_source_id_ =
content::PaymentAppProvider::GetInstance()
->GetSourceIdForPaymentAppFromScope(sw_scope.GetOrigin());
content::PaymentAppProviderUtil::GetSourceIdForPaymentAppFromScope(
sw_scope.GetOrigin());
}
return ukm_source_id_;
}
......@@ -592,12 +601,23 @@ void ServiceWorkerPaymentApp::OnPaymentDetailsNotUpdated() {
void ServiceWorkerPaymentApp::AbortPaymentApp(
base::OnceCallback<void(bool)> abort_callback) {
content::PaymentAppProvider::GetInstance()->AbortPayment(
web_contents(), registration_id_,
auto* payment_app_provider = GetPaymentAppProvider();
if (!payment_app_provider)
return;
payment_app_provider->AbortPayment(
registration_id_,
stored_payment_app_info_
? url::Origin::Create(stored_payment_app_info_->scope)
: url::Origin::Create(GURL(installable_web_app_info_->sw_scope)),
*spec_->details().id, std::move(abort_callback));
}
content::PaymentAppProvider* ServiceWorkerPaymentApp::GetPaymentAppProvider() {
return (!web_contents())
? nullptr
: content::PaymentAppProvider::GetOrCreateForWebContents(
web_contents());
}
} // namespace payments
......@@ -20,6 +20,7 @@
#include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
namespace content {
class PaymentAppProvider;
class WebContents;
} // namespace content
......@@ -129,6 +130,8 @@ class ServiceWorkerPaymentApp : public PaymentApp,
// invoked.
void OnPaymentAppIdentity(const url::Origin& origin, int64_t registration_id);
content::PaymentAppProvider* GetPaymentAppProvider();
GURL top_origin_;
GURL frame_origin_;
const PaymentRequestSpec* spec_;
......
......@@ -95,7 +95,7 @@ class SelfDeletingServiceWorkerPaymentAppFinder
: public base::SupportsUserData::Data {
public:
static base::WeakPtr<SelfDeletingServiceWorkerPaymentAppFinder>
CreateAndSetOwnedBy(base::SupportsUserData* owner) {
CreateAndSetOwnedBy(content::WebContents* owner) {
auto owned =
std::make_unique<SelfDeletingServiceWorkerPaymentAppFinder>(owner);
auto* pointer = owned.get();
......@@ -104,7 +104,7 @@ class SelfDeletingServiceWorkerPaymentAppFinder
}
explicit SelfDeletingServiceWorkerPaymentAppFinder(
base::SupportsUserData* owner)
content::WebContents* owner)
: owner_(owner) {}
SelfDeletingServiceWorkerPaymentAppFinder(
......@@ -314,14 +314,13 @@ class SelfDeletingServiceWorkerPaymentAppFinder
base::StringPiece(raw_data->front_as<char>(), raw_data->size()),
&string_encoded_icon);
auto* browser_context =
static_cast<content::WebContents*>(owner_)->GetBrowserContext();
content::PaymentAppProvider::GetInstance()->UpdatePaymentAppIcon(
browser_context, app->registration_id, app->scope.spec(), app->name,
string_encoded_icon, method_name, app->supported_delegations,
base::BindOnce(
&SelfDeletingServiceWorkerPaymentAppFinder::OnUpdatePaymentAppIcon,
weak_ptr_factory_.GetWeakPtr()));
content::PaymentAppProvider::GetOrCreateForWebContents(owner_)
->UpdatePaymentAppIcon(
app->registration_id, app->scope.spec(), app->name,
string_encoded_icon, method_name, app->supported_delegations,
base::BindOnce(&SelfDeletingServiceWorkerPaymentAppFinder::
OnUpdatePaymentAppIcon,
weak_ptr_factory_.GetWeakPtr()));
}
void OnUpdatePaymentAppIcon(payments::mojom::PaymentHandlerStatus status) {
......@@ -365,7 +364,7 @@ class SelfDeletingServiceWorkerPaymentAppFinder
// |owner_| owns this SelfDeletingServiceWorkerPaymentAppFinder, so it is
// always valid.
base::SupportsUserData* owner_;
content::WebContents* owner_;
std::unique_ptr<PaymentManifestDownloader> downloader_;
std::unique_ptr<PaymentManifestParser> parser_;
......
......@@ -1281,6 +1281,7 @@ source_set("browser") {
"payments/payment_app_installer.h",
"payments/payment_app_provider_impl.cc",
"payments/payment_app_provider_impl.h",
"payments/payment_app_provider_util.cc",
"payments/payment_instrument_icon_fetcher.cc",
"payments/payment_instrument_icon_fetcher.h",
"payments/payment_manager.cc",
......
......@@ -132,10 +132,11 @@ class PaymentAppBrowserTest : public ContentBrowserTest {
const std::string& payment_request_id) {
base::RunLoop run_loop;
bool payment_aborted = false;
PaymentAppProvider::GetInstance()->AbortPayment(
shell()->web_contents(), registration_id, sw_origin, payment_request_id,
base::BindOnce(&CaptureAbortResult, run_loop.QuitClosure(),
&payment_aborted));
PaymentAppProvider::GetOrCreateForWebContents(shell()->web_contents())
->AbortPayment(
registration_id, sw_origin, payment_request_id,
base::BindOnce(&CaptureAbortResult, run_loop.QuitClosure(),
&payment_aborted));
run_loop.Run();
return payment_aborted;
......@@ -150,11 +151,12 @@ class PaymentAppBrowserTest : public ContentBrowserTest {
base::RunLoop run_loop;
bool can_make_payment = false;
PaymentAppProvider::GetInstance()->CanMakePayment(
shell()->web_contents(), registration_id, sw_origin, payment_request_id,
std::move(event_data),
base::BindOnce(&CaptureCanMakePaymentResult, run_loop.QuitClosure(),
&can_make_payment));
PaymentAppProvider::GetOrCreateForWebContents(shell()->web_contents())
->CanMakePayment(
registration_id, sw_origin, payment_request_id,
std::move(event_data),
base::BindOnce(&CaptureCanMakePaymentResult, run_loop.QuitClosure(),
&can_make_payment));
run_loop.Run();
return can_make_payment;
......@@ -167,11 +169,12 @@ class PaymentAppBrowserTest : public ContentBrowserTest {
const std::string& instrument_key) {
base::RunLoop run_loop;
PaymentHandlerResponsePtr response;
PaymentAppProvider::GetInstance()->InvokePaymentApp(
shell()->web_contents(), registration_id, sw_origin,
CreatePaymentRequestEventData(supported_method, instrument_key),
base::BindOnce(&InvokePaymentAppCallback, run_loop.QuitClosure(),
&response));
PaymentAppProvider::GetOrCreateForWebContents(shell()->web_contents())
->InvokePaymentApp(
registration_id, sw_origin,
CreatePaymentRequestEventData(supported_method, instrument_key),
base::BindOnce(&InvokePaymentAppCallback, run_loop.QuitClosure(),
&response));
run_loop.Run();
return response;
......
......@@ -207,10 +207,10 @@ class SelfDeleteInstaller
if (callback_.is_null())
return;
if (success && web_contents() != nullptr) {
std::move(callback_).Run(web_contents(), registration_id_);
if (success) {
std::move(callback_).Run(registration_id_);
} else {
std::move(callback_).Run(nullptr, -1);
std::move(callback_).Run(-1);
}
service_worker_context_->RemoveObserver(this);
......
......@@ -23,8 +23,7 @@ class WebContents;
class PaymentAppInstaller {
public:
using InstallPaymentAppCallback =
base::OnceCallback<void(WebContents* web_contents,
int64_t registration_id)>;
base::OnceCallback<void(int64_t registration_id)>;
// Installs the payment app.
// |app_name| is the name of the payment app.
......
......@@ -5,16 +5,27 @@
#ifndef CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_PROVIDER_IMPL_H_
#define CONTENT_BROWSER_PAYMENTS_PAYMENT_APP_PROVIDER_IMPL_H_
#include "base/memory/singleton.h"
#include "content/browser/devtools/devtools_background_services_context_impl.h"
#include "content/browser/payments/payment_app_context_impl.h"
#include "content/common/content_export.h"
#include "content/public/browser/payment_app_provider.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
namespace content {
class CONTENT_EXPORT PaymentAppProviderImpl : public PaymentAppProvider {
using payments::mojom::PaymentRequestEventDataPtr;
using ServiceWorkerStartCallback =
base::OnceCallback<void(scoped_refptr<ServiceWorkerVersion>,
blink::ServiceWorkerStatusCode)>;
class CONTENT_EXPORT PaymentAppProviderImpl
: public PaymentAppProvider,
public WebContentsUserData<PaymentAppProviderImpl> {
public:
static PaymentAppProviderImpl* GetInstance();
~PaymentAppProviderImpl() override;
static PaymentAppProviderImpl* GetOrCreateForWebContents(
WebContents* web_contents);
// Disallow copy and assign.
PaymentAppProviderImpl(const PaymentAppProviderImpl& other) = delete;
......@@ -23,13 +34,11 @@ class CONTENT_EXPORT PaymentAppProviderImpl : public PaymentAppProvider {
// PaymentAppProvider implementation:
// Should be accessed only on the UI thread.
void InvokePaymentApp(WebContents* web_contents,
int64_t registration_id,
void InvokePaymentApp(int64_t registration_id,
const url::Origin& sw_origin,
payments::mojom::PaymentRequestEventDataPtr event_data,
InvokePaymentAppCallback callback) override;
void InstallAndInvokePaymentApp(
WebContents* web_contents,
payments::mojom::PaymentRequestEventDataPtr event_data,
const std::string& app_name,
const SkBitmap& app_icon,
......@@ -40,42 +49,41 @@ class CONTENT_EXPORT PaymentAppProviderImpl : public PaymentAppProvider {
const SupportedDelegations& supported_delegations,
RegistrationIdCallback registration_id_callback,
InvokePaymentAppCallback callback) override;
void UpdatePaymentAppIcon(BrowserContext* browser_context,
int64_t registration_id,
void UpdatePaymentAppIcon(int64_t registration_id,
const std::string& instrument_key,
const std::string& name,
const std::string& string_encoded_icon,
const std::string& method_name,
const SupportedDelegations& supported_delegations,
UpdatePaymentAppIconCallback callback) override;
void CanMakePayment(WebContents* web_contents,
int64_t registration_id,
void CanMakePayment(int64_t registration_id,
const url::Origin& sw_origin,
const std::string& payment_request_id,
payments::mojom::CanMakePaymentEventDataPtr event_data,
CanMakePaymentCallback callback) override;
void AbortPayment(WebContents* web_contents,
int64_t registration_id,
void AbortPayment(int64_t registration_id,
const url::Origin& sw_origin,
const std::string& payment_request_id,
AbortCallback callback) override;
void SetOpenedWindow(WebContents* web_contents) override;
void SetOpenedWindow() override;
void CloseOpenedWindow() override;
void OnClosingOpenedWindow(
WebContents* web_contents,
payments::mojom::PaymentEventResponseType reason) override;
bool IsValidInstallablePaymentApp(const GURL& manifest_url,
const GURL& sw_js_url,
const GURL& sw_scope,
std::string* error_message) override;
ukm::SourceId GetSourceIdForPaymentAppFromScope(
const GURL& sw_scope) override;
private:
PaymentAppProviderImpl();
~PaymentAppProviderImpl() override;
explicit PaymentAppProviderImpl(WebContents* web_contents);
friend class WebContentsUserData<PaymentAppProviderImpl>;
WEB_CONTENTS_USER_DATA_KEY_DECL();
friend struct base::DefaultSingletonTraits<PaymentAppProviderImpl>;
scoped_refptr<DevToolsBackgroundServicesContextImpl> GetDevTools(
const url::Origin& sw_origin);
void StartServiceWorkerForDispatch(int64_t registration_id,
ServiceWorkerStartCallback callback);
void OnInstallPaymentApp(const url::Origin& sw_origin,
PaymentRequestEventDataPtr event_data,
RegistrationIdCallback registration_id_callback,
InvokePaymentAppCallback callback,
int64_t registration_id);
// Note that constructor of WebContentsObserver is protected.
class PaymentHandlerWindowObserver : public WebContentsObserver {
......@@ -85,6 +93,11 @@ class CONTENT_EXPORT PaymentAppProviderImpl : public PaymentAppProvider {
};
std::unique_ptr<PaymentHandlerWindowObserver> payment_handler_window_;
// Owns this object.
WebContents* web_contents_;
base::WeakPtrFactory<PaymentAppProviderImpl> weak_ptr_factory_{this};
};
} // namespace content
......
......@@ -11,7 +11,7 @@
#include "base/run_loop.h"
#include "content/browser/payments/installed_payment_apps_finder_impl.h"
#include "content/browser/payments/payment_app_content_unittest_base.h"
#include "content/browser/payments/payment_app_provider_impl.h"
#include "content/public/browser/payment_app_provider.h"
#include "content/public/browser/permission_type.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/mock_permission_manager.h"
......@@ -107,9 +107,9 @@ class PaymentAppProviderTest : public PaymentAppContentUnitTestBase {
const url::Origin& sw_origin,
payments::mojom::PaymentRequestEventDataPtr event_data,
PaymentAppProvider::InvokePaymentAppCallback callback) {
PaymentAppProviderImpl::GetInstance()->InvokePaymentApp(
web_contents_, registration_id, sw_origin, std::move(event_data),
std::move(callback));
PaymentAppProvider::GetOrCreateForWebContents(web_contents_)
->InvokePaymentApp(registration_id, sw_origin, std::move(event_data),
std::move(callback));
base::RunLoop().RunUntilIdle();
}
......@@ -118,24 +118,24 @@ class PaymentAppProviderTest : public PaymentAppContentUnitTestBase {
const std::string& payment_request_id,
payments::mojom::CanMakePaymentEventDataPtr event_data,
PaymentAppProvider::CanMakePaymentCallback callback) {
PaymentAppProviderImpl::GetInstance()->CanMakePayment(
web_contents_, registration_id, sw_origin, payment_request_id,
std::move(event_data), std::move(callback));
PaymentAppProvider::GetOrCreateForWebContents(web_contents_)
->CanMakePayment(registration_id, sw_origin, payment_request_id,
std::move(event_data), std::move(callback));
}
void AbortPayment(int64_t registration_id,
const url::Origin& sw_origin,
const std::string& payment_request_id,
PaymentAppProvider::AbortCallback callback) {
PaymentAppProviderImpl::GetInstance()->AbortPayment(
web_contents_, registration_id, sw_origin, payment_request_id,
std::move(callback));
PaymentAppProvider::GetOrCreateForWebContents(web_contents_)
->AbortPayment(registration_id, sw_origin, payment_request_id,
std::move(callback));
}
void OnClosingOpenedWindow() {
PaymentAppProviderImpl::GetInstance()->OnClosingOpenedWindow(
web_contents_, payments::mojom::PaymentEventResponseType::
PAYMENT_HANDLER_WINDOW_CLOSING);
PaymentAppProvider::GetOrCreateForWebContents(web_contents_)
->OnClosingOpenedWindow(payments::mojom::PaymentEventResponseType::
PAYMENT_HANDLER_WINDOW_CLOSING);
base::RunLoop().RunUntilIdle();
}
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/browser/payment_app_provider_util.h"
#include "content/common/service_worker/service_worker_utils.h"
#include "content/public/browser/browser_thread.h"
namespace content {
// static
ukm::SourceId PaymentAppProviderUtil::GetSourceIdForPaymentAppFromScope(
const GURL& sw_scope) {
return ukm::UkmRecorder::GetSourceIdForPaymentAppFromScope(
sw_scope.GetOrigin());
}
// static
bool PaymentAppProviderUtil::IsValidInstallablePaymentApp(
const GURL& manifest_url,
const GURL& sw_js_url,
const GURL& sw_scope,
std::string* error_message) {
DCHECK(manifest_url.is_valid() && sw_js_url.is_valid() &&
sw_scope.is_valid());
// Scope will be checked against service worker js url when registering, but
// we check it here earlier to avoid presenting unusable payment handlers.
if (!ServiceWorkerUtils::IsPathRestrictionSatisfiedWithoutHeader(
sw_scope, sw_js_url, error_message)) {
return false;
}
// TODO(crbug.com/855312): Unify duplicated code between here and
// ServiceWorkerProviderHost::IsValidRegisterMessage.
std::vector<GURL> urls = {manifest_url, sw_js_url, sw_scope};
if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
*error_message =
"Origins are not matching, or some origins cannot access service "
"worker (manifest:" +
manifest_url.spec() + " scope:" + sw_scope.spec() +
" sw:" + sw_js_url.spec() + ")";
return false;
}
return true;
}
} // namespace content
......@@ -213,7 +213,8 @@ void DidOpenURLOnUI(WindowType type,
if (type == WindowType::PAYMENT_HANDLER_WINDOW) {
// Set the opened web_contents to payment app provider to manage its life
// cycle.
PaymentAppProvider::GetInstance()->SetOpenedWindow(web_contents);
PaymentAppProvider::GetOrCreateForWebContents(web_contents)
->SetOpenedWindow();
}
}
......
......@@ -270,6 +270,7 @@ source_set("browser_sources") {
"page_navigator.cc",
"page_navigator.h",
"payment_app_provider.h",
"payment_app_provider_util.h",
"peak_gpu_memory_tracker.h",
"pepper_flash_settings_helper.h",
"pepper_vpn_provider_resource_host_proxy.h",
......
......@@ -7,7 +7,6 @@
#include "base/callback_forward.h"
#include "content/common/content_export.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
class SkBitmap;
......@@ -18,7 +17,6 @@ class Origin;
namespace content {
class BrowserContext;
class WebContents;
struct SupportedDelegations;
......@@ -33,7 +31,8 @@ class CONTENT_EXPORT PaymentAppProvider {
public:
// This static function is actually implemented in PaymentAppProviderImpl.cc.
// Please see: content/browser/payments/payment_app_provider_impl.cc
static PaymentAppProvider* GetInstance();
static PaymentAppProvider* GetOrCreateForWebContents(
WebContents* web_contents);
using RegistrationIdCallback =
base::OnceCallback<void(int64_t registration_id)>;
......@@ -47,13 +46,11 @@ class CONTENT_EXPORT PaymentAppProvider {
// Should be accessed only on the UI thread.
virtual void InvokePaymentApp(
WebContents* web_contents,
int64_t registration_id,
const url::Origin& sw_origin,
payments::mojom::PaymentRequestEventDataPtr event_data,
InvokePaymentAppCallback callback) = 0;
virtual void InstallAndInvokePaymentApp(
WebContents* web_contents,
payments::mojom::PaymentRequestEventDataPtr event_data,
const std::string& app_name,
const SkBitmap& app_icon,
......@@ -65,7 +62,6 @@ class CONTENT_EXPORT PaymentAppProvider {
RegistrationIdCallback registration_id_callback,
InvokePaymentAppCallback callback) = 0;
virtual void UpdatePaymentAppIcon(
BrowserContext* browser_context,
int64_t registration_id,
const std::string& instrument_key,
const std::string& name,
......@@ -74,14 +70,12 @@ class CONTENT_EXPORT PaymentAppProvider {
const SupportedDelegations& supported_delegations,
UpdatePaymentAppIconCallback callback) = 0;
virtual void CanMakePayment(
WebContents* web_contents,
int64_t registration_id,
const url::Origin& sw_origin,
const std::string& payment_request_id,
payments::mojom::CanMakePaymentEventDataPtr event_data,
CanMakePaymentCallback callback) = 0;
virtual void AbortPayment(WebContents* web_contents,
int64_t registration_id,
virtual void AbortPayment(int64_t registration_id,
const url::Origin& sw_origin,
const std::string& payment_request_id,
AbortCallback callback) = 0;
......@@ -90,27 +84,14 @@ class CONTENT_EXPORT PaymentAppProvider {
// opened window for payment handler at any moment in a browser context. The
// previously opened window in the same browser context will be closed after
// calling this interface.
virtual void SetOpenedWindow(WebContents* web_contents) = 0;
virtual void SetOpenedWindow() = 0;
virtual void CloseOpenedWindow() = 0;
// Notify the opened payment handler window is closing or closed by user so as
// to abort payment request.
virtual void OnClosingOpenedWindow(
WebContents* web_contents,
payments::mojom::PaymentEventResponseType reason) = 0;
// Check whether given |sw_js_url| from |manifest_url| is allowed to register
// with |sw_scope|.
virtual bool IsValidInstallablePaymentApp(const GURL& manifest_url,
const GURL& sw_js_url,
const GURL& sw_scope,
std::string* error_message) = 0;
// Gets the ukm source id for a payment app with |sw_scope|.
// This must ONLY be called when payment app window has been opened.
virtual ukm::SourceId GetSourceIdForPaymentAppFromScope(
const GURL& sw_scope) = 0;
protected:
virtual ~PaymentAppProvider() = default;
};
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_PUBLIC_BROWSER_PAYMENT_APP_PROVIDER_UTIL_H_
#define CONTENT_PUBLIC_BROWSER_PAYMENT_APP_PROVIDER_UTIL_H_
#include "content/common/content_export.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
namespace content {
class CONTENT_EXPORT PaymentAppProviderUtil {
public:
// Gets the ukm source id for a payment app with |sw_scope|.
// This must ONLY be called when payment app window has been opened.
static ukm::SourceId GetSourceIdForPaymentAppFromScope(const GURL& sw_scope);
// Check whether given |sw_js_url| from |manifest_url| is allowed to register
// with |sw_scope|.
static bool IsValidInstallablePaymentApp(const GURL& manifest_url,
const GURL& sw_js_url,
const GURL& sw_scope,
std::string* error_message);
};
} // namespace content
#endif // CONTENT_PUBLIC_BROWSER_PAYMENT_APP_PROVIDER_UTIL_H_
......@@ -29,7 +29,7 @@ class UkmRecorderInterface;
} // namespace metrics
namespace content {
class PaymentAppProviderImpl;
class PaymentAppProviderUtil;
} // namespace content
namespace web_app {
......@@ -94,7 +94,7 @@ class METRICS_EXPORT UkmRecorder {
// Gets new source Id for PAYMENT_APP_ID type and updates the source url to
// the scope of the app. This method should only be called by
// PaymentAppProviderImpl class when the payment app window is opened.
// PaymentAppProviderUtil class when the payment app window is opened.
static SourceId GetSourceIdForPaymentAppFromScope(
const GURL& service_worker_scope);
......@@ -105,7 +105,7 @@ class METRICS_EXPORT UkmRecorder {
friend blink::Document;
friend metrics::UkmRecorderInterface;
friend PermissionUmaUtil;
friend content::PaymentAppProviderImpl;
friend content::PaymentAppProviderUtil;
// WebApkUkmRecorder and DesktopWebAppUkmRecorder record metrics about
// installed web apps. Instead of using
......
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