<!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>[188405] trunk</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/188405">188405</a></dd>
<dt>Author</dt> <dd>wenson_hsieh@apple.com</dd>
<dt>Date</dt> <dd>2015-08-13 14:48:50 -0700 (Thu, 13 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>A focused node should not be assisted when handling touch events synchronously
https://bugs.webkit.org/show_bug.cgi?id=147836
.:

Reviewed by Enrica Casucci.

Added manual tests for keyboard assistance behavior due to receiving touch events on iOS.

* ManualTests/ios/focused-input-should-assist-on-touch.html: Checks that a currently focused
        input can still be assisted due to a touch event.
* ManualTests/ios/keyboard-should-not-show-on-touch-event.html: Checks that handling a touch
        event does not automatically cause us to assist the currently focused node.

Source/WebCore:

&lt;rdar://problem/22204108&gt;

Reviewed by Enrica Casucci.

Makes interaction with touch handlers no longer assist the currently focused element in the
general case. Added plumbing to reassist a currently focused node when dispatching touch events,
so that an input that programmatically focuses itself and prevents default on a touch event will
be properly assisted when it has been programmatically focused (either through Javascript or the
autofocus attribute) prior to receiving the touch event. This patch also removes the now
unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
upon autofocus.

* dom/Element.cpp:
(WebCore::Element::focus): Notifies the chrome client that the element has refocused before
    returning early.
* page/ChromeClient.h: Refocusing an element does nothing by default.
* platform/RuntimeApplicationChecksIOS.h: Removed special casing for Gmail Add Account.
* platform/RuntimeApplicationChecksIOS.mm: See above.
(WebCore::applicationIsGmailAddAccountOnIOS): See above.

Source/WebKit2:

&lt;rdar://problem/22204108&gt;

Reviewed by Enrica Casucci.

Makes interaction with touch handlers no longer assist the currently focused element in the
general case. Added plumbing to reassist a currently focused node when dispatching touch events,
so that an input that programmatically focuses itself and prevents default on a touch event will
be properly assisted when it has been programmatically focused (either through Javascript or the
autofocus attribute) prior to receiving the touch event. This patch also removes the now
unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
upon autofocus.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Removed
    special case to avoid the early return for Gmail Add Account.
* WebProcess/WebCoreSupport/WebChromeClient.h: Added a handler for refocusing an element.
* WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
(WebKit::WebChromeClient::elementDidRefocus): Makes refocusing an element trigger input
    assistance on iOS.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::dispatchTouchEvent): Removes logic to focus the currently focused element upon
    receiving a touch event.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkChangeLog">trunk/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomElementcpp">trunk/Source/WebCore/dom/Element.cpp</a></li>
<li><a href="#trunkSourceWebCorepageChromeClienth">trunk/Source/WebCore/page/ChromeClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformRuntimeApplicationChecksIOSh">trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h</a></li>
<li><a href="#trunkSourceWebCoreplatformRuntimeApplicationChecksIOSmm">trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosWKContentViewInteractionmm">trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportiosWebChromeClientIOSmm">trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkManualTestsiosfocusedinputshouldassistontouchhtml">trunk/ManualTests/ios/focused-input-should-assist-on-touch.html</a></li>
<li><a href="#trunkManualTestsioskeyboardshouldnotshowontoucheventhtml">trunk/ManualTests/ios/keyboard-should-not-show-on-touch-event.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/ChangeLog (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ChangeLog        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/ChangeLog        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2015-08-13  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        A focused node should not be assisted when handling touch events synchronously
+        https://bugs.webkit.org/show_bug.cgi?id=147836
+
+        Reviewed by Enrica Casucci.
+
+        Added manual tests for keyboard assistance behavior due to receiving touch events on iOS.
+
+        * ManualTests/ios/focused-input-should-assist-on-touch.html: Checks that a currently focused
+                input can still be assisted due to a touch event.
+        * ManualTests/ios/keyboard-should-not-show-on-touch-event.html: Checks that handling a touch
+                event does not automatically cause us to assist the currently focused node.
+
</ins><span class="cx"> 2015-08-12  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix Debug CMake builds on Windows
</span></span></pre></div>
<a id="trunkManualTestsiosfocusedinputshouldassistontouchhtml"></a>
<div class="addfile"><h4>Added: trunk/ManualTests/ios/focused-input-should-assist-on-touch.html (0 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ManualTests/ios/focused-input-should-assist-on-touch.html                                (rev 0)
+++ trunk/ManualTests/ios/focused-input-should-assist-on-touch.html        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
+    &lt;script&gt;
+        function handleTouchEvent(event) {
+            event.target.focus();
+            event.preventDefault();
+        }
+    &lt;/script&gt;
+
+    &lt;style&gt;
+        input:focus {
+            outline: none;
+            border: 1px solid #4D90FE;
+        }
+    &lt;/style&gt;
+
+&lt;/head&gt;
+
+&lt;body style=&quot;margin: 0;&quot;&gt;
+    &lt;p&gt;This tests checks that a node can be assisted when focused due to a touch event, even when the focus does not change.&lt;/p&gt;
+    &lt;p&gt;Tapping the below input should show the keyboard.&lt;/p&gt;
+    &lt;input autofocus ontouchstart=&quot;handleTouchEvent(event);&quot;&gt;&lt;/input&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkManualTestsioskeyboardshouldnotshowontoucheventhtml"></a>
<div class="addfile"><h4>Added: trunk/ManualTests/ios/keyboard-should-not-show-on-touch-event.html (0 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ManualTests/ios/keyboard-should-not-show-on-touch-event.html                                (rev 0)
+++ trunk/ManualTests/ios/keyboard-should-not-show-on-touch-event.html        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+&lt;html&gt;
+&lt;head&gt;
+    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
+    &lt;script&gt;
+        function touchTest(event) { }
+    &lt;/script&gt;
+
+    &lt;style&gt;
+        button {
+            top: 300px;
+            left: 100px;
+            width: 200px;
+            height: 200px;
+            background-color: #FFAAAA;
+            position: absolute;
+            padding: 10px;
+        }
+
+        input:focus {
+            outline: none;
+            border: 1px solid #4D90FE;
+        }
+    &lt;/style&gt;
+
+&lt;/head&gt;
+
+&lt;body style=&quot;margin: 0;&quot;&gt;
+    &lt;button ontouchstart=&quot;touchTest(event);&quot;&gt;
+        &lt;p&gt;This test checks that any interaction that fires touch events will not assist the currently focused node.&lt;/p&gt;
+        &lt;p&gt;Thus, tapping in this touch-handling region should not deploy the keyboard for the autofocused input above.&lt;/p&gt;
+    &lt;/button&gt;
+    &lt;input autofocus&gt;&lt;/input&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebCore/ChangeLog        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2015-08-13  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        A focused node should not be assisted when handling touch events synchronously
+        https://bugs.webkit.org/show_bug.cgi?id=147836
+        &lt;rdar://problem/22204108&gt;
+
+        Reviewed by Enrica Casucci.
+
+        Makes interaction with touch handlers no longer assist the currently focused element in the
+        general case. Added plumbing to reassist a currently focused node when dispatching touch events,
+        so that an input that programmatically focuses itself and prevents default on a touch event will
+        be properly assisted when it has been programmatically focused (either through Javascript or the
+        autofocus attribute) prior to receiving the touch event. This patch also removes the now
+        unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
+        upon autofocus.
+
+        * dom/Element.cpp:
+        (WebCore::Element::focus): Notifies the chrome client that the element has refocused before
+            returning early.
+        * page/ChromeClient.h: Refocusing an element does nothing by default.
+        * platform/RuntimeApplicationChecksIOS.h: Removed special casing for Gmail Add Account.
+        * platform/RuntimeApplicationChecksIOS.mm: See above.
+        (WebCore::applicationIsGmailAddAccountOnIOS): See above.
+
</ins><span class="cx"> 2015-08-13  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Unreviewed build fix.
</span></span></pre></div>
<a id="trunkSourceWebCoredomElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Element.cpp (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Element.cpp        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebCore/dom/Element.cpp        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -2117,8 +2117,12 @@
</span><span class="cx">     if (!inDocument())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (document().focusedElement() == this)
</del><ins>+    if (document().focusedElement() == this) {
+        if (document().page())
+            document().page()-&gt;chrome().client().elementDidRefocus(this);
+
</ins><span class="cx">         return;
</span><ins>+    }
</ins><span class="cx"> 
</span><span class="cx">     // If the stylesheets have already been loaded we can reliably check isFocusable.
</span><span class="cx">     // If not, we continue and set the focused node on the focus controller below so
</span></span></pre></div>
<a id="trunkSourceWebCorepageChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ChromeClient.h (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ChromeClient.h        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebCore/page/ChromeClient.h        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -281,6 +281,7 @@
</span><span class="cx">         
</span><span class="cx">     virtual void elementDidFocus(const Node*) { };
</span><span class="cx">     virtual void elementDidBlur(const Node*) { };
</span><ins>+    virtual void elementDidRefocus(const Node*) { };
</ins><span class="cx">     
</span><span class="cx">     virtual bool shouldPaintEntireContents() const { return false; }
</span><span class="cx">     virtual bool hasStablePageScaleFactor() const { return true; }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformRuntimeApplicationChecksIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> WEBCORE_EXPORT bool applicationIsTheEconomistOnIPhone();
</span><span class="cx"> bool applicationIsWebProcess();
</span><span class="cx"> bool applicationIsIBooksOnIOS();
</span><del>-WEBCORE_EXPORT bool applicationIsGmailAddAccountOnIOS();
</del><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformRuntimeApplicationChecksIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -122,12 +122,6 @@
</span><span class="cx">     return isIBooksOnIOS;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool applicationIsGmailAddAccountOnIOS()
-{
-    static const bool isGmailAddAccountOnIOS = [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@&quot;com.apple.social.SLGoogleAuth.SLGoogleAuthService&quot;];
-    return isGmailAddAccountOnIOS;
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebKit2/ChangeLog        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2015-08-13  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
+
+        A focused node should not be assisted when handling touch events synchronously
+        https://bugs.webkit.org/show_bug.cgi?id=147836
+        &lt;rdar://problem/22204108&gt;
+
+        Reviewed by Enrica Casucci.
+
+        Makes interaction with touch handlers no longer assist the currently focused element in the
+        general case. Added plumbing to reassist a currently focused node when dispatching touch events,
+        so that an input that programmatically focuses itself and prevents default on a touch event will
+        be properly assisted when it has been programmatically focused (either through Javascript or the
+        autofocus attribute) prior to receiving the touch event. This patch also removes the now
+        unnecessary special-casing of the Gmail settings app that currently makes the keyboard deploy
+        upon autofocus.
+
+        * UIProcess/ios/WKContentViewInteraction.mm:
+        (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:userObject:]): Removed
+            special case to avoid the early return for Gmail Add Account.
+        * WebProcess/WebCoreSupport/WebChromeClient.h: Added a handler for refocusing an element.
+        * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
+        (WebKit::WebChromeClient::elementDidRefocus): Makes refocusing an element trigger input
+            assistance on iOS.
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::dispatchTouchEvent): Removes logic to focus the currently focused element upon
+            receiving a touch event.
+
</ins><span class="cx"> 2015-08-13  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add WKWindowFeaturesRef and a new modern createNewPage UI client callback
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosWKContentViewInteractionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -3012,7 +3012,7 @@
</span><span class="cx"> {
</span><span class="cx">     // FIXME: This is a temporary workaround for &lt;rdar://problem/22126518&gt;. The real fix will involve refactoring
</span><span class="cx">     // the way we assist programmatically focused nodes.
</span><del>-    if (!applicationIsGmailAddAccountOnIOS() &amp;&amp; !userIsInteracting &amp;&amp; !_textSelectionAssistant)
</del><ins>+    if (!userIsInteracting &amp;&amp; !_textSelectionAssistant)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (blurPreviousNode)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -243,6 +243,7 @@
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     virtual void elementDidFocus(const WebCore::Node*) override;
</span><span class="cx">     virtual void elementDidBlur(const WebCore::Node*) override;
</span><ins>+    virtual void elementDidRefocus(const WebCore::Node*) override;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportiosWebChromeClientIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -54,6 +54,11 @@
</span><span class="cx">     m_page-&gt;elementDidBlur(const_cast&lt;WebCore::Node*&gt;(node));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebChromeClient::elementDidRefocus(const WebCore::Node* node)
+{
+    elementDidFocus(node);
+}
+
</ins><span class="cx"> void WebChromeClient::didReceiveMobileDocType(bool isMobileDoctype)
</span><span class="cx"> {
</span><span class="cx">     m_page-&gt;didReceiveMobileDocType(isMobileDoctype);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (188404 => 188405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-08-13 21:31:36 UTC (rev 188404)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-08-13 21:48:50 UTC (rev 188405)
</span><span class="lines">@@ -2190,24 +2190,12 @@
</span><span class="cx"> #if ENABLE(IOS_TOUCH_EVENTS)
</span><span class="cx"> void WebPage::dispatchTouchEvent(const WebTouchEvent&amp; touchEvent, bool&amp; handled)
</span><span class="cx"> {
</span><del>-    RefPtr&lt;Frame&gt; oldFocusedFrame = m_page-&gt;focusController().focusedFrame();
-    RefPtr&lt;Element&gt; oldFocusedElement = oldFocusedFrame ? oldFocusedFrame-&gt;document()-&gt;focusedElement() : nullptr;
</del><span class="cx">     m_userIsInteracting = true;
</span><span class="cx"> 
</span><span class="cx">     m_lastInteractionLocation = touchEvent.position();
</span><span class="cx">     CurrentEvent currentEvent(touchEvent);
</span><span class="cx">     handled = handleTouchEvent(touchEvent, m_page.get());
</span><span class="cx"> 
</span><del>-    RefPtr&lt;Frame&gt; newFocusedFrame = m_page-&gt;focusController().focusedFrame();
-    RefPtr&lt;Element&gt; newFocusedElement = newFocusedFrame ? newFocusedFrame-&gt;document()-&gt;focusedElement() : nullptr;
-
-    // If the focus has not changed, we need to notify the client anyway, since it might be
-    // necessary to start assisting the node.
-    // If the node has been focused by JavaScript without user interaction, the
-    // keyboard is not on screen.
-    if (newFocusedElement &amp;&amp; newFocusedElement == oldFocusedElement)
-        elementDidFocus(newFocusedElement.get());
-
</del><span class="cx">     m_userIsInteracting = false;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>