From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../experiment-apis/pictureInPicture.js | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 browser/extensions/pictureinpicture/experiment-apis/pictureInPicture.js (limited to 'browser/extensions/pictureinpicture/experiment-apis/pictureInPicture.js') diff --git a/browser/extensions/pictureinpicture/experiment-apis/pictureInPicture.js b/browser/extensions/pictureinpicture/experiment-apis/pictureInPicture.js new file mode 100644 index 0000000000..45323f5280 --- /dev/null +++ b/browser/extensions/pictureinpicture/experiment-apis/pictureInPicture.js @@ -0,0 +1,84 @@ +/* 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"; + +/* global AppConstants, ChromeUtils, ExtensionAPI, Services */ + +ChromeUtils.defineESModuleGetters(this, { + KEYBOARD_CONTROLS: "resource://gre/modules/PictureInPictureControls.sys.mjs", + TOGGLE_POLICIES: "resource://gre/modules/PictureInPictureControls.sys.mjs", +}); + +const TOGGLE_ENABLED_PREF = + "media.videocontrols.picture-in-picture.video-toggle.enabled"; + +/** + * This API is expected to be running in the parent process. + */ +this.pictureInPictureParent = class extends ExtensionAPI { + /** + * Override ExtensionAPI with PiP override's specific API + * Relays the site overrides to this extension's child process + * @param {ExtensionContext} context the context of our extension + * @returns {Object} returns the necessary API structure required to manage sharedData in PictureInPictureParent + */ + getAPI(context) { + return { + pictureInPictureParent: { + setOverrides(overrides) { + // The Picture-in-Picture toggle is only implemented for Desktop, so make + // this a no-op for non-Desktop builds. + if (AppConstants.platform == "android") { + return; + } + + Services.ppmm.sharedData.set( + "PictureInPicture:SiteOverrides", + overrides + ); + }, + }, + }; + } +}; + +/** + * This API is expected to be running in a content process - specifically, + * the WebExtension content process that the background scripts run in. We + * split these out so that they can return values synchronously to the + * background scripts. + */ +this.pictureInPictureChild = class extends ExtensionAPI { + /** + * Override ExtensionAPI with PiP override's specific API + * Clone constants into the Picture-in-Picture child process + * @param {ExtensionContext} context the context of our extension + * @returns returns the necessary API structure required to get data from PictureInPictureChild + */ + getAPI(context) { + return { + pictureInPictureChild: { + getKeyboardControls() { + // The Picture-in-Picture toggle is only implemented for Desktop, so make + // this return nothing for non-Desktop builds. + if (AppConstants.platform == "android") { + return Cu.cloneInto({}, context.cloneScope); + } + + return Cu.cloneInto(KEYBOARD_CONTROLS, context.cloneScope); + }, + getPolicies() { + // The Picture-in-Picture toggle is only implemented for Desktop, so make + // this return nothing for non-Desktop builds. + if (AppConstants.platform == "android") { + return Cu.cloneInto({}, context.cloneScope); + } + + return Cu.cloneInto(TOGGLE_POLICIES, context.cloneScope); + }, + }, + }; + } +}; -- cgit v1.2.3