/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const { TOGGLE_POLICIES } = ChromeUtils.importESModule( "resource://gre/modules/PictureInPictureControls.sys.mjs" ); const TEST_ROOT = getRootDirectory(gTestPath).replace( "chrome://mochitests/content", "http://example.com" ); const TEST_ROOT_2 = getRootDirectory(gTestPath).replace( "chrome://mochitests/content", "http://example.org" ); const TEST_PAGE = TEST_ROOT + "test-page.html"; const TEST_PAGE_2 = TEST_ROOT_2 + "test-page.html"; const TEST_PAGE_WITH_IFRAME = TEST_ROOT_2 + "test-page-with-iframe.html"; const TEST_PAGE_WITH_SOUND = TEST_ROOT + "test-page-with-sound.html"; const TEST_PAGE_WITHOUT_AUDIO = TEST_ROOT + "test-page-without-audio.html"; const TEST_PAGE_WITH_NAN_VIDEO_DURATION = TEST_ROOT + "test-page-with-nan-video-duration.html"; const TEST_PAGE_WITH_WEBVTT = TEST_ROOT + "test-page-with-webvtt.html"; const TEST_PAGE_MULTIPLE_CONTEXTS = TEST_ROOT + "test-page-multiple-contexts.html"; const TEST_PAGE_TRANSPARENT_NESTED_IFRAMES = TEST_ROOT + "test-transparent-nested-iframes.html"; const TEST_PAGE_PIP_DISABLED = TEST_ROOT + "test-page-pipDisabled.html"; const WINDOW_TYPE = "Toolkit:PictureInPicture"; const TOGGLE_POSITION_PREF = "media.videocontrols.picture-in-picture.video-toggle.position"; /* As of Bug 1811312, 80% toggle opacity is for the PiP toggle experiment control. */ const DEFAULT_TOGGLE_OPACITY = 0.8; const HAS_USED_PREF = "media.videocontrols.picture-in-picture.video-toggle.has-used"; const SHARED_DATA_KEY = "PictureInPicture:SiteOverrides"; // Used for clearing the size and location of the PiP window const PLAYER_URI = "chrome://global/content/pictureinpicture/player.xhtml"; const ACCEPTABLE_DIFFERENCE = 2; /** * We currently ship with a few different variations of the * Picture-in-Picture toggle. The tests for Picture-in-Picture include tests * that check the style rules of various parts of the toggle. Since each toggle * variation has different style rules, we introduce a structure here to * describe the appearance of the toggle at different stages for the tests. * * The top-level structure looks like this: * * { * rootID (String): The ID of the root element of the toggle. * stages (Object): An Object representing the styles of the toggle at * different stages of its use. Each property represents a different * stage that can be tested. Right now, those stages are: * * hoverVideo: * When the mouse is hovering the video but not the toggle. * * hoverToggle: * When the mouse is hovering both the video and the toggle. * * Both stages must be assigned an Object with the following properties: * * opacities: * This should be set to an Object where the key is a CSS selector for * an element, and the value is a double for what the eventual opacity * of that element should be set to. * * hidden: * This should be set to an Array of CSS selector strings for elements * that should be hidden during a particular stage. * } * * DEFAULT_TOGGLE_STYLES is the set of styles for the default variation of the * toggle. */ const DEFAULT_TOGGLE_STYLES = { rootID: "pictureInPictureToggle", stages: { hoverVideo: { opacities: { ".pip-wrapper": DEFAULT_TOGGLE_OPACITY, }, hidden: [".pip-expanded"], }, hoverToggle: { opacities: { ".pip-wrapper": 1.0, }, hidden: [".pip-expanded"], }, }, }; /** * Given a browser and the ID for a