Commit c7ac5f96 authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate PushProvider to use GC mojo wrappers.

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

Bug: 1049056
Change-Id: I063d45ca3749e68751daa6d38f7e38080b333872
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2131971
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756216}
parent 876ecb59
......@@ -13,6 +13,7 @@
#include "third_party/blink/renderer/modules/push_messaging/push_messaging_utils.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread_scheduler.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
......@@ -22,7 +23,8 @@ namespace blink {
const char PushProvider::kSupplementName[] = "PushProvider";
PushProvider::PushProvider(ServiceWorkerRegistration& registration)
: Supplement<ServiceWorkerRegistration>(registration) {}
: Supplement<ServiceWorkerRegistration>(registration),
push_messaging_manager_(nullptr) {}
// static
PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) {
......@@ -41,9 +43,11 @@ PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) {
// static
mojom::blink::PushMessaging* PushProvider::GetPushMessagingRemote() {
if (!push_messaging_manager_) {
if (!push_messaging_manager_.is_bound()) {
Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
push_messaging_manager_.BindNewPipeAndPassReceiver());
push_messaging_manager_.BindNewPipeAndPassReceiver(
GetSupplementable()->GetExecutionContext()->GetTaskRunner(
TaskType::kMiscPlatformAPI)));
}
return push_messaging_manager_.get();
......@@ -122,6 +126,11 @@ void PushProvider::GetSubscription(
WTF::Passed(std::move(callbacks))));
}
void PushProvider::Trace(Visitor* visitor) {
visitor->Trace(push_messaging_manager_);
Supplement::Trace(visitor);
}
void PushProvider::DidGetSubscription(
std::unique_ptr<PushSubscriptionCallbacks> callbacks,
mojom::blink::PushGetRegistrationStatus status,
......
......@@ -11,11 +11,12 @@
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/single_thread_task_runner.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging.mojom-blink.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-blink-forward.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_callbacks.h"
#include "third_party/blink/renderer/modules/service_worker/service_worker_registration.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/wtf/vector.h"
......@@ -46,6 +47,8 @@ class PushProvider final : public GarbageCollected<PushProvider>,
void Unsubscribe(std::unique_ptr<PushUnsubscribeCallbacks> callbacks);
void GetSubscription(std::unique_ptr<PushSubscriptionCallbacks> callbacks);
void Trace(Visitor*) override;
private:
// Returns an initialized PushMessaging service. A connection will be
// established after the first call to this method.
......@@ -64,7 +67,9 @@ class PushProvider final : public GarbageCollected<PushProvider>,
mojom::blink::PushGetRegistrationStatus status,
mojom::blink::PushSubscriptionPtr subscription);
mojo::Remote<mojom::blink::PushMessaging> push_messaging_manager_;
HeapMojoRemote<mojom::blink::PushMessaging,
HeapMojoWrapperMode::kWithoutContextObserver>
push_messaging_manager_;
DISALLOW_COPY_AND_ASSIGN(PushProvider);
};
......
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