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(
PushMessagingBridge::PushMessagingBridge(
ServiceWorkerRegistration& registration)
: Supplement<ServiceWorkerRegistration>(registration) {}
: Supplement<ServiceWorkerRegistration>(registration),
permission_service_(nullptr) {}
PushMessagingBridge::~PushMessagingBridge() = default;
......@@ -51,9 +52,10 @@ ScriptPromise PushMessagingBridge::GetPermissionState(
ScriptState* script_state,
const PushSubscriptionOptionsInit* options) {
ExecutionContext* context = ExecutionContext::From(script_state);
if (!permission_service_) {
if (!permission_service_.is_bound()) {
ConnectToPermissionService(
context, permission_service_.BindNewPipeAndPassReceiver());
context, permission_service_.BindNewPipeAndPassReceiver(
context->GetTaskRunner(TaskType::kMiscPlatformAPI)));
}
auto* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state);
......@@ -78,6 +80,11 @@ ScriptPromise PushMessagingBridge::GetPermissionState(
return promise;
}
void PushMessagingBridge::Trace(Visitor* visitor) {
visitor->Trace(permission_service_);
Supplement<ServiceWorkerRegistration>::Trace(visitor);
}
void PushMessagingBridge::DidGetPermissionState(
ScriptPromiseResolver* resolver,
mojom::blink::PermissionStatus status) {
......
......@@ -6,11 +6,12 @@
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PUSH_MESSAGING_PUSH_MESSAGING_BRIDGE_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_status.mojom-blink.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/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"
namespace blink {
......@@ -40,13 +41,17 @@ class PushMessagingBridge final : public GarbageCollected<PushMessagingBridge>,
ScriptPromise GetPermissionState(ScriptState* script_state,
const PushSubscriptionOptionsInit* options);
void Trace(Visitor*) override;
private:
// Method to be invoked when the permission status has been retrieved from the
// permission service. Will settle the given |resolver|.
void DidGetPermissionState(ScriptPromiseResolver* resolver,
mojom::blink::PermissionStatus status);
mojo::Remote<mojom::blink::PermissionService> permission_service_;
HeapMojoRemote<mojom::blink::PermissionService,
HeapMojoWrapperMode::kWithoutContextObserver>
permission_service_;
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