Title: [110095] trunk
Revision
110095
Author
[email protected]
Date
2012-03-07 13:26:03 -0800 (Wed, 07 Mar 2012)

Log Message

Html5 video element Useragent string is Quicktime
https://bugs.webkit.org/show_bug.cgi?id=46241

Reviewed by Daniel Bates.

Source/WebCore: 

Test: http/tests/media/video-useragent.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::mediaPlayerUserAgent): Return the UA string for the current source.
* html/HTMLMediaElement.h:

* platform/graphics/MediaPlayer.cpp:
(WebCore::MediaPlayer::userAgent):  New, return the client's mediaPlayerUserAgent.
* platform/graphics/MediaPlayer.h:
(WebCore::MediaPlayerClient::mediaPlayerUserAgent):

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Tell AVFoundation to set
    the UA header.

LayoutTests: 

* http/tests/media/resources/serve-video.php: Added.
* http/tests/media/resources/video-check-useragent.php: Added.
* http/tests/media/resources/video-referer-check-referer.php: Split media loading logic
    out into serve-video.php.
* http/tests/media/video-useragent-expected.txt: Added.
* http/tests/media/video-useragent.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (110094 => 110095)


--- trunk/LayoutTests/ChangeLog	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/LayoutTests/ChangeLog	2012-03-07 21:26:03 UTC (rev 110095)
@@ -1,3 +1,17 @@
+2012-03-07  Eric Carlson  <[email protected]>
+
+        Html5 video element Useragent string is Quicktime
+        https://bugs.webkit.org/show_bug.cgi?id=46241
+
+        Reviewed by Daniel Bates.
+
+        * http/tests/media/resources/serve-video.php: Added.
+        * http/tests/media/resources/video-check-useragent.php: Added.
+        * http/tests/media/resources/video-referer-check-referer.php: Split media loading logic
+            out into serve-video.php.
+        * http/tests/media/video-useragent-expected.txt: Added.
+        * http/tests/media/video-useragent.html: Added.
+
 2012-03-07  Stephen White  <[email protected]>
 
         [chromium] Unreviewed gardening.

Added: trunk/LayoutTests/http/tests/media/resources/serve-video.php (0 => 110095)


--- trunk/LayoutTests/http/tests/media/resources/serve-video.php	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/resources/serve-video.php	2012-03-07 21:26:03 UTC (rev 110095)
@@ -0,0 +1,46 @@
+<?php
+
+    $fileName = $_GET["name"];
+    $type = $_GET["type"];
+
+    $fileSize = filesize($fileName);
+    $start = 0;
+    $end = $fileSize - 1;
+    $contentRange = $_SERVER["HTTP_RANGE"];
+    if (isset($contentRange)) {
+        $range = explode("-", substr($contentRange, strlen("bytes="))); 
+        $start = intval($range[0]); 
+        if (!empty($range[1]))
+            $end = intval($range[1]);
+        $httpStatus = "HTTP/1.1 206 Partial Content";
+    } else
+        $httpStatus = "200 OK";
+
+    header("Status: " . $httpStatus);
+    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+    header("Pragma: no-cache");
+    header("Etag: " . '"' . $fileSize . "-" . filemtime($fileName) . '"');
+    header("Content-Type: " . $type);
+    header("Accept-Ranges: bytes");
+    header("Content-Length: " . ($end - $start) + 1);
+    if ($contentRange)
+		header("Content-Range: bytes " . $start . "-" . $end . "/" . $fileSize); 
+    header("Connection: close");
+
+    $chunkSize = 1024 * 256;
+    $offset = $start;
+
+    $fn = fopen($fileName, "rb");
+    fseek($fn, $offset, 0);
+
+    while (!feof($fn) && $offset <= $end && connection_status() == 0) {
+        $readSize = min($chunkSize, ($end - $offset) + 1);
+        $buffer = fread($fn, $readSize);
+        print($buffer);
+        flush();
+        $offset += $chunkSize;
+    }
+    fclose($fn);
+
+    exit;
+?>

Added: trunk/LayoutTests/http/tests/media/resources/video-check-useragent.php (0 => 110095)


--- trunk/LayoutTests/http/tests/media/resources/video-check-useragent.php	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/resources/video-check-useragent.php	2012-03-07 21:26:03 UTC (rev 110095)
@@ -0,0 +1,16 @@
+<?php
+
+    $ua = $_SERVER["HTTP_USER_AGENT"];
+
+    if (!isset($ua) || stripos($ua, "WebKit/") === false || stripos($ua, "(KHTML, like Gecko)") === false)
+        die;
+
+    $fileName = $_GET["name"];
+    $type = $_GET["type"];
+
+    $_GET = array();
+    $_GET['name'] = $fileName;
+    $_GET['type'] = $type;
+    @include("./serve-video.php"); 
+
+?>

Modified: trunk/LayoutTests/http/tests/media/resources/video-referer-check-referer.php (110094 => 110095)


--- trunk/LayoutTests/http/tests/media/resources/video-referer-check-referer.php	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/LayoutTests/http/tests/media/resources/video-referer-check-referer.php	2012-03-07 21:26:03 UTC (rev 110095)
@@ -7,46 +7,9 @@
     $fileName = $_GET["name"];
     $type = $_GET["type"];
 
-    $fileSize = filesize($fileName);
-    $start = 0;
-    $end = $fileSize - 1;
-    $contentRange = $_SERVER["HTTP_RANGE"];
-    if (isset($contentRange))
-    {
-        $range = explode("-", substr($contentRange, 6)); 
-        $start = intval($range[0]); 
-        if (!empty($range[1]))
-            $end = intval($range[1]);
-        $httpStatus = "HTTP/1.1 206 Partial Content";
-    } else
-        $httpStatus = "200 OK";
+    $_GET = array();
+    $_GET['name'] = $fileName;
+    $_GET['type'] = $type;
+    @include("./serve-video.php"); 
 
-    header("Status: " . $httpStatus);
-    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
-    header("Pragma: no-cache");
-    header("Etag: " . '"' . $fileSize . "-" . filemtime($fileName) . '"');
-    header("Content-Type: " . $type);
-    header("Accept-Ranges: bytes");
-    header("Content-Length: " . ($end - $start) + 1);
-    if ($contentRange)
-		header("Content-Range: bytes " . $start . "-" . $end . "/" . $fileSize); 
-    header("Connection: close");
-
-    $chunkSize = 1024 * 256;
-    $offset = $start;
-
-    $fn = fopen($fileName, "rb");
-    fseek($fn, $offset, 0);
-
-    while (!feof($fn) && $offset <= $end && connection_status() == 0)
-    {
-        $readSize = min($chunkSize, ($end - $offset) + 1);
-        $buffer = fread($fn, $readSize);
-        print($buffer);
-        flush();
-        $offset += $chunkSize;
-    }
-    fclose($fn);
-
-    exit;
 ?>

Added: trunk/LayoutTests/http/tests/media/video-useragent-expected.txt (0 => 110095)


--- trunk/LayoutTests/http/tests/media/video-useragent-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/video-useragent-expected.txt	2012-03-07 21:26:03 UTC (rev 110095)
@@ -0,0 +1,5 @@
+ 
+Tests that the media player sends the WebKit User Agent string when requesting a media file.  
+EVENT(canplay)
+END OF TEST
+

Added: trunk/LayoutTests/http/tests/media/video-useragent.html (0 => 110095)


--- trunk/LayoutTests/http/tests/media/video-useragent.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/video-useragent.html	2012-03-07 21:26:03 UTC (rev 110095)
@@ -0,0 +1,38 @@
+<html>
+    <head>
+        <script src=""
+        <script src=""
+        <script>
+            function loadMediaFrame() 
+            {
+                findMediaElement();
+
+                var movie = findMediaFile('video', 'test');
+                var type = mimeTypeForExtension(movie.split('.').pop());
+                var frame = document.createElement('iframe');
+                frame.width = 0;
+                frame.height = 0;
+                frame.addEventListener('load', function () {
+                        source = document.getElementById('source');
+                        source.src = '' + movie + '&type=' + type;
+                        source.type = type;
+        
+                        waitForEventAndFail('error');
+                        waitForEventAndEnd('canplay');
+                        video.load();
+                });
+        
+                frame.src = ""
+                document.body.appendChild(frame);
+            }
+        </script>
+    </head>
+
+    <body _onload_="loadMediaFrame()">
+        <video id="video">
+            <source id="source">
+        </video>
+        <br>
+        Tests that the media player sends the WebKit User Agent string when requesting a media file.
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (110094 => 110095)


--- trunk/Source/WebCore/ChangeLog	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/ChangeLog	2012-03-07 21:26:03 UTC (rev 110095)
@@ -1,3 +1,25 @@
+2012-03-07  Eric Carlson  <[email protected]>
+
+        Html5 video element Useragent string is Quicktime
+        https://bugs.webkit.org/show_bug.cgi?id=46241
+
+        Reviewed by Daniel Bates.
+
+        Test: http/tests/media/video-useragent.html
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::mediaPlayerUserAgent): Return the UA string for the current source.
+        * html/HTMLMediaElement.h:
+
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::MediaPlayer::userAgent):  New, return the client's mediaPlayerUserAgent.
+        * platform/graphics/MediaPlayer.h:
+        (WebCore::MediaPlayerClient::mediaPlayerUserAgent):
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Tell AVFoundation to set
+            the UA header.
+
 2012-03-07  Scott Byer  <[email protected]>
 
         Get ScrollAnimatorNone to handle the stop and reverse cases.

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (110094 => 110095)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2012-03-07 21:26:03 UTC (rev 110095)
@@ -4062,6 +4062,16 @@
     return SecurityPolicy::generateReferrerHeader(document()->referrerPolicy(), m_currentSrc, frame->loader()->outgoingReferrer());
 }
 
+String HTMLMediaElement::mediaPlayerUserAgent() const
+{
+    Frame* frame = document()->frame();
+    if (!frame)
+        return String();
+
+    return frame->loader()->userAgent(m_currentSrc);
+
+}
+
 void HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture()
 {
     m_restrictions = NoRestrictions;

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (110094 => 110095)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2012-03-07 21:26:03 UTC (rev 110095)
@@ -390,6 +390,7 @@
 #endif
 
     virtual String mediaPlayerReferrer() const OVERRIDE;
+    virtual String mediaPlayerUserAgent() const OVERRIDE;
 
     void loadTimerFired(Timer<HTMLMediaElement>*);
     void progressEventTimerFired(Timer<HTMLMediaElement>*);

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (110094 => 110095)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2012-03-07 21:26:03 UTC (rev 110095)
@@ -937,6 +937,14 @@
     return m_mediaPlayerClient->mediaPlayerReferrer();
 }
 
+String MediaPlayer::userAgent() const
+{
+    if (!m_mediaPlayerClient)
+        return String();
+    
+    return m_mediaPlayerClient->mediaPlayerUserAgent();
 }
 
+}
+
 #endif

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (110094 => 110095)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2012-03-07 21:26:03 UTC (rev 110095)
@@ -169,6 +169,7 @@
 #endif
 
     virtual String mediaPlayerReferrer() const { return String(); }
+    virtual String mediaPlayerUserAgent() const { return String(); }
 };
 
 class MediaPlayer {
@@ -336,6 +337,7 @@
 #endif
 
     String referrer() const;
+    String userAgent() const;
 
 private:
     MediaPlayer(MediaPlayerClient*);

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (110094 => 110095)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2012-03-07 21:14:20 UTC (rev 110094)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2012-03-07 21:26:03 UTC (rev 110095)
@@ -261,12 +261,18 @@
     [options.get() setObject:[NSNumber numberWithInt:AVAssetReferenceRestrictionForbidRemoteReferenceToLocal | AVAssetReferenceRestrictionForbidLocalReferenceToRemote] forKey:AVURLAssetReferenceRestrictionsKey];
 
 #if !defined(BUILDING_ON_SNOW_LEOPARD) && !defined(BUILDING_ON_LION)
+    RetainPtr<NSMutableDictionary> headerFields(AdoptNS, [[NSMutableDictionary alloc] init]);
+
     String referrer = player()->referrer();
-    if (!referrer.isEmpty()) {
-        RetainPtr<NSMutableDictionary> headerFields(AdoptNS, [[NSMutableDictionary alloc] init]);
+    if (!referrer.isEmpty())
         [headerFields.get() setObject:referrer forKey:@"Referer"];
+
+    String userAgent = player()->userAgent();
+    if (!userAgent.isEmpty())
+        [headerFields.get() setObject:userAgent forKey:@"User-Agent"];
+
+    if ([headerFields.get() count])
         [options.get() setObject:headerFields.get() forKey:@"AVURLAssetHTTPHeaderFieldsKey"];
-    }
 #endif
 
     NSURL *cocoaURL = KURL(ParsedURLString, url);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to