summaryrefslogtreecommitdiffstats
path: root/mobile/android/modules/geckoview/MediaUtils.sys.mjs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /mobile/android/modules/geckoview/MediaUtils.sys.mjs
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/modules/geckoview/MediaUtils.sys.mjs')
-rw-r--r--mobile/android/modules/geckoview/MediaUtils.sys.mjs79
1 files changed, 79 insertions, 0 deletions
diff --git a/mobile/android/modules/geckoview/MediaUtils.sys.mjs b/mobile/android/modules/geckoview/MediaUtils.sys.mjs
new file mode 100644
index 0000000000..81dc35a567
--- /dev/null
+++ b/mobile/android/modules/geckoview/MediaUtils.sys.mjs
@@ -0,0 +1,79 @@
+/* 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/. */
+
+export const MediaUtils = {
+ getMetadata(aElement) {
+ if (!aElement) {
+ return null;
+ }
+ return {
+ src: aElement.currentSrc ?? aElement.src,
+ width: aElement.videoWidth ?? 0,
+ height: aElement.videoHeight ?? 0,
+ duration: aElement.duration,
+ seekable: !!aElement.seekable,
+ audioTrackCount:
+ aElement.audioTracks?.length ??
+ aElement.mozHasAudio ??
+ aElement.webkitAudioDecodedByteCount ??
+ MediaUtils.isAudioElement(aElement)
+ ? 1
+ : 0,
+ videoTrackCount:
+ aElement.videoTracks?.length ?? MediaUtils.isVideoElement(aElement)
+ ? 1
+ : 0,
+ };
+ },
+
+ isVideoElement(aElement) {
+ return (
+ aElement && ChromeUtils.getClassName(aElement) === "HTMLVideoElement"
+ );
+ },
+
+ isAudioElement(aElement) {
+ return (
+ aElement && ChromeUtils.getClassName(aElement) === "HTMLAudioElement"
+ );
+ },
+
+ isMediaElement(aElement) {
+ return (
+ MediaUtils.isVideoElement(aElement) || MediaUtils.isAudioElement(aElement)
+ );
+ },
+
+ findMediaElement(aElement) {
+ return (
+ MediaUtils.findVideoElement(aElement) ??
+ MediaUtils.findAudioElement(aElement)
+ );
+ },
+
+ findVideoElement(aElement) {
+ if (!aElement) {
+ return null;
+ }
+ if (MediaUtils.isVideoElement(aElement)) {
+ return aElement;
+ }
+ const childrenMedia = aElement.getElementsByTagName("video");
+ if (childrenMedia && childrenMedia.length) {
+ return childrenMedia[0];
+ }
+ return null;
+ },
+
+ findAudioElement(aElement) {
+ if (!aElement || MediaUtils.isAudioElement(aElement)) {
+ return aElement;
+ }
+ const childrenMedia = aElement.getElementsByTagName("audio");
+ if (childrenMedia && childrenMedia.length) {
+ return childrenMedia[0];
+ }
+ return null;
+ },
+};