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);