1/*
2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#pragma once
27
28#if ENABLE(MEDIA_CONTROLS_SCRIPT)
29
30#include <wtf/RefCounted.h>
31#include <wtf/Variant.h>
32#include <wtf/Vector.h>
33#include <wtf/text/WTFString.h>
34
35namespace WebCore {
36
37class AudioTrack;
38class AudioTrackList;
39class Element;
40class HTMLMediaElement;
41class MediaControlTextTrackContainerElement;
42class TextTrack;
43class TextTrackList;
44
45class MediaControlsHost : public RefCounted<MediaControlsHost> {
46public:
47 static Ref<MediaControlsHost> create(HTMLMediaElement*);
48 ~MediaControlsHost();
49
50 static const AtomString& automaticKeyword();
51 static const AtomString& forcedOnlyKeyword();
52 static const AtomString& alwaysOnKeyword();
53 static const AtomString& manualKeyword();
54
55 Vector<RefPtr<TextTrack>> sortedTrackListForMenu(TextTrackList&);
56 Vector<RefPtr<AudioTrack>> sortedTrackListForMenu(AudioTrackList&);
57
58 using TextOrAudioTrack = WTF::Variant<RefPtr<TextTrack>, RefPtr<AudioTrack>>;
59 String displayNameForTrack(const Optional<TextOrAudioTrack>&);
60
61 TextTrack* captionMenuOffItem();
62 TextTrack* captionMenuAutomaticItem();
63 AtomString captionDisplayMode() const;
64 void setSelectedTextTrack(TextTrack*);
65 Element* textTrackContainer();
66 void updateTextTrackContainer();
67 bool allowsInlineMediaPlayback() const;
68 bool supportsFullscreen() const;
69 bool isVideoLayerInline() const;
70 bool isInMediaDocument() const;
71 bool userGestureRequired() const;
72 bool shouldForceControlsDisplay() const;
73 void setPreparedToReturnVideoLayerToInline(bool);
74
75 void updateCaptionDisplaySizes();
76 void enteredFullscreen();
77 void exitedFullscreen();
78
79 String externalDeviceDisplayName() const;
80
81 enum class DeviceType { None, Airplay, Tvout };
82 DeviceType externalDeviceType() const;
83
84 bool compactMode() const;
85 void setSimulateCompactMode(bool value) { m_simulateCompactMode = value; }
86
87 bool controlsDependOnPageScaleFactor() const;
88 void setControlsDependOnPageScaleFactor(bool v);
89
90 String generateUUID() const;
91
92 String shadowRootCSSText() const;
93 String base64StringForIconNameAndType(const String& iconName, const String& iconType) const;
94 String formattedStringForDuration(double) const;
95
96private:
97 MediaControlsHost(HTMLMediaElement*);
98
99 HTMLMediaElement* m_mediaElement;
100 RefPtr<MediaControlTextTrackContainerElement> m_textTrackContainer;
101 bool m_simulateCompactMode { false };
102};
103
104}
105
106#endif
107