<!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>[170572] 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/170572">170572</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2014-06-28 19:44:15 -0700 (Sat, 28 Jun 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Pinching into a video (fullscreen gesture) leaves page zoomed in
https://bugs.webkit.org/show_bug.cgi?id=134433
&lt;rdar://problem/16630794&gt;

Reviewed by Eric Carlson.

Detect the number of target touches (those directly on the
video element) and disable the page zoom if it looks
like the user is trying to trigger fullscreen.

* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS.prototype.handleBaseGestureStart): If we are seeing
two touches in this video element, don't trigger fullscreen. The
exception is if we haven't yet started playback.
(ControllerIOS.prototype.handleBaseGestureChange): Don't allow fullscreen
if we haven't started playback (iOS 7 behaviour).
(ControllerIOS.prototype.handleWrapperTouchStart): Keep track of the
number of targetted touches.</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 (170571 => 170572)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-06-28 23:49:29 UTC (rev 170571)
+++ trunk/Source/WebCore/ChangeLog        2014-06-29 02:44:15 UTC (rev 170572)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-06-28  Dean Jackson  &lt;dino@apple.com&gt;
+
+        [iOS] Pinching into a video (fullscreen gesture) leaves page zoomed in
+        https://bugs.webkit.org/show_bug.cgi?id=134433
+        &lt;rdar://problem/16630794&gt;
+
+        Reviewed by Eric Carlson.
+
+        Detect the number of target touches (those directly on the
+        video element) and disable the page zoom if it looks
+        like the user is trying to trigger fullscreen.
+
+        * Modules/mediacontrols/mediaControlsiOS.js:
+        (ControllerIOS.prototype.handleBaseGestureStart): If we are seeing
+        two touches in this video element, don't trigger fullscreen. The
+        exception is if we haven't yet started playback.
+        (ControllerIOS.prototype.handleBaseGestureChange): Don't allow fullscreen
+        if we haven't started playback (iOS 7 behaviour).
+        (ControllerIOS.prototype.handleWrapperTouchStart): Keep track of the
+        number of targetted touches.
+
</ins><span class="cx"> 2014-06-27  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS WK2] position:fixed inside accelerated overflow:scroll is jumpy
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesmediacontrolsmediaControlsiOSjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (170571 => 170572)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2014-06-28 23:49:29 UTC (rev 170571)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js        2014-06-29 02:44:15 UTC (rev 170572)
</span><span class="lines">@@ -287,10 +287,15 @@
</span><span class="cx"> 
</span><span class="cx">     handleBaseGestureStart: function(event) {
</span><span class="cx">         this.gestureStartTime = new Date();
</span><ins>+        // If this gesture started with two fingers inside the video, then
+        // don't treat it as a potential zoom, unless we're still waiting
+        // to play.
+        if (this.mostRecentNumberOfTargettedTouches == 2 &amp;&amp; this.controlsType != ControllerIOS.StartPlaybackControls)
+            event.preventDefault();
</ins><span class="cx">     },
</span><span class="cx"> 
</span><span class="cx">     handleBaseGestureChange: function(event) {
</span><del>-        if (!this.video.controls || this.isAudio() || this.isFullScreen() || this.gestureStartTime === undefined)
</del><ins>+        if (!this.video.controls || this.isAudio() || this.isFullScreen() || this.gestureStartTime === undefined || this.controlsType == ControllerIOS.StartPlaybackControls)
</ins><span class="cx">             return;
</span><span class="cx"> 
</span><span class="cx">         var currentGestureTime = new Date();
</span><span class="lines">@@ -315,6 +320,8 @@
</span><span class="cx">         if (event.target != this.base &amp;&amp; event.target != this.controls.wirelessPlaybackStatus)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><ins>+        this.mostRecentNumberOfTargettedTouches = event.targetTouches.length;
+
</ins><span class="cx">         if (this.controlsAreHidden()) {
</span><span class="cx">             this.showControls();
</span><span class="cx">             if (this.hideTimer)
</span></span></pre>
</div>
</div>

</body>
</html>