<!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>[168311] 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/168311">168311</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-05-05 13:02:56 -0700 (Mon, 05 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Implement beginScrubbing and endScrubbing for video fullscreen.
https://bugs.webkit.org/show_bug.cgi?id=132520

Patch by Jeremy Jones &lt;jeremyj@apple.com&gt; on 2014-05-05
Reviewed by Eric Carlson.

Source/WebCore:
Plumb through beginScrubbing and endScrubbing from AVKit down to HTMLMediaElement.
This keeps the playback state consistent while scrubbing and allows playback state
to return to the original state when scrubbing is complete.

* WebCore.exp.in:
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(-[WebAVPlayerController beginScrubbing:]):
(-[WebAVPlayerController endScrubbing:]):
* platform/ios/WebVideoFullscreenModel.h:
* platform/ios/WebVideoFullscreenModelMediaElement.h:
* platform/ios/WebVideoFullscreenModelMediaElement.mm:
(WebVideoFullscreenModelMediaElement::beginScrubbing):
(WebVideoFullscreenModelMediaElement::endScrubbing):

Source/WebKit2:
Plumb through beginScrubbing and endScrubbing.

* UIProcess/ios/WebVideoFullscreenManagerProxy.h:
* UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
(WebKit::WebVideoFullscreenManagerProxy::beginScrubbing):
(WebKit::WebVideoFullscreenManagerProxy::endScrubbing):
* WebProcess/ios/WebVideoFullscreenManager.messages.in:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm">trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelh">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelMediaElementh">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelMediaElementmm">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxyh">trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymm">trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermessagesin">trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/ChangeLog        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-05-05  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Implement beginScrubbing and endScrubbing for video fullscreen.
+        https://bugs.webkit.org/show_bug.cgi?id=132520
+
+        Reviewed by Eric Carlson.
+
+        Plumb through beginScrubbing and endScrubbing from AVKit down to HTMLMediaElement.
+        This keeps the playback state consistent while scrubbing and allows playback state
+        to return to the original state when scrubbing is complete.
+
+        * WebCore.exp.in:
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+        (-[WebAVPlayerController beginScrubbing:]):
+        (-[WebAVPlayerController endScrubbing:]):
+        * platform/ios/WebVideoFullscreenModel.h:
+        * platform/ios/WebVideoFullscreenModelMediaElement.h:
+        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
+        (WebVideoFullscreenModelMediaElement::beginScrubbing):
+        (WebVideoFullscreenModelMediaElement::endScrubbing):
+
</ins><span class="cx"> 2014-05-05  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         More long hangs under IOSurfacePool::evict
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -3290,6 +3290,8 @@
</span><span class="cx"> #if ENABLE(VIDEO) &amp;&amp; PLATFORM(IOS)
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelMediaElement10seekToTimeEd
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelMediaElement11handleEventEPNS_22ScriptExecutionContextEPNS_5EventE
</span><ins>+__ZN7WebCore35WebVideoFullscreenModelMediaElement12endScrubbingEv
+__ZN7WebCore35WebVideoFullscreenModelMediaElement14beginScrubbingEv
</ins><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelMediaElement15setMediaElementEPNS_16HTMLMediaElementE
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelMediaElement15togglePlayStateEv
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelMediaElement18setVideoLayerFrameENS_9FloatRectE
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -195,6 +195,20 @@
</span><span class="cx">     return [NSSet setWithObject:@&quot;rate&quot;];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)beginScrubbing:(id)sender
+{
+    UNUSED_PARAM(sender);
+    ASSERT(self.delegate);
+    self.delegate-&gt;beginScrubbing();
+}
+
+- (void)endScrubbing:(id)sender
+{
+    UNUSED_PARAM(sender);
+    ASSERT(self.delegate);
+    self.delegate-&gt;endScrubbing();
+}
+
</ins><span class="cx"> - (void)seekToTime:(NSTimeInterval)time
</span><span class="cx"> {
</span><span class="cx">     ASSERT(self.delegate);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -39,6 +39,8 @@
</span><span class="cx">     virtual void play() = 0;
</span><span class="cx">     virtual void pause() = 0;
</span><span class="cx">     virtual void togglePlayState() = 0;
</span><ins>+    virtual void beginScrubbing() = 0;
+    virtual void endScrubbing() = 0;
</ins><span class="cx">     virtual void seekToTime(double time) = 0;
</span><span class="cx">     virtual void requestExitFullscreen() = 0;
</span><span class="cx">     virtual void setVideoLayerFrame(FloatRect) = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.h        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -57,6 +57,8 @@
</span><span class="cx">     virtual void play() override;
</span><span class="cx">     virtual void pause() override;
</span><span class="cx">     virtual void togglePlayState() override;
</span><ins>+    virtual void beginScrubbing() override;
+    virtual void endScrubbing() override;
</ins><span class="cx">     virtual void seekToTime(double time) override;
</span><span class="cx">     virtual void requestExitFullscreen() override;
</span><span class="cx">     virtual void setVideoLayerFrame(FloatRect) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelMediaElementmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -166,6 +166,24 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebVideoFullscreenModelMediaElement::beginScrubbing()
+{
+    __block RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; protect(this);
+    WebThreadRun(^{
+        m_mediaElement-&gt;beginScrubbing();
+        protect.clear();
+    });
+}
+
+void WebVideoFullscreenModelMediaElement::endScrubbing()
+{
+    __block RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; protect(this);
+    WebThreadRun(^{
+        m_mediaElement-&gt;endScrubbing();
+        protect.clear();
+    });
+}
+
</ins><span class="cx"> void WebVideoFullscreenModelMediaElement::seekToTime(double time)
</span><span class="cx"> {
</span><span class="cx">     __block RefPtr&lt;WebVideoFullscreenModelMediaElement&gt; protect(this);
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2014-05-05  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Implement beginScrubbing and endScrubbing for video fullscreen.
+        https://bugs.webkit.org/show_bug.cgi?id=132520
+
+        Reviewed by Eric Carlson.
+
+        Plumb through beginScrubbing and endScrubbing.
+
+        * UIProcess/ios/WebVideoFullscreenManagerProxy.h:
+        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm:
+        (WebKit::WebVideoFullscreenManagerProxy::beginScrubbing):
+        (WebKit::WebVideoFullscreenManagerProxy::endScrubbing):
+        * WebProcess/ios/WebVideoFullscreenManager.messages.in:
+
</ins><span class="cx"> 2014-05-05  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Use a layer delegate instead of web_disableAllActions wherever possible
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -66,6 +66,8 @@
</span><span class="cx">     virtual void play() override;
</span><span class="cx">     virtual void pause() override;
</span><span class="cx">     virtual void togglePlayState() override;
</span><ins>+    virtual void beginScrubbing() override;
+    virtual void endScrubbing() override;
</ins><span class="cx">     virtual void seekToTime(double) override;
</span><span class="cx">     virtual void setVideoLayerFrame(WebCore::FloatRect) override;
</span><span class="cx">     virtual void setVideoLayerGravity(WebCore::WebVideoFullscreenModel::VideoGravity) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -124,6 +124,16 @@
</span><span class="cx">     m_page-&gt;send(Messages::WebVideoFullscreenManager::TogglePlayState(), m_page-&gt;pageID());
</span><span class="cx"> }
</span><span class="cx">     
</span><ins>+void WebVideoFullscreenManagerProxy::beginScrubbing()
+{
+    m_page-&gt;send(Messages::WebVideoFullscreenManager::BeginScrubbing(), m_page-&gt;pageID());
+}
+
+void WebVideoFullscreenManagerProxy::endScrubbing()
+{
+    m_page-&gt;send(Messages::WebVideoFullscreenManager::EndScrubbing(), m_page-&gt;pageID());
+}
+
</ins><span class="cx"> void WebVideoFullscreenManagerProxy::seekToTime(double time)
</span><span class="cx"> {
</span><span class="cx">     m_page-&gt;send(Messages::WebVideoFullscreenManager::SeekToTime(time), m_page-&gt;pageID());
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in (168310 => 168311)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in        2014-05-05 19:46:30 UTC (rev 168310)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in        2014-05-05 20:02:56 UTC (rev 168311)
</span><span class="lines">@@ -25,6 +25,8 @@
</span><span class="cx">     Play()
</span><span class="cx">     Pause()
</span><span class="cx">     TogglePlayState()
</span><ins>+    BeginScrubbing()
+    EndScrubbing()
</ins><span class="cx">     SeekToTime(double time)
</span><span class="cx">     RequestExitFullscreen()
</span><span class="cx">     DidExitFullscreen()
</span></span></pre>
</div>
</div>

</body>
</html>