Commit 67dd6c74 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate PushMessagingBridge to use GC mojo wrappers.

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

Bug: 1049056
Change-Id: Ibc8df682db4772ceedd4ddffbf781058bb7e6465
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2134098Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756614}
parent eb5433d3
...@@ -41,7 +41,8 @@ PushMessagingBridge* PushMessagingBridge::From( ...@@ -41,7 +41,8 @@ PushMessagingBridge* PushMessagingBridge::From(
PushMessagingBridge::PushMessagingBridge( PushMessagingBridge::PushMessagingBridge(
ServiceWorkerRegistration& registration) ServiceWorkerRegistration& registration)
: Supplement<ServiceWorkerRegistration>(registration) {} : Supplement<ServiceWorkerRegistration>(registration),
permission_service_(nullptr) {}
PushMessagingBridge::~PushMessagingBridge() = default; PushMessagingBridge::~PushMessagingBridge() = default;
...@@ -51,9 +52,10 @@ ScriptPromise PushMessagingBridge::GetPermissionState( ...@@ -51,9 +52,10 @@ ScriptPromise PushMessagingBridge::GetPermissionState(
ScriptState* script_state, ScriptState* script_state,
const PushSubscriptionOptionsInit* options) { const PushSubscriptionOptionsInit* options) {
ExecutionContext* context = ExecutionContext::From(script_state); ExecutionContext* context = ExecutionContext::From(script_state);
if (!permission_service_) { if (!permission_service_.is_bound()) {
ConnectToPermissionService( ConnectToPermissionService(
context, permission_service_.BindNewPipeAndPassReceiver()); context, permission_service_.BindNewPipeAndPassReceiver(
context->GetTaskRunner(TaskType::kMiscPlatformAPI)));
} }
auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
...@@ -78,6 +80,11 @@ ScriptPromise PushMessagingBridge::GetPermissionState( ...@@ -78,6 +80,11 @@ ScriptPromise PushMessagingBridge::GetPermissionState(
return promise; return promise;
} }
void PushMessagingBridge::Trace(Visitor* visitor) {
visitor->Trace(permission_service_);
Supplement<ServiceWorkerRegistration>::Trace(visitor);
}
void PushMessagingBridge::DidGetPermissionState( void PushMessagingBridge::DidGetPermissionState(
ScriptPromiseResolver* resolver, ScriptPromiseResolver* resolver,
mojom::blink::PermissionStatus status) { mojom::blink::PermissionStatus status) {
......
...@@ -6,11 +6,12 @@ ...@@ -6,11 +6,12 @@
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PUSH_MESSAGING_PUSH_MESSAGING_BRIDGE_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_PUSH_MESSAGING_PUSH_MESSAGING_BRIDGE_H_
#include "base/macros.h" #include "base/macros.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h" #include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom-blink.h" #include "third_party/blink/public/mojom/permissions/permission_status.mojom-blink.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_registration.h" #include "third_party/blink/renderer/modules/service_worker/service_worker_registration.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/supplementable.h" #include "third_party/blink/renderer/platform/supplementable.h"
namespace blink { namespace blink {
...@@ -40,13 +41,17 @@ class PushMessagingBridge final : public GarbageCollected<PushMessagingBridge>, ...@@ -40,13 +41,17 @@ class PushMessagingBridge final : public GarbageCollected<PushMessagingBridge>,
ScriptPromise GetPermissionState(ScriptState* script_state, ScriptPromise GetPermissionState(ScriptState* script_state,
const PushSubscriptionOptionsInit* options); const PushSubscriptionOptionsInit* options);
void Trace(Visitor*) override;
private: private:
// Method to be invoked when the permission status has been retrieved from the // Method to be invoked when the permission status has been retrieved from the
// permission service. Will settle the given |resolver|. // permission service. Will settle the given |resolver|.
void DidGetPermissionState(ScriptPromiseResolver* resolver, void DidGetPermissionState(ScriptPromiseResolver* resolver,
mojom::blink::PermissionStatus status); mojom::blink::PermissionStatus status);
mojo::Remote<mojom::blink::PermissionService> permission_service_; HeapMojoRemote<mojom::blink::PermissionService,
HeapMojoWrapperMode::kWithoutContextObserver>
permission_service_;
DISALLOW_COPY_AND_ASSIGN(PushMessagingBridge); DISALLOW_COPY_AND_ASSIGN(PushMessagingBridge);
}; };
......
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