<!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>[200432] trunk/Source/WebCore</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/200432">200432</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-05-04 15:03:45 -0700 (Wed, 04 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Don't disconnect WebAVPlayerController from its delegate since there is no way to reconnect it.
https://bugs.webkit.org/show_bug.cgi?id=157337

Patch by Jeremy Jones &lt;jeremyj@apple.com&gt; on 2016-05-04
Reviewed by Jer Noble.

WebAVPlayerController used to be deleted and recreated each time we begin fullscreen video mode.
Since it is now preserved, we shouldn't paritally tear it down in cleanupFullscreen by disconnecting it
from its delegate, especially since we have no way to reconnect it.

The side effect of leaving it connected is that it can continue to make callbacks during cleanup.
Of importance is that it sets the audio and legible media selctions to nil. We don't want to change
the selection as a result of teardown. Nil selection is unsupported by WebVideoFullscreenModelVideoElement
and causes an assert. This transition to nil selection is now ignored.

* platform/ios/WebAVPlayerController.mm:
(-[WebAVPlayerController setCurrentAudioMediaSelectionOption:]):
(-[WebAVPlayerController setCurrentLegibleMediaSelectionOption:]):
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebAVPlayerControllermm">trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm">trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200431 => 200432)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-04 21:33:45 UTC (rev 200431)
+++ trunk/Source/WebCore/ChangeLog        2016-05-04 22:03:45 UTC (rev 200432)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-05-04  Jeremy Jones  &lt;jeremyj@apple.com&gt;
+
+        Don't disconnect WebAVPlayerController from its delegate since there is no way to reconnect it.
+        https://bugs.webkit.org/show_bug.cgi?id=157337
+
+        Reviewed by Jer Noble.
+
+        WebAVPlayerController used to be deleted and recreated each time we begin fullscreen video mode.
+        Since it is now preserved, we shouldn't paritally tear it down in cleanupFullscreen by disconnecting it
+        from its delegate, especially since we have no way to reconnect it.
+
+        The side effect of leaving it connected is that it can continue to make callbacks during cleanup.
+        Of importance is that it sets the audio and legible media selctions to nil. We don't want to change 
+        the selection as a result of teardown. Nil selection is unsupported by WebVideoFullscreenModelVideoElement
+        and causes an assert. This transition to nil selection is now ignored.
+
+        * platform/ios/WebAVPlayerController.mm:
+        (-[WebAVPlayerController setCurrentAudioMediaSelectionOption:]):
+        (-[WebAVPlayerController setCurrentLegibleMediaSelectionOption:]):
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+        (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen):
+
</ins><span class="cx"> 2016-05-04  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Media elements should not be paused right away when removed from the document
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebAVPlayerControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm (200431 => 200432)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm        2016-05-04 21:33:45 UTC (rev 200431)
+++ trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm        2016-05-04 22:03:45 UTC (rev 200432)
</span><span class="lines">@@ -401,7 +401,10 @@
</span><span class="cx">     if (option &amp;&amp; self.audioMediaSelectionOptions)
</span><span class="cx">         index = [self.audioMediaSelectionOptions indexOfObject:option];
</span><span class="cx"> 
</span><del>-    self.delegate-&gt;selectAudioMediaOption(index != NSNotFound ? index : UINT64_MAX);
</del><ins>+    if (index == NSNotFound)
+        return;
+
+    self.delegate-&gt;selectAudioMediaOption(index);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (WebAVMediaSelectionOption *)currentLegibleMediaSelectionOption
</span><span class="lines">@@ -425,7 +428,10 @@
</span><span class="cx">     if (option &amp;&amp; self.legibleMediaSelectionOptions)
</span><span class="cx">         index = [self.legibleMediaSelectionOptions indexOfObject:option];
</span><span class="cx"> 
</span><del>-    self.delegate-&gt;selectLegibleMediaOption(index != NSNotFound ? index : UINT64_MAX);
</del><ins>+    if (index == NSNotFound)
+        return;
+
+    self.delegate-&gt;selectLegibleMediaOption(index);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)isPlayingOnExternalScreen
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosWebVideoFullscreenInterfaceAVKitmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (200431 => 200432)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2016-05-04 21:33:45 UTC (rev 200431)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm        2016-05-04 22:03:45 UTC (rev 200432)
</span><span class="lines">@@ -815,8 +815,6 @@
</span><span class="cx">             [[getUIApplicationClass() sharedApplication] _setStatusBarOrientation:[m_parentWindow interfaceOrientation]];
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    [playerController() setDelegate:nil];
-    
</del><span class="cx">     [m_playerViewController setDelegate:nil];
</span><span class="cx">     [m_playerViewController setPlayerController:nil];
</span><span class="cx">     
</span></span></pre>
</div>
</div>

</body>
</html>