Commit e18ee3c8 authored by Jazz Xu's avatar Jazz Xu Committed by Commit Bot

Fix a PIP crash when trying to exit PIP when video is in Auto PIP.

Bug: 1035213
Change-Id: I3da4241c0e97ab3b546ee3cf8b4dc885cc93359d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2369573
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#802403}
parent a2a7c73b
...@@ -491,7 +491,8 @@ bool HTMLVideoElement::UsesOverlayFullscreenVideo() const { ...@@ -491,7 +491,8 @@ bool HTMLVideoElement::UsesOverlayFullscreenVideo() const {
void HTMLVideoElement::DidEnterFullscreen() { void HTMLVideoElement::DidEnterFullscreen() {
UpdateControlsVisibility(); UpdateControlsVisibility();
if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture) { if (DisplayType() == WebMediaPlayer::DisplayType::kPictureInPicture &&
!IsInAutoPIP()) {
PictureInPictureController::From(GetDocument()) PictureInPictureController::From(GetDocument())
.ExitPictureInPicture(this, nullptr); .ExitPictureInPicture(this, nullptr);
} }
......
...@@ -191,4 +191,17 @@ TEST_F(HTMLVideoElementTest, HasAvailableVideoFrameChecksWMP) { ...@@ -191,4 +191,17 @@ TEST_F(HTMLVideoElementTest, HasAvailableVideoFrameChecksWMP) {
EXPECT_TRUE(video()->HasAvailableVideoFrame()); EXPECT_TRUE(video()->HasAvailableVideoFrame());
} }
TEST_F(HTMLVideoElementTest, AutoPIPExitPIPTest) {
video()->SetSrc("http://example.com/foo.mp4");
test::RunPendingTasks();
// Set in auto PIP.
video()->OnBecamePersistentVideo(true);
// Shouldn't get to PictureInPictureController::ExitPictureInPicture
// and fail the DCHECK.
EXPECT_NO_FATAL_FAILURE(video()->DidEnterFullscreen());
test::RunPendingTasks();
}
} // namespace blink } // namespace blink
...@@ -242,6 +242,7 @@ void PictureInPictureControllerImpl::ExitPictureInPicture( ...@@ -242,6 +242,7 @@ void PictureInPictureControllerImpl::ExitPictureInPicture(
if (!EnsureService()) if (!EnsureService())
return; return;
DCHECK(picture_in_picture_session_.is_bound());
picture_in_picture_session_->Stop( picture_in_picture_session_->Stop(
WTF::Bind(&PictureInPictureControllerImpl::OnExitedPictureInPicture, WTF::Bind(&PictureInPictureControllerImpl::OnExitedPictureInPicture,
WrapPersistent(this), WrapPersistent(resolver))); WrapPersistent(this), WrapPersistent(resolver)));
......
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