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 @@ ...@@ -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_messaging_utils.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription.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/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/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/functional.h"
...@@ -22,7 +23,8 @@ namespace blink { ...@@ -22,7 +23,8 @@ namespace blink {
const char PushProvider::kSupplementName[] = "PushProvider"; const char PushProvider::kSupplementName[] = "PushProvider";
PushProvider::PushProvider(ServiceWorkerRegistration& registration) PushProvider::PushProvider(ServiceWorkerRegistration& registration)
: Supplement<ServiceWorkerRegistration>(registration) {} : Supplement<ServiceWorkerRegistration>(registration),
push_messaging_manager_(nullptr) {}
// static // static
PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) { PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) {
...@@ -41,9 +43,11 @@ PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) { ...@@ -41,9 +43,11 @@ PushProvider* PushProvider::From(ServiceWorkerRegistration* registration) {
// static // static
mojom::blink::PushMessaging* PushProvider::GetPushMessagingRemote() { mojom::blink::PushMessaging* PushProvider::GetPushMessagingRemote() {
if (!push_messaging_manager_) { if (!push_messaging_manager_.is_bound()) {
Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( Platform::Current()->GetBrowserInterfaceBroker()->GetInterface(
push_messaging_manager_.BindNewPipeAndPassReceiver()); push_messaging_manager_.BindNewPipeAndPassReceiver(
GetSupplementable()->GetExecutionContext()->GetTaskRunner(
TaskType::kMiscPlatformAPI)));
} }
return push_messaging_manager_.get(); return push_messaging_manager_.get();
...@@ -122,6 +126,11 @@ void PushProvider::GetSubscription( ...@@ -122,6 +126,11 @@ void PushProvider::GetSubscription(
WTF::Passed(std::move(callbacks)))); WTF::Passed(std::move(callbacks))));
} }
void PushProvider::Trace(Visitor* visitor) {
visitor->Trace(push_messaging_manager_);
Supplement::Trace(visitor);
}
void PushProvider::DidGetSubscription( void PushProvider::DidGetSubscription(
std::unique_ptr<PushSubscriptionCallbacks> callbacks, std::unique_ptr<PushSubscriptionCallbacks> callbacks,
mojom::blink::PushGetRegistrationStatus status, mojom::blink::PushGetRegistrationStatus status,
......
...@@ -11,11 +11,12 @@ ...@@ -11,11 +11,12 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h" #include "base/memory/scoped_refptr.h"
#include "base/single_thread_task_runner.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.mojom-blink.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-blink-forward.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/push_messaging/push_subscription_callbacks.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/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"
#include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
...@@ -46,6 +47,8 @@ class PushProvider final : public GarbageCollected<PushProvider>, ...@@ -46,6 +47,8 @@ class PushProvider final : public GarbageCollected<PushProvider>,
void Unsubscribe(std::unique_ptr<PushUnsubscribeCallbacks> callbacks); void Unsubscribe(std::unique_ptr<PushUnsubscribeCallbacks> callbacks);
void GetSubscription(std::unique_ptr<PushSubscriptionCallbacks> callbacks); void GetSubscription(std::unique_ptr<PushSubscriptionCallbacks> callbacks);
void Trace(Visitor*) override;
private: private:
// Returns an initialized PushMessaging service. A connection will be // Returns an initialized PushMessaging service. A connection will be
// established after the first call to this method. // established after the first call to this method.
...@@ -64,7 +67,9 @@ class PushProvider final : public GarbageCollected<PushProvider>, ...@@ -64,7 +67,9 @@ class PushProvider final : public GarbageCollected<PushProvider>,
mojom::blink::PushGetRegistrationStatus status, mojom::blink::PushGetRegistrationStatus status,
mojom::blink::PushSubscriptionPtr subscription); 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); 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