https://bugs.webkit.org/show_bug.cgi?id=93052
Reviewed by Eric Carlson.
There was a regression in the Chromium port (http://crbug.com/139511) that revealed we didn't
have a layout test for suspend events. Upon further investigation it appeared we also had a bug
where we didn't fire the suspend event when a media engine reported they had completely loaded
the media.
Covered by new test http/tests/media/video-load-suspend.html.
Source/WebCore:
* html/HTMLMediaElement.cpp: Move firing of suspend event to changeNetworkStateFromLoadingToIdle
(WebCore::HTMLMediaElement::setNetworkState):
(WebCore::HTMLMediaElement::changeNetworkStateFromLoadingToIdle):
LayoutTests:
* http/tests/media/video-load-suspend-expected.txt: Added.
* http/tests/media/video-load-suspend.html: Added.
* media/event-attributes-expected.txt: Updated to include suspend event.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@125054
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-08-08 Andrew Scherkus <scherkus@chromium.org>
+
+ Fire suspend event whenever network state is set to NETWORK_IDLE.
+ https://bugs.webkit.org/show_bug.cgi?id=93052
+
+ Reviewed by Eric Carlson.
+
+ There was a regression in the Chromium port (http://crbug.com/139511) that revealed we didn't
+ have a layout test for suspend events. Upon further investigation it appeared we also had a bug
+ where we didn't fire the suspend event when a media engine reported they had completely loaded
+ the media.
+
+ Covered by new test http/tests/media/video-load-suspend.html.
+
+ * http/tests/media/video-load-suspend-expected.txt: Added.
+ * http/tests/media/video-load-suspend.html: Added.
+ * media/event-attributes-expected.txt: Updated to include suspend event.
+
2012-08-08 Tom Sepez <tsepez@chromium.org>
Video element image loader must persist after element detach.
--- /dev/null
+Test that the load eventually suspends and returns to NETWORK_IDLE.
+
+RUN(video.src = file)
+EVENT(loadstart)
+EVENT(suspend)
+EXPECTED (video.networkState == '1') OK
+END OF TEST
+
--- /dev/null
+<html>
+<head>
+<script src=../../media-resources/media-file.js></script>
+<script src=../../media-resources/video-test.js></script>
+<script>
+ var file = findMediaFile("video", "http://127.0.0.1:8000/resources/test");
+
+ function init()
+ {
+ findMediaElement();
+ run("video.src = file");
+ waitForEvent('loadstart', onLoadStart);
+ }
+
+ function onLoadStart()
+ {
+ waitForEvent('suspend', onSuspend);
+ }
+
+ function onSuspend()
+ {
+ testExpected("video.networkState", HTMLMediaElement.NETWORK_IDLE, "==");
+ endTest();
+ }
+</script>
+</head>
+<body onload="init()">
+ <p>Test that the load eventually suspends and returns to NETWORK_IDLE.</p>
+ <video></video>
+</body>
+</html>
EVENT(loadstart)
+EVENT(suspend)
EVENT(durationchange)
EVENT(loadedmetadata)
EVENT(loadeddata)
+2012-08-08 Andrew Scherkus <scherkus@chromium.org>
+
+ Fire suspend event whenever network state is set to NETWORK_IDLE.
+ https://bugs.webkit.org/show_bug.cgi?id=93052
+
+ Reviewed by Eric Carlson.
+
+ There was a regression in the Chromium port (http://crbug.com/139511) that revealed we didn't
+ have a layout test for suspend events. Upon further investigation it appeared we also had a bug
+ where we didn't fire the suspend event when a media engine reported they had completely loaded
+ the media.
+
+ Covered by new test http/tests/media/video-load-suspend.html.
+
+ * html/HTMLMediaElement.cpp: Move firing of suspend event to changeNetworkStateFromLoadingToIdle
+ (WebCore::HTMLMediaElement::setNetworkState):
+ (WebCore::HTMLMediaElement::changeNetworkStateFromLoadingToIdle):
+
2012-08-08 Tom Sepez <tsepez@chromium.org>
Video element image loader must persist after element detach.
if (state == MediaPlayer::Idle) {
if (m_networkState > NETWORK_IDLE) {
changeNetworkStateFromLoadingToIdle();
- scheduleEvent(eventNames().suspendEvent);
setShouldDelayLoadEvent(false);
} else {
m_networkState = NETWORK_IDLE;
// Schedule one last progress event so we guarantee that at least one is fired
// for files that load very quickly.
scheduleEvent(eventNames().progressEvent);
+ scheduleEvent(eventNames().suspendEvent);
m_networkState = NETWORK_IDLE;
}