Skip to content

Commit

Permalink
[Picture-in-Picture] Do not pause PiP video when removed from document
Browse files Browse the repository at this point in the history
This CL makes sure video do not pause when playing in Picture-in-Picture
and subsequently removed from the Document.

Spec: w3c/picture-in-picture#99

Change-Id: Ifefd961803cc47c64d394aa52454313cbcef603a
Bug: 1167643
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2627311
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845100}
GitOrigin-RevId: 38117682e81b25f0307256541f6a9bb4fda887ac
  • Loading branch information
beaufortfrancois authored and copybara-github committed Jan 20, 2021
1 parent b99a1a6 commit cebf4c2
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 1 deletion.
6 changes: 5 additions & 1 deletion blink/renderer/core/html/media/html_media_element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/frame/local_frame_view.h"
#include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/fullscreen/fullscreen.h"
#include "third_party/blink/renderer/core/html/html_source_element.h"
Expand Down Expand Up @@ -4290,7 +4291,10 @@ void HTMLMediaElement::OnRemovedFromDocumentTimerFired(TimerBase*) {
if (InActiveDocument())
return;

PauseInternal();
// Video should not pause when playing in Picture-in-Picture and subsequently
// removed from the Document.
if (!PictureInPictureController::IsElementInPictureInPicture(this))
PauseInternal();
}

void HTMLMediaElement::AudioSourceProviderImpl::Wrap(
Expand Down
1 change: 1 addition & 0 deletions blink/web_tests/android/ChromiumWPTExpectations
Original file line number Diff line number Diff line change
Expand Up @@ -3541,6 +3541,7 @@ crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.htm
crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_compat-mouse-events-when-removing-nodes.html [ Failure Pass ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure ]
Expand Down
1 change: 1 addition & 0 deletions blink/web_tests/android/WeblayerWPTExpectations
Original file line number Diff line number Diff line change
Expand Up @@ -3627,6 +3627,7 @@ crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.htm
crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_compat-mouse-events-when-removing-nodes.html [ Failure Pass ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure ]
Expand Down
1 change: 1 addition & 0 deletions blink/web_tests/android/WebviewWPTExpectations
Original file line number Diff line number Diff line change
Expand Up @@ -3909,6 +3909,7 @@ crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-element.htm
crbug.com/1050754 external/wpt/picture-in-picture/picture-in-picture-window.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture-twice.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/request-picture-in-picture.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/removed-from-document.html [ Failure ]
crbug.com/1050754 external/wpt/picture-in-picture/shadow-dom.html [ Failure ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_compat-mouse-events-when-removing-nodes.html [ Failure Pass ]
crbug.com/1050754 external/wpt/pointerevents/compat/pointerevent_mouse-on-object.html [ Failure Pass ]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<title>Test Picture-in-Picture when removed from document</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/picture-in-picture-helpers.js"></script>
<body></body>
<script>
promise_test(async t => {
const video = await loadVideo();
document.body.appendChild(video);
video.muted = true;
await video.play();
await requestPictureInPictureWithTrustedClick(video);

assert_false(video.paused);
document.body.offsetLeft;
document.body.removeChild(video);
await new Promise(resolve => step_timeout(resolve, 1000));
assert_false(video.paused);
}, 'Picture-in-Picture video does not pause when removed from document');
</script>

0 comments on commit cebf4c2

Please sign in to comment.