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

Migrate PictureInPictureControllerImpl to use GC mojo wrappers.

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

Bug: 1049056
Change-Id: If002f424b8883857bd0fb3664995b0ca0b10b00d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2136988Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758482}
parent 38e6acbb
...@@ -203,9 +203,10 @@ void PictureInPictureControllerImpl::OnEnteredPictureInPicture( ...@@ -203,9 +203,10 @@ void PictureInPictureControllerImpl::OnEnteredPictureInPicture(
return; return;
} }
picture_in_picture_session_ = picture_in_picture_session_.reset();
mojo::Remote<mojom::blink::PictureInPictureSession>( picture_in_picture_session_.Bind(
std::move(session_remote)); std::move(session_remote),
element->GetDocument().GetTaskRunner(TaskType::kMediaElementEvent));
if (IsElementAllowed(*element, /*report_failure=*/true) != Status::kEnabled) { if (IsElementAllowed(*element, /*report_failure=*/true) != Status::kEnabled) {
if (resolver) { if (resolver) {
...@@ -379,11 +380,6 @@ void PictureInPictureControllerImpl::PageVisibilityChanged() { ...@@ -379,11 +380,6 @@ void PictureInPictureControllerImpl::PageVisibilityChanged() {
} }
} }
void PictureInPictureControllerImpl::ContextDestroyed() {
picture_in_picture_service_.reset();
session_observer_receiver_.reset();
}
void PictureInPictureControllerImpl::OnPictureInPictureStateChange() { void PictureInPictureControllerImpl::OnPictureInPictureStateChange() {
DCHECK(picture_in_picture_element_); DCHECK(picture_in_picture_element_);
DCHECK(picture_in_picture_element_->GetWebMediaPlayer()); DCHECK(picture_in_picture_element_->GetWebMediaPlayer());
...@@ -409,20 +405,25 @@ void PictureInPictureControllerImpl::Trace(Visitor* visitor) { ...@@ -409,20 +405,25 @@ void PictureInPictureControllerImpl::Trace(Visitor* visitor) {
visitor->Trace(picture_in_picture_element_); visitor->Trace(picture_in_picture_element_);
visitor->Trace(auto_picture_in_picture_elements_); visitor->Trace(auto_picture_in_picture_elements_);
visitor->Trace(picture_in_picture_window_); visitor->Trace(picture_in_picture_window_);
visitor->Trace(session_observer_receiver_);
visitor->Trace(picture_in_picture_service_);
visitor->Trace(picture_in_picture_session_);
PictureInPictureController::Trace(visitor); PictureInPictureController::Trace(visitor);
PageVisibilityObserver::Trace(visitor); PageVisibilityObserver::Trace(visitor);
ExecutionContextLifecycleObserver::Trace(visitor); ExecutionContextClient::Trace(visitor);
} }
PictureInPictureControllerImpl::PictureInPictureControllerImpl( PictureInPictureControllerImpl::PictureInPictureControllerImpl(
Document& document) Document& document)
: PictureInPictureController(document), : PictureInPictureController(document),
PageVisibilityObserver(document.GetPage()), PageVisibilityObserver(document.GetPage()),
ExecutionContextLifecycleObserver(&document), ExecutionContextClient(document.ToExecutionContext()),
session_observer_receiver_(this) {} session_observer_receiver_(this, document.ToExecutionContext()),
picture_in_picture_service_(document.ToExecutionContext()),
picture_in_picture_session_(document.ToExecutionContext()) {}
bool PictureInPictureControllerImpl::EnsureService() { bool PictureInPictureControllerImpl::EnsureService() {
if (picture_in_picture_service_) if (picture_in_picture_service_.is_bound())
return true; return true;
if (!GetSupplementable()->GetFrame()) if (!GetSupplementable()->GetFrame())
......
...@@ -7,13 +7,13 @@ ...@@ -7,13 +7,13 @@
#include "base/macros.h" #include "base/macros.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h" #include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom-blink.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" #include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h" #include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
#include "third_party/blink/renderer/core/page/page_visibility_observer.h" #include "third_party/blink/renderer/core/page/page_visibility_observer.h"
#include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
namespace blink { namespace blink {
...@@ -33,7 +33,7 @@ class TreeScope; ...@@ -33,7 +33,7 @@ class TreeScope;
class MODULES_EXPORT PictureInPictureControllerImpl class MODULES_EXPORT PictureInPictureControllerImpl
: public PictureInPictureController, : public PictureInPictureController,
public PageVisibilityObserver, public PageVisibilityObserver,
public ExecutionContextLifecycleObserver, public ExecutionContextClient,
public blink::mojom::blink::PictureInPictureSessionObserver { public blink::mojom::blink::PictureInPictureSessionObserver {
USING_GARBAGE_COLLECTED_MIXIN(PictureInPictureControllerImpl); USING_GARBAGE_COLLECTED_MIXIN(PictureInPictureControllerImpl);
...@@ -90,9 +90,6 @@ class MODULES_EXPORT PictureInPictureControllerImpl ...@@ -90,9 +90,6 @@ class MODULES_EXPORT PictureInPictureControllerImpl
// Implementation of PageVisibilityObserver. // Implementation of PageVisibilityObserver.
void PageVisibilityChanged() override; void PageVisibilityChanged() override;
// Implementation of ExecutionContextLifecycleObserver.
void ContextDestroyed() override;
void Trace(Visitor*) override; void Trace(Visitor*) override;
bool IsSessionObserverReceiverBoundForTesting() { bool IsSessionObserverReceiverBoundForTesting() {
...@@ -123,15 +120,17 @@ class MODULES_EXPORT PictureInPictureControllerImpl ...@@ -123,15 +120,17 @@ class MODULES_EXPORT PictureInPictureControllerImpl
Member<PictureInPictureWindow> picture_in_picture_window_; Member<PictureInPictureWindow> picture_in_picture_window_;
// Mojo bindings for the session observer interface implemented by |this|. // Mojo bindings for the session observer interface implemented by |this|.
mojo::Receiver<mojom::blink::PictureInPictureSessionObserver> HeapMojoReceiver<mojom::blink::PictureInPictureSessionObserver,
PictureInPictureControllerImpl>
session_observer_receiver_; session_observer_receiver_;
// Picture-in-Picture service living in the browser process. // Picture-in-Picture service living in the browser process.
mojo::Remote<mojom::blink::PictureInPictureService> HeapMojoRemote<mojom::blink::PictureInPictureService>
picture_in_picture_service_; picture_in_picture_service_;
// Instance of the Picture-in-Picture session sent back by the service. // Instance of the Picture-in-Picture session sent back by the service.
mojo::Remote<mojom::blink::PictureInPictureSession> HeapMojoRemote<mojom::blink::PictureInPictureSession,
HeapMojoWrapperMode::kWithoutContextObserver>
picture_in_picture_session_; picture_in_picture_session_;
DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerImpl); DISALLOW_COPY_AND_ASSIGN(PictureInPictureControllerImpl);
......
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