diff options
Diffstat (limited to 'toolkit/content/TopLevelVideoDocument.js')
-rw-r--r-- | toolkit/content/TopLevelVideoDocument.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/toolkit/content/TopLevelVideoDocument.js b/toolkit/content/TopLevelVideoDocument.js new file mode 100644 index 000000000..5a2b8a857 --- /dev/null +++ b/toolkit/content/TopLevelVideoDocument.js @@ -0,0 +1,48 @@ +/* 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"; + +// <video> is used for top-level audio documents as well +let videoElement = document.getElementsByTagName("video")[0]; + +// 1. Handle fullscreen mode; +// 2. Send keystrokes to the video element if the body element is focused, +// to be received by the event listener in videocontrols.xml. +document.addEventListener("keypress", ev => { + if (ev.synthetic) // prevent recursion + return; + + // Maximize the standalone video when pressing F11, + // but ignore audio elements + if (ev.key == "F11" && videoElement.videoWidth != 0 && videoElement.videoHeight != 0) { + // If we're in browser fullscreen mode, it means the user pressed F11 + // while browser chrome or another tab had focus. + // Don't break leaving that mode, so do nothing here. + if (window.fullScreen) { + return; + } + + // If we're not in broser fullscreen mode, prevent entering into that, + // so we don't end up there after pressing Esc. + ev.preventDefault(); + ev.stopPropagation(); + + if (!document.mozFullScreenElement) { + videoElement.mozRequestFullScreen(); + } else { + document.mozCancelFullScreen(); + } + return; + } + + // Check if the video element is focused, so it already receives + // keystrokes, and don't send it another one from here. + if (document.activeElement == videoElement) + return; + + let newEvent = new KeyboardEvent("keypress", ev); + newEvent.synthetic = true; + videoElement.dispatchEvent(newEvent); +}); |