Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* Bug 1956165 - Fix picture-in-picture mode on Mobile YouTube
*
* YouTube does not play well with our picture in picture implementation, and
* effectively cancels it. We can work around this conflict with this site patch.
*/
/* globals exportFunction */
console.info(
"exitFullscreen and window.outerWidth|Height have been overridden for compatibility reasons. See https://bugzilla.mozilla.org/show_bug.cgi?id=1956165 for details."
);
const win = window.wrappedJSObject;
const outerWidthDesc = Object.getOwnPropertyDescriptor(win, "outerWidth");
const outerHeightDesc = Object.getOwnPropertyDescriptor(win, "outerHeight");
const originalOuterWidth = outerWidthDesc.get;
const originalOuterHeight = outerHeightDesc.get;
outerWidthDesc.get = exportFunction(() => {
const actual = originalOuterWidth();
if (actual < screen.width / 2) {
return screen.width;
}
return actual;
}, window);
outerHeightDesc.get = exportFunction(() => {
const actual = originalOuterHeight();
if (actual < screen.height / 2) {
return screen.height;
}
return actual;
}, window);
Object.defineProperty(win, "outerWidth", outerWidthDesc);
Object.defineProperty(win, "outerHeight", outerHeightDesc);
const originalExitFullscreen = win.Document.prototype.exitFullscreen;
const newExitFullscreen = exportFunction(function () {
if (this.inAndroidPipMode) {
return undefined;
}
return originalExitFullscreen.apply(this);
}, window);
Object.defineProperty(win.Document.prototype, "exitFullscreen", {
value: newExitFullscreen,
writable: true,
configurable: true,
});