Commit 38117682 authored by Francois Beaufort's avatar Francois Beaufort Committed by Chromium LUCI CQ

[Picture-in-Picture] Do not pause PiP video when removed from document

This CL makes sure video do not pause when playing in Picture-in-Picture
and subsequently removed from the Document.

Spec: https://github.com/w3c/picture-in-picture/issues/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: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845100}
parent fbc26cbe
......@@ -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"
......@@ -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(
......
......@@ -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 ]
......
......@@ -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 ]
......
......@@ -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 ]
......
<!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>
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