From: uazo Date: Mon, 7 Aug 2023 11:02:18 +0000 Subject: Allow DocumentPiP if PopupsAndRedirects are active Allow documentPiP api use only with content setting popup allowed and disables the possibility of verifying the activation of PIP in the device with document.pictureInPictureEnabled License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- .../chromium/chrome/browser/media/PictureInPicture.java | 1 + .../picture_in_picture_controller_impl.cc | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPicture.java b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPicture.java --- a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPicture.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPicture.java @@ -29,6 +29,7 @@ public abstract class PictureInPicture { * @return boolean true if Picture-In-Picture is enabled, otherwise false. */ public static boolean isEnabled(Context context) { + if ((true)) return true; // Some versions of Android crash when the activity enters Picture-in-Picture // immediately after it exits Picture-in-Picture. See b/143784148 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) { diff --git a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc --- a/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc +++ b/third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc @@ -31,6 +31,7 @@ #include "third_party/blink/renderer/core/layout/layout_video.h" #include "third_party/blink/renderer/modules/document_picture_in_picture/document_picture_in_picture.h" #include "third_party/blink/renderer/modules/document_picture_in_picture/document_picture_in_picture_event.h" +#include "third_party/blink/renderer/core/loader/document_loader.h" #include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_event.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" @@ -386,6 +387,12 @@ void PictureInPictureControllerImpl::CreateDocumentPictureInPictureWindow( return; } + if (!opener.GetFrame()->Loader().GetDocumentLoader()->GetContentSettings()->allow_popup) { + resolver->RejectWithDOMException(DOMExceptionCode::kNotAllowedError, + "Document PiP requires user popup permission"); + return; + } + WebPictureInPictureWindowOptions web_options; web_options.width = options->width(); web_options.height = options->height(); --