Commit 417e2487 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate PaymentManager and PaymentInstruments to use GC mojo wrappers.

No behavior change. This CL reduces potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: Ia0b022f289860602db81cb3e0c5c619adeddf210
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2143421Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758088}
parent fca6f832
......@@ -144,8 +144,10 @@ class PaymentInstrumentParameter final
};
PaymentInstruments::PaymentInstruments(
const mojo::Remote<payments::mojom::blink::PaymentManager>& manager)
: manager_(manager) {}
const HeapMojoRemote<payments::mojom::blink::PaymentManager,
HeapMojoWrapperMode::kWithoutContextObserver>& manager,
ExecutionContext* context)
: manager_(manager), permission_service_(context) {}
ScriptPromise PaymentInstruments::deleteInstrument(
ScriptState* script_state,
......@@ -287,12 +289,19 @@ ScriptPromise PaymentInstruments::clear(ScriptState* script_state,
return promise;
}
void PaymentInstruments::Trace(Visitor* visitor) {
visitor->Trace(permission_service_);
ScriptWrappable::Trace(visitor);
}
mojom::blink::PermissionService* PaymentInstruments::GetPermissionService(
ScriptState* script_state) {
if (!permission_service_) {
if (!permission_service_.is_bound()) {
ConnectToPermissionService(
ExecutionContext::From(script_state),
permission_service_.BindNewPipeAndPassReceiver());
permission_service_.BindNewPipeAndPassReceiver(
ExecutionContext::From(script_state)
->GetTaskRunner(TaskType::kMiscPlatformAPI)));
}
return permission_service_.get();
}
......
......@@ -6,12 +6,13 @@
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_PAYMENT_INSTRUMENTS_H_
#include "base/macros.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
......@@ -28,7 +29,9 @@ class MODULES_EXPORT PaymentInstruments final : public ScriptWrappable {
public:
explicit PaymentInstruments(
const mojo::Remote<payments::mojom::blink::PaymentManager>&);
const HeapMojoRemote<payments::mojom::blink::PaymentManager,
HeapMojoWrapperMode::kWithoutContextObserver>&,
ExecutionContext*);
ScriptPromise deleteInstrument(ScriptState*,
const String& instrument_key,
......@@ -46,6 +49,8 @@ class MODULES_EXPORT PaymentInstruments final : public ScriptWrappable {
ExceptionState&);
ScriptPromise clear(ScriptState*, ExceptionState&);
void Trace(Visitor*) override;
private:
mojom::blink::PermissionService* GetPermissionService(ScriptState*);
void OnRequestPermission(ScriptPromiseResolver*,
......@@ -68,9 +73,12 @@ class MODULES_EXPORT PaymentInstruments final : public ScriptWrappable {
void onClearPaymentInstruments(ScriptPromiseResolver*,
payments::mojom::blink::PaymentHandlerStatus);
const mojo::Remote<payments::mojom::blink::PaymentManager>& manager_;
const HeapMojoRemote<payments::mojom::blink::PaymentManager,
HeapMojoWrapperMode::kWithoutContextObserver>& manager_;
mojo::Remote<mojom::blink::PermissionService> permission_service_;
HeapMojoRemote<mojom::blink::PermissionService,
HeapMojoWrapperMode::kWithoutContextObserver>
permission_service_;
DISALLOW_COPY_AND_ASSIGN(PaymentInstruments);
};
......
......@@ -17,8 +17,10 @@
namespace blink {
PaymentInstruments* PaymentManager::instruments() {
if (!instruments_)
instruments_ = MakeGarbageCollected<PaymentInstruments>(manager_);
if (!instruments_) {
instruments_ = MakeGarbageCollected<PaymentInstruments>(
manager_, registration_->GetExecutionContext());
}
return instruments_;
}
......@@ -78,13 +80,16 @@ ScriptPromise PaymentManager::enableDelegations(
void PaymentManager::Trace(Visitor* visitor) {
visitor->Trace(registration_);
visitor->Trace(manager_);
visitor->Trace(instruments_);
visitor->Trace(enable_delegations_resolver_);
ScriptWrappable::Trace(visitor);
}
PaymentManager::PaymentManager(ServiceWorkerRegistration* registration)
: registration_(registration), instruments_(nullptr) {
: registration_(registration),
manager_(registration->GetExecutionContext()),
instruments_(nullptr) {
DCHECK(registration);
if (ExecutionContext* context = registration->GetExecutionContext()) {
......
......@@ -6,11 +6,11 @@
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_PAYMENT_MANAGER_H_
#include "base/macros.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
namespace blink {
......@@ -45,7 +45,9 @@ class MODULES_EXPORT PaymentManager final : public ScriptWrappable {
payments::mojom::blink::PaymentHandlerStatus status);
Member<ServiceWorkerRegistration> registration_;
mojo::Remote<payments::mojom::blink::PaymentManager> manager_;
HeapMojoRemote<payments::mojom::blink::PaymentManager,
HeapMojoWrapperMode::kWithoutContextObserver>
manager_;
Member<PaymentInstruments> instruments_;
String user_hint_;
Member<ScriptPromiseResolver> enable_delegations_resolver_;
......
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