<!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>[177012] 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/177012">177012</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2014-12-09 00:25:09 -0800 (Tue, 09 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Enable activating optimized fullscreen mode from standard fulscreen mode.
https://bugs.webkit.org/show_bug.cgi?id=139137

Patch by Jeremy Jones &lt;jeremyj@apple.com&gt; on 2014-12-09
Source/WebCore:

Reviewed by Jer Noble.

Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
update the fullscreen mode in HTMLMediaElement and a new standard-and-optimized-fullscreen mode.

This change KVO observes AVKit's optimizedFullscreenActive and forwards the change down to HTMLMediaElement so it can adjust behavior appropriately.
It also hides the standard fullscreen window when going into this mode.
When exiting fullscreen from standard-and-optimized, first exit fullscreen immediately, then stopOptimizedFullscreen, and notify of completion when
optimizedFullscreen goes inactive.

* Modules/mediacontrols/MediaControlsHost.cpp:
(WebCore::MediaControlsHost::fullscreenMode):
    Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
* WebCore.exp.in: New export for WebVideoFullscreenModelVideoElement::fullscreenModeChanged
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::displayType):
    Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
* html/HTMLMediaElement.h: Add new fullscreen mode.
(WebCore::HTMLMediaElement::fullscreenModeChanged): Update fullscreen mode so it does optimized fullscreen mode behaviors when applicable.
* platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare setOptimizedActive
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(-[WebAVVideoLayer setPlayerViewController:]): observe optimizedFullscreenActive
(-[WebAVVideoLayer observeValueForKeyPath:ofObject:change:context:]): respond to changes to optimizedFullscreenActive
(WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit): Init members.
(WebVideoFullscreenInterfaceAVKit::playerController):
    Give player controller a reference to the WebVideoFullscreenInterface so it can pass along mode change state.
(WebVideoFullscreenInterfaceAVKit::enterFullscreen): Handle new fullscreen modes.
(WebVideoFullscreenInterfaceAVKit::exitFullscreen): ditto
(WebVideoFullscreenInterfaceAVKit::invalidate): ditto
(WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto
(WebVideoFullscreenInterfaceAVKit::setOptimizedActive): Handle changes to fullscreen mode.
    Also handle the case that exiting fullscreen happend when optimized mode ends.
* platform/ios/WebVideoFullscreenModel.h: declare fullscreenModeChanged()
* platform/ios/WebVideoFullscreenModelVideoElement.h: declare fullscreenModeChanged()
* platform/ios/WebVideoFullscreenModelVideoElement.mm: add fullscreenModeChanged()
(WebVideoFullscreenModelVideoElement::WebVideoFullscreenModelVideoElement): Init members.
(WebVideoFullscreenModelVideoElement::fullscreenModeChanged): Added. Update video element fullscreen mode.

Source/WebKit2:

Reviewed by Simon Fraser.

Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
update the fullscreen mode and a new standard-and-optimized-fullscreen mode.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _isPlayingFullscreenOptimizedVideo]):
Treat new standard-and-optimized as a kind of optimized.
* UIProcess/ios/WebVideoFullscreenManagerProxy.h: IPC fullscreen mode changes
* UIProcess/ios/WebVideoFullscreenManagerProxy.mm: ditto
(WebKit::WebVideoFullscreenManagerProxy::fullscreenModeChanged): dito
* WebProcess/ios/WebVideoFullscreenManager.h: ditto
* WebProcess/ios/WebVideoFullscreenManager.messages.in: ditto
* WebProcess/ios/WebVideoFullscreenManager.mm: dito
(WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager): ditto
(WebKit::WebVideoFullscreenManager::setFullscreenModeChanged): ditto</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesmediacontrolsMediaControlsHostcpp">trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</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="#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="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelh">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenModelVideoElementh">trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h</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="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxyh">trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymessagesin">trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in</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>
<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 (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/ChangeLog        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -1,3 +1,46 @@
</span><ins>+2014-12-09  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Enable activating optimized fullscreen mode from standard fulscreen mode.
+        https://bugs.webkit.org/show_bug.cgi?id=139137
+
+        Reviewed by Jer Noble.
+
+        Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
+        update the fullscreen mode in HTMLMediaElement and a new standard-and-optimized-fullscreen mode.
+
+        This change KVO observes AVKit's optimizedFullscreenActive and forwards the change down to HTMLMediaElement so it can adjust behavior appropriately.
+        It also hides the standard fullscreen window when going into this mode.
+        When exiting fullscreen from standard-and-optimized, first exit fullscreen immediately, then stopOptimizedFullscreen, and notify of completion when
+        optimizedFullscreen goes inactive.
+
+        * Modules/mediacontrols/MediaControlsHost.cpp:
+        (WebCore::MediaControlsHost::fullscreenMode):
+            Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
+        * WebCore.exp.in: New export for WebVideoFullscreenModelVideoElement::fullscreenModeChanged
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::displayType):
+            Treat VideoFullscreenModeStandardAndOptimized as a kind of optimized mode.
+        * html/HTMLMediaElement.h: Add new fullscreen mode.
+        (WebCore::HTMLMediaElement::fullscreenModeChanged): Update fullscreen mode so it does optimized fullscreen mode behaviors when applicable.
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare setOptimizedActive
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+        (-[WebAVVideoLayer setPlayerViewController:]): observe optimizedFullscreenActive
+        (-[WebAVVideoLayer observeValueForKeyPath:ofObject:change:context:]): respond to changes to optimizedFullscreenActive
+        (WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit): Init members.
+        (WebVideoFullscreenInterfaceAVKit::playerController): 
+            Give player controller a reference to the WebVideoFullscreenInterface so it can pass along mode change state.
+        (WebVideoFullscreenInterfaceAVKit::enterFullscreen): Handle new fullscreen modes.
+        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): ditto
+        (WebVideoFullscreenInterfaceAVKit::invalidate): ditto
+        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto
+        (WebVideoFullscreenInterfaceAVKit::setOptimizedActive): Handle changes to fullscreen mode.
+            Also handle the case that exiting fullscreen happend when optimized mode ends.
+        * platform/ios/WebVideoFullscreenModel.h: declare fullscreenModeChanged()
+        * platform/ios/WebVideoFullscreenModelVideoElement.h: declare fullscreenModeChanged()
+        * platform/ios/WebVideoFullscreenModelVideoElement.mm: add fullscreenModeChanged()
+        (WebVideoFullscreenModelVideoElement::WebVideoFullscreenModelVideoElement): Init members.
+        (WebVideoFullscreenModelVideoElement::fullscreenModeChanged): Added. Update video element fullscreen mode.
+
</ins><span class="cx"> 2014-12-08  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix the iOS build after r177002
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediacontrolsMediaControlsHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -294,19 +294,12 @@
</span><span class="cx">     DEPRECATED_DEFINE_STATIC_LOCAL(String, optimized, (ASCIILiteral(&quot;optimized&quot;)));
</span><span class="cx">     String mode = none;
</span><span class="cx"> 
</span><del>-    enum VideoFullscreenMode { VideoFullscreenModeNone, VideoFullscreenModeStandard, VideoFullscreenModeOptimized };
-
-    switch (m_mediaElement-&gt;fullscreenMode()) {
-    case HTMLMediaElement::VideoFullscreenModeNone:
</del><ins>+    if (m_mediaElement-&gt;fullscreenMode() == HTMLMediaElement::VideoFullscreenModeNone)
</ins><span class="cx">         mode = none;
</span><del>-        break;
-    case HTMLMediaElement::VideoFullscreenModeStandard:
</del><ins>+    else if (m_mediaElement-&gt;fullscreenMode() == HTMLMediaElement::VideoFullscreenModeStandard)
</ins><span class="cx">         mode = standard;
</span><del>-        break;
-    case HTMLMediaElement::VideoFullscreenModeOptimized:
</del><ins>+    else if (m_mediaElement-&gt;fullscreenMode() &amp; HTMLMediaElement::VideoFullscreenModeOptimized)
</ins><span class="cx">         mode = optimized;
</span><del>-        break;
-    }
</del><span class="cx">     
</span><span class="cx">     LOG(Media, &quot;MediaControlsHost::fullscreenMode - returning \&quot;%s\&quot;&quot;, mode.utf8().data());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -3474,6 +3474,7 @@
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement20beginScanningForwardEv
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement20setVideoLayerGravityENS_23WebVideoFullscreenModel12VideoGravityE
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement21beginScanningBackwardEv
</span><ins>+__ZN7WebCore35WebVideoFullscreenModelVideoElement21fullscreenModeChangedEj
</ins><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement21requestExitFullscreenEv
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement22selectAudioMediaOptionEy
</span><span class="cx"> __ZN7WebCore35WebVideoFullscreenModelVideoElement23setVideoFullscreenLayerEP7CALayer
</span><span class="lines">@@ -3495,7 +3496,7 @@
</span><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit14exitFullscreenENS_7IntRectE
</span><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit14setCurrentTimeEdd
</span><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit15enterFullscreenEv
</span><del>-__ZN7WebCore32WebVideoFullscreenInterfaceAVKit15setupFullscreenER7CALayerNS_7IntRectEP6UIViewNS_16HTMLMediaElement19VideoFullscreenModeEb
</del><ins>+__ZN7WebCore32WebVideoFullscreenInterfaceAVKit15setupFullscreenER7CALayerNS_7IntRectEP6UIViewjb
</ins><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit17cleanupFullscreenEv
</span><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit17setSeekableRangesERKNS_10TimeRangesE
</span><span class="cx"> __ZN7WebCore32WebVideoFullscreenInterfaceAVKit18setVideoDimensionsEbff
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.cpp        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -5996,18 +5996,14 @@
</span><span class="cx"> 
</span><span class="cx"> MediaSession::DisplayType HTMLMediaElement::displayType() const
</span><span class="cx"> {
</span><del>-    switch (m_videoFullscreenMode) {
-    case VideoFullscreenModeStandard:
</del><ins>+    if (m_videoFullscreenMode == VideoFullscreenModeStandard)
</ins><span class="cx">         return MediaSession::Fullscreen;
</span><del>-    case VideoFullscreenModeOptimized:
</del><ins>+    if (m_videoFullscreenMode &amp; VideoFullscreenModeOptimized)
</ins><span class="cx">         return MediaSession::Optimized;
</span><del>-    case VideoFullscreenModeNone:
</del><ins>+    if (m_videoFullscreenMode == VideoFullscreenModeNone)
</ins><span class="cx">         return MediaSession::Normal;
</span><del>-    default:
-        ASSERT_NOT_REACHED();
-        break;
-    }
</del><span class="cx"> 
</span><ins>+    ASSERT_NOT_REACHED();
</ins><span class="cx">     return MediaSession::Normal;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -6075,7 +6071,7 @@
</span><span class="cx">     if (m_player &amp;&amp; m_player-&gt;isCurrentPlaybackTargetWireless())
</span><span class="cx">         return true;
</span><span class="cx"> #endif
</span><del>-    if (m_videoFullscreenMode == VideoFullscreenModeOptimized)
</del><ins>+    if (m_videoFullscreenMode &amp; VideoFullscreenModeOptimized)
</ins><span class="cx">         return true;
</span><span class="cx">     
</span><span class="cx">     return false;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLMediaElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLMediaElement.h        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -392,8 +392,16 @@
</span><span class="cx">     
</span><span class="cx">     WEBCORE_EXPORT virtual bool isFullscreen() const override;
</span><span class="cx">     void toggleFullscreenState();
</span><del>-    enum VideoFullscreenMode { VideoFullscreenModeNone, VideoFullscreenModeStandard, VideoFullscreenModeOptimized };
</del><ins>+
+    enum {
+        VideoFullscreenModeNone = 0,
+        VideoFullscreenModeStandard = 1 &lt;&lt; 0,
+        VideoFullscreenModeOptimized = 1 &lt;&lt; 1,
+    };
+    typedef uint32_t VideoFullscreenMode;
+
</ins><span class="cx">     VideoFullscreenMode fullscreenMode() const { return m_videoFullscreenMode; }
</span><ins>+    void fullscreenModeChanged(VideoFullscreenMode mode) { m_videoFullscreenMode = mode; }
</ins><span class="cx"> 
</span><span class="cx">     void enterFullscreen(VideoFullscreenMode);
</span><span class="cx">     virtual void enterFullscreen() override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKith"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -89,6 +89,7 @@
</span><span class="cx">     WEBCORE_EXPORT virtual void requestHideAndExitFullscreen();
</span><span class="cx"> 
</span><span class="cx">     HTMLMediaElement::VideoFullscreenMode mode() const { return m_mode; }
</span><ins>+    void setIsOptimized(bool);
</ins><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -85,8 +85,9 @@
</span><span class="cx">     WebAVMediaSelectionOption *_currentLegibleMediaSelectionOption;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-@property(retain) AVPlayerController* playerControllerProxy;
-@property(assign) WebVideoFullscreenModel* delegate;
</del><ins>+@property (retain) AVPlayerController* playerControllerProxy;
+@property (assign) WebVideoFullscreenModel* delegate;
+@property (assign) WebVideoFullscreenInterfaceAVKit* fullscreenInterface;
</ins><span class="cx"> 
</span><span class="cx"> @property (readonly) BOOL canScanForward;
</span><span class="cx"> @property BOOL canScanBackward;
</span><span class="lines">@@ -94,7 +95,7 @@
</span><span class="cx"> @property (readonly) BOOL canSeekToEnd;
</span><span class="cx"> 
</span><span class="cx"> @property BOOL canPlay;
</span><del>-@property(getter=isPlaying) BOOL playing;
</del><ins>+@property (getter=isPlaying) BOOL playing;
</ins><span class="cx"> @property BOOL canPause;
</span><span class="cx"> @property BOOL canTogglePlayback;
</span><span class="cx"> @property double rate;
</span><span class="lines">@@ -106,10 +107,10 @@
</span><span class="cx"> @property NSTimeInterval minTime;
</span><span class="cx"> @property NSTimeInterval maxTime;
</span><span class="cx"> @property NSTimeInterval contentDurationWithinEndTimes;
</span><del>-@property(retain) NSArray *loadedTimeRanges;
</del><ins>+@property (retain) NSArray *loadedTimeRanges;
</ins><span class="cx"> @property AVPlayerControllerStatus status;
</span><del>-@property(retain) AVValueTiming *timing;
-@property(retain) NSArray *seekableTimeRanges;
</del><ins>+@property (retain) AVValueTiming *timing;
+@property (retain) NSArray *seekableTimeRanges;
</ins><span class="cx"> 
</span><span class="cx"> @property (readonly) BOOL hasMediaSelectionOptions;
</span><span class="cx"> @property (readonly) BOOL hasAudioMediaSelectionOptions;
</span><span class="lines">@@ -522,9 +523,29 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)setPlayerViewController:(AVPlayerViewController *)playerViewController
</span><span class="cx"> {
</span><ins>+    NSString* propertyName = NSStringFromSelector(@selector(optimizedFullscreenActive));
+
+    [_avPlayerViewController removeObserver:self forKeyPath:propertyName];
</ins><span class="cx">     _avPlayerViewController = playerViewController;
</span><ins>+    [_avPlayerViewController addObserver:self forKeyPath:propertyName options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:nil];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+    UNUSED_PARAM(context);
+    UNUSED_PARAM(object);
+
+    NSString* propertyName = NSStringFromSelector(@selector(optimizedFullscreenActive));
+
+    if ([keyPath isEqualToString:propertyName] &amp;&amp; change[NSKeyValueChangeNewKey]) {
+        BOOL oldActive = [change[NSKeyValueChangeOldKey] boolValue];
+        BOOL active = [change[NSKeyValueChangeNewKey] boolValue];
+        if (oldActive != active &amp;&amp; [_avPlayerController fullscreenInterface])
+            [_avPlayerController fullscreenInterface]-&gt;setIsOptimized(active);
+    }
+}
+
+
</ins><span class="cx"> - (void)setVideoSublayer:(CALayer *)videoSublayer
</span><span class="cx"> {
</span><span class="cx">     _videoSublayer = videoSublayer;
</span><span class="lines">@@ -593,6 +614,11 @@
</span><span class="cx"> 
</span><span class="cx"> WebVideoFullscreenInterfaceAVKit::WebVideoFullscreenInterfaceAVKit()
</span><span class="cx">     : m_videoFullscreenModel(nullptr)
</span><ins>+    , m_fullscreenChangeObserver(nullptr)
+    , m_mode(HTMLMediaElement::VideoFullscreenModeNone)
+    , m_exitRequested(false)
+    , m_exitCompleted(false)
+    , m_enterRequested(false)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -603,6 +629,7 @@
</span><span class="cx">         m_playerController = adoptNS([[WebAVPlayerController alloc] init]);
</span><span class="cx">         if (m_videoFullscreenModel)
</span><span class="cx">             [m_playerController setDelegate:m_videoFullscreenModel];
</span><ins>+        [m_playerController setFullscreenInterface:this];
</ins><span class="cx">     }
</span><span class="cx">     return m_playerController.get();
</span><span class="cx"> }
</span><span class="lines">@@ -894,8 +921,7 @@
</span><span class="cx">                         m_videoFullscreenModel-&gt;requestExitFullscreen();
</span><span class="cx">                 }
</span><span class="cx">             }];
</span><del>-        } else
-        if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) {
</del><ins>+        } else if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) {
</ins><span class="cx">             [m_playerViewController enterFullScreenWithCompletionHandler:^(BOOL, NSError*)
</span><span class="cx">             {
</span><span class="cx">                 [m_playerViewController setShowsPlaybackControls:YES];
</span><span class="lines">@@ -941,8 +967,12 @@
</span><span class="cx">         if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized) {
</span><span class="cx">             [m_window setHidden:NO];
</span><span class="cx">             [m_playerViewController stopOptimizedFullscreen];
</span><del>-        } else
-        if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) {
</del><ins>+        } else if (m_mode == (HTMLMediaElement::VideoFullscreenModeOptimized | HTMLMediaElement::VideoFullscreenModeStandard)) {
+            [m_playerViewController exitFullScreenAnimated:NO completionHandler:^(BOOL , NSError *) {
+                [m_window setHidden:NO];
+                [m_playerViewController stopOptimizedFullscreen];
+            }];
+        } else if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) {
</ins><span class="cx">             [m_playerViewController exitFullScreenWithCompletionHandler:^(BOOL, NSError*) {
</span><span class="cx">                 m_exitCompleted = true;
</span><span class="cx">                 [m_videoLayerContainer setBackgroundColor:[[getUIColorClass() clearColor] CGColor]];
</span><span class="lines">@@ -1008,9 +1038,11 @@
</span><span class="cx"> {
</span><span class="cx">     [m_window setHidden:YES];
</span><span class="cx">     [m_window setRootViewController:nil];
</span><del>-    if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized)
</del><ins>+    m_window = nil;
+    m_videoFullscreenModel = nil;
+    if (m_mode &amp; HTMLMediaElement::VideoFullscreenModeOptimized)
</ins><span class="cx">         [m_playerViewController stopOptimizedFullscreen];
</span><del>-    else
</del><ins>+    if (m_mode &amp; HTMLMediaElement::VideoFullscreenModeStandard)
</ins><span class="cx">         [m_playerViewController exitFullScreenAnimated:NO completionHandler:nil];
</span><span class="cx">     m_playerController = nil;
</span><span class="cx">     [m_playerViewController setDelegate:nil];
</span><span class="lines">@@ -1025,8 +1057,8 @@
</span><span class="cx">     [m_videoLayerContainer setPlayerViewController:nil];
</span><span class="cx">     m_videoLayerContainer = nil;
</span><span class="cx">     [[m_viewController view] removeFromSuperview];
</span><ins>+    [m_playerController setFullscreenInterface:nil];
</ins><span class="cx">     m_viewController = nil;
</span><del>-    m_window = nil;
</del><span class="cx">     m_parentView = nil;
</span><span class="cx">     m_parentWindow = nil;
</span><span class="cx"> }
</span><span class="lines">@@ -1036,7 +1068,7 @@
</span><span class="cx">     if (!m_enterRequested)
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized)
</del><ins>+    if (m_mode &amp; HTMLMediaElement::VideoFullscreenModeOptimized)
</ins><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     __block RefPtr&lt;WebVideoFullscreenInterfaceAVKit&gt; protect(this);
</span><span class="lines">@@ -1053,5 +1085,33 @@
</span><span class="cx">         m_videoFullscreenModel-&gt;requestExitFullscreen();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebVideoFullscreenInterfaceAVKit::setIsOptimized(bool active)
+{
+    if (m_mode &amp; HTMLMediaElement::VideoFullscreenModeStandard) {
+        if (!active &amp;&amp; m_mode &amp; HTMLMediaElement::VideoFullscreenModeOptimized)
+            m_mode &amp;= ~HTMLMediaElement::VideoFullscreenModeOptimized;
+        else if (active &amp;&amp; ~m_mode &amp; HTMLMediaElement::VideoFullscreenModeOptimized)
+            m_mode |= HTMLMediaElement::VideoFullscreenModeOptimized;
+    }
+    
+    if (m_videoFullscreenModel)
+        m_videoFullscreenModel-&gt;fullscreenModeChanged(m_mode);
</ins><span class="cx"> 
</span><ins>+    if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized)
+        return;
+    
+    [m_window setHidden:m_mode &amp; HTMLMediaElement::VideoFullscreenModeOptimized];
+    
+    if (!m_exitRequested || active)
+        return;
+    
+    m_exitCompleted = true;
+    [m_videoLayerContainer setBackgroundColor:[[getUIColorClass() clearColor] CGColor]];
+    [[m_playerViewController view] setBackgroundColor:[getUIColorClass() clearColor]];
+    WebThreadRun(^{
+        if (m_fullscreenChangeObserver)
+            m_fullscreenChangeObserver-&gt;didExitFullscreen();
+    });
+}
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModel.h        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -52,6 +52,7 @@
</span><span class="cx">     virtual void setVideoLayerGravity(VideoGravity) = 0;
</span><span class="cx">     virtual void selectAudioMediaOption(uint64_t index) = 0;
</span><span class="cx">     virtual void selectLegibleMediaOption(uint64_t index) = 0;
</span><ins>+    virtual void fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode) = 0;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelVideoElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.h        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;WebCore/EventListener.h&gt;
</span><span class="cx"> #include &lt;WebCore/FloatRect.h&gt;
</span><ins>+#include &lt;WebCore/HTMLMediaElement.h&gt;
</ins><span class="cx"> #include &lt;WebCore/PlatformLayer.h&gt;
</span><span class="cx"> #include &lt;WebCore/WebVideoFullscreenModel.h&gt;
</span><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="lines">@@ -70,6 +71,7 @@
</span><span class="cx">     WEBCORE_EXPORT virtual void setVideoLayerGravity(WebVideoFullscreenModel::VideoGravity) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void selectAudioMediaOption(uint64_t index) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void selectLegibleMediaOption(uint64_t index) override;
</span><ins>+    WEBCORE_EXPORT virtual void fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     static const Vector&lt;WTF::AtomicString&gt;&amp; observedEventNames();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenModelVideoElementmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelVideoElement.mm        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx"> WebVideoFullscreenModelVideoElement::WebVideoFullscreenModelVideoElement()
</span><span class="cx">     : EventListener(EventListener::CPPEventListenerType)
</span><span class="cx">     , m_isListening(false)
</span><ins>+    , m_videoFullscreenInterface(nullptr)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -378,4 +379,14 @@
</span><span class="cx">     return sEventNameAll;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebVideoFullscreenModelVideoElement::fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode videoFullscreenMode)
+{
+    __block RefPtr&lt;WebVideoFullscreenModelVideoElement&gt; protect(this);
+    WebThreadRun(^{
+        if (m_videoElement)
+            m_videoElement-&gt;fullscreenModeChanged(videoFullscreenMode);
+        protect.clear();
+    });
+}
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/ChangeLog        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2014-12-09  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Enable activating optimized fullscreen mode from standard fulscreen mode.
+        https://bugs.webkit.org/show_bug.cgi?id=139137
+
+        Reviewed by Simon Fraser.
+
+        Going from standard fullscreen mode to optimized fullscreen mode requires the ability to
+        update the fullscreen mode and a new standard-and-optimized-fullscreen mode.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _isPlayingFullscreenOptimizedVideo]): 
+        Treat new standard-and-optimized as a kind of optimized.
+        * UIProcess/ios/WebVideoFullscreenManagerProxy.h: IPC fullscreen mode changes
+        * UIProcess/ios/WebVideoFullscreenManagerProxy.mm: ditto
+        (WebKit::WebVideoFullscreenManagerProxy::fullscreenModeChanged): dito
+        * WebProcess/ios/WebVideoFullscreenManager.h: ditto
+        * WebProcess/ios/WebVideoFullscreenManager.messages.in: ditto
+        * WebProcess/ios/WebVideoFullscreenManager.mm: dito
+        (WebKit::WebVideoFullscreenManager::WebVideoFullscreenManager): ditto
+        (WebKit::WebVideoFullscreenManager::setFullscreenModeChanged): ditto
+
</ins><span class="cx"> 2014-12-08  Jaehun Lim  &lt;ljaehun.lim@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] Use DependenciesEFL instead of Dependencies
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -235,7 +235,13 @@
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)_isPlayingFullscreenOptimizedVideo
</span><span class="cx"> {
</span><del>-    return _page-&gt;videoFullscreenManager() &amp;&amp; _page-&gt;videoFullscreenManager()-&gt;mode() == WebCore::HTMLMediaElement::HTMLMediaElement::VideoFullscreenModeOptimized;
</del><ins>+    if (!_page-&gt;videoFullscreenManager())
+        return false;
+    
+    if (_page-&gt;videoFullscreenManager()-&gt;mode() &amp; WebCore::HTMLMediaElement::HTMLMediaElement::VideoFullscreenModeOptimized)
+        return true;
+    
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.h        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -55,9 +55,10 @@
</span><span class="cx">     virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&amp;) override;
</span><span class="cx"> 
</span><span class="cx">     // Translate to FullscreenInterface
</span><del>-    void setupFullscreenWithID(uint32_t, WebCore::IntRect initialRect, float hostingDeviceScaleFactor, uint32_t videoFullscreenMode, bool allowOptimizedFullscreen);
</del><ins>+    void setupFullscreenWithID(uint32_t, WebCore::IntRect initialRect, float hostingDeviceScaleFactor, WebCore::HTMLMediaElement::VideoFullscreenMode, bool allowOptimizedFullscreen);
</ins><span class="cx">     void setSeekableRangesVector(Vector&lt;std::pair&lt;double, double&gt;&gt;&amp;);
</span><span class="cx">     void setExternalPlaybackProperties(bool enabled, uint32_t targetType, String localizedDeviceName);
</span><ins>+    void fullscreenModeChanged(WebCore::HTMLMediaElement::VideoFullscreenMode);
</ins><span class="cx">     
</span><span class="cx">     // Fullscreen Observer
</span><span class="cx">     virtual void didSetupFullscreen() override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx">     SetExternalPlaybackProperties(bool enabled, uint32_t targetType, String localizedDeviceName);
</span><span class="cx">     SetDuration(double duration)
</span><span class="cx">     SetRate(bool isPlaying, double rate)
</span><del>-    SetupFullscreenWithID(uint32_t videoLayerID, WebCore::IntRect initialRect, float hostingScaleFactor, uint32_t videoFullscreenMode, bool allowOptimizedFullscreen)
</del><ins>+    SetupFullscreenWithID(uint32_t videoLayerID, WebCore::IntRect initialRect, float hostingScaleFactor, WebCore::HTMLMediaElement::VideoFullscreenMode videoFullscreenMode, bool allowOptimizedFullscreen)
</ins><span class="cx">     EnterFullscreen()
</span><span class="cx">     ExitFullscreen(WebCore::IntRect finalRect)
</span><span class="cx">     CleanupFullscreen()
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWebVideoFullscreenManagerProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.mm        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     m_layerHost.clear();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebVideoFullscreenManagerProxy::setupFullscreenWithID(uint32_t videoLayerID, WebCore::IntRect initialRect, float hostingDeviceScaleFactor, uint32_t videoFullscreenMode, bool allowOptimizedFullscreen)
</del><ins>+void WebVideoFullscreenManagerProxy::setupFullscreenWithID(uint32_t videoLayerID, WebCore::IntRect initialRect, float hostingDeviceScaleFactor, HTMLMediaElement::VideoFullscreenMode videoFullscreenMode, bool allowOptimizedFullscreen)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(videoLayerID);
</span><span class="cx">     m_layerHost = WKMakeRenderLayer(videoLayerID);
</span><span class="lines">@@ -95,10 +95,14 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     UIView *parentView = downcast&lt;RemoteLayerTreeDrawingAreaProxy&gt;(*m_page-&gt;drawingArea()).remoteLayerTreeHost().rootLayer();
</span><del>-    HTMLMediaElement::VideoFullscreenMode mode = static_cast&lt;HTMLMediaElement::VideoFullscreenMode&gt;(videoFullscreenMode);
-    setupFullscreen(*m_layerHost.get(), initialRect, parentView, mode, allowOptimizedFullscreen);
</del><ins>+    setupFullscreen(*m_layerHost.get(), initialRect, parentView, videoFullscreenMode, allowOptimizedFullscreen);
</ins><span class="cx"> }
</span><span class="cx">     
</span><ins>+void WebVideoFullscreenManagerProxy::fullscreenModeChanged(HTMLMediaElement::VideoFullscreenMode mode)
+{
+    m_page-&gt;send(Messages::WebVideoFullscreenManager::fullscreenModeChanged(mode), m_page-&gt;pageID());
+}
+    
</ins><span class="cx"> void WebVideoFullscreenManagerProxy::setSeekableRangesVector(Vector&lt;std::pair&lt;double, double&gt;&gt;&amp; ranges)
</span><span class="cx"> {
</span><span class="cx">     RefPtr&lt;TimeRanges&gt; timeRanges = TimeRanges::create();
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.messages.in        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -41,5 +41,6 @@
</span><span class="cx">     SetVideoLayerGravityEnum(unsigned gravity)
</span><span class="cx">     SelectAudioMediaOption(uint64_t index)
</span><span class="cx">     SelectLegibleMediaOption(uint64_t index)
</span><ins>+    fullscreenModeChanged(WebCore::HTMLMediaElement::VideoFullscreenMode videoFullscreenMode)
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessiosWebVideoFullscreenManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm (177011 => 177012)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm        2014-12-09 07:26:42 UTC (rev 177011)
+++ trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm        2014-12-09 08:25:09 UTC (rev 177012)
</span><span class="lines">@@ -69,6 +69,7 @@
</span><span class="cx">     : m_page(page.get())
</span><span class="cx">     , m_isAnimating(false)
</span><span class="cx">     , m_targetIsFullscreen(false)
</span><ins>+    , m_fullscreenMode(HTMLMediaElement::VideoFullscreenModeNone)
</ins><span class="cx">     , m_isFullscreen(false)
</span><span class="cx"> {
</span><span class="cx">     setWebVideoFullscreenInterface(this);
</span></span></pre>
</div>
</div>

</body>
</html>