Fix the build with newer clang and other custom configuration options
[WebKit-https.git] / Source / WebCore / platform / mac / WebVideoFullscreenInterfaceMac.mm
1 /*
2  * Copyright (C) 2016 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 #import "config.h"
27 #import "WebVideoFullscreenInterfaceMac.h"
28
29 #if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
30
31 #import "AVKitSPI.h"
32 #import "IntRect.h"
33 #import "MediaTimeAVFoundation.h"
34 #import "TimeRanges.h"
35 #import "WebPlaybackSessionInterfaceMac.h"
36 #import "WebVideoFullscreenChangeObserver.h"
37 #import "WebVideoFullscreenModel.h"
38 #import <AVFoundation/AVTime.h>
39
40 #import "CoreMediaSoftLink.h"
41
42 SOFT_LINK_FRAMEWORK_OPTIONAL(AVKit)
43 SOFT_LINK_CLASS_OPTIONAL(AVKit, AVValueTiming)
44
45 #if USE(APPLE_INTERNAL_SDK)
46 #include <WebKitAdditions/WebVideoFullscreenInterfaceMacAdditions.mm>
47 #endif
48
49 namespace WebCore {
50
51 WebVideoFullscreenInterfaceMac::WebVideoFullscreenInterfaceMac(WebPlaybackSessionInterfaceMac& playbackSessionInterface)
52     : m_playbackSessionInterface(playbackSessionInterface)
53 {
54     m_playbackSessionInterface->setClient(this);
55 }
56
57 WebVideoFullscreenInterfaceMac::~WebVideoFullscreenInterfaceMac()
58 {
59     if (m_playbackSessionInterface->client() == this)
60         m_playbackSessionInterface->setClient(nullptr);
61 }
62
63 void WebVideoFullscreenInterfaceMac::setWebVideoFullscreenModel(WebVideoFullscreenModel* model)
64 {
65     m_videoFullscreenModel = model;
66 }
67
68 void WebVideoFullscreenInterfaceMac::setWebVideoFullscreenChangeObserver(WebVideoFullscreenChangeObserver* observer)
69 {
70     m_fullscreenChangeObserver = observer;
71 }
72
73 void WebVideoFullscreenInterfaceMac::setMode(HTMLMediaElementEnums::VideoFullscreenMode mode)
74 {
75     HTMLMediaElementEnums::VideoFullscreenMode newMode = m_mode | mode;
76     if (m_mode == newMode)
77         return;
78
79     m_mode = newMode;
80     if (m_videoFullscreenModel)
81         m_videoFullscreenModel->fullscreenModeChanged(m_mode);
82 }
83
84 void WebVideoFullscreenInterfaceMac::clearMode(HTMLMediaElementEnums::VideoFullscreenMode mode)
85 {
86     HTMLMediaElementEnums::VideoFullscreenMode newMode = m_mode & ~mode;
87     if (m_mode == newMode)
88         return;
89
90     m_mode = newMode;
91     if (m_videoFullscreenModel)
92         m_videoFullscreenModel->fullscreenModeChanged(m_mode);
93 }
94
95 void WebVideoFullscreenInterfaceMac::setDuration(double duration)
96 {
97     m_playbackSessionInterface->setDuration(duration);
98 }
99
100 void WebVideoFullscreenInterfaceMac::setCurrentTime(double currentTime, double anchorTime)
101 {
102     m_playbackSessionInterface->setCurrentTime(currentTime, anchorTime);
103 }
104
105 void WebVideoFullscreenInterfaceMac::setRate(bool isPlaying, float playbackRate)
106 {
107     m_playbackSessionInterface->setRate(isPlaying, playbackRate);
108 }
109
110 void WebVideoFullscreenInterfaceMac::rateChanged(bool isPlaying, float playbackRate)
111 {
112 #if USE(APPLE_INTERNAL_SDK)
113     [videoFullscreenInterfaceObjC() updateIsPlaying:isPlaying newPlaybackRate:playbackRate];
114 #else
115     UNUSED_PARAM(isPlaying);
116     UNUSED_PARAM(playbackRate);
117 #endif
118 }
119
120 void WebVideoFullscreenInterfaceMac::setSeekableRanges(const TimeRanges& timeRanges)
121 {
122     m_playbackSessionInterface->setSeekableRanges(timeRanges);
123 }
124
125 void WebVideoFullscreenInterfaceMac::setAudioMediaSelectionOptions(const Vector<WTF::String>& options, uint64_t selectedIndex)
126 {
127     m_playbackSessionInterface->setAudioMediaSelectionOptions(options, selectedIndex);
128 }
129
130 void WebVideoFullscreenInterfaceMac::setLegibleMediaSelectionOptions(const Vector<WTF::String>& options, uint64_t selectedIndex)
131 {
132     m_playbackSessionInterface->setLegibleMediaSelectionOptions(options, selectedIndex);
133 }
134
135 void WebVideoFullscreenInterfaceMac::ensureControlsManager()
136 {
137     m_playbackSessionInterface->ensureControlsManager();
138 }
139
140 #if !USE(APPLE_INTERNAL_SDK)
141 void WebVideoFullscreenInterfaceMac::setupFullscreen(NSView&, const IntRect&, NSWindow *, HTMLMediaElementEnums::VideoFullscreenMode, bool)
142 {
143 }
144
145 void WebVideoFullscreenInterfaceMac::enterFullscreen()
146 {
147 }
148
149 void WebVideoFullscreenInterfaceMac::exitFullscreen(const IntRect&, NSWindow *)
150 {
151 }
152
153 void WebVideoFullscreenInterfaceMac::exitFullscreenWithoutAnimationToMode(HTMLMediaElementEnums::VideoFullscreenMode)
154 {
155 }
156
157 void WebVideoFullscreenInterfaceMac::cleanupFullscreen()
158 {
159 }
160
161 void WebVideoFullscreenInterfaceMac::invalidate()
162 {
163 }
164
165 void WebVideoFullscreenInterfaceMac::preparedToReturnToInline(bool, const IntRect&, NSWindow *)
166 {
167 }
168
169 void WebVideoFullscreenInterfaceMac::setVideoDimensions(bool, float, float)
170 {
171 }
172
173 bool WebVideoFullscreenInterfaceMac::isPlayingVideoInEnhancedFullscreen() const
174 {
175     return false;
176 }
177
178 void WebVideoFullscreenInterfaceMac::setExternalPlayback(bool, ExternalPlaybackTargetType, String)
179 {
180 }
181
182 bool supportsPictureInPicture()
183 {
184     return false;
185 }
186 #endif
187
188 }
189
190 #endif