- Revision
- 115661
- Author
- [email protected]
- Date
- 2012-04-30 13:27:35 -0700 (Mon, 30 Apr 2012)
Log Message
Expose a flag so that fullscreen video on android can work with FULLSCREEN_API
https://bugs.webkit.org/show_bug.cgi?id=84414
Patch by Min Qin <[email protected]> on 2012-04-30
Reviewed by Darin Fisher.
Source/WebCore:
No tests, just exposing the flag, and will be used by android later.
Sorry, there is a merge error during the previous commit, resolved now
* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::setControls):
(WebCore):
(WebCore::MediaPlayer::enterFullscreen):
(WebCore::MediaPlayer::exitFullscreen):
* platform/graphics/MediaPlayer.h:
(MediaPlayer):
* platform/graphics/MediaPlayerPrivate.h:
(MediaPlayerPrivateInterface):
(WebCore::MediaPlayerPrivateInterface::enterFullscreen):
Source/WebKit/chromium:
On android, the fullscreen video was implemented by passing a java
surfaceView to an android mediaplayer class.
The implementation of that logic should happen in WebKit::WebMediaPlayer.
This change makes it possble for WebViewImpl::enterFullScreenForElement()
to call WebMediaPlayer->enterFullscreen(), thus solving the issue.
Sorry, there is a merge error during the previous commit, resolved now
No new tests. This just exposes the flag so later it can be used by android.
* features.gypi:
* public/WebMediaPlayer.h:
(WebMediaPlayer):
(WebKit::WebMediaPlayer::enterFullscreen):
(WebKit::WebMediaPlayer::exitFullscreen):
* src/WebMediaPlayerClientImpl.cpp:
(WebKit):
(WebKit::WebMediaPlayerClientImpl::enterFullscreen):
(WebKit::WebMediaPlayerClientImpl::exitFullscreen):
* src/WebMediaPlayerClientImpl.h:
(WebMediaPlayerClientImpl):
* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::enterFullScreenForElement):
(WebKit::WebViewImpl::exitFullScreenForElement):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (115660 => 115661)
--- trunk/Source/WebCore/ChangeLog 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebCore/ChangeLog 2012-04-30 20:27:35 UTC (rev 115661)
@@ -1,3 +1,24 @@
+2012-04-30 Min Qin <[email protected]>
+
+ Expose a flag so that fullscreen video on android can work with FULLSCREEN_API
+ https://bugs.webkit.org/show_bug.cgi?id=84414
+
+ Reviewed by Darin Fisher.
+
+ No tests, just exposing the flag, and will be used by android later.
+ Sorry, there is a merge error during the previous commit, resolved now
+
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::MediaPlayer::setControls):
+ (WebCore):
+ (WebCore::MediaPlayer::enterFullscreen):
+ (WebCore::MediaPlayer::exitFullscreen):
+ * platform/graphics/MediaPlayer.h:
+ (MediaPlayer):
+ * platform/graphics/MediaPlayerPrivate.h:
+ (MediaPlayerPrivateInterface):
+ (WebCore::MediaPlayerPrivateInterface::enterFullscreen):
+
2012-04-30 Nate Chapin <[email protected]>
Move more of committing and starting to write a Document
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (115660 => 115661)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2012-04-30 20:27:35 UTC (rev 115661)
@@ -766,17 +766,19 @@
void MediaPlayer::setControls(bool controls)
{
m_private->setControls(controls);
-}
+}
+#endif
-void MediaPlayer::enterFullscreen()
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || ENABLE(NATIVE_FULLSCREEN_VIDEO)
+bool MediaPlayer::enterFullscreen() const
{
- m_private->enterFullscreen();
-}
+ return m_private->enterFullscreen();
+}
void MediaPlayer::exitFullscreen()
{
m_private->exitFullscreen();
-}
+}
#endif
#if USE(ACCELERATED_COMPOSITING)
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (115660 => 115661)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2012-04-30 20:27:35 UTC (rev 115661)
@@ -324,7 +324,10 @@
void deliverNotification(MediaPlayerProxyNotificationType notification);
void setMediaPlayerProxy(WebMediaPlayerProxy* proxy);
void setControls(bool);
- void enterFullscreen();
+#endif
+
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || ENABLE(NATIVE_FULLSCREEN_VIDEO)
+ bool enterFullscreen() const;
void exitFullscreen();
#endif
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h (115660 => 115661)
--- trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2012-04-30 20:27:35 UTC (rev 115661)
@@ -115,7 +115,10 @@
virtual void deliverNotification(MediaPlayerProxyNotificationType) = 0;
virtual void setMediaPlayerProxy(WebMediaPlayerProxy*) = 0;
virtual void setControls(bool) { }
- virtual void enterFullscreen() { }
+#endif
+
+#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || ENABLE(NATIVE_FULLSCREEN_VIDEO)
+ virtual bool enterFullscreen() const { return false; }
virtual void exitFullscreen() { }
#endif
Modified: trunk/Source/WebKit/chromium/ChangeLog (115660 => 115661)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-04-30 20:27:35 UTC (rev 115661)
@@ -1,3 +1,35 @@
+2012-04-30 Min Qin <[email protected]>
+
+ Expose a flag so that fullscreen video on android can work with FULLSCREEN_API
+ https://bugs.webkit.org/show_bug.cgi?id=84414
+
+ Reviewed by Darin Fisher.
+
+ On android, the fullscreen video was implemented by passing a java
+ surfaceView to an android mediaplayer class.
+ The implementation of that logic should happen in WebKit::WebMediaPlayer.
+ This change makes it possble for WebViewImpl::enterFullScreenForElement()
+ to call WebMediaPlayer->enterFullscreen(), thus solving the issue.
+
+ Sorry, there is a merge error during the previous commit, resolved now
+
+ No new tests. This just exposes the flag so later it can be used by android.
+
+ * features.gypi:
+ * public/WebMediaPlayer.h:
+ (WebMediaPlayer):
+ (WebKit::WebMediaPlayer::enterFullscreen):
+ (WebKit::WebMediaPlayer::exitFullscreen):
+ * src/WebMediaPlayerClientImpl.cpp:
+ (WebKit):
+ (WebKit::WebMediaPlayerClientImpl::enterFullscreen):
+ (WebKit::WebMediaPlayerClientImpl::exitFullscreen):
+ * src/WebMediaPlayerClientImpl.h:
+ (WebMediaPlayerClientImpl):
+ * src/WebViewImpl.cpp:
+ (WebKit::WebViewImpl::enterFullScreenForElement):
+ (WebKit::WebViewImpl::exitFullScreenForElement):
+
2012-04-30 Gavin Peters <[email protected]>
Unreviewed. Rolled DEPS.
Modified: trunk/Source/WebKit/chromium/features.gypi (115660 => 115661)
--- trunk/Source/WebKit/chromium/features.gypi 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/features.gypi 2012-04-30 20:27:35 UTC (rev 115661)
@@ -136,12 +136,14 @@
['OS=="android"', {
'feature_defines': [
'ENABLE_CALENDAR_PICKER=0',
+ 'ENABLE_NATIVE_FULLSCREEN_VIDEO=1',
'ENABLE_PAGE_POPUP=0',
'ENABLE_WEB_AUDIO=0',
],
}, {
'feature_defines': [
'ENABLE_CALENDAR_PICKER=1',
+ 'ENABLE_NATIVE_FULLSCREEN_VIDEO=0',
'ENABLE_PAGE_POPUP=1',
'ENABLE_WEB_AUDIO=1',
],
Modified: trunk/Source/WebKit/chromium/public/WebMediaPlayer.h (115660 => 115661)
--- trunk/Source/WebKit/chromium/public/WebMediaPlayer.h 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/public/WebMediaPlayer.h 2012-04-30 20:27:35 UTC (rev 115661)
@@ -183,6 +183,11 @@
virtual MediaKeyException generateKeyRequest(const WebString& keySystem, const unsigned char* initData, unsigned initDataLength) { return MediaKeyExceptionKeySystemNotSupported; }
virtual MediaKeyException addKey(const WebString& keySystem, const unsigned char* key, unsigned keyLength, const unsigned char* initData, unsigned initDataLength, const WebString& sessionId) { return MediaKeyExceptionKeySystemNotSupported; }
virtual MediaKeyException cancelKeyRequest(const WebString& keySystem, const WebString& sessionId) { return MediaKeyExceptionKeySystemNotSupported; }
+
+ // Instuct WebMediaPlayer to enter/exit fullscreen.
+ // Returns true if the player can enter fullscreen.
+ virtual bool enterFullscreen() { return false; }
+ virtual void exitFullscreen() { }
};
} // namespace WebKit
Modified: trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp (115660 => 115661)
--- trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp 2012-04-30 20:27:35 UTC (rev 115661)
@@ -339,6 +339,21 @@
m_webMediaPlayer->pause();
}
+#if ENABLE(NATIVE_FULLSCREEN_VIDEO)
+bool WebMediaPlayerClientImpl::enterFullscreen() const
+{
+ if (m_webMediaPlayer)
+ return m_webMediaPlayer->enterFullscreen();
+ return false;
+}
+
+void WebMediaPlayerClientImpl::exitFullscreen()
+{
+ if (m_webMediaPlayer)
+ m_webMediaPlayer->exitFullscreen();
+}
+#endif
+
#if ENABLE(MEDIA_SOURCE)
WebCore::MediaPlayer::AddIdStatus WebMediaPlayerClientImpl::sourceAddId(const String& id, const String& type)
{
Modified: trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h (115660 => 115661)
--- trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h 2012-04-30 20:27:35 UTC (rev 115661)
@@ -134,6 +134,10 @@
virtual unsigned droppedFrameCount() const;
virtual unsigned audioDecodedByteCount() const;
virtual unsigned videoDecodedByteCount() const;
+#if ENABLE(NATIVE_FULLSCREEN_VIDEO)
+ virtual bool enterFullscreen() const;
+ virtual void exitFullscreen();
+#endif
#if ENABLE(WEB_AUDIO)
virtual WebCore::AudioSourceProvider* audioSourceProvider();
Modified: trunk/Source/WebKit/chromium/src/WebViewImpl.cpp (115660 => 115661)
--- trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2012-04-30 20:20:47 UTC (rev 115660)
+++ trunk/Source/WebKit/chromium/src/WebViewImpl.cpp 2012-04-30 20:27:35 UTC (rev 115661)
@@ -1581,6 +1581,15 @@
return;
}
+#if ENABLE(NATIVE_FULLSCREEN_VIDEO)
+ if (element && element->isMediaElement()) {
+ HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(element);
+ if (mediaElement->player() && mediaElement->player()->enterFullscreen())
+ m_provisionalFullScreenElement = element;
+ return;
+ }
+#endif
+
// We need to transition to fullscreen mode.
if (m_client && m_client->enterFullScreen())
m_provisionalFullScreenElement = element;
@@ -1591,6 +1600,14 @@
// The client is exiting full screen, so don't send a notification.
if (m_isCancelingFullScreen)
return;
+#if ENABLE(NATIVE_FULLSCREEN_VIDEO)
+ if (element && element->isMediaElement()) {
+ HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(element);
+ if (mediaElement->player())
+ mediaElement->player()->exitFullscreen();
+ return;
+ }
+#endif
if (m_client)
m_client->exitFullScreen();
}