[iOS] add missing QuickTime plug-in replacement API
[WebKit-https.git] / Source / WebCore / platform / graphics / MediaPlayerPrivate.h
1 /*
2  * Copyright (C) 2009-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 #ifndef MediaPlayerPrivate_h
27 #define MediaPlayerPrivate_h
28
29 #if ENABLE(VIDEO)
30
31 #include "MediaPlayer.h"
32 #include "PlatformTimeRanges.h"
33 #include <wtf/Forward.h>
34 #include <wtf/OwnPtr.h>
35
36 namespace WebCore {
37
38 class IntRect;
39 class IntSize;
40 class PlatformTextTrack;
41
42 class MediaPlayerPrivateInterface {
43     WTF_MAKE_NONCOPYABLE(MediaPlayerPrivateInterface); WTF_MAKE_FAST_ALLOCATED;
44 public:
45     MediaPlayerPrivateInterface() { }
46     virtual ~MediaPlayerPrivateInterface() { }
47
48     virtual void load(const String& url) = 0;
49 #if ENABLE(MEDIA_SOURCE)
50     virtual void load(const String& url, MediaSourcePrivateClient*) = 0;
51 #endif
52     virtual void cancelLoad() = 0;
53     
54     virtual void prepareToPlay() { }
55     virtual PlatformMedia platformMedia() const { return NoPlatformMedia; }
56     virtual PlatformLayer* platformLayer() const { return 0; }
57 #if PLATFORM(IOS)
58     virtual void setVideoFullscreenLayer(PlatformLayer*) { }
59     virtual void setVideoFullscreenFrame(FloatRect) { }
60     virtual void setVideoFullscreenGravity(MediaPlayer::VideoGravity) { }
61
62     virtual NSArray *timedMetadata() const { return 0; }
63     virtual String accessLog() const { return emptyString(); }
64     virtual String errorLog() const { return emptyString(); }
65 #endif
66
67     virtual void play() = 0;
68     virtual void pause() = 0;    
69
70     virtual bool supportsFullscreen() const { return false; }
71     virtual bool supportsSave() const { return false; }
72     virtual bool supportsScanning() const { return false; }
73     virtual bool requiresImmediateCompositing() const { return false; }
74
75     virtual IntSize naturalSize() const = 0;
76
77     virtual bool hasVideo() const = 0;
78     virtual bool hasAudio() const = 0;
79
80     virtual void setVisible(bool) = 0;
81
82     virtual float duration() const { return 0; }
83     virtual double durationDouble() const { return duration(); }
84
85     virtual float currentTime() const { return 0; }
86     virtual double currentTimeDouble() const { return currentTime(); }
87
88     virtual void seek(float) { }
89     virtual void seekDouble(double time) { seek(time); }
90     virtual void seekWithTolerance(double time, double, double) { seekDouble(time); }
91
92     virtual bool seeking() const = 0;
93
94     virtual float startTime() const { return 0; }
95     virtual double startTimeDouble() const { return startTime(); }
96
97     virtual double initialTime() const { return 0; }
98
99     virtual void setRate(float) { }
100     virtual void setRateDouble(double rate) { setRate(rate); }
101
102     virtual void setPreservesPitch(bool) { }
103
104     virtual bool paused() const = 0;
105
106     virtual void setVolume(float) { }
107     virtual void setVolumeDouble(double volume) { return setVolume(volume); }
108 #if PLATFORM(IOS)
109     virtual float volume() const { return 1; }
110 #endif
111
112     virtual bool supportsMuting() const { return false; }
113     virtual void setMuted(bool) { }
114
115     virtual bool hasClosedCaptions() const { return false; }    
116     virtual void setClosedCaptionsVisible(bool) { }
117
118     virtual MediaPlayer::NetworkState networkState() const = 0;
119     virtual MediaPlayer::ReadyState readyState() const = 0;
120
121     virtual std::unique_ptr<PlatformTimeRanges> seekable() const { return maxTimeSeekableDouble() ? PlatformTimeRanges::create(minTimeSeekable(), maxTimeSeekableDouble()) : PlatformTimeRanges::create(); }
122     virtual float maxTimeSeekable() const { return 0; }
123     virtual double maxTimeSeekableDouble() const { return maxTimeSeekable(); }
124     virtual double minTimeSeekable() const { return 0; }
125     virtual std::unique_ptr<PlatformTimeRanges> buffered() const = 0;
126
127     virtual bool didLoadingProgress() const = 0;
128
129     virtual void setSize(const IntSize&) = 0;
130
131     virtual void paint(GraphicsContext*, const IntRect&) = 0;
132
133     virtual void paintCurrentFrameInContext(GraphicsContext* c, const IntRect& r) { paint(c, r); }
134     virtual bool copyVideoTextureToPlatformTexture(GraphicsContext3D*, Platform3DObject, GC3Dint, GC3Denum, GC3Denum, bool, bool) { return false; }
135     virtual PassNativeImagePtr nativeImageForCurrentTime() { return nullptr; }
136
137     virtual void setPreload(MediaPlayer::Preload) { }
138
139     virtual bool hasAvailableVideoFrame() const { return readyState() >= MediaPlayer::HaveCurrentData; }
140
141     virtual bool canLoadPoster() const { return false; }
142     virtual void setPoster(const String&) { }
143
144 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO)
145     virtual void deliverNotification(MediaPlayerProxyNotificationType) { }
146     virtual void setMediaPlayerProxy(WebMediaPlayerProxy*) { }
147     virtual void setControls(bool) { }
148 #endif
149
150 #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || USE(NATIVE_FULLSCREEN_VIDEO)
151     virtual void enterFullscreen() { }
152     virtual void exitFullscreen() { }
153 #endif
154
155 #if ENABLE(IOS_AIRPLAY)
156     virtual bool isCurrentPlaybackTargetWireless() const { return false; }
157
158     virtual String wirelessPlaybackTargetName() const { return emptyString(); }
159     virtual MediaPlayer::WirelessPlaybackTargetType wirelessPlaybackTargetType() const { return MediaPlayer::TargetTypeNone; }
160
161     virtual void showPlaybackTargetPicker() { }
162
163     virtual bool hasWirelessPlaybackTargets() const { return false; }
164
165     virtual bool wirelessVideoPlaybackDisabled() const { return false; }
166     virtual void setWirelessVideoPlaybackDisabled(bool) { }
167
168     virtual void setHasPlaybackTargetAvailabilityListeners(bool) { }
169 #endif
170
171 #if USE(NATIVE_FULLSCREEN_VIDEO)
172     virtual bool canEnterFullscreen() const { return false; }
173 #endif
174
175     // whether accelerated rendering is supported by the media engine for the current media.
176     virtual bool supportsAcceleratedRendering() const { return false; }
177     // called when the rendering system flips the into or out of accelerated rendering mode.
178     virtual void acceleratedRenderingStateChanged() { }
179
180     virtual bool shouldMaintainAspectRatio() const { return true; }
181     virtual void setShouldMaintainAspectRatio(bool) { }
182
183     virtual bool hasSingleSecurityOrigin() const { return false; }
184
185     virtual bool didPassCORSAccessCheck() const { return false; }
186
187     virtual MediaPlayer::MovieLoadType movieLoadType() const { return MediaPlayer::Unknown; }
188
189     virtual void prepareForRendering() { }
190
191     // Time value in the movie's time scale. It is only necessary to override this if the media
192     // engine uses rational numbers to represent media time.
193     virtual float mediaTimeForTimeValue(float timeValue) const { return timeValue; }
194     virtual double mediaTimeForTimeValueDouble(double timeValue) const { return timeValue; }
195
196     // Overide this if it is safe for HTMLMediaElement to cache movie time and report
197     // 'currentTime' as [cached time + elapsed wall time]. Returns the maximum wall time
198     // it is OK to calculate movie time before refreshing the cached time.
199     virtual double maximumDurationToCacheMediaTime() const { return 0; }
200
201     virtual unsigned decodedFrameCount() const { return 0; }
202     virtual unsigned droppedFrameCount() const { return 0; }
203     virtual unsigned audioDecodedByteCount() const { return 0; }
204     virtual unsigned videoDecodedByteCount() const { return 0; }
205
206     void getSitesInMediaCache(Vector<String>&) { }
207     void clearMediaCache() { }
208     void clearMediaCacheForSite(const String&) { }
209
210     virtual void setPrivateBrowsingMode(bool) { }
211
212     virtual String engineDescription() const { return emptyString(); }
213
214 #if ENABLE(WEB_AUDIO)
215     virtual AudioSourceProvider* audioSourceProvider() { return 0; }
216 #endif
217
218 #if ENABLE(ENCRYPTED_MEDIA)
219     virtual MediaPlayer::MediaKeyException addKey(const String&, const unsigned char*, unsigned, const unsigned char*, unsigned, const String&) { return MediaPlayer::KeySystemNotSupported; }
220     virtual MediaPlayer::MediaKeyException generateKeyRequest(const String&, const unsigned char*, unsigned) { return MediaPlayer::KeySystemNotSupported; }
221     virtual MediaPlayer::MediaKeyException cancelKeyRequest(const String&, const String&) { return MediaPlayer::KeySystemNotSupported; }
222 #endif
223
224 #if ENABLE(ENCRYPTED_MEDIA_V2)
225     virtual std::unique_ptr<CDMSession> createSession(const String&) { return nullptr; }
226 #endif
227
228 #if ENABLE(VIDEO_TRACK)
229     virtual bool requiresTextTrackRepresentation() const { return false; }
230     virtual void setTextTrackRepresentation(TextTrackRepresentation*) { }
231 #endif
232
233 #if USE(PLATFORM_TEXT_TRACK_MENU)
234     virtual bool implementsTextTrackControls() const { return false; }
235     virtual PassRefPtr<PlatformTextTrackMenuInterface> textTrackMenu() { return 0; }
236 #endif
237
238 #if USE(GSTREAMER)
239     virtual void simulateAudioInterruption() { }
240 #endif
241
242 #if PLATFORM(IOS)
243     virtual void attributeChanged(const String&, const String&) { }
244     virtual bool readyForPlayback() const { return true; }
245 #endif
246
247     virtual String languageOfPrimaryAudioTrack() const { return emptyString(); }
248
249     virtual size_t extraMemoryCost() const { return 0; }
250     
251     virtual unsigned long long fileSize() const { return 0; }
252
253 #if ENABLE(MEDIA_SOURCE)
254     virtual unsigned long totalVideoFrames() { return 0; }
255     virtual unsigned long droppedVideoFrames() { return 0; }
256     virtual unsigned long corruptedVideoFrames() { return 0; }
257     virtual double totalFrameDelay() { return 0; }
258 #endif
259
260 #if ENABLE(AVF_CAPTIONS)
261     virtual void notifyTrackModeChanged() { }
262 #endif
263 };
264
265 }
266
267 #endif
268 #endif