<!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>[175812] 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/175812">175812</a></dd>
<dt>Author</dt> <dd>eric.carlson@apple.com</dd>
<dt>Date</dt> <dd>2014-11-10 10:35:17 -0800 (Mon, 10 Nov 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] wireless playback placeholder UI doesn't always draw
https://bugs.webkit.org/show_bug.cgi?id=138548

While it is important to only listen for the 'webkitplaybacktargetavailabilitychanged' event
when we are displaying inline controls because listening for it increases power consumption,
we should always listen for the 'webkitcurrentplaybacktargetiswirelesschanged' event because
it controls whether or not we draw the placeholder UI which is always visible during wireless
playback.

Reviewed by Brent Fulgham.

* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS.prototype.addVideoListeners): Always listen for the
    'webkitcurrentplaybacktargetiswirelesschanged' event.
(ControllerIOS.prototype.removeVideoListeners): Always stop listening for the
    'webkitcurrentplaybacktargetiswirelesschanged' event.
(ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): Call updateControls so we update
    the type of controls rendered and start listening for wireless target changes immediately.
(ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): Don't start and stop
    listening for 'webkitcurrentplaybacktargetiswirelesschanged', we should always listen for it.</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>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (175811 => 175812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-11-10 18:04:27 UTC (rev 175811)
+++ trunk/Source/WebCore/ChangeLog        2014-11-10 18:35:17 UTC (rev 175812)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-11-10  Eric Carlson  &lt;eric.carlson@apple.com&gt;
+
+        [iOS] wireless playback placeholder UI doesn't always draw
+        https://bugs.webkit.org/show_bug.cgi?id=138548
+
+        While it is important to only listen for the 'webkitplaybacktargetavailabilitychanged' event
+        when we are displaying inline controls because listening for it increases power consumption,
+        we should always listen for the 'webkitcurrentplaybacktargetiswirelesschanged' event because
+        it controls whether or not we draw the placeholder UI which is always visible during wireless
+        playback.
+
+        Reviewed by Brent Fulgham.
+
+        * Modules/mediacontrols/mediaControlsiOS.js:
+        (ControllerIOS.prototype.addVideoListeners): Always listen for the
+            'webkitcurrentplaybacktargetiswirelesschanged' event.
+        (ControllerIOS.prototype.removeVideoListeners): Always stop listening for the 
+            'webkitcurrentplaybacktargetiswirelesschanged' event.
+        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): Call updateControls so we update 
+            the type of controls rendered and start listening for wireless target changes immediately.
+        (ControllerIOS.prototype.setShouldListenForPlaybackTargetAvailabilityEvent): Don't start and stop 
+            listening for 'webkitcurrentplaybacktargetiswirelesschanged', we should always listen for it.
+
</ins><span class="cx"> 2014-11-10  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Crash in WebCore::Node::getFlag
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediacontrolsmediaControlsiOSjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (175811 => 175812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2014-11-10 18:04:27 UTC (rev 175811)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2014-11-10 18:35:17 UTC (rev 175812)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> 
</span><span class="cx">         this.listenFor(this.video, 'webkitbeginfullscreen', this.handleFullscreenChange);
</span><span class="cx">         this.listenFor(this.video, 'webkitendfullscreen', this.handleFullscreenChange);
</span><ins>+        this.listenFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     removeVideoListeners: function() {
</span><span class="lines">@@ -39,6 +40,7 @@
</span><span class="cx"> 
</span><span class="cx">         this.stopListeningFor(this.video, 'webkitbeginfullscreen', this.handleFullscreenChange);
</span><span class="cx">         this.stopListeningFor(this.video, 'webkitendfullscreen', this.handleFullscreenChange);
</span><ins>+        this.stopListeningFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
</ins><span class="cx"> 
</span><span class="cx">         this.setShouldListenForPlaybackTargetAvailabilityEvent(false);
</span><span class="cx">     },
</span><span class="lines">@@ -472,6 +474,7 @@
</span><span class="cx">             return true;
</span><span class="cx"> 
</span><span class="cx">         this.video.play();
</span><ins>+        this.updateControls();
</ins><span class="cx"> 
</span><span class="cx">         return true;
</span><span class="cx">     },
</span><span class="lines">@@ -553,13 +556,10 @@
</span><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         this.isListeningForPlaybackTargetAvailabilityEvent = shouldListen;
</span><del>-        if (shouldListen) {
-            this.listenFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
</del><ins>+        if (shouldListen)
</ins><span class="cx">             this.listenFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
</span><del>-        } else {
-            this.stopListeningFor(this.video, 'webkitcurrentplaybacktargetiswirelesschanged', this.handleWirelessPlaybackChange);
</del><ins>+        else
</ins><span class="cx">             this.stopListeningFor(this.video, 'webkitplaybacktargetavailabilitychanged', this.handleWirelessTargetAvailableChange);
</span><del>-        }
</del><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     get pageScaleFactor()
</span></span></pre>
</div>
</div>

</body>
</html>