bcc5473a6d38212d63c28d70050b217a231d4997
[WebKit-https.git] / Source / WebCore / platform / graphics / blackberry / MediaPlayerPrivateBlackBerry.h
1 /*
2  * Copyright (C) 2011 Research In Motion Limited. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #ifndef MediaPlayerPrivateBlackBerry_h
20 #define MediaPlayerPrivateBlackBerry_h
21
22 #if ENABLE(VIDEO)
23 #include "MediaPlayerPrivate.h"
24
25 #include <BlackBerryPlatformMMRPlayer.h>
26
27 namespace BlackBerry {
28 namespace WebKit {
29 class WebPageClient;
30 }
31 }
32
33 namespace WebCore {
34
35 class MediaPlayerPrivate : public MediaPlayerPrivateInterface, public BlackBerry::Platform::IMMRPlayerListener {
36 public:
37     virtual ~MediaPlayerPrivate();
38
39     static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
40     static void registerMediaEngine(MediaEngineRegistrar);
41     static void getSupportedTypes(HashSet<String>&);
42     static MediaPlayer::SupportsType supportsType(const String&, const String&);
43     static void notifyAppActivatedEvent(bool);
44     static void setCertificatePath(const String&);
45
46     virtual void load(const String& url);
47     virtual void cancelLoad();
48
49     virtual void prepareToPlay();
50 #if USE(ACCELERATED_COMPOSITING)
51     virtual PlatformMedia platformMedia() const;
52     virtual PlatformLayer* platformLayer() const;
53     void drawBufferingAnimation(const TransformationMatrix&, int positionLocation, int texCoordLocation);
54 #endif
55
56     virtual void play();
57     virtual void pause();
58
59     virtual bool supportsFullscreen() const;
60
61     virtual IntSize naturalSize() const;
62
63     virtual bool hasVideo() const;
64     virtual bool hasAudio() const;
65
66     virtual void setVisible(bool);
67
68     virtual float duration() const;
69
70     virtual float currentTime() const;
71     virtual void seek(float time);
72     virtual bool seeking() const;
73
74     virtual void setRate(float);
75
76     virtual bool paused() const;
77
78     virtual void setVolume(float);
79
80     virtual MediaPlayer::NetworkState networkState() const;
81     virtual MediaPlayer::ReadyState readyState() const;
82
83     virtual float maxTimeSeekable() const;
84     virtual PassRefPtr<TimeRanges> buffered() const;
85
86     virtual unsigned bytesLoaded() const;
87
88     virtual void setSize(const IntSize&);
89
90     virtual void paint(GraphicsContext*, const IntRect&);
91
92     virtual bool hasAvailableVideoFrame() const;
93
94 #if USE(ACCELERATED_COMPOSITING)
95     // Whether accelerated rendering is supported by the media engine for the current media.
96     virtual bool supportsAcceleratedRendering() const { return true; }
97     // Called when the rendering system flips the into or out of accelerated rendering mode.
98     virtual void acceleratedRenderingStateChanged() { }
99 #endif
100
101     virtual bool hasSingleSecurityOrigin() const;
102
103     virtual MediaPlayer::MovieLoadType movieLoadType() const;
104
105     void resizeSourceDimensions();
106     void setFullscreenWebPageClient(BlackBerry::WebKit::WebPageClient*);
107     BlackBerry::Platform::Graphics::Window* getWindow();
108     BlackBerry::Platform::Graphics::Window* getPeerWindow(const char*) const;
109     int getWindowPosition(unsigned& x, unsigned& y, unsigned& width, unsigned& height) const;
110     const char* mmrContextName();
111     float percentLoaded();
112     unsigned sourceWidth();
113     unsigned sourceHeight();
114     void setAllowPPSVolumeUpdates(bool);
115
116     // IMMRPlayerListener implementation.
117     virtual void onStateChanged(BlackBerry::Platform::MMRPlayer::MpState);
118     virtual void onMediaStatusChanged(BlackBerry::Platform::MMRPlayer::MMRPlayState);
119     virtual void onError(BlackBerry::Platform::MMRPlayer::Error);
120     virtual void onDurationChanged(float);
121     virtual void onTimeChanged(float);
122     virtual void onRateChanged(float);
123     virtual void onVolumeChanged(float);
124     virtual void onPauseStateChanged();
125     virtual void onRepaint();
126     virtual void onSizeChanged();
127     virtual void onPlayNotified();
128     virtual void onPauseNotified();
129     virtual void onWaitMetadataNotified(bool hasFinished, int timeWaited);
130 #if USE(ACCELERATED_COMPOSITING)
131     virtual void onBuffering(bool);
132 #endif
133
134     virtual bool isFullscreen() const;
135     virtual bool isElementPaused() const;
136     virtual bool isTabVisible() const;
137     virtual int showErrorDialog(BlackBerry::Platform::MMRPlayer::Error);
138     virtual BlackBerry::Platform::Graphics::Window* platformWindow();
139
140 private:
141     MediaPlayerPrivate(MediaPlayer*);
142
143     FrameView* frameView() const;
144     void updateStates();
145     String userAgent(const String&) const;
146
147     MediaPlayer* m_webCorePlayer;
148     BlackBerry::Platform::MMRPlayer* m_platformPlayer;
149
150     mutable MediaPlayer::NetworkState m_networkState;
151     MediaPlayer::ReadyState m_readyState;
152
153     BlackBerry::WebKit::WebPageClient* m_fullscreenWebPageClient;
154 #if USE(ACCELERATED_COMPOSITING)
155     void bufferingTimerFired(Timer<MediaPlayerPrivate>*);
156     void setBuffering(bool);
157
158     Timer<MediaPlayerPrivate> m_bufferingTimer;
159     RefPtr<PlatformLayer> m_platformLayer;
160     bool m_showBufferingImage;
161     bool m_mediaIsBuffering;
162 #endif
163
164     void userDrivenSeekTimerFired(Timer<MediaPlayerPrivate>*);
165     Timer<MediaPlayerPrivate> m_userDrivenSeekTimer;
166     float m_lastSeekTime;
167     void waitMetadataTimerFired(Timer<MediaPlayerPrivate>*);
168     Timer<MediaPlayerPrivate> m_waitMetadataTimer;
169     int m_waitMetadataPopDialogCounter;
170 };
171
172 } // namespace WebCore
173
174 #endif // ENABLE(VIDEO)
175 #endif // MediaPlayerPrivateBlackBerry_h