Title: [113495] trunk
Revision
113495
Author
[email protected]
Date
2012-04-06 14:19:26 -0700 (Fri, 06 Apr 2012)

Log Message

Tools: Enable MediaSource feature for DumpRenderTree so
MediaSource LayoutTests will pass for Chromium.
https://bugs.webkit.org/show_bug.cgi?id=83053

Patch by Aaron Colwell <[email protected]> on 2012-04-06
Reviewed by Dimitri Glazkov.

* DumpRenderTree/chromium/TestShell.cpp:
(TestShell::TestShell):

LayoutTests: Fix MediaSource LayoutTests to work with the new XHR behavior
that requires asynchronous requests for the 'arraybuffer'
responseType.
https://bugs.webkit.org/show_bug.cgi?id=83053

Patch by Aaron Colwell <[email protected]> on 2012-04-06
Reviewed by Dimitri Glazkov.

* http/tests/media/media-source/webm/video-media-source-errors.html:
* http/tests/media/media-source/webm/video-media-source-play.html:
* http/tests/media/media-source/webm/video-media-source-seek.html:
* http/tests/media/media-source/webm/video-media-source-state-changes.html:
* http/tests/media/media-source/webm/webm-media-source.js:
(getData.request.onload):
(createClusterGetFunction.return.if):
(createClusterGetFunction):
(loadWebMData):
(getCluster):
(appendCluster):
(getReadyStateName):
(expectSourceState):
(expectReadyState):
* platform/chromium/test_expectations.txt:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (113494 => 113495)


--- trunk/LayoutTests/ChangeLog	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/ChangeLog	2012-04-06 21:19:26 UTC (rev 113495)
@@ -1,3 +1,28 @@
+2012-04-06  Aaron Colwell  <[email protected]>
+
+        Fix MediaSource LayoutTests to work with the new XHR behavior
+        that requires asynchronous requests for the 'arraybuffer'
+        responseType.
+        https://bugs.webkit.org/show_bug.cgi?id=83053
+
+        Reviewed by Dimitri Glazkov.
+
+        * http/tests/media/media-source/webm/video-media-source-errors.html:
+        * http/tests/media/media-source/webm/video-media-source-play.html:
+        * http/tests/media/media-source/webm/video-media-source-seek.html:
+        * http/tests/media/media-source/webm/video-media-source-state-changes.html:
+        * http/tests/media/media-source/webm/webm-media-source.js:
+        (getData.request.onload):
+        (createClusterGetFunction.return.if):
+        (createClusterGetFunction):
+        (loadWebMData):
+        (getCluster):
+        (appendCluster):
+        (getReadyStateName):
+        (expectSourceState):
+        (expectReadyState):
+        * platform/chromium/test_expectations.txt:
+
 2012-04-06  James Robinson  <[email protected]>
 
         WebGL content swapped at wrong time in threaded compositing mode

Modified: trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-errors.html (113494 => 113495)


--- trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-errors.html	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-errors.html	2012-04-06 21:19:26 UTC (rev 113495)
@@ -158,7 +158,14 @@
                 waitForEvent('emptied');
 
                 video.addEventListener('error', onError);
-                runNextTestCase(video);
+
+                loadWebMData(function(success) {
+                    if (!success) {
+                        failTest("Failed to load WebM data");
+                        return;
+                    }
+                    runNextTestCase(video);
+                });
             }
         </script>
     </head>

Modified: trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-play.html (113494 => 113495)


--- trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-play.html	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-play.html	2012-04-06 21:19:26 UTC (rev 113495)
@@ -24,7 +24,13 @@
 
                 video.addEventListener('webkitsourceopen', onSourceOpen);
 
-                setSrcToMediaSourceURL(video);
+                loadWebMData(function(success) {
+                    if (!success) {
+                        failTest("Failed to load WebM data");
+                        return;
+                    }
+                    setSrcToMediaSourceURL(video);
+                });
             }
         </script>
     </head>

Modified: trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-seek.html (113494 => 113495)


--- trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-seek.html	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-seek.html	2012-04-06 21:19:26 UTC (rev 113495)
@@ -68,7 +68,13 @@
                 video.addEventListener('seeking', onSeeking);
                 video.addEventListener('seeked', onSeeked);
 
-                setSrcToMediaSourceURL(video);
+                loadWebMData(function(success) {
+                    if (!success) {
+                        failTest("Failed to load WebM data");
+                        return;
+                    }
+                    setSrcToMediaSourceURL(video);
+                });
             }
          </script>
     </head>

Modified: trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-state-changes.html (113494 => 113495)


--- trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-state-changes.html	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/http/tests/media/media-source/webm/video-media-source-state-changes.html	2012-04-06 21:19:26 UTC (rev 113495)
@@ -60,7 +60,15 @@
                 videoTag.removeEventListener('webkitsourceended', onFirstSourceEnded);
 
                 expectSourceState(videoTag, videoTag.SOURCE_ENDED);
+                expectReadyState(videoTag, HTMLMediaElement.HAVE_NOTHING);
 
+                videoTag.addEventListener('playing', triggerFirstSeek);
+            }
+
+            function triggerFirstSeek(event) {
+                var videoTag = event.target;
+                videoTag.removeEventListener('playing', triggerFirstSeek);
+
                 // Now that we have appended all of the clusters and ended the stream,
                 // lets do a seek to test the SOURCE_ENDED -> SOURCE_OPEN transition.
                 videoTag.addEventListener('seeking', onFirstSeeking);
@@ -146,7 +154,15 @@
                 videoTag.removeEventListener('webkitsourceended', onSecondSourceEnded);
 
                 expectSourceState(videoTag, HTMLMediaElement.SOURCE_ENDED);
+                expectReadyState(videoTag, HTMLMediaElement.HAVE_NOTHING);
 
+                videoTag.addEventListener('playing', triggerSecondSourceClose);
+            }
+
+            function triggerSecondSourceClose(event) {
+                var videoTag = event.target;
+                videoTag.removeEventListener('playing', triggerSecondSourceClose);
+
                 // Test SOURCE_ENDED -> SOURCE_CLOSED -> SOURCE_OPEN transition path.
                 videoTag.addEventListener('webkitsourceclose', onSecondSourceClose);
                 setSrcToMediaSourceURL(videoTag);
@@ -190,7 +206,13 @@
                 video.addEventListener('webkitsourceopen', onFirstSourceOpen);
 
                 logSourceState(video);
-                setSrcToMediaSourceURL(video);
+                loadWebMData(function(success) {
+                    if (!success) {
+                        failTest("Failed to load WebM data");
+                        return;
+                    }
+                    setSrcToMediaSourceURL(video);
+                });
             }
         </script>
     </head>

Modified: trunk/LayoutTests/http/tests/media/media-source/webm/webm-media-source.js (113494 => 113495)


--- trunk/LayoutTests/http/tests/media/media-source/webm/webm-media-source.js	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/http/tests/media/media-source/webm/webm-media-source.js	2012-04-06 21:19:26 UTC (rev 113495)
@@ -7,34 +7,66 @@
     { 'ts': 1.9869999885559082  },
     { 'ts': 2.38100004196167 },
     { 'ts': 2.7760000228881836 },
-    { 'ts': 3.1710000038146973 },
-    { 'ts': 3.565999984741211 },
-    { 'ts': 3.9600000381469727 },
-    { 'ts': 4.377999782562256 },
-    { 'ts': 4.7729997634887695 },
-    { 'ts': 5.168000221252441 },
-    { 'ts': 5.563000202178955 },
-    { 'ts': 5.956999778747559 },
 ];
 
-function getData(url)
+var headerData = null;
+var clusterData = [];
+
+function getData(url, callback)
 {
     var request = new XMLHttpRequest();
-    request.open("GET", url, false);
+    request.open("GET", url, true);
     request.responseType = 'arraybuffer';
+    request._onload_ = function() {
+        if (request.status != 200) {
+            failTest("Unexpected status code " + request.status + " for " + url);
+            callback(null);
+            return;
+        }
+
+        callback(new Uint8Array(request.response));
+    };
     request.send();
+}
 
-    if (request.status != 200) {
-        failTest("Unexpected status code " + request.status + " for " + url);
-        return false;
-    }
+function createClusterGetFunction(clusterIndex, callback) {
+    return function(data) {
+        if (!data) {
+            callback(false);
+            return;
+        }
 
-    return new Uint8Array(request.response);
+        clusterData.push(data);
+
+        if (clusterData.length == getClusterCount()) {
+            callback(true);
+            return;
+        }
+
+        var nextClusterIndex = clusterIndex + 1;
+        getData("/media/resources/media-source/webm/test.webm.cluster-" + nextClusterIndex,
+                createClusterGetFunction(nextClusterIndex, callback));
+    };
 }
 
+function loadWebMData(callback) {
+    getData("/media/resources/media-source/webm/test.webm.headers", function(data) {
+        if (!data) {
+            callback(false);
+            return;
+        }
+
+        headerData = data;
+
+        var clusterIndex = 0;
+        getData("/media/resources/media-source/webm/test.webm.cluster-" + clusterIndex,
+                createClusterGetFunction(clusterIndex, callback));
+    });
+}
+
 function getHeaders()
 {
-    return getData("/media/resources/media-source/webm/test.webm.headers");
+    return headerData;
 }
 
 function getClusterCount()
@@ -44,7 +76,7 @@
 
 function getCluster(clusterIndex)
 {
-    return getData("/media/resources/media-source/webm/test.webm.cluster-" + clusterIndex);
+    return clusterData[clusterIndex];
 }
 
 function getClusterTimeForIndex(clusterIndex)
@@ -98,7 +130,12 @@
         return;
     }
 
-    videoTag.webkitSourceAppend(getCluster(clusterIndex));
+    try {
+        var cluster = getCluster(clusterIndex);
+        videoTag.webkitSourceAppend(cluster);
+    } catch (err) {
+        consoleWrite(err);
+    }
 }
 
 function appendUntilEndOfStream(videoTag, startIndex)
@@ -136,6 +173,29 @@
     return stateName;
 }
 
+function getReadyStateName(state)
+{
+    var stateName = "UNKNOWN";
+    switch (state) {
+        case HTMLMediaElement.HAVE_NOTHING:
+            stateName = "HAVE_NOTHING";
+            break;
+        case HTMLMediaElement.HAVE_METADATA:
+            stateName = "HAVE_METADATA";
+            break;
+        case HTMLMediaElement.HAVE_CURRENT_DATA:
+            stateName = "HAVE_CURRENT_DATA";
+            break;
+        case HTMLMediaElement.HAVE_FUTURE_DATA:
+            stateName = "HAVE_FUTURE_DATA";
+            break;
+        case HTMLMediaElement.HAVE_ENOUGH_DATA:
+            stateName = "HAVE_ENOUGH_DATA";
+            break;
+    }
+    return stateName;
+}
+
 function expectSourceState(videoTag, expected)
 {
     if (videoTag.webkitSourceState != expected) {
@@ -143,4 +203,13 @@
                  getSourceStateName(expected) +
                  " got " + getSourceStateName(videoTag.webkitSourceState));
     }
+}
+
+function expectReadyState(videoTag, expected)
+{
+    if (videoTag.readyState != expected) {
+        failTest("Unexpected ready state. Expected " +
+                 getReadyStateName(expected) +
+                 " got " + getReadyStateName(videoTag.readyState));
+    }
 }
\ No newline at end of file

Modified: trunk/LayoutTests/platform/chromium/test_expectations.txt (113494 => 113495)


--- trunk/LayoutTests/platform/chromium/test_expectations.txt	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/LayoutTests/platform/chromium/test_expectations.txt	2012-04-06 21:19:26 UTC (rev 113495)
@@ -111,9 +111,6 @@
 BUGCR89468 WIN LINUX ANDROID LION : css3/selectors3/xml/css3-modsel-d3.xml = FAIL
 BUGCR89468 WIN LINUX ANDROID LION : css3/selectors3/xml/css3-modsel-d4.xml = FAIL
 
-// Tests for MediaSource API. Feature is not yet functional.
-BUGWK64731 SKIP : http/tests/media/media-source/ = TIMEOUT
-
 // Chrome does not support WebArchives yet.
 BUGCR10395 SKIP : webarchive = PASS FAIL
 BUGCR10395 SKIP : svg/webarchive = PASS FAIL

Modified: trunk/Tools/ChangeLog (113494 => 113495)


--- trunk/Tools/ChangeLog	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/Tools/ChangeLog	2012-04-06 21:19:26 UTC (rev 113495)
@@ -1,3 +1,14 @@
+2012-04-06  Aaron Colwell  <[email protected]>
+
+        Enable MediaSource feature for DumpRenderTree so
+        MediaSource LayoutTests will pass for Chromium.
+        https://bugs.webkit.org/show_bug.cgi?id=83053
+
+        Reviewed by Dimitri Glazkov.
+
+        * DumpRenderTree/chromium/TestShell.cpp:
+        (TestShell::TestShell):
+
 2012-04-06  George Staikos  <[email protected]>
 
         Turn on vibration support for BlackBerry.

Modified: trunk/Tools/DumpRenderTree/chromium/TestShell.cpp (113494 => 113495)


--- trunk/Tools/DumpRenderTree/chromium/TestShell.cpp	2012-04-06 21:17:55 UTC (rev 113494)
+++ trunk/Tools/DumpRenderTree/chromium/TestShell.cpp	2012-04-06 21:19:26 UTC (rev 113495)
@@ -124,6 +124,7 @@
     WebRuntimeFeatures::enableIndexedDatabase(true);
     WebRuntimeFeatures::enableFileSystem(true);
     WebRuntimeFeatures::enableJavaScriptI18NAPI(true);
+    WebRuntimeFeatures::enableMediaSource(true);
     WebRuntimeFeatures::enableMediaStream(true);
     WebRuntimeFeatures::enableWebAudio(true); 
     WebRuntimeFeatures::enableVideoTrack(true);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to