<!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>[183517] 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/183517">183517</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2015-04-28 16:27:21 -0700 (Tue, 28 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[TextIndicator] Yellow highlight takes too long to fade out on scroll
https://bugs.webkit.org/show_bug.cgi?id=144358
&lt;rdar://problem/19451011&gt;

Reviewed by Beth Dakin.

* page/TextIndicator.h:
Add Lifetime and DismissalAnimation enums.

(WebCore::TextIndicator::contentImageWithHighlight):
(WebCore::TextIndicator::contentImage):
Fix style.

* page/mac/TextIndicatorWindow.h:
* page/mac/TextIndicatorWindow.mm:
(WebCore::TextIndicatorWindow::TextIndicatorWindow):
(WebCore::TextIndicatorWindow::~TextIndicatorWindow):
(WebCore::TextIndicatorWindow::clearTextIndicator):
(WebCore::TextIndicatorWindow::setTextIndicator):
(WebCore::TextIndicatorWindow::closeWindow):
(WebCore::TextIndicatorWindow::startFadeOut):
Rename m_startFadeOutTimer to m_temporaryTextIndicatorTimer (and related).
This is just about temporary-lifetime TextIndicators, like the ones
you get when the find-in-page UI is hidden but you hit Cmd-G.

Add clearTextIndicator, which takes a DismissalAnimation, providing
clients an opportunity to avoid the normal fade-out animation, if it
was going to happen.

* WebView/WebActionMenuController.mm:
(-[WebActionMenuController _showTextIndicator]):
* WebView/WebHTMLView.mm:
(-[WebHTMLView quickLookWithEvent:]):
* WebView/WebImmediateActionController.mm:
(-[WebImmediateActionController _defaultAnimationController]):
(-[WebImmediateActionController _animationControllerForDataDetectedText]):
(-[WebImmediateActionController _animationControllerForDataDetectedLink]):
Pull _clearTextIndicatorWithAnimation out, make it avoid using a dismissal animation
if we're called from didHandleScrollWheel.

* WebView/WebView.mm:
(-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
(-[WebView _setTextIndicator:]):
(-[WebView _setTextIndicator:withLifetime:]):
(-[WebView _clearTextIndicator]):
(-[WebView _showDictionaryLookupPopup:]):
(-[WebView _dictionaryLookupPopoverWillClose:]):
(-[WebView _setTextIndicator:fadeOut:]): Deleted.
* WebView/WebViewInternal.h:
Make _setTextIndicator take a reference.
Add a variant of _setTextIndicator that takes a Lifetime.
Make _clearTextIndicatorWithAnimation take a DismissalAnimation.

* UIProcess/API/Cocoa/WKViewPrivate.h:
* UIProcess/API/mac/WKView.mm:
(-[WKView renewGState]):
(-[WKView viewDidMoveToWindow]):
(-[WKView _dictionaryLookupPopoverWillClose:]):
(-[WKView _setTextIndicator:]):
(-[WKView _setTextIndicator:withLifetime:]):
(-[WKView _clearTextIndicatorWithAnimation:]):
(-[WKView magnifyWithEvent:]):
(-[WKView smartMagnifyWithEvent:]):
(-[WKView setMagnification:centeredAtPoint:]):
(-[WKView setMagnification:]):
(-[WKView _dismissContentRelativeChildWindows]):
(-[WKView _dismissContentRelativeChildWindowsWithAnimation:]):
(-[WKView _setTextIndicator:fadeOut:]): Deleted.
* UIProcess/API/mac/WKViewInternal.h:
* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::pageDidScroll):
(WebKit::WebPageProxy::setTextIndicator):
(WebKit::WebPageProxy::clearTextIndicator):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/ios/PageClientImplIOS.h:
* UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::setTextIndicator):
(WebKit::PageClientImpl::clearTextIndicator):
* UIProcess/mac/PageClientImpl.h:
* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::setTextIndicator):
(WebKit::PageClientImpl::clearTextIndicator):
(WebKit::PageClientImpl::didPerformDictionaryLookup):
(WebKit::PageClientImpl::dismissContentRelativeChildWindows):
* UIProcess/mac/WKActionMenuController.mm:
(-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
* UIProcess/mac/WKImmediateActionController.mm:
(-[WKImmediateActionController _defaultAnimationController]):
(-[WKImmediateActionController _animationControllerForDataDetectedText]):
(-[WKImmediateActionController _animationControllerForDataDetectedLink]):
(-[WKImmediateActionController _animationControllerForText]):
* WebProcess/WebPage/FindController.cpp:
(WebKit::FindController::updateFindIndicator):
Make _setTextIndicator take a reference.
Add a variant of _setTextIndicator that takes a Lifetime.
Make _clearTextIndicatorWithAnimation take a DismissalAnimation.
Make dismissContentRelativeChildWindows take a parameter indicating
whether the dismissal should include animation or not (currently
only applies to TextIndicator).
Don't animate when dismissal occurs because of scrolling, zooming,
or other things in which the content will have changed significantly
underneath the indicator and shouldn't have a slowly-fading-out yellow highlight.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageTextIndicatorh">trunk/Source/WebCore/page/TextIndicator.h</a></li>
<li><a href="#trunkSourceWebCorepagemacTextIndicatorWindowh">trunk/Source/WebCore/page/mac/TextIndicatorWindow.h</a></li>
<li><a href="#trunkSourceWebCorepagemacTextIndicatorWindowmm">trunk/Source/WebCore/page/mac/TextIndicatorWindow.mm</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebActionMenuControllermm">trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebHTMLViewmm">trunk/Source/WebKit/mac/WebView/WebHTMLView.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebImmediateActionControllermm">trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewmm">trunk/Source/WebKit/mac/WebView/WebView.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebViewInternalh">trunk/Source/WebKit/mac/WebView/WebViewInternal.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKViewPrivateh">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkPageClientImplcpp">trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkPageClientImplh">trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPImacWKViewmm">trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPImacWKViewInternalh">trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp">trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewh">trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessPageClienth">trunk/Source/WebKit2/UIProcess/PageClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSh">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessiosPageClientImplIOSmm">trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacPageClientImplh">trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacPageClientImplmm">trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKActionMenuControllermm">trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWKImmediateActionControllermm">trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageFindControllercpp">trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebCore/ChangeLog        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2015-04-28  Timothy Horton  &lt;timothy_horton@apple.com&gt;
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        &lt;rdar://problem/19451011&gt;
+
+        Reviewed by Beth Dakin.
+
+        * page/TextIndicator.h:
+        Add Lifetime and DismissalAnimation enums.
+
+        (WebCore::TextIndicator::contentImageWithHighlight):
+        (WebCore::TextIndicator::contentImage):
+        Fix style.
+
+        * page/mac/TextIndicatorWindow.h:
+        * page/mac/TextIndicatorWindow.mm:
+        (WebCore::TextIndicatorWindow::TextIndicatorWindow):
+        (WebCore::TextIndicatorWindow::~TextIndicatorWindow):
+        (WebCore::TextIndicatorWindow::clearTextIndicator):
+        (WebCore::TextIndicatorWindow::setTextIndicator):
+        (WebCore::TextIndicatorWindow::closeWindow):
+        (WebCore::TextIndicatorWindow::startFadeOut):
+        Rename m_startFadeOutTimer to m_temporaryTextIndicatorTimer (and related).
+        This is just about temporary-lifetime TextIndicators, like the ones
+        you get when the find-in-page UI is hidden but you hit Cmd-G.
+
+        Add clearTextIndicator, which takes a DismissalAnimation, providing
+        clients an opportunity to avoid the normal fade-out animation, if it
+        was going to happen.
+
</ins><span class="cx"> 2015-04-28  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
</span></span></pre></div>
<a id="trunkSourceWebCorepageTextIndicatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/TextIndicator.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/TextIndicator.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebCore/page/TextIndicator.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -56,6 +56,19 @@
</span><span class="cx">     Crossfade
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+enum class TextIndicatorLifetime {
+    // The TextIndicator should indicate the text until dismissed.
+    Permanent,
+
+    // The TextIndicator should briefly indicate the text and then automatically dismiss.
+    Temporary
+};
+
+enum class TextIndicatorDismissalAnimation {
+    None,
+    FadeOut
+};
+
</ins><span class="cx"> struct TextIndicatorData {
</span><span class="cx">     FloatRect selectionRectInRootViewCoordinates;
</span><span class="cx">     FloatRect textBoundingRectInRootViewCoordinates;
</span><span class="lines">@@ -78,8 +91,8 @@
</span><span class="cx">     FloatRect textBoundingRectInRootViewCoordinates() const { return m_data.textBoundingRectInRootViewCoordinates; }
</span><span class="cx">     const Vector&lt;FloatRect&gt;&amp; textRectsInBoundingRectCoordinates() const { return m_data.textRectsInBoundingRectCoordinates; }
</span><span class="cx">     float contentImageScaleFactor() const { return m_data.contentImageScaleFactor; }
</span><del>-    Image *contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
-    Image *contentImage() const { return m_data.contentImage.get(); }
</del><ins>+    Image* contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
+    Image* contentImage() const { return m_data.contentImage.get(); }
</ins><span class="cx"> 
</span><span class="cx">     TextIndicatorPresentationTransition presentationTransition() const { return m_data.presentationTransition; }
</span><span class="cx">     void setPresentationTransition(TextIndicatorPresentationTransition transition) { m_data.presentationTransition = transition; }
</span></span></pre></div>
<a id="trunkSourceWebCorepagemacTextIndicatorWindowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/mac/TextIndicatorWindow.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/mac/TextIndicatorWindow.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebCore/page/mac/TextIndicatorWindow.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx"> 
</span><ins>+#import &quot;TextIndicator.h&quot;
</ins><span class="cx"> #import &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> #import &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="lines">@@ -38,8 +39,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class TextIndicator;
-
</del><span class="cx"> class TextIndicatorWindow {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(TextIndicatorWindow);
</span><span class="cx"> 
</span><span class="lines">@@ -47,7 +46,8 @@
</span><span class="cx">     WEBCORE_EXPORT explicit TextIndicatorWindow(NSView *);
</span><span class="cx">     WEBCORE_EXPORT ~TextIndicatorWindow();
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT void setTextIndicator(PassRefPtr&lt;TextIndicator&gt;, CGRect contentRect, bool fadeOut);
</del><ins>+    WEBCORE_EXPORT void setTextIndicator(Ref&lt;TextIndicator&gt;, CGRect contentRect, TextIndicatorLifetime);
+    WEBCORE_EXPORT void clearTextIndicator(TextIndicatorDismissalAnimation);
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void setAnimationProgress(float);
</span><span class="cx"> 
</span><span class="lines">@@ -61,7 +61,9 @@
</span><span class="cx">     RetainPtr&lt;NSWindow&gt; m_textIndicatorWindow;
</span><span class="cx">     RetainPtr&lt;WebTextIndicatorView&gt; m_textIndicatorView;
</span><span class="cx"> 
</span><del>-    RunLoop::Timer&lt;TextIndicatorWindow&gt; m_startFadeOutTimer;
</del><ins>+    RunLoop::Timer&lt;TextIndicatorWindow&gt; m_temporaryTextIndicatorTimer;
+
+    bool m_fadingOut { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebCorepagemacTextIndicatorWindowmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/mac/TextIndicatorWindow.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/mac/TextIndicatorWindow.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebCore/page/mac/TextIndicatorWindow.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -348,18 +348,13 @@
</span><span class="cx"> 
</span><span class="cx"> TextIndicatorWindow::TextIndicatorWindow(NSView *targetView)
</span><span class="cx">     : m_targetView(targetView)
</span><del>-    , m_startFadeOutTimer(RunLoop::main(), this, &amp;TextIndicatorWindow::startFadeOut)
</del><ins>+    , m_temporaryTextIndicatorTimer(RunLoop::main(), this, &amp;TextIndicatorWindow::startFadeOut)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TextIndicatorWindow::~TextIndicatorWindow()
</span><span class="cx"> {
</span><del>-    if (m_textIndicator-&gt;wantsManualAnimation() &amp;&amp; [m_textIndicatorView hasCompletedAnimation]) {
-        startFadeOut();
-        return;
-    }
-
-    closeWindow();
</del><ins>+    clearTextIndicator(TextIndicatorDismissalAnimation::FadeOut);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TextIndicatorWindow::setAnimationProgress(float progress)
</span><span class="lines">@@ -370,18 +365,30 @@
</span><span class="cx">     [m_textIndicatorView setAnimationProgress:progress];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void TextIndicatorWindow::setTextIndicator(PassRefPtr&lt;TextIndicator&gt; textIndicator, CGRect textBoundingRectInScreenCoordinates, bool fadeOut)
</del><ins>+void TextIndicatorWindow::clearTextIndicator(TextIndicatorDismissalAnimation animation)
</ins><span class="cx"> {
</span><del>-    if (m_textIndicator == textIndicator)
</del><ins>+    RefPtr&lt;TextIndicator&gt; textIndicator = WTF::move(m_textIndicator);
+
+    if (m_fadingOut)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_textIndicator = textIndicator;
</del><ins>+    if (textIndicator &amp;&amp; textIndicator-&gt;wantsManualAnimation() &amp;&amp; [m_textIndicatorView hasCompletedAnimation] &amp;&amp; animation == TextIndicatorDismissalAnimation::FadeOut) {
+        startFadeOut();
+        return;
+    }
</ins><span class="cx"> 
</span><span class="cx">     closeWindow();
</span><ins>+}
</ins><span class="cx"> 
</span><del>-    if (!m_textIndicator)
</del><ins>+void TextIndicatorWindow::setTextIndicator(Ref&lt;TextIndicator&gt; textIndicator, CGRect textBoundingRectInScreenCoordinates, TextIndicatorLifetime lifetime)
+{
+    if (m_textIndicator == textIndicator.ptr())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    m_textIndicator = textIndicator.ptr();
+
+    closeWindow();
+
</ins><span class="cx">     CGFloat horizontalMargin = dropShadowBlurRadius * 2 + horizontalBorder;
</span><span class="cx">     CGFloat verticalMargin = dropShadowBlurRadius * 2 + verticalBorder;
</span><span class="cx">     
</span><span class="lines">@@ -410,8 +417,8 @@
</span><span class="cx">     if (m_textIndicator-&gt;presentationTransition() != TextIndicatorPresentationTransition::None)
</span><span class="cx">         [m_textIndicatorView present];
</span><span class="cx"> 
</span><del>-    if (fadeOut)
-        m_startFadeOutTimer.startOneShot(timeBeforeFadeStarts);
</del><ins>+    if (lifetime == TextIndicatorLifetime::Temporary)
+        m_temporaryTextIndicatorTimer.startOneShot(timeBeforeFadeStarts);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TextIndicatorWindow::closeWindow()
</span><span class="lines">@@ -419,8 +426,11 @@
</span><span class="cx">     if (!m_textIndicatorWindow)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_startFadeOutTimer.stop();
</del><ins>+    if (m_fadingOut)
+        return;
</ins><span class="cx"> 
</span><ins>+    m_temporaryTextIndicatorTimer.stop();
+
</ins><span class="cx">     [[m_textIndicatorWindow parentWindow] removeChildWindow:m_textIndicatorWindow.get()];
</span><span class="cx">     [m_textIndicatorWindow close];
</span><span class="cx">     m_textIndicatorWindow = nullptr;
</span><span class="lines">@@ -428,6 +438,7 @@
</span><span class="cx"> 
</span><span class="cx"> void TextIndicatorWindow::startFadeOut()
</span><span class="cx"> {
</span><ins>+    m_fadingOut = true;
</ins><span class="cx">     RetainPtr&lt;NSWindow&gt; indicatorWindow = m_textIndicatorWindow;
</span><span class="cx">     [m_textIndicatorView hideWithCompletionHandler:[indicatorWindow] {
</span><span class="cx">         [[indicatorWindow parentWindow] removeChildWindow:indicatorWindow.get()];
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/ChangeLog        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-04-28  Timothy Horton  &lt;timothy_horton@apple.com&gt;
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        &lt;rdar://problem/19451011&gt;
+
+        Reviewed by Beth Dakin.
+
+        * WebView/WebActionMenuController.mm:
+        (-[WebActionMenuController _showTextIndicator]):
+        * WebView/WebHTMLView.mm:
+        (-[WebHTMLView quickLookWithEvent:]):
+        * WebView/WebImmediateActionController.mm:
+        (-[WebImmediateActionController _defaultAnimationController]):
+        (-[WebImmediateActionController _animationControllerForDataDetectedText]):
+        (-[WebImmediateActionController _animationControllerForDataDetectedLink]):
+        Pull _clearTextIndicatorWithAnimation out, make it avoid using a dismissal animation
+        if we're called from didHandleScrollWheel.
+
+        * WebView/WebView.mm:
+        (-[WebView _animationControllerForDictionaryLookupPopupInfo:]):
+        (-[WebView _setTextIndicator:]):
+        (-[WebView _setTextIndicator:withLifetime:]):
+        (-[WebView _clearTextIndicator]):
+        (-[WebView _showDictionaryLookupPopup:]):
+        (-[WebView _dictionaryLookupPopoverWillClose:]):
+        (-[WebView _setTextIndicator:fadeOut:]): Deleted.
+        * WebView/WebViewInternal.h:
+        Make _setTextIndicator take a reference.
+        Add a variant of _setTextIndicator that takes a Lifetime.
+        Make _clearTextIndicatorWithAnimation take a DismissalAnimation.
+
</ins><span class="cx"> 2015-04-28  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebActionMenuControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -121,6 +121,7 @@
</span><span class="cx"> - (void)webView:(WebView *)webView didHandleScrollWheel:(NSEvent *)event
</span><span class="cx"> {
</span><span class="cx">     [self _dismissActionMenuPopovers];
</span><ins>+    [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)prepareForMenu:(NSMenu *)menu withEvent:(NSEvent *)event
</span><span class="lines">@@ -133,6 +134,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     [self _dismissActionMenuPopovers];
</span><ins>+    [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx">     [actionMenu removeAllItems];
</span><span class="cx"> 
</span><span class="cx">     WebElementDictionary *hitTestResult = [self performHitTestAtPoint:event.locationInWindow];
</span><span class="lines">@@ -549,7 +551,7 @@
</span><span class="cx">     } interactionChangedHandler:^() {
</span><span class="cx">         [self _showTextIndicator];
</span><span class="cx">     } interactionStoppedHandler:^() {
</span><del>-        [self _hideTextIndicator];
</del><ins>+        [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx">     }];
</span><span class="cx">     _currentDetectedDataRange = detectedDataRange;
</span><span class="cx"> 
</span><span class="lines">@@ -813,17 +815,17 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (_type == WebActionMenuDataDetectedItem &amp;&amp; _currentDetectedDataTextIndicator) {
</span><del>-        [_webView _setTextIndicator:_currentDetectedDataTextIndicator.get() fadeOut:NO];
</del><ins>+        [_webView _setTextIndicator:*_currentDetectedDataTextIndicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">         _isShowingTextIndicator = YES;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)_hideTextIndicator
</del><ins>+- (void)_hideTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
</ins><span class="cx"> {
</span><span class="cx">     if (!_isShowingTextIndicator)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    [_webView _clearTextIndicator];
</del><ins>+    [_webView _clearTextIndicatorWithAnimation:animation];
</ins><span class="cx">     _isShowingTextIndicator = NO;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -832,8 +834,6 @@
</span><span class="cx">     DDActionsManager *actionsManager = [getDDActionsManagerClass() sharedManager];
</span><span class="cx">     if ([actionsManager respondsToSelector:@selector(requestBubbleClosureUnanchorOnFailure:)])
</span><span class="cx">         [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
</span><del>-
-    [self _hideTextIndicator];
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebHTMLViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebHTMLView.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/WebView/WebHTMLView.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -5676,7 +5676,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)quickLookWithEvent:(NSEvent *)event
</span><span class="cx"> {
</span><del>-    [[self _webView] _setTextIndicator:nullptr fadeOut:NO];
</del><ins>+    [[self _webView] _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx">     [super quickLookWithEvent:event];
</span><span class="cx"> }
</span><span class="cx"> #endif // !PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebImmediateActionControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -97,12 +97,14 @@
</span><span class="cx"> - (void)webView:(WebView *)webView willHandleMouseDown:(NSEvent *)event
</span><span class="cx"> {
</span><span class="cx">     [self _clearImmediateActionState];
</span><ins>+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)webView:(WebView *)webView didHandleScrollWheel:(NSEvent *)event
</span><span class="cx"> {
</span><span class="cx">     [_currentQLPreviewMenuItem close];
</span><span class="cx">     [self _clearImmediateActionState];
</span><ins>+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (NSImmediateActionGestureRecognizer *)immediateActionRecognizer
</span><span class="lines">@@ -117,11 +119,11 @@
</span><span class="cx">     [_immediateActionRecognizer setEnabled:YES];
</span><span class="cx"> 
</span><span class="cx">     [self _clearImmediateActionState];
</span><ins>+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)_clearImmediateActionState
</span><span class="cx"> {
</span><del>-    [_webView _clearTextIndicator];
</del><span class="cx">     DDActionsManager *actionsManager = [getDDActionsManagerClass() sharedManager];
</span><span class="cx">     if ([actionsManager respondsToSelector:@selector(requestBubbleClosureUnanchorOnFailure:)])
</span><span class="cx">         [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
</span><span class="lines">@@ -196,6 +198,7 @@
</span><span class="cx"> 
</span><span class="cx">     [_webView _setTextIndicatorAnimationProgress:0];
</span><span class="cx">     [self _clearImmediateActionState];
</span><ins>+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
</ins><span class="cx">     [_webView _setMaintainsInactiveSelection:NO];
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -230,7 +233,7 @@
</span><span class="cx"> 
</span><span class="cx">             RefPtr&lt;Range&gt; linkRange = rangeOfContents(*_hitTestResult.URLElement());
</span><span class="cx">             RefPtr&lt;TextIndicator&gt; indicator = TextIndicator::createWithRange(*linkRange, TextIndicatorPresentationTransition::FadeIn);
</span><del>-            [_webView _setTextIndicator:indicator.get() fadeOut:NO];
</del><ins>+            [_webView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx"> 
</span><span class="cx">             QLPreviewMenuItem *item = [NSMenuItem standardQuickLookMenuItem];
</span><span class="cx">             item.previewStyle = QLPreviewStylePopover;
</span><span class="lines">@@ -303,6 +306,7 @@
</span><span class="cx"> - (void)menuItemDidClose:(NSMenuItem *)menuItem
</span><span class="cx"> {
</span><span class="cx">     [self _clearImmediateActionState];
</span><ins>+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static IntRect elementBoundingBoxInWindowCoordinatesFromNode(Node* node)
</span><span class="lines">@@ -383,9 +387,9 @@
</span><span class="cx"> 
</span><span class="cx">     _currentActionContext = [actionContext contextForView:_webView altMode:YES interactionStartedHandler:^() {
</span><span class="cx">     } interactionChangedHandler:^() {
</span><del>-        [_webView _setTextIndicator:detectedDataTextIndicator.get() fadeOut:NO];
</del><ins>+        [_webView _setTextIndicator:*detectedDataTextIndicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">     } interactionStoppedHandler:^() {
</span><del>-        [_webView _clearTextIndicator];
</del><ins>+        [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx">     }];
</span><span class="cx"> 
</span><span class="cx">     [_currentActionContext setHighlightFrame:[_webView.window convertRectToScreen:detectedDataBoundingBox]];
</span><span class="lines">@@ -414,9 +418,9 @@
</span><span class="cx"> 
</span><span class="cx">     _currentActionContext = [actionContext contextForView:_webView altMode:YES interactionStartedHandler:^() {
</span><span class="cx">     } interactionChangedHandler:^() {
</span><del>-        [_webView _setTextIndicator:indicator.get() fadeOut:NO];
</del><ins>+        [_webView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">     } interactionStoppedHandler:^() {
</span><del>-        [_webView _clearTextIndicator];
</del><ins>+        [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx">     }];
</span><span class="cx"> 
</span><span class="cx">     [_currentActionContext setHighlightFrame:[_webView.window convertRectToScreen:elementBoundingBoxInWindowCoordinatesFromNode(_hitTestResult.URLElement())]];
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebView.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -8591,7 +8591,7 @@
</span><span class="cx">         if (!mutableOptions)
</span><span class="cx">             mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
</span><span class="cx">         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
</span><del>-        [self _setTextIndicator:dictionaryPopupInfo.textIndicator.get() fadeOut:NO];
</del><ins>+        [self _setTextIndicator:*dictionaryPopupInfo.textIndicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">         return [getLULookupDefinitionModuleClass() lookupAnimationControllerForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -8599,24 +8599,26 @@
</span><span class="cx"> }
</span><span class="cx"> #endif // __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span><span class="cx"> 
</span><del>-- (void)_setTextIndicator:(TextIndicator *)textIndicator fadeOut:(BOOL)fadeOut
</del><ins>+- (void)_setTextIndicator:(TextIndicator&amp;)textIndicator
</ins><span class="cx"> {
</span><del>-    if (!textIndicator) {
-        _private-&gt;textIndicatorWindow = nullptr;
-        return;
-    }
</del><ins>+    [self _setTextIndicator:textIndicator withLifetime:TextIndicatorLifetime::Permanent];
+}
</ins><span class="cx"> 
</span><ins>+- (void)_setTextIndicator:(TextIndicator&amp;)textIndicator withLifetime:(TextIndicatorLifetime)lifetime
+{
</ins><span class="cx">     if (!_private-&gt;textIndicatorWindow)
</span><span class="cx">         _private-&gt;textIndicatorWindow = std::make_unique&lt;TextIndicatorWindow&gt;(self);
</span><span class="cx"> 
</span><del>-    NSRect textBoundingRectInWindowCoordinates = [self convertRect:[self _convertRectFromRootView:textIndicator-&gt;textBoundingRectInRootViewCoordinates()] toView:nil];
</del><ins>+    NSRect textBoundingRectInWindowCoordinates = [self convertRect:[self _convertRectFromRootView:textIndicator.textBoundingRectInRootViewCoordinates()] toView:nil];
</ins><span class="cx">     NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:textBoundingRectInWindowCoordinates];
</span><del>-    _private-&gt;textIndicatorWindow-&gt;setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), fadeOut);
</del><ins>+    _private-&gt;textIndicatorWindow-&gt;setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), lifetime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)_clearTextIndicator
</del><ins>+- (void)_clearTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
</ins><span class="cx"> {
</span><del>-    [self _setTextIndicator:nullptr fadeOut:NO];
</del><ins>+    if (_private-&gt;textIndicatorWindow)
+        _private-&gt;textIndicatorWindow-&gt;clearTextIndicator(TextIndicatorDismissalAnimation::FadeOut);
+    _private-&gt;textIndicatorWindow = nullptr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)_setTextIndicatorAnimationProgress:(float)progress
</span><span class="lines">@@ -8645,7 +8647,7 @@
</span><span class="cx">         if (!mutableOptions)
</span><span class="cx">             mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
</span><span class="cx">         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
</span><del>-        [self _setTextIndicator:dictionaryPopupInfo.textIndicator.get() fadeOut:NO];
</del><ins>+        [self _setTextIndicator:*dictionaryPopupInfo.textIndicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
</span><span class="cx">     } else
</span><span class="cx">         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:dictionaryPopupInfo.options.get()];
</span><span class="lines">@@ -8653,7 +8655,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_dictionaryLookupPopoverWillClose:(NSNotification *)notification
</span><span class="cx"> {
</span><del>-    [self _setTextIndicator:nullptr fadeOut:NO];
</del><ins>+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx"> }
</span><span class="cx"> #endif // PLATFORM(MAC)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebViewInternalh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebViewInternal.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebViewInternal.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit/mac/WebView/WebViewInternal.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #import &lt;WebCore/HTMLMediaElement.h&gt;
</span><span class="cx"> #import &lt;WebCore/LayoutMilestones.h&gt;
</span><span class="cx"> #import &lt;WebCore/TextAlternativeWithRange.h&gt;
</span><ins>+#import &lt;WebCore/TextIndicatorWindow.h&gt;
</ins><span class="cx"> #import &lt;WebCore/WebCoreKeyboardUIMode.h&gt;
</span><span class="cx"> #import &lt;functional&gt;
</span><span class="cx"> #import &lt;wtf/Forward.h&gt;
</span><span class="lines">@@ -258,8 +259,9 @@
</span><span class="cx"> - (void)_setMaintainsInactiveSelection:(BOOL)shouldMaintainInactiveSelection;
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(MAC) &amp;&amp; defined(__cplusplus)
</span><del>-- (void)_setTextIndicator:(WebCore::TextIndicator*)textIndicator fadeOut:(BOOL)fadeOut;
-- (void)_clearTextIndicator;
</del><ins>+- (void)_setTextIndicator:(WebCore::TextIndicator&amp;)textIndicator;
+- (void)_setTextIndicator:(WebCore::TextIndicator&amp;)textIndicator withLifetime:(WebCore::TextIndicatorLifetime)lifetime;
+- (void)_clearTextIndicatorWithAnimation:(WebCore::TextIndicatorDismissalAnimation)animation;
</ins><span class="cx"> - (void)_setTextIndicatorAnimationProgress:(float)progress;
</span><span class="cx"> - (void)_showDictionaryLookupPopup:(const DictionaryPopupInfo&amp;)dictionaryPopupInfo;
</span><span class="cx"> #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/ChangeLog        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -1,3 +1,63 @@
</span><ins>+2015-04-28  Timothy Horton  &lt;timothy_horton@apple.com&gt;
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        &lt;rdar://problem/19451011&gt;
+
+        Reviewed by Beth Dakin.
+
+        * UIProcess/API/Cocoa/WKViewPrivate.h:
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView renewGState]):
+        (-[WKView viewDidMoveToWindow]):
+        (-[WKView _dictionaryLookupPopoverWillClose:]):
+        (-[WKView _setTextIndicator:]):
+        (-[WKView _setTextIndicator:withLifetime:]):
+        (-[WKView _clearTextIndicatorWithAnimation:]):
+        (-[WKView magnifyWithEvent:]):
+        (-[WKView smartMagnifyWithEvent:]):
+        (-[WKView setMagnification:centeredAtPoint:]):
+        (-[WKView setMagnification:]):
+        (-[WKView _dismissContentRelativeChildWindows]):
+        (-[WKView _dismissContentRelativeChildWindowsWithAnimation:]):
+        (-[WKView _setTextIndicator:fadeOut:]): Deleted.
+        * UIProcess/API/mac/WKViewInternal.h:
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::pageDidScroll):
+        (WebKit::WebPageProxy::setTextIndicator):
+        (WebKit::WebPageProxy::clearTextIndicator):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * UIProcess/ios/PageClientImplIOS.h:
+        * UIProcess/ios/PageClientImplIOS.mm:
+        (WebKit::PageClientImpl::setTextIndicator):
+        (WebKit::PageClientImpl::clearTextIndicator):
+        * UIProcess/mac/PageClientImpl.h:
+        * UIProcess/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::setTextIndicator):
+        (WebKit::PageClientImpl::clearTextIndicator):
+        (WebKit::PageClientImpl::didPerformDictionaryLookup):
+        (WebKit::PageClientImpl::dismissContentRelativeChildWindows):
+        * UIProcess/mac/WKActionMenuController.mm:
+        (-[WKActionMenuController _defaultMenuItemsForDataDetectedText]):
+        * UIProcess/mac/WKImmediateActionController.mm:
+        (-[WKImmediateActionController _defaultAnimationController]):
+        (-[WKImmediateActionController _animationControllerForDataDetectedText]):
+        (-[WKImmediateActionController _animationControllerForDataDetectedLink]):
+        (-[WKImmediateActionController _animationControllerForText]):
+        * WebProcess/WebPage/FindController.cpp:
+        (WebKit::FindController::updateFindIndicator):
+        Make _setTextIndicator take a reference.
+        Add a variant of _setTextIndicator that takes a Lifetime.
+        Make _clearTextIndicatorWithAnimation take a DismissalAnimation.
+        Make dismissContentRelativeChildWindows take a parameter indicating
+        whether the dismissal should include animation or not (currently
+        only applies to TextIndicator).
+        Don't animate when dismissal occurs because of scrolling, zooming,
+        or other things in which the content will have changed significantly
+        underneath the indicator and shouldn't have a slowly-fading-out yellow highlight.
+
</ins><span class="cx"> 2015-04-28  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKViewPrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -149,6 +149,7 @@
</span><span class="cx"> - (void)_completeImmediateActionAnimation;
</span><span class="cx"> 
</span><span class="cx"> - (void)_dismissContentRelativeChildWindows;
</span><ins>+- (void)_dismissContentRelativeChildWindowsWithAnimation:(BOOL)withAnimation;
</ins><span class="cx"> 
</span><span class="cx"> - (void)_didChangeContentSize:(NSSize)newSize;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkPageClientImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -235,11 +235,16 @@
</span><span class="cx">     return WebColorPickerGtk::create(*page, color, rect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool /* fadeOut */)
</del><ins>+void PageClientImpl::setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime)
</ins><span class="cx"> {
</span><span class="cx">     notImplemented();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PageClientImpl::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation)
+{
+    notImplemented();
+}
+
</ins><span class="cx"> void PageClientImpl::setTextIndicatorAnimationProgress(float)
</span><span class="cx"> {
</span><span class="cx">     notImplemented();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkPageClientImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -88,7 +88,8 @@
</span><span class="cx"> #if ENABLE(INPUT_TYPE_COLOR)
</span><span class="cx">     virtual PassRefPtr&lt;WebColorPicker&gt; createColorPicker(WebPageProxy*, const WebCore::Color&amp; intialColor, const WebCore::IntRect&amp;) override;
</span><span class="cx"> #endif
</span><del>-    virtual void setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool fadeOut) override;
</del><ins>+    virtual void setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
</ins><span class="cx">     virtual void setTextIndicatorAnimationProgress(float) override;
</span><span class="cx">     virtual void getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent&amp;, const AtomicString&amp;, Vector&lt;WTF::String&gt;&amp;) override;
</span><span class="cx">     virtual void updateTextInputState() override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPImacWKViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -602,7 +602,7 @@
</span><span class="cx"> - (void)renewGState
</span><span class="cx"> {
</span><span class="cx">     if (_data-&gt;_textIndicatorWindow)
</span><del>-        [self _dismissContentRelativeChildWindows];
</del><ins>+        [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx">     // Update the view frame.
</span><span class="cx">     if ([self window])
</span><span class="lines">@@ -2760,7 +2760,7 @@
</span><span class="cx">         [NSEvent removeMonitor:_data-&gt;_flagsChangedEventMonitor];
</span><span class="cx">         _data-&gt;_flagsChangedEventMonitor = nil;
</span><span class="cx"> 
</span><del>-        [self _dismissContentRelativeChildWindows];
</del><ins>+        [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx"> #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span><span class="cx">         if (_data-&gt;_immediateActionGestureRecognizer)
</span><span class="lines">@@ -2896,7 +2896,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_dictionaryLookupPopoverWillClose:(NSNotification *)notification
</span><span class="cx"> {
</span><del>-    [self _setTextIndicator:nil fadeOut:NO];
</del><ins>+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)_accessibilityRegisterUIProcessTokens
</span><span class="lines">@@ -3282,20 +3282,27 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (void)_setTextIndicator:(PassRefPtr&lt;TextIndicator&gt;)textIndicator fadeOut:(BOOL)fadeOut
</del><ins>+- (void)_setTextIndicator:(TextIndicator&amp;)textIndicator
</ins><span class="cx"> {
</span><del>-    if (!textIndicator) {
-        _data-&gt;_textIndicatorWindow = nullptr;
-        return;
-    }
</del><ins>+    [self _setTextIndicator:textIndicator withLifetime:TextIndicatorLifetime::Permanent];
+}
</ins><span class="cx"> 
</span><ins>+- (void)_setTextIndicator:(TextIndicator&amp;)textIndicator withLifetime:(TextIndicatorLifetime)lifetime
+{
</ins><span class="cx">     if (!_data-&gt;_textIndicatorWindow)
</span><span class="cx">         _data-&gt;_textIndicatorWindow = std::make_unique&lt;TextIndicatorWindow&gt;(self);
</span><span class="cx"> 
</span><del>-    NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:[self convertRect:textIndicator-&gt;textBoundingRectInRootViewCoordinates() toView:nil]];
-    _data-&gt;_textIndicatorWindow-&gt;setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), fadeOut);
</del><ins>+    NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:[self convertRect:textIndicator.textBoundingRectInRootViewCoordinates() toView:nil]];
+    _data-&gt;_textIndicatorWindow-&gt;setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), lifetime);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)_clearTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
+{
+    if (_data-&gt;_textIndicatorWindow)
+        _data-&gt;_textIndicatorWindow-&gt;clearTextIndicator(animation);
+    _data-&gt;_textIndicatorWindow = nullptr;
+}
+
</ins><span class="cx"> - (void)_setTextIndicatorAnimationProgress:(float)progress
</span><span class="cx"> {
</span><span class="cx">     if (_data-&gt;_textIndicatorWindow)
</span><span class="lines">@@ -4538,7 +4545,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    [self _dismissContentRelativeChildWindows];
</del><ins>+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx">     [self _ensureGestureController];
</span><span class="cx"> 
</span><span class="lines">@@ -4555,7 +4562,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    [self _dismissContentRelativeChildWindows];
</del><ins>+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx">     [self _ensureGestureController];
</span><span class="cx"> 
</span><span class="lines">@@ -4567,7 +4574,7 @@
</span><span class="cx">     if (magnification &lt;= 0 || isnan(magnification) || isinf(magnification))
</span><span class="cx">         [NSException raise:NSInvalidArgumentException format:@&quot;Magnification should be a positive number&quot;];
</span><span class="cx"> 
</span><del>-    [self _dismissContentRelativeChildWindows];
</del><ins>+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx">     _data-&gt;_page-&gt;scalePageInViewCoordinates(magnification, roundedIntPoint(point));
</span><span class="cx"> }
</span><span class="lines">@@ -4577,7 +4584,7 @@
</span><span class="cx">     if (magnification &lt;= 0 || isnan(magnification) || isinf(magnification))
</span><span class="cx">         [NSException raise:NSInvalidArgumentException format:@&quot;Magnification should be a positive number&quot;];
</span><span class="cx"> 
</span><del>-    [self _dismissContentRelativeChildWindows];
</del><ins>+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
</ins><span class="cx"> 
</span><span class="cx">     FloatPoint viewCenter(NSMidX([self bounds]), NSMidY([self bounds]));
</span><span class="cx">     _data-&gt;_page-&gt;scalePageInViewCoordinates(magnification, roundedIntPoint(viewCenter));
</span><span class="lines">@@ -4675,9 +4682,9 @@
</span><span class="cx">     // FIXME: We don't know which panel we are dismissing, it may not even be in the current page (see &lt;rdar://problem/13875766&gt;).
</span><span class="cx">     if ([[self window] isKeyWindow]
</span><span class="cx"> #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span><del>-    || [_data-&gt;_immediateActionController hasActiveImmediateAction]
</del><ins>+        || [_data-&gt;_immediateActionController hasActiveImmediateAction]
</ins><span class="cx"> #endif
</span><del>-    ) {
</del><ins>+        ) {
</ins><span class="cx">         if (Class lookupDefinitionModuleClass = getLULookupDefinitionModuleClass())
</span><span class="cx">             [lookupDefinitionModuleClass hideDefinition];
</span><span class="cx"> 
</span><span class="lines">@@ -4686,7 +4693,7 @@
</span><span class="cx">             [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    [self _setTextIndicator:nullptr fadeOut:NO];
</del><ins>+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
</ins><span class="cx"> 
</span><span class="cx"> #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span><span class="cx">     [_data-&gt;_immediateActionController dismissContentRelativeChildWindows];
</span><span class="lines">@@ -4695,6 +4702,14 @@
</span><span class="cx">     static_cast&lt;PageClient&amp;&gt;(*_data-&gt;_pageClient).dismissCorrectionPanel(ReasonForDismissingAlternativeTextIgnored);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (void)_dismissContentRelativeChildWindowsWithAnimation:(BOOL)withAnimation
+{
+    // Calling _clearTextIndicatorWithAnimation here will win out over the animated clear in _dismissContentRelativeChildWindows.
+    // We can't invert these because clients can override (and have overridden) _dismissContentRelativeChildWindows, so it needs to be called.
+    [self _clearTextIndicatorWithAnimation:withAnimation ? TextIndicatorDismissalAnimation::FadeOut : TextIndicatorDismissalAnimation::None];
+    [self _dismissContentRelativeChildWindows];
+}
+
</ins><span class="cx"> #if __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101000
</span><span class="cx"> 
</span><span class="cx"> - (void)_setAutomaticallyAdjustsContentInsets:(BOOL)automaticallyAdjustsContentInsets
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPImacWKViewInternalh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -85,7 +85,9 @@
</span><span class="cx"> - (void)_setIntrinsicContentSize:(NSSize)intrinsicContentSize;
</span><span class="cx"> - (NSRect)_convertToDeviceSpace:(NSRect)rect;
</span><span class="cx"> - (NSRect)_convertToUserSpace:(NSRect)rect;
</span><del>-- (void)_setTextIndicator:(PassRefPtr&lt;WebCore::TextIndicator&gt;)textIndicator fadeOut:(BOOL)fadeOut;
</del><ins>+- (void)_setTextIndicator:(WebCore::TextIndicator&amp;)textIndicator;
+- (void)_setTextIndicator:(WebCore::TextIndicator&amp;)textIndicator withLifetime:(WebCore::TextIndicatorLifetime)lifetime;
+- (void)_clearTextIndicatorWithAnimation:(WebCore::TextIndicatorDismissalAnimation)animation;
</ins><span class="cx"> - (void)_setTextIndicatorAnimationProgress:(float)progress;
</span><span class="cx"> - (void)_selectionChanged;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -450,11 +450,16 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void WebView::setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool)
</del><ins>+void WebView::setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime)
</ins><span class="cx"> {
</span><span class="cx">     notImplemented();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebView::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation)
+{
+    notImplemented();
+}
+
</ins><span class="cx"> void WebView::setTextIndicatorAnimationProgress(float)
</span><span class="cx"> {
</span><span class="cx">     notImplemented();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -181,7 +181,8 @@
</span><span class="cx">     virtual PassRefPtr&lt;WebColorPicker&gt; createColorPicker(WebPageProxy*, const WebCore::Color&amp; initialColor, const WebCore::IntRect&amp;) override;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    virtual void setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool) override;
</del><ins>+    virtual void setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
</ins><span class="cx">     virtual void setTextIndicatorAnimationProgress(float) override;
</span><span class="cx"> 
</span><span class="cx">     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessPageClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/PageClient.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -220,7 +220,8 @@
</span><span class="cx">     virtual PassRefPtr&lt;WebColorPicker&gt; createColorPicker(WebPageProxy*, const WebCore::Color&amp; initialColor, const WebCore::IntRect&amp;) = 0;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    virtual void setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool fadeOut) = 0;
</del><ins>+    virtual void setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) = 0;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) = 0;
</ins><span class="cx">     virtual void setTextIndicatorAnimationProgress(float) = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&amp;) = 0;
</span><span class="lines">@@ -231,7 +232,7 @@
</span><span class="cx">     virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus) = 0;
</span><span class="cx">     virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState) = 0;
</span><span class="cx">     virtual void didPerformDictionaryLookup(const DictionaryPopupInfo&amp;) = 0;
</span><del>-    virtual void dismissContentRelativeChildWindows() = 0;
</del><ins>+    virtual void dismissContentRelativeChildWindows(bool withAnimation = true) = 0;
</ins><span class="cx">     virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect&amp; boundingBoxOfReplacedString, const String&amp; replacedString, const String&amp; replacementString, const Vector&lt;String&gt;&amp; alternativeReplacementStrings) = 0;
</span><span class="cx">     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) = 0;
</span><span class="cx">     virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText) = 0;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -3646,7 +3646,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_uiClient-&gt;pageDidScroll(this);
</span><span class="cx"> #if PLATFORM(MAC)
</span><del>-    m_pageClient.dismissContentRelativeChildWindows();
</del><ins>+    m_pageClient.dismissContentRelativeChildWindows(false);
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -3899,14 +3899,14 @@
</span><span class="cx">     m_findMatchesClient.didGetImageForMatchResult(this, WebImage::create(ShareableBitmap::create(contentImageHandle)).get(), matchIndex);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::setTextIndicator(const TextIndicatorData&amp; indicatorData, bool fadeOut)
</del><ins>+void WebPageProxy::setTextIndicator(const TextIndicatorData&amp; indicatorData, uint64_t lifetime)
</ins><span class="cx"> {
</span><del>-    m_pageClient.setTextIndicator(TextIndicator::create(indicatorData), fadeOut);
</del><ins>+    m_pageClient.setTextIndicator(*TextIndicator::create(indicatorData), static_cast&lt;TextIndicatorLifetime&gt;(lifetime));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::clearTextIndicator()
</span><span class="cx"> {
</span><del>-    m_pageClient.setTextIndicator(nullptr, false);
</del><ins>+    m_pageClient.clearTextIndicator();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::setTextIndicatorAnimationProgress(float progress)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -728,7 +728,7 @@
</span><span class="cx">     void hideFindUI();
</span><span class="cx">     void countStringMatches(const String&amp;, FindOptions, unsigned maxMatchCount);
</span><span class="cx">     void didCountStringMatches(const String&amp;, uint32_t matchCount);
</span><del>-    void setTextIndicator(const WebCore::TextIndicatorData&amp;, bool fadeOut);
</del><ins>+    void setTextIndicator(const WebCore::TextIndicatorData&amp;, uint64_t /* WebCore::TextIndicatorLifetime */ lifetime = (uint64_t)WebCore::TextIndicatorLifetime::Permanent);
</ins><span class="cx">     void setTextIndicatorAnimationProgress(float);
</span><span class="cx">     void clearTextIndicator();
</span><span class="cx">     void didFindString(const String&amp;, uint32_t matchCount, int32_t matchIndex);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -236,7 +236,7 @@
</span><span class="cx"> 
</span><span class="cx">     # Find messages
</span><span class="cx">     DidCountStringMatches(String string, uint32_t matchCount)
</span><del>-    SetTextIndicator(struct WebCore::TextIndicatorData indicator, bool fadeOut)
</del><ins>+    SetTextIndicator(struct WebCore::TextIndicatorData indicator, uint64_t lifetime)
</ins><span class="cx">     ClearTextIndicator()
</span><span class="cx">     DidFindString(String string, uint32_t matchCount, int32_t matchIndex)
</span><span class="cx">     DidFailToFindString(String string)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -99,7 +99,8 @@
</span><span class="cx"> #endif
</span><span class="cx">     virtual PassRefPtr&lt;WebPopupMenuProxy&gt; createPopupMenuProxy(WebPageProxy*) override;
</span><span class="cx">     virtual PassRefPtr&lt;WebContextMenuProxy&gt; createContextMenuProxy(WebPageProxy*) override;
</span><del>-    virtual void setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool fadeOut) override;
</del><ins>+    virtual void setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
</ins><span class="cx">     virtual void setTextIndicatorAnimationProgress(float) override;
</span><span class="cx"> 
</span><span class="cx">     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&amp;) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessiosPageClientImplIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -453,10 +453,14 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::setTextIndicator(PassRefPtr&lt;TextIndicator&gt; textIndicator, bool fadeOut)
</del><ins>+void PageClientImpl::setTextIndicator(Ref&lt;TextIndicator&gt; textIndicator, TextIndicatorLifetime)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PageClientImpl::clearTextIndicator(TextIndicatorDismissalAnimation)
+{
+}
+
</ins><span class="cx"> void PageClientImpl::setTextIndicatorAnimationProgress(float)
</span><span class="cx"> {
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacPageClientImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -127,7 +127,8 @@
</span><span class="cx">     virtual PassRefPtr&lt;WebColorPicker&gt; createColorPicker(WebPageProxy*, const WebCore::Color&amp; initialColor, const WebCore::IntRect&amp;) override;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    virtual void setTextIndicator(PassRefPtr&lt;WebCore::TextIndicator&gt;, bool fadeOut) override;
</del><ins>+    virtual void setTextIndicator(Ref&lt;WebCore::TextIndicator&gt;, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
</ins><span class="cx">     virtual void setTextIndicatorAnimationProgress(float) override;
</span><span class="cx"> 
</span><span class="cx">     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&amp;) override;
</span><span class="lines">@@ -145,7 +146,7 @@
</span><span class="cx">     virtual void makeFirstResponder() override;
</span><span class="cx">     
</span><span class="cx">     virtual void didPerformDictionaryLookup(const DictionaryPopupInfo&amp;) override;
</span><del>-    virtual void dismissContentRelativeChildWindows() override;
</del><ins>+    virtual void dismissContentRelativeChildWindows(bool withAnimation = true) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect&amp; boundingBoxOfReplacedString, const String&amp; replacedString, const String&amp; replacementString, const Vector&lt;String&gt;&amp; alternativeReplacementStrings) override;
</span><span class="cx">     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) override;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacPageClientImplmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -503,11 +503,16 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void PageClientImpl::setTextIndicator(PassRefPtr&lt;TextIndicator&gt; textIndicator, bool fadeOut)
</del><ins>+void PageClientImpl::setTextIndicator(Ref&lt;TextIndicator&gt; textIndicator, WebCore::TextIndicatorLifetime lifetime)
</ins><span class="cx"> {
</span><del>-    [m_wkView _setTextIndicator:textIndicator fadeOut:fadeOut];
</del><ins>+    [m_wkView _setTextIndicator:textIndicator.get() withLifetime:lifetime];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PageClientImpl::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation dismissalAnimation)
+{
+    [m_wkView _clearTextIndicatorWithAnimation:dismissalAnimation];
+}
+
</ins><span class="cx"> void PageClientImpl::setTextIndicatorAnimationProgress(float progress)
</span><span class="cx"> {
</span><span class="cx">     [m_wkView _setTextIndicatorAnimationProgress:progress];
</span><span class="lines">@@ -589,16 +594,16 @@
</span><span class="cx">     RetainPtr&lt;NSMutableDictionary&gt; mutableOptions = adoptNS([(NSDictionary *)dictionaryPopupInfo.options.get() mutableCopy]);
</span><span class="cx"> 
</span><span class="cx">     if (canLoadLUTermOptionDisableSearchTermIndicator() &amp;&amp; dictionaryPopupInfo.textIndicator.contentImage) {
</span><del>-        [m_wkView _setTextIndicator:TextIndicator::create(dictionaryPopupInfo.textIndicator) fadeOut:NO];
</del><ins>+        [m_wkView _setTextIndicator:*TextIndicator::create(dictionaryPopupInfo.textIndicator) withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
</span><span class="cx">         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
</span><span class="cx">     } else
</span><span class="cx">         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void PageClientImpl::dismissContentRelativeChildWindows()
</del><ins>+void PageClientImpl::dismissContentRelativeChildWindows(bool withAnimation)
</ins><span class="cx"> {
</span><del>-    [m_wkView _dismissContentRelativeChildWindows];
</del><ins>+    [m_wkView _dismissContentRelativeChildWindowsWithAnimation:withAnimation];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::showCorrectionPanel(AlternativeTextType type, const FloatRect&amp; boundingBoxOfReplacedString, const String&amp; replacedString, const String&amp; replacementString, const Vector&lt;String&gt;&amp; alternativeReplacementStrings)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKActionMenuControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -377,7 +377,7 @@
</span><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidPresentUI(overlayID));
</span><span class="cx">     } interactionChangedHandler:^() {
</span><span class="cx">         if (_hitTestResultData.detectedDataTextIndicator)
</span><del>-            page-&gt;setTextIndicator(_hitTestResultData.detectedDataTextIndicator-&gt;data(), false);
</del><ins>+            page-&gt;setTextIndicator(_hitTestResultData.detectedDataTextIndicator-&gt;data());
</ins><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidChangeUI(overlayID));
</span><span class="cx">     } interactionStoppedHandler:^() {
</span><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidHideUI(overlayID));
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWKImmediateActionControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -294,7 +294,7 @@
</span><span class="cx">             _currentQLPreviewMenuItem = item;
</span><span class="cx"> 
</span><span class="cx">             if (TextIndicator *textIndicator = _hitTestResultData.linkTextIndicator.get())
</span><del>-                _page-&gt;setTextIndicator(textIndicator-&gt;data(), false);
</del><ins>+                _page-&gt;setTextIndicator(textIndicator-&gt;data());
</ins><span class="cx"> 
</span><span class="cx">             return (id&lt;NSImmediateActionAnimationController&gt;)item;
</span><span class="cx">         }
</span><span class="lines">@@ -406,7 +406,7 @@
</span><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidPresentUI(overlayID));
</span><span class="cx">     } interactionChangedHandler:^() {
</span><span class="cx">         if (_hitTestResultData.detectedDataTextIndicator)
</span><del>-            page-&gt;setTextIndicator(_hitTestResultData.detectedDataTextIndicator-&gt;data(), false);
</del><ins>+            page-&gt;setTextIndicator(_hitTestResultData.detectedDataTextIndicator-&gt;data());
</ins><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidChangeUI(overlayID));
</span><span class="cx">     } interactionStoppedHandler:^() {
</span><span class="cx">         page-&gt;send(Messages::WebPage::DataDetectorsDidHideUI(overlayID));
</span><span class="lines">@@ -437,7 +437,7 @@
</span><span class="cx">     _currentActionContext = [actionContext contextForView:_wkView altMode:YES interactionStartedHandler:^() {
</span><span class="cx">     } interactionChangedHandler:^() {
</span><span class="cx">         if (_hitTestResultData.linkTextIndicator)
</span><del>-            page-&gt;setTextIndicator(_hitTestResultData.linkTextIndicator-&gt;data(), false);
</del><ins>+            page-&gt;setTextIndicator(_hitTestResultData.linkTextIndicator-&gt;data());
</ins><span class="cx">     } interactionStoppedHandler:^() {
</span><span class="cx">         [self _clearImmediateActionState];
</span><span class="cx">     }];
</span><span class="lines">@@ -474,7 +474,8 @@
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;NSMutableDictionary&gt; mutableOptions = adoptNS([(NSDictionary *)dictionaryPopupInfo.options.get() mutableCopy]);
</span><span class="cx">     if (canLoadLUTermOptionDisableSearchTermIndicator() &amp;&amp; dictionaryPopupInfo.textIndicator.contentImage) {
</span><del>-        [_wkView _setTextIndicator:TextIndicator::create(dictionaryPopupInfo.textIndicator) fadeOut:NO];
</del><ins>+        RefPtr&lt;TextIndicator&gt; indicator = TextIndicator::create(dictionaryPopupInfo.textIndicator);
+        [_wkView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
</ins><span class="cx">         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
</span><span class="cx">         return [getLULookupDefinitionModuleClass() lookupAnimationControllerForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageFindControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp (183516 => 183517)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp        2015-04-28 23:16:24 UTC (rev 183516)
+++ trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp        2015-04-28 23:27:21 UTC (rev 183517)
</span><span class="lines">@@ -322,7 +322,7 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     m_findIndicatorRect = enclosingIntRect(indicator-&gt;selectionRectInRootViewCoordinates());
</span><del>-    m_webPage-&gt;send(Messages::WebPageProxy::SetTextIndicator(indicator-&gt;data(), !isShowingOverlay));
</del><ins>+    m_webPage-&gt;send(Messages::WebPageProxy::SetTextIndicator(indicator-&gt;data(), static_cast&lt;uint64_t&gt;(isShowingOverlay ? TextIndicatorLifetime::Permanent : TextIndicatorLifetime::Temporary)));
</ins><span class="cx">     m_isShowingFindIndicator = true;
</span><span class="cx"> 
</span><span class="cx">     return true;
</span></span></pre>
</div>
</div>

</body>
</html>