2010-08-27 Jer Noble <jer.noble@apple.com>
authorjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Aug 2010 21:47:07 +0000 (21:47 +0000)
committerjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Aug 2010 21:47:07 +0000 (21:47 +0000)
        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212

        Add the new WebKitSystemInterface function WKQTMovieDisableComponent to
        the initialization routine.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize WKQTMovieDisableComponent.
2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212

        Disable all the QuickTime components which ingest .txt files.

        New tests:
        * http/tests/media/video-served-as-text.html: Added.
        * http/tests/media/text-served-as-text.html: Added.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Disable all four text
            'eat' components.
        * platform/mac/WebCoreSystemInterface.h: Add wkQTMovieDisableComponent.
        * platform/mac/WebCoreSystemInterface.mm: Add wkQTMovieDisableComponent.
2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212

        Added two new tests: video-served-as-text.html and
        text-served-as-text.html.  The second checks that a text file does not
        generates an error when loaded by a <video> element. The first checks
        that media served as text/plain still loads without errors.

        * http/tests/media/resources/test.txt: Added.
        * http/tests/media/text-served-as-text-expected.txt: Added.
        * http/tests/media/text-served-as-text.html: Added.
        * http/tests/media/video-served-as-text-expected.txt: Added.
        * http/tests/media/video-served-as-text.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@66411 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
LayoutTests/ChangeLog
LayoutTests/http/tests/media/resources/test.txt [new file with mode: 0644]
LayoutTests/http/tests/media/text-served-as-text-expected.txt [new file with mode: 0644]
LayoutTests/http/tests/media/text-served-as-text.html [new file with mode: 0644]
LayoutTests/http/tests/media/video-served-as-text-expected.txt [new file with mode: 0644]
LayoutTests/http/tests/media/video-served-as-text.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/platform/graphics/mac/MediaPlayerPrivateQTKit.mm
WebCore/platform/mac/WebCoreSystemInterface.h
WebCore/platform/mac/WebCoreSystemInterface.mm
WebKit/mac/ChangeLog
WebKit/mac/WebCoreSupport/WebSystemInterface.mm
WebKitLibraries/WebKitSystemInterface.h
WebKitLibraries/libWebKitSystemInterfaceLeopard.a
WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a

index 584234e..3051f19 100644 (file)
@@ -1,3 +1,21 @@
+2010-08-27  Jer Noble  <jer.noble@apple.com>
+
+        Reviewed by Eric Carlson.
+
+        text/plain non-video files cause <video> to hang (while reading them?)
+        https://bugs.webkit.org/show_bug.cgi?id=44212
+        
+        Added two new tests: video-served-as-text.html and
+        text-served-as-text.html.  The second checks that a text file does not
+        generates an error when loaded by a <video> element. The first checks
+        that media served as text/plain still loads without errors.
+
+        * http/tests/media/resources/test.txt: Added.
+        * http/tests/media/text-served-as-text-expected.txt: Added.
+        * http/tests/media/text-served-as-text.html: Added.
+        * http/tests/media/video-served-as-text-expected.txt: Added.
+        * http/tests/media/video-served-as-text.html: Added.
+
 2010-08-30  Evan Martin  <evan@chromium.org>
 
         Unreviewed, updating Chromium expectations.
 
 2010-08-27  Jer Noble  <jer.noble@apple.com>
 
+        Reviewed by Eric Carlson.
+
+        text/plain non-video files cause <video> to hang (while reading them?)
+        https://bugs.webkit.org/show_bug.cgi?id=44212
+        
+        Test that HTMLVideoElements cannot load movies served as plain text.
+
+        * http/tests/media/video-served-as-text.html: Added.
+
+2010-08-27  Jer Noble  <jer.noble@apple.com>
+
         Build fix only, not reviewed.
 
         In review for https://bugs.webkit.org/show_bug.cgi?id=43099, a few
diff --git a/LayoutTests/http/tests/media/resources/test.txt b/LayoutTests/http/tests/media/resources/test.txt
new file mode 100644 (file)
index 0000000..e252912
--- /dev/null
@@ -0,0 +1,66 @@
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur ac libero
+vulputate est tempor rhoncus. Phasellus ornare enim a nunc luctus volutpat
+aliquam nisi auctor. Quisque tincidunt nibh non ligula aliquam accumsan.
+Cras est urna, sagittis at dictum non, mattis quis libero. Suspendisse
+potenti. Proin rutrum, dolor eu suscipit gravida, mi metus egestas justo,
+vel pretium metus lacus at sem. Duis vulputate erat a felis euismod
+venenatis. Curabitur et commodo velit. Vestibulum interdum tincidunt odio eu
+cursus. Sed faucibus vulputate porta. Praesent sem lectus, interdum at porta
+a, iaculis quis libero.
+
+Suspendisse potenti. Suspendisse fermentum felis sed eros convallis blandit.
+Sed rhoncus viverra orci eu viverra. Fusce vitae diam vel velit placerat
+adipiscing. Nunc rhoncus, nibh ut imperdiet interdum, nunc arcu tempus
+ligula, in tempor augue enim eget erat. Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Duis vestibulum faucibus lectus, vel tincidunt
+eros congue tincidunt. Curabitur sapien libero, condimentum et commodo
+vitae, tempus eu quam. Maecenas et ipsum nibh. Quisque in tempus sapien.
+Vivamus vitae quam non diam faucibus vulputate. Sed ac ipsum a diam accumsan
+ullamcorper placerat et enim. Nullam tempor adipiscing tellus at laoreet.
+Cras pellentesque laoreet lorem, sit amet luctus purus sollicitudin
+pellentesque. In eget metus nec turpis gravida rutrum vel vel risus.
+Maecenas viverra pulvinar ultrices. Proin interdum eros nec est ultrices
+ultricies. Etiam sit amet libero ligula, ac ultrices neque. Sed elementum
+accumsan pellentesque.
+
+Cras auctor mattis neque vitae pellentesque. Ut rhoncus sapien sed turpis
+dignissim dictum. Morbi imperdiet porttitor elementum. In nec arcu id lectus
+pulvinar hendrerit eu eget dolor. Quisque at nulla ut ligula consectetur
+suscipit sit amet ac orci. In sit amet mattis magna. Curabitur iaculis est
+in enim porta cursus vulputate diam faucibus. Cum sociis natoque penatibus
+et magnis dis parturient montes, nascetur ridiculus mus. Cras fermentum
+placerat felis, sit amet dictum neque ultricies ut. Lorem ipsum dolor sit
+amet, consectetur adipiscing elit. Mauris et tortor id justo pretium
+adipiscing eu quis purus. Sed odio orci, tincidunt vehicula porta venenatis,
+adipiscing sed mauris.
+
+Suspendisse potenti. Phasellus tincidunt porta eros, eget mattis mi tempor
+in. Praesent hendrerit enim vitae magna iaculis interdum. Nullam sed luctus
+elit. Etiam vehicula, ipsum ac mollis dictum, elit felis interdum erat, nec
+interdum est urna et lectus. Morbi eget odio eget libero rutrum consectetur
+et sed odio. Vestibulum felis ipsum, malesuada ut sollicitudin sit amet,
+elementum vitae sapien. Vestibulum sodales, nisi et posuere consequat, erat
+mi aliquet nisi, euismod varius ligula erat vitae risus. Cum sociis natoque
+penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis eu
+metus nisi. Etiam vel tortor non lectus bibendum sollicitudin ac ac erat.
+Cras sapien nibh, condimentum eu mollis a, auctor eu neque. Aenean convallis
+aliquet mollis. Integer sed diam in dolor tincidunt pellentesque in sed leo.
+Phasellus eu adipiscing arcu. Donec pharetra porta pellentesque. Suspendisse
+ornare fringilla enim, eu bibendum tortor mattis semper.
+
+Donec non velit erat, eu facilisis sem. Cras facilisis, orci non tempus
+accumsan, ligula magna tincidunt lectus, sed sagittis erat massa vitae orci.
+Maecenas imperdiet blandit leo, ac lobortis diam venenatis vitae. Vestibulum
+ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Suspendisse potenti. Ut tincidunt viverra leo at venenatis. Cras lacus
+neque, lacinia in rutrum ut, aliquet in mi. Vestibulum sed risus eros, sed
+faucibus leo. Maecenas congue varius tellus non viverra. Morbi ultrices
+neque quis lorem porta euismod. Aenean sollicitudin ornare quam eu lobortis.
+Fusce velit leo, pharetra eu porta in, interdum eget risus. Aenean luctus
+interdum magna, et facilisis lacus auctor vel. Sed sollicitudin, eros
+tristique adipiscing consequat, nibh nisl dictum mauris, eu interdum tellus
+purus ut lectus. Proin interdum lectus sed neque pharetra suscipit. Quisque
+lorem quam, iaculis sed egestas a, laoreet id odio. Integer varius sem sed
+magna facilisis sodales. Etiam id accumsan odio. Quisque sodales velit sed
+augue fermentum vitae laoreet odio tincidunt. Quisque justo purus, viverra
+eu consequat quis, sollicitudin eget massa.
\ No newline at end of file
diff --git a/LayoutTests/http/tests/media/text-served-as-text-expected.txt b/LayoutTests/http/tests/media/text-served-as-text-expected.txt
new file mode 100644 (file)
index 0000000..adbcc82
--- /dev/null
@@ -0,0 +1,6 @@
+EXPECTED (video.error == 'null') OK
+EVENT(loadstart)
+EVENT(error)
+failed trying to load text file served as text OK
+END OF TEST
+
diff --git a/LayoutTests/http/tests/media/text-served-as-text.html b/LayoutTests/http/tests/media/text-served-as-text.html
new file mode 100644 (file)
index 0000000..0ec31fc
--- /dev/null
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>text file served as 'text/plain'</title>
+        <script src=../../../media/video-test.js></script>
+        <script>
+            function loadedmetadata(evt) 
+            {
+                logResult(false, "loaded text file served as text");
+                endTest();
+            }
+
+            function error(evt)
+            {
+                logResult(true, "failed trying to load text file served as text");
+                endTest();
+            }
+
+            function start() 
+            {
+                findMediaElement();
+
+                waitForEvent('loadedmetadata', loadedmetadata);
+                waitForEvent("error", error);
+                waitForEvent("loadstart");
+                testExpected("video.error", null);
+
+                var movie = "resources/test.txt";
+                video.src = "http://127.0.0.1:8000/media/video-throttled-load.cgi?name=" + movie + "&throttle=99999&type=text/plain";
+            }
+        </script>
+    </head>
+
+    <body onload="start()">
+        <video controls></video>
+    </body>
+</html>
diff --git a/LayoutTests/http/tests/media/video-served-as-text-expected.txt b/LayoutTests/http/tests/media/video-served-as-text-expected.txt
new file mode 100644 (file)
index 0000000..e5fc07f
--- /dev/null
@@ -0,0 +1,6 @@
+EXPECTED (video.error == 'null') OK
+EVENT(loadstart)
+EVENT(loadedmetadata)
+loaded media file served as text OK
+END OF TEST
+
diff --git a/LayoutTests/http/tests/media/video-served-as-text.html b/LayoutTests/http/tests/media/video-served-as-text.html
new file mode 100644 (file)
index 0000000..c1d9a66
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>media file served as 'text/plain'</title>
+        <script src=../../../media/media-file.js></script>
+        <script src=../../../media/video-test.js></script>
+        <script>
+            function loadedmetadata(evt) 
+            {
+                logResult(true, "loaded media file served as text");
+                endTest();
+            }
+
+            function error(evt)
+            {
+                logResult(false, "failed trying to load media file served as text");
+                endTest();
+            }
+
+            function start() 
+            {
+                findMediaElement();
+
+                waitForEvent('loadedmetadata', loadedmetadata);
+                waitForEvent("error", error);
+                waitForEvent("loadstart");
+                testExpected("video.error", null);
+
+                var movie = findMediaFile("video", "resources/test");
+                video.src = "http://127.0.0.1:8000/media/video-throttled-load.cgi?name=" + movie + "&throttle=99999&type=text/plain";
+            }
+        </script>
+    </head>
+
+    <body onload="start()">
+        <video controls></video>
+    </body>
+</html>
index 4166a23..0f236b1 100644 (file)
@@ -1,3 +1,22 @@
+2010-08-27  Jer Noble  <jer.noble@apple.com>
+
+        Reviewed by Eric Carlson.
+
+        text/plain non-video files cause <video> to hang (while reading them?)
+        https://bugs.webkit.org/show_bug.cgi?id=44212
+        
+        Disable all the QuickTime components which ingest .txt files.
+
+        New tests: 
+        * http/tests/media/video-served-as-text.html: Added.
+        * http/tests/media/text-served-as-text.html: Added.
+
+        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
+        (WebCore::MediaPlayerPrivate::createQTMovie): Disable all four text
+            'eat' components.
+        * platform/mac/WebCoreSystemInterface.h: Add wkQTMovieDisableComponent.
+        * platform/mac/WebCoreSystemInterface.mm: Add wkQTMovieDisableComponent.
+
 2010-08-30  Robert Hogan  <robert@webkit.org>
 
         Reviewed by Simon Hausmann.
index 665092a..c180438 100644 (file)
@@ -263,6 +263,17 @@ void MediaPlayerPrivate::createQTMovie(const String& url)
 
 void MediaPlayerPrivate::createQTMovie(NSURL *url, NSDictionary *movieAttributes)
 {
+    // We must disable components each time we open a movie because we cannot guarantee
+    // that the QTKitServer process hasn't disappeared on us:
+    uint32_t componentsToDisable[4][5] = {
+        {'eat ', 'TEXT', 'text', 0, 0},
+        {'eat ', 'TXT ', 'text', 0, 0},    
+        {'eat ', 'utxt', 'text', 0, 0},  
+        {'eat ', 'TEXT', 'tx3g', 0, 0},  
+    };
+    for (size_t i = 0; i < sizeof(componentsToDisable)/sizeof(componentsToDisable[0]); ++i) 
+         wkQTMovieDisableComponent(componentsToDisable[i]);
+
     [[NSNotificationCenter defaultCenter] removeObserver:m_objcObserver.get()];
     
     bool recreating = false;
index 1f14311..0cc7fd5 100644 (file)
@@ -121,6 +121,7 @@ extern BOOL (*wkMediaControllerThemeAvailable)(int themeStyle);
 extern void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*);
 extern unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
 extern int (*wkQTMovieDataRate)(QTMovie*);
+extern void (*wkQTMovieDisableComponent)(uint32_t[5]);
 extern float (*wkQTMovieMaxTimeLoaded)(QTMovie*);
 extern NSString *(*wkQTMovieMaxTimeLoadedChangeNotification)(void);
 extern float (*wkQTMovieMaxTimeSeekable)(QTMovie*);
index 2a06f15..309a8fb 100644 (file)
@@ -56,6 +56,7 @@ void (*wkGetWheelEventDeltas)(NSEvent*, float* deltaX, float* deltaY, BOOL* cont
 void (*wkPopupMenu)(NSMenu*, NSPoint location, float width, NSView*, int selectedItem, NSFont*);
 unsigned (*wkQTIncludeOnlyModernMediaFileTypes)(void);
 int (*wkQTMovieDataRate)(QTMovie*);
+void (*wkQTMovieDisableComponent)(uint32_t[5]);
 float (*wkQTMovieMaxTimeLoaded)(QTMovie*);
 NSString *(*wkQTMovieMaxTimeLoadedChangeNotification)(void);
 float (*wkQTMovieMaxTimeSeekable)(QTMovie*);
index f3c9b43..c556d5d 100644 (file)
@@ -1,3 +1,16 @@
+2010-08-27  Jer Noble  <jer.noble@apple.com>
+
+        Reviewed by Eric Carlson.
+
+        text/plain non-video files cause <video> to hang (while reading them?)
+        https://bugs.webkit.org/show_bug.cgi?id=44212
+        
+        Add the new WebKitSystemInterface function WKQTMovieDisableComponent to
+        the initialization routine.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface): Initialize WKQTMovieDisableComponent.
+
 2010-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r66198.
index 0b74dee..47b16b2 100644 (file)
@@ -84,6 +84,7 @@ void InitWebCoreSystemInterface(void)
     INIT(SignalCFReadStreamHasBytes);
     INIT(QTIncludeOnlyModernMediaFileTypes);
     INIT(QTMovieDataRate);
+    INIT(QTMovieDisableComponent);
     INIT(QTMovieMaxTimeLoaded);
     INIT(QTMovieMaxTimeLoadedChangeNotification);
     INIT(QTMovieMaxTimeSeekable);
index 8732d81..5f6dcdb 100644 (file)
@@ -201,6 +201,7 @@ float WKQTMovieMaxTimeLoaded(QTMovie* movie);
 float WKQTMovieMaxTimeSeekable(QTMovie* movie);
 NSString *WKQTMovieMaxTimeLoadedChangeNotification(void);
 void WKQTMovieViewSetDrawSynchronously(QTMovieView* view, BOOL sync);
+void WKQTMovieDisableComponent(uint32_t[5]);
 
 CFStringRef WKCopyFoundationCacheDirectory(void);
 
index fc5b8a0..39ceb4a 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceLeopard.a and b/WebKitLibraries/libWebKitSystemInterfaceLeopard.a differ
index dd6e22e..6dd8afc 100644 (file)
Binary files a/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a and b/WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a differ