[Mac] Update AirPlay handling
[WebKit-https.git] / Source / WebCore / html / HTMLMediaSession.h
1 /*
2  * Copyright (C) 2014-2015 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef HTMLMediaSession_h
27 #define HTMLMediaSession_h
28
29 #if ENABLE(VIDEO)
30
31 #include "MediaPlayer.h"
32 #include "MediaSession.h"
33 #include "Timer.h"
34
35 namespace WebCore {
36
37 class Document;
38 class HTMLMediaElement;
39 class SourceBuffer;
40
41 class HTMLMediaSession final : public MediaSession {
42 public:
43     explicit HTMLMediaSession(MediaSessionClient&);
44     virtual ~HTMLMediaSession() { }
45
46     void registerWithDocument(Document&);
47     void unregisterWithDocument(Document&);
48
49     bool playbackPermitted(const HTMLMediaElement&) const;
50     bool dataLoadingPermitted(const HTMLMediaElement&) const;
51     bool fullscreenPermitted(const HTMLMediaElement&) const;
52     bool pageAllowsDataLoading(const HTMLMediaElement&) const;
53     bool pageAllowsPlaybackAfterResuming(const HTMLMediaElement&) const;
54
55 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
56     bool showingPlaybackTargetPickerPermitted(const HTMLMediaElement&) const;
57     bool currentPlaybackTargetIsWireless(const HTMLMediaElement&) const;
58     void showPlaybackTargetPicker(const HTMLMediaElement&);
59     bool hasWirelessPlaybackTargets(const HTMLMediaElement&) const;
60
61     bool wirelessVideoPlaybackDisabled(const HTMLMediaElement&) const;
62     void setWirelessVideoPlaybackDisabled(const HTMLMediaElement&, bool);
63
64     void setHasPlaybackTargetAvailabilityListeners(const HTMLMediaElement&, bool);
65 #endif
66
67     bool requiresFullscreenForVideoPlayback(const HTMLMediaElement&) const;
68     WEBCORE_EXPORT bool allowsAlternateFullscreen(const HTMLMediaElement&) const;
69     MediaPlayer::Preload effectivePreloadForElement(const HTMLMediaElement&) const;
70
71     void applyMediaPlayerRestrictions(const HTMLMediaElement&);
72
73     // Restrictions to modify default behaviors.
74     enum BehaviorRestrictionFlags {
75         NoRestrictions = 0,
76         RequireUserGestureForLoad = 1 << 0,
77         RequireUserGestureForRateChange = 1 << 1,
78         RequireUserGestureForFullscreen = 1 << 2,
79         RequirePageConsentToLoadMedia = 1 << 3,
80         RequirePageConsentToResumeMedia = 1 << 4,
81 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
82         RequireUserGestureToShowPlaybackTargetPicker = 1 << 5,
83         WirelessVideoPlaybackDisabled =  1 << 6,
84 #endif
85     };
86     typedef unsigned BehaviorRestrictions;
87
88     void addBehaviorRestriction(BehaviorRestrictions);
89     void removeBehaviorRestriction(BehaviorRestrictions);
90
91 #if ENABLE(MEDIA_SOURCE)
92     size_t maximumMediaSourceBufferSize(const SourceBuffer&) const;
93 #endif
94
95 private:
96
97 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
98     void targetAvailabilityChangedTimerFired();
99
100     // MediaPlaybackTargetPickerClient
101     virtual void didChoosePlaybackTarget(MediaPlaybackTarget&) override;
102     virtual void externalOutputDeviceAvailableDidChange(bool) const override;
103     virtual bool requiresPlaybackTargetRouteMonitoring() const override;
104     virtual bool requestedPlaybackTargetPicker() const override { return m_haveRequestedPlaybackTargetPicker; }
105 #endif
106
107     BehaviorRestrictions m_restrictions;
108
109 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
110     mutable Timer m_targetAvailabilityChangedTimer;
111     bool m_hasPlaybackTargetAvailabilityListeners { false };
112     mutable bool m_hasPlaybackTargets { false };
113     mutable bool m_haveRequestedPlaybackTargetPicker { false };
114 #endif
115 };
116
117 }
118
119 #endif // MediaSession_h
120
121 #endif // ENABLE(VIDEO)