<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[181259] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/181259">181259</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2015-03-08 21:55:11 -0700 (Sun, 08 Mar 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS Media] Video buffer progress missing on iPhones
https://bugs.webkit.org/show_bug.cgi?id=142462

Reviewed by Eric Carlson.

Source/WebCore:

The fullscreen controller on the iPhone idiom was using
the media duration as its maximum loaded time, meaning the
download progress was missing (it looked like everything
was already downloaded). The fix is to calculate
what the maximum buffered time is from the HTMLMediaElement,
and send that to the fullscreen controller.

* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS.prototype.drawTimelineBackground): While implementing
the native function I noticed that the JS controls forgot that
the buffered time ranges are ordered, and thus they don't need
to search through the array. The last range will be the highest.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::maxBufferedTime): New helper function
to calculate the highest buffered time in the media source.
* html/HTMLMediaElement.h:

* platform/ios/WebVideoFullscreenInterface.h: New setBufferedTime method.
* platform/ios/WebVideoFullscreenInterfaceAVKit.h:

* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(WebVideoFullscreenInterfaceAVKit::setDuration): No longer set
the loadedTimeRanges.
(WebVideoFullscreenInterfaceAVKit::setBufferedTime): Calculate a normalized
value of the maximum loaded/buffered time, and tell the platform controller
to show that range.

* platform/ios/WebVideoFullscreenModelVideoElement.mm:
(WebVideoFullscreenModelVideoElement::updateForEventName): Send the maximum
buffered time.

Source/WebKit2:

Coordinate the SetBufferedTime message between the Web and UI
processes.

* UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: New message SetBufferedTime.
* WebProcess/ios/WebVideoFullscreenManager.h:
* WebProcess/ios/WebVideoFullscreenManager.mm:
(WebKit::WebVideoFullscreenManager::setBufferedTime):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediacontrolsmediaControlsiOSjs">trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementcpp">trunk/Source/WebCore/html/HTMLMediaElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLMediaElementh">trunk/Source/WebCore/html/HTMLMediaElement.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceh">trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKith">trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm">trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelVideoElementmm">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymessagesin">trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagerh">trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermm">trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/ChangeLog        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2015-03-08  Dean Jackson  &lt;dino@apple.com&gt;
+
+        [iOS Media] Video buffer progress missing on iPhones
+        https://bugs.webkit.org/show_bug.cgi?id=142462
+
+        Reviewed by Eric Carlson.
+
+        The fullscreen controller on the iPhone idiom was using
+        the media duration as its maximum loaded time, meaning the
+        download progress was missing (it looked like everything
+        was already downloaded). The fix is to calculate
+        what the maximum buffered time is from the HTMLMediaElement,
+        and send that to the fullscreen controller.
+
+        * Modules/mediacontrols/mediaControlsiOS.js:
+        (ControllerIOS.prototype.drawTimelineBackground): While implementing
+        the native function I noticed that the JS controls forgot that
+        the buffered time ranges are ordered, and thus they don't need
+        to search through the array. The last range will be the highest.
+
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::maxBufferedTime): New helper function
+        to calculate the highest buffered time in the media source.
+        * html/HTMLMediaElement.h:
+
+        * platform/ios/WebVideoFullscreenInterface.h: New setBufferedTime method.
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
+
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+        (WebVideoFullscreenInterfaceAVKit::setDuration): No longer set
+        the loadedTimeRanges.
+        (WebVideoFullscreenInterfaceAVKit::setBufferedTime): Calculate a normalized
+        value of the maximum loaded/buffered time, and tell the platform controller
+        to show that range.
+
+        * platform/ios/WebVideoFullscreenModelVideoElement.mm:
+        (WebVideoFullscreenModelVideoElement::updateForEventName): Send the maximum
+        buffered time.
+
</ins><span class="cx"> 2015-03-08  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Crash in WebCore::NotificationCenter::stop()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediacontrolsmediaControlsiOSjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -307,8 +307,9 @@
</span><span class="cx"> 
</span><span class="cx">         var played = this.video.currentTime / this.video.duration;
</span><span class="cx">         var buffered = 0;
</span><del>-        for (var i = 0, end = this.video.buffered.length; i &lt; end; ++i)
-            buffered = Math.max(this.video.buffered.end(i), buffered);
</del><ins>+        var bufferedRanges = this.video.buffered;
+        if (bufferedRanges &amp;&amp; bufferedRanges.length)
+            buffered = Math.max(bufferedRanges.end(bufferedRanges.length - 1), buffered);
</ins><span class="cx"> 
</span><span class="cx">         buffered /= this.video.duration;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -4377,6 +4377,16 @@
</span><span class="cx">     return TimeRanges::create(*m_player-&gt;buffered());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+double HTMLMediaElement::maxBufferedTime() const
+{
+    RefPtr&lt;TimeRanges&gt; bufferedRanges = buffered();
+    unsigned numRanges = bufferedRanges-&gt;length();
+    if (!numRanges)
+        return 0;
+
+    return bufferedRanges-&gt;end(numRanges - 1, ASSERT_NO_EXCEPTION);
+}
+
</ins><span class="cx"> PassRefPtr&lt;TimeRanges&gt; HTMLMediaElement::played()
</span><span class="cx"> {
</span><span class="cx">     if (m_playing) {
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -446,6 +446,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool isDisablingSleep() const { return m_sleepDisabler.get(); }
</span><span class="cx"> 
</span><ins>+    double maxBufferedTime() const;
+
</ins><span class="cx"> protected:
</span><span class="cx">     HTMLMediaElement(const QualifiedName&amp;, Document&amp;, bool);
</span><span class="cx">     virtual ~HTMLMediaElement();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx">     virtual void resetMediaState() = 0;
</span><span class="cx">     virtual void setDuration(double) = 0;
</span><span class="cx">     virtual void setCurrentTime(double currentTime, double anchorTime) = 0;
</span><ins>+    virtual void setBufferedTime(double bufferedTime) = 0;
</ins><span class="cx">     virtual void setRate(bool isPlaying, float playbackRate) = 0;
</span><span class="cx">     virtual void setVideoDimensions(bool hasVideo, float width, float height) = 0;
</span><span class="cx">     virtual void setSeekableRanges(const TimeRanges&amp;) = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKith"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -76,6 +76,7 @@
</span><span class="cx">     WEBCORE_EXPORT virtual void resetMediaState() override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setDuration(double) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setCurrentTime(double currentTime, double anchorTime) override;
</span><ins>+    WEBCORE_EXPORT virtual void setBufferedTime(double bufferedTime) override;
</ins><span class="cx">     WEBCORE_EXPORT virtual void setRate(bool isPlaying, float playbackRate) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setSeekableRanges(const TimeRanges&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -721,8 +721,7 @@
</span><span class="cx">         playerController.contentDuration = duration;
</span><span class="cx">         playerController.maxTime = duration;
</span><span class="cx">         playerController.contentDurationWithinEndTimes = duration;
</span><del>-        playerController.loadedTimeRanges = @[@0, @(duration)];
-        
</del><ins>+
</ins><span class="cx">         // FIXME: we take this as an indication that playback is ready.
</span><span class="cx">         playerController.canPlay = YES;
</span><span class="cx">         playerController.canPause = YES;
</span><span class="lines">@@ -746,6 +745,22 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebVideoFullscreenInterfaceAVKit::setBufferedTime(double bufferedTime)
+{
+    RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; strongThis(this);
+
+    dispatch_async(dispatch_get_main_queue(), [strongThis, bufferedTime] {
+        WebAVPlayerController* playerController = strongThis-&gt;m_playerController.get();
+        double duration = playerController.contentDuration;
+        double normalizedBufferedTime;
+        if (!duration)
+            normalizedBufferedTime = 0;
+        else
+            normalizedBufferedTime = bufferedTime / duration;
+        playerController.loadedTimeRanges = @[@0, @(normalizedBufferedTime)];
+    });
+}
+
</ins><span class="cx"> void WebVideoFullscreenInterfaceAVKit::setRate(bool isPlaying, float playbackRate)
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; strongThis(this);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelVideoElementmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -120,6 +120,7 @@
</span><span class="cx">     if (all
</span><span class="cx">         || eventName == eventNames().timeupdateEvent) {
</span><span class="cx">         m_videoFullscreenInterface-&gt;setCurrentTime(m_videoElement-&gt;currentTime(), [[NSProcessInfo processInfo] systemUptime]);
</span><ins>+        m_videoFullscreenInterface-&gt;setBufferedTime(m_videoElement-&gt;maxBufferedTime());
</ins><span class="cx">         // FIXME: 130788 - find a better event to update seekable ranges from.
</span><span class="cx">         m_videoFullscreenInterface-&gt;setSeekableRanges(*m_videoElement-&gt;seekable());
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebKit2/ChangeLog        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2015-03-08  Dean Jackson  &lt;dino@apple.com&gt;
+
+        [iOS Media] Video buffer progress missing on iPhones
+        https://bugs.webkit.org/show_bug.cgi?id=142462
+
+        Reviewed by Eric Carlson.
+
+        Coordinate the SetBufferedTime message between the Web and UI
+        processes.
+
+        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: New message SetBufferedTime.
+        * WebProcess/ios/WebVideoFullscreenManager.h:
+        * WebProcess/ios/WebVideoFullscreenManager.mm:
+        (WebKit::WebVideoFullscreenManager::setBufferedTime):
+
</ins><span class="cx"> 2015-03-08  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         [Content Extensions] Add scaffolding for the WKUserContentExtensionStore
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> messages -&gt; WebVideoFullscreenManagerProxy {
</span><span class="cx">     ResetMediaState()
</span><span class="cx">     SetCurrentTime(double currentTime, double hostTime)
</span><ins>+    SetBufferedTime(double bufferedTime)
</ins><span class="cx">     SetVideoDimensions(bool hasVideo, unsigned width, unsigned height)
</span><span class="cx">     SetSeekableRangesVector(Vector&lt;std::pair&lt;double, double&gt;&gt; ranges);
</span><span class="cx">     SetCanPlayFastReverse(bool value);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -71,6 +71,7 @@
</span><span class="cx">     virtual void resetMediaState() override;
</span><span class="cx">     virtual void setDuration(double) override;
</span><span class="cx">     virtual void setCurrentTime(double currentTime, double anchorTime) override;
</span><ins>+    virtual void setBufferedTime(double bufferedTime) override;
</ins><span class="cx">     virtual void setRate(bool isPlaying, float playbackRate) override;
</span><span class="cx">     virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
</span><span class="cx">     virtual void setSeekableRanges(const WebCore::TimeRanges&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm (181258 => 181259)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm        2015-03-09 04:25:04 UTC (rev 181258)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm        2015-03-09 04:55:11 UTC (rev 181259)
</span><span class="lines">@@ -134,6 +134,11 @@
</span><span class="cx">     m_page-&gt;send(Messages::WebVideoFullscreenManagerProxy::SetCurrentTime(currentTime, anchorTime), m_page-&gt;pageID());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebVideoFullscreenManager::setBufferedTime(double bufferedTime)
+{
+    m_page-&gt;send(Messages::WebVideoFullscreenManagerProxy::SetBufferedTime(bufferedTime), m_page-&gt;pageID());
+}
+
</ins><span class="cx"> void WebVideoFullscreenManager::setRate(bool isPlaying, float playbackRate)
</span><span class="cx"> {
</span><span class="cx">     m_page-&gt;send(Messages::WebVideoFullscreenManagerProxy::SetRate(isPlaying, playbackRate), m_page-&gt;pageID());
</span></span></pre>
</div>
</div>

</body>
</html>