Title: [183517] trunk/Source
Revision
183517
Author
[email protected]
Date
2015-04-28 16:27:21 -0700 (Tue, 28 Apr 2015)

Log Message

[TextIndicator] Yellow highlight takes too long to fade out on scroll
https://bugs.webkit.org/show_bug.cgi?id=144358
<rdar://problem/19451011>

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.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (183516 => 183517)


--- 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)
@@ -1,3 +1,34 @@
+2015-04-28  Timothy Horton  <[email protected]>
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        <rdar://problem/19451011>
+
+        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.
+
 2015-04-28  Michael Catanzaro  <[email protected]>
 
         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT

Modified: trunk/Source/WebCore/page/TextIndicator.h (183516 => 183517)


--- 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)
@@ -56,6 +56,19 @@
     Crossfade
 };
 
+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
+};
+
 struct TextIndicatorData {
     FloatRect selectionRectInRootViewCoordinates;
     FloatRect textBoundingRectInRootViewCoordinates;
@@ -78,8 +91,8 @@
     FloatRect textBoundingRectInRootViewCoordinates() const { return m_data.textBoundingRectInRootViewCoordinates; }
     const Vector<FloatRect>& textRectsInBoundingRectCoordinates() const { return m_data.textRectsInBoundingRectCoordinates; }
     float contentImageScaleFactor() const { return m_data.contentImageScaleFactor; }
-    Image *contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
-    Image *contentImage() const { return m_data.contentImage.get(); }
+    Image* contentImageWithHighlight() const { return m_data.contentImageWithHighlight.get(); }
+    Image* contentImage() const { return m_data.contentImage.get(); }
 
     TextIndicatorPresentationTransition presentationTransition() const { return m_data.presentationTransition; }
     void setPresentationTransition(TextIndicatorPresentationTransition transition) { m_data.presentationTransition = transition; }

Modified: trunk/Source/WebCore/page/mac/TextIndicatorWindow.h (183516 => 183517)


--- 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)
@@ -28,6 +28,7 @@
 
 #if PLATFORM(MAC)
 
+#import "TextIndicator.h"
 #import <wtf/Noncopyable.h>
 #import <wtf/RefPtr.h>
 #import <wtf/RetainPtr.h>
@@ -38,8 +39,6 @@
 
 namespace WebCore {
 
-class TextIndicator;
-
 class TextIndicatorWindow {
     WTF_MAKE_NONCOPYABLE(TextIndicatorWindow);
 
@@ -47,7 +46,8 @@
     WEBCORE_EXPORT explicit TextIndicatorWindow(NSView *);
     WEBCORE_EXPORT ~TextIndicatorWindow();
 
-    WEBCORE_EXPORT void setTextIndicator(PassRefPtr<TextIndicator>, CGRect contentRect, bool fadeOut);
+    WEBCORE_EXPORT void setTextIndicator(Ref<TextIndicator>, CGRect contentRect, TextIndicatorLifetime);
+    WEBCORE_EXPORT void clearTextIndicator(TextIndicatorDismissalAnimation);
 
     WEBCORE_EXPORT void setAnimationProgress(float);
 
@@ -61,7 +61,9 @@
     RetainPtr<NSWindow> m_textIndicatorWindow;
     RetainPtr<WebTextIndicatorView> m_textIndicatorView;
 
-    RunLoop::Timer<TextIndicatorWindow> m_startFadeOutTimer;
+    RunLoop::Timer<TextIndicatorWindow> m_temporaryTextIndicatorTimer;
+
+    bool m_fadingOut { false };
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebCore/page/mac/TextIndicatorWindow.mm (183516 => 183517)


--- 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)
@@ -348,18 +348,13 @@
 
 TextIndicatorWindow::TextIndicatorWindow(NSView *targetView)
     : m_targetView(targetView)
-    , m_startFadeOutTimer(RunLoop::main(), this, &TextIndicatorWindow::startFadeOut)
+    , m_temporaryTextIndicatorTimer(RunLoop::main(), this, &TextIndicatorWindow::startFadeOut)
 {
 }
 
 TextIndicatorWindow::~TextIndicatorWindow()
 {
-    if (m_textIndicator->wantsManualAnimation() && [m_textIndicatorView hasCompletedAnimation]) {
-        startFadeOut();
-        return;
-    }
-
-    closeWindow();
+    clearTextIndicator(TextIndicatorDismissalAnimation::FadeOut);
 }
 
 void TextIndicatorWindow::setAnimationProgress(float progress)
@@ -370,18 +365,30 @@
     [m_textIndicatorView setAnimationProgress:progress];
 }
 
-void TextIndicatorWindow::setTextIndicator(PassRefPtr<TextIndicator> textIndicator, CGRect textBoundingRectInScreenCoordinates, bool fadeOut)
+void TextIndicatorWindow::clearTextIndicator(TextIndicatorDismissalAnimation animation)
 {
-    if (m_textIndicator == textIndicator)
+    RefPtr<TextIndicator> textIndicator = WTF::move(m_textIndicator);
+
+    if (m_fadingOut)
         return;
 
-    m_textIndicator = textIndicator;
+    if (textIndicator && textIndicator->wantsManualAnimation() && [m_textIndicatorView hasCompletedAnimation] && animation == TextIndicatorDismissalAnimation::FadeOut) {
+        startFadeOut();
+        return;
+    }
 
     closeWindow();
+}
 
-    if (!m_textIndicator)
+void TextIndicatorWindow::setTextIndicator(Ref<TextIndicator> textIndicator, CGRect textBoundingRectInScreenCoordinates, TextIndicatorLifetime lifetime)
+{
+    if (m_textIndicator == textIndicator.ptr())
         return;
 
+    m_textIndicator = textIndicator.ptr();
+
+    closeWindow();
+
     CGFloat horizontalMargin = dropShadowBlurRadius * 2 + horizontalBorder;
     CGFloat verticalMargin = dropShadowBlurRadius * 2 + verticalBorder;
     
@@ -410,8 +417,8 @@
     if (m_textIndicator->presentationTransition() != TextIndicatorPresentationTransition::None)
         [m_textIndicatorView present];
 
-    if (fadeOut)
-        m_startFadeOutTimer.startOneShot(timeBeforeFadeStarts);
+    if (lifetime == TextIndicatorLifetime::Temporary)
+        m_temporaryTextIndicatorTimer.startOneShot(timeBeforeFadeStarts);
 }
 
 void TextIndicatorWindow::closeWindow()
@@ -419,8 +426,11 @@
     if (!m_textIndicatorWindow)
         return;
 
-    m_startFadeOutTimer.stop();
+    if (m_fadingOut)
+        return;
 
+    m_temporaryTextIndicatorTimer.stop();
+
     [[m_textIndicatorWindow parentWindow] removeChildWindow:m_textIndicatorWindow.get()];
     [m_textIndicatorWindow close];
     m_textIndicatorWindow = nullptr;
@@ -428,6 +438,7 @@
 
 void TextIndicatorWindow::startFadeOut()
 {
+    m_fadingOut = true;
     RetainPtr<NSWindow> indicatorWindow = m_textIndicatorWindow;
     [m_textIndicatorView hideWithCompletionHandler:[indicatorWindow] {
         [[indicatorWindow parentWindow] removeChildWindow:indicatorWindow.get()];

Modified: trunk/Source/WebKit/mac/ChangeLog (183516 => 183517)


--- 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)
@@ -1,3 +1,35 @@
+2015-04-28  Timothy Horton  <[email protected]>
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        <rdar://problem/19451011>
+
+        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.
+
 2015-04-28  Michael Catanzaro  <[email protected]>
 
         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT

Modified: trunk/Source/WebKit/mac/WebView/WebActionMenuController.mm (183516 => 183517)


--- 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)
@@ -121,6 +121,7 @@
 - (void)webView:(WebView *)webView didHandleScrollWheel:(NSEvent *)event
 {
     [self _dismissActionMenuPopovers];
+    [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
 }
 
 - (void)prepareForMenu:(NSMenu *)menu withEvent:(NSEvent *)event
@@ -133,6 +134,7 @@
         return;
 
     [self _dismissActionMenuPopovers];
+    [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
     [actionMenu removeAllItems];
 
     WebElementDictionary *hitTestResult = [self performHitTestAtPoint:event.locationInWindow];
@@ -549,7 +551,7 @@
     } interactionChangedHandler:^() {
         [self _showTextIndicator];
     } interactionStoppedHandler:^() {
-        [self _hideTextIndicator];
+        [self _hideTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
     }];
     _currentDetectedDataRange = detectedDataRange;
 
@@ -813,17 +815,17 @@
         return;
 
     if (_type == WebActionMenuDataDetectedItem && _currentDetectedDataTextIndicator) {
-        [_webView _setTextIndicator:_currentDetectedDataTextIndicator.get() fadeOut:NO];
+        [_webView _setTextIndicator:*_currentDetectedDataTextIndicator withLifetime:TextIndicatorLifetime::Permanent];
         _isShowingTextIndicator = YES;
     }
 }
 
-- (void)_hideTextIndicator
+- (void)_hideTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
 {
     if (!_isShowingTextIndicator)
         return;
 
-    [_webView _clearTextIndicator];
+    [_webView _clearTextIndicatorWithAnimation:animation];
     _isShowingTextIndicator = NO;
 }
 
@@ -832,8 +834,6 @@
     DDActionsManager *actionsManager = [getDDActionsManagerClass() sharedManager];
     if ([actionsManager respondsToSelector:@selector(requestBubbleClosureUnanchorOnFailure:)])
         [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
-
-    [self _hideTextIndicator];
 }
 
 @end

Modified: trunk/Source/WebKit/mac/WebView/WebHTMLView.mm (183516 => 183517)


--- 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)
@@ -5676,7 +5676,7 @@
 
 - (void)quickLookWithEvent:(NSEvent *)event
 {
-    [[self _webView] _setTextIndicator:nullptr fadeOut:NO];
+    [[self _webView] _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
     [super quickLookWithEvent:event];
 }
 #endif // !PLATFORM(IOS)

Modified: trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm (183516 => 183517)


--- 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)
@@ -97,12 +97,14 @@
 - (void)webView:(WebView *)webView willHandleMouseDown:(NSEvent *)event
 {
     [self _clearImmediateActionState];
+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
 }
 
 - (void)webView:(WebView *)webView didHandleScrollWheel:(NSEvent *)event
 {
     [_currentQLPreviewMenuItem close];
     [self _clearImmediateActionState];
+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
 }
 
 - (NSImmediateActionGestureRecognizer *)immediateActionRecognizer
@@ -117,11 +119,11 @@
     [_immediateActionRecognizer setEnabled:YES];
 
     [self _clearImmediateActionState];
+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
 }
 
 - (void)_clearImmediateActionState
 {
-    [_webView _clearTextIndicator];
     DDActionsManager *actionsManager = [getDDActionsManagerClass() sharedManager];
     if ([actionsManager respondsToSelector:@selector(requestBubbleClosureUnanchorOnFailure:)])
         [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
@@ -196,6 +198,7 @@
 
     [_webView _setTextIndicatorAnimationProgress:0];
     [self _clearImmediateActionState];
+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
     [_webView _setMaintainsInactiveSelection:NO];
 }
 
@@ -230,7 +233,7 @@
 
             RefPtr<Range> linkRange = rangeOfContents(*_hitTestResult.URLElement());
             RefPtr<TextIndicator> indicator = TextIndicator::createWithRange(*linkRange, TextIndicatorPresentationTransition::FadeIn);
-            [_webView _setTextIndicator:indicator.get() fadeOut:NO];
+            [_webView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
 
             QLPreviewMenuItem *item = [NSMenuItem standardQuickLookMenuItem];
             item.previewStyle = QLPreviewStylePopover;
@@ -303,6 +306,7 @@
 - (void)menuItemDidClose:(NSMenuItem *)menuItem
 {
     [self _clearImmediateActionState];
+    [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
 }
 
 static IntRect elementBoundingBoxInWindowCoordinatesFromNode(Node* node)
@@ -383,9 +387,9 @@
 
     _currentActionContext = [actionContext contextForView:_webView altMode:YES interactionStartedHandler:^() {
     } interactionChangedHandler:^() {
-        [_webView _setTextIndicator:detectedDataTextIndicator.get() fadeOut:NO];
+        [_webView _setTextIndicator:*detectedDataTextIndicator withLifetime:TextIndicatorLifetime::Permanent];
     } interactionStoppedHandler:^() {
-        [_webView _clearTextIndicator];
+        [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
     }];
 
     [_currentActionContext setHighlightFrame:[_webView.window convertRectToScreen:detectedDataBoundingBox]];
@@ -414,9 +418,9 @@
 
     _currentActionContext = [actionContext contextForView:_webView altMode:YES interactionStartedHandler:^() {
     } interactionChangedHandler:^() {
-        [_webView _setTextIndicator:indicator.get() fadeOut:NO];
+        [_webView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
     } interactionStoppedHandler:^() {
-        [_webView _clearTextIndicator];
+        [_webView _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
     }];
 
     [_currentActionContext setHighlightFrame:[_webView.window convertRectToScreen:elementBoundingBoxInWindowCoordinatesFromNode(_hitTestResult.URLElement())]];

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (183516 => 183517)


--- 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)
@@ -8591,7 +8591,7 @@
         if (!mutableOptions)
             mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
-        [self _setTextIndicator:dictionaryPopupInfo.textIndicator.get() fadeOut:NO];
+        [self _setTextIndicator:*dictionaryPopupInfo.textIndicator withLifetime:TextIndicatorLifetime::Permanent];
         return [getLULookupDefinitionModuleClass() lookupAnimationControllerForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
     }
 
@@ -8599,24 +8599,26 @@
 }
 #endif // __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
 
-- (void)_setTextIndicator:(TextIndicator *)textIndicator fadeOut:(BOOL)fadeOut
+- (void)_setTextIndicator:(TextIndicator&)textIndicator
 {
-    if (!textIndicator) {
-        _private->textIndicatorWindow = nullptr;
-        return;
-    }
+    [self _setTextIndicator:textIndicator withLifetime:TextIndicatorLifetime::Permanent];
+}
 
+- (void)_setTextIndicator:(TextIndicator&)textIndicator withLifetime:(TextIndicatorLifetime)lifetime
+{
     if (!_private->textIndicatorWindow)
         _private->textIndicatorWindow = std::make_unique<TextIndicatorWindow>(self);
 
-    NSRect textBoundingRectInWindowCoordinates = [self convertRect:[self _convertRectFromRootView:textIndicator->textBoundingRectInRootViewCoordinates()] toView:nil];
+    NSRect textBoundingRectInWindowCoordinates = [self convertRect:[self _convertRectFromRootView:textIndicator.textBoundingRectInRootViewCoordinates()] toView:nil];
     NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:textBoundingRectInWindowCoordinates];
-    _private->textIndicatorWindow->setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), fadeOut);
+    _private->textIndicatorWindow->setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), lifetime);
 }
 
-- (void)_clearTextIndicator
+- (void)_clearTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
 {
-    [self _setTextIndicator:nullptr fadeOut:NO];
+    if (_private->textIndicatorWindow)
+        _private->textIndicatorWindow->clearTextIndicator(TextIndicatorDismissalAnimation::FadeOut);
+    _private->textIndicatorWindow = nullptr;
 }
 
 - (void)_setTextIndicatorAnimationProgress:(float)progress
@@ -8645,7 +8647,7 @@
         if (!mutableOptions)
             mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
-        [self _setTextIndicator:dictionaryPopupInfo.textIndicator.get() fadeOut:NO];
+        [self _setTextIndicator:*dictionaryPopupInfo.textIndicator withLifetime:TextIndicatorLifetime::Permanent];
         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
     } else
         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.get() atLocation:textBaselineOrigin options:dictionaryPopupInfo.options.get()];
@@ -8653,7 +8655,7 @@
 
 - (void)_dictionaryLookupPopoverWillClose:(NSNotification *)notification
 {
-    [self _setTextIndicator:nullptr fadeOut:NO];
+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
 }
 #endif // PLATFORM(MAC)
 

Modified: trunk/Source/WebKit/mac/WebView/WebViewInternal.h (183516 => 183517)


--- 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)
@@ -40,6 +40,7 @@
 #import <WebCore/HTMLMediaElement.h>
 #import <WebCore/LayoutMilestones.h>
 #import <WebCore/TextAlternativeWithRange.h>
+#import <WebCore/TextIndicatorWindow.h>
 #import <WebCore/WebCoreKeyboardUIMode.h>
 #import <functional>
 #import <wtf/Forward.h>
@@ -258,8 +259,9 @@
 - (void)_setMaintainsInactiveSelection:(BOOL)shouldMaintainInactiveSelection;
 
 #if PLATFORM(MAC) && defined(__cplusplus)
-- (void)_setTextIndicator:(WebCore::TextIndicator*)textIndicator fadeOut:(BOOL)fadeOut;
-- (void)_clearTextIndicator;
+- (void)_setTextIndicator:(WebCore::TextIndicator&)textIndicator;
+- (void)_setTextIndicator:(WebCore::TextIndicator&)textIndicator withLifetime:(WebCore::TextIndicatorLifetime)lifetime;
+- (void)_clearTextIndicatorWithAnimation:(WebCore::TextIndicatorDismissalAnimation)animation;
 - (void)_setTextIndicatorAnimationProgress:(float)progress;
 - (void)_showDictionaryLookupPopup:(const DictionaryPopupInfo&)dictionaryPopupInfo;
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000

Modified: trunk/Source/WebKit2/ChangeLog (183516 => 183517)


--- 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)
@@ -1,3 +1,63 @@
+2015-04-28  Timothy Horton  <[email protected]>
+
+        [TextIndicator] Yellow highlight takes too long to fade out on scroll
+        https://bugs.webkit.org/show_bug.cgi?id=144358
+        <rdar://problem/19451011>
+
+        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.
+
 2015-04-28  Michael Catanzaro  <[email protected]>
 
         Fully replace ENABLE_LLINT_C_LOOP with ENABLE_JIT

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKViewPrivate.h (183516 => 183517)


--- 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)
@@ -149,6 +149,7 @@
 - (void)_completeImmediateActionAnimation;
 
 - (void)_dismissContentRelativeChildWindows;
+- (void)_dismissContentRelativeChildWindowsWithAnimation:(BOOL)withAnimation;
 
 - (void)_didChangeContentSize:(NSSize)newSize;
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp (183516 => 183517)


--- 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)
@@ -235,11 +235,16 @@
     return WebColorPickerGtk::create(*page, color, rect);
 }
 
-void PageClientImpl::setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool /* fadeOut */)
+void PageClientImpl::setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime)
 {
     notImplemented();
 }
 
+void PageClientImpl::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation)
+{
+    notImplemented();
+}
+
 void PageClientImpl::setTextIndicatorAnimationProgress(float)
 {
     notImplemented();

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h (183516 => 183517)


--- 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)
@@ -88,7 +88,8 @@
 #if ENABLE(INPUT_TYPE_COLOR)
     virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& intialColor, const WebCore::IntRect&) override;
 #endif
-    virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool fadeOut) override;
+    virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
     virtual void setTextIndicatorAnimationProgress(float) override;
     virtual void getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent&, const AtomicString&, Vector<WTF::String>&) override;
     virtual void updateTextInputState() override;

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (183516 => 183517)


--- 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)
@@ -602,7 +602,7 @@
 - (void)renewGState
 {
     if (_data->_textIndicatorWindow)
-        [self _dismissContentRelativeChildWindows];
+        [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
     // Update the view frame.
     if ([self window])
@@ -2760,7 +2760,7 @@
         [NSEvent removeMonitor:_data->_flagsChangedEventMonitor];
         _data->_flagsChangedEventMonitor = nil;
 
-        [self _dismissContentRelativeChildWindows];
+        [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
         if (_data->_immediateActionGestureRecognizer)
@@ -2896,7 +2896,7 @@
 
 - (void)_dictionaryLookupPopoverWillClose:(NSNotification *)notification
 {
-    [self _setTextIndicator:nil fadeOut:NO];
+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::None];
 }
 
 - (void)_accessibilityRegisterUIProcessTokens
@@ -3282,20 +3282,27 @@
     }
 }
 
-- (void)_setTextIndicator:(PassRefPtr<TextIndicator>)textIndicator fadeOut:(BOOL)fadeOut
+- (void)_setTextIndicator:(TextIndicator&)textIndicator
 {
-    if (!textIndicator) {
-        _data->_textIndicatorWindow = nullptr;
-        return;
-    }
+    [self _setTextIndicator:textIndicator withLifetime:TextIndicatorLifetime::Permanent];
+}
 
+- (void)_setTextIndicator:(TextIndicator&)textIndicator withLifetime:(TextIndicatorLifetime)lifetime
+{
     if (!_data->_textIndicatorWindow)
         _data->_textIndicatorWindow = std::make_unique<TextIndicatorWindow>(self);
 
-    NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:[self convertRect:textIndicator->textBoundingRectInRootViewCoordinates() toView:nil]];
-    _data->_textIndicatorWindow->setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), fadeOut);
+    NSRect textBoundingRectInScreenCoordinates = [self.window convertRectToScreen:[self convertRect:textIndicator.textBoundingRectInRootViewCoordinates() toView:nil]];
+    _data->_textIndicatorWindow->setTextIndicator(textIndicator, NSRectToCGRect(textBoundingRectInScreenCoordinates), lifetime);
 }
 
+- (void)_clearTextIndicatorWithAnimation:(TextIndicatorDismissalAnimation)animation
+{
+    if (_data->_textIndicatorWindow)
+        _data->_textIndicatorWindow->clearTextIndicator(animation);
+    _data->_textIndicatorWindow = nullptr;
+}
+
 - (void)_setTextIndicatorAnimationProgress:(float)progress
 {
     if (_data->_textIndicatorWindow)
@@ -4538,7 +4545,7 @@
         return;
     }
 
-    [self _dismissContentRelativeChildWindows];
+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
     [self _ensureGestureController];
 
@@ -4555,7 +4562,7 @@
         return;
     }
 
-    [self _dismissContentRelativeChildWindows];
+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
     [self _ensureGestureController];
 
@@ -4567,7 +4574,7 @@
     if (magnification <= 0 || isnan(magnification) || isinf(magnification))
         [NSException raise:NSInvalidArgumentException format:@"Magnification should be a positive number"];
 
-    [self _dismissContentRelativeChildWindows];
+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
     _data->_page->scalePageInViewCoordinates(magnification, roundedIntPoint(point));
 }
@@ -4577,7 +4584,7 @@
     if (magnification <= 0 || isnan(magnification) || isinf(magnification))
         [NSException raise:NSInvalidArgumentException format:@"Magnification should be a positive number"];
 
-    [self _dismissContentRelativeChildWindows];
+    [self _dismissContentRelativeChildWindowsWithAnimation:NO];
 
     FloatPoint viewCenter(NSMidX([self bounds]), NSMidY([self bounds]));
     _data->_page->scalePageInViewCoordinates(magnification, roundedIntPoint(viewCenter));
@@ -4675,9 +4682,9 @@
     // FIXME: We don't know which panel we are dismissing, it may not even be in the current page (see <rdar://problem/13875766>).
     if ([[self window] isKeyWindow]
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
-    || [_data->_immediateActionController hasActiveImmediateAction]
+        || [_data->_immediateActionController hasActiveImmediateAction]
 #endif
-    ) {
+        ) {
         if (Class lookupDefinitionModuleClass = getLULookupDefinitionModuleClass())
             [lookupDefinitionModuleClass hideDefinition];
 
@@ -4686,7 +4693,7 @@
             [actionsManager requestBubbleClosureUnanchorOnFailure:YES];
     }
 
-    [self _setTextIndicator:nullptr fadeOut:NO];
+    [self _clearTextIndicatorWithAnimation:TextIndicatorDismissalAnimation::FadeOut];
 
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
     [_data->_immediateActionController dismissContentRelativeChildWindows];
@@ -4695,6 +4702,14 @@
     static_cast<PageClient&>(*_data->_pageClient).dismissCorrectionPanel(ReasonForDismissingAlternativeTextIgnored);
 }
 
+- (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];
+}
+
 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000
 
 - (void)_setAutomaticallyAdjustsContentInsets:(BOOL)automaticallyAdjustsContentInsets

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (183516 => 183517)


--- 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)
@@ -85,7 +85,9 @@
 - (void)_setIntrinsicContentSize:(NSSize)intrinsicContentSize;
 - (NSRect)_convertToDeviceSpace:(NSRect)rect;
 - (NSRect)_convertToUserSpace:(NSRect)rect;
-- (void)_setTextIndicator:(PassRefPtr<WebCore::TextIndicator>)textIndicator fadeOut:(BOOL)fadeOut;
+- (void)_setTextIndicator:(WebCore::TextIndicator&)textIndicator;
+- (void)_setTextIndicator:(WebCore::TextIndicator&)textIndicator withLifetime:(WebCore::TextIndicatorLifetime)lifetime;
+- (void)_clearTextIndicatorWithAnimation:(WebCore::TextIndicatorDismissalAnimation)animation;
 - (void)_setTextIndicatorAnimationProgress:(float)progress;
 - (void)_selectionChanged;
 

Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp (183516 => 183517)


--- 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)
@@ -450,11 +450,16 @@
 }
 #endif
 
-void WebView::setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool)
+void WebView::setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime)
 {
     notImplemented();
 }
 
+void WebView::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation)
+{
+    notImplemented();
+}
+
 void WebView::setTextIndicatorAnimationProgress(float)
 {
     notImplemented();

Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h (183516 => 183517)


--- 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)
@@ -181,7 +181,8 @@
     virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) override;
 #endif
 
-    virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool) override;
+    virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
     virtual void setTextIndicatorAnimationProgress(float) override;
 
     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) override;

Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (183516 => 183517)


--- 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)
@@ -220,7 +220,8 @@
     virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) = 0;
 #endif
 
-    virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool fadeOut) = 0;
+    virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) = 0;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) = 0;
     virtual void setTextIndicatorAnimationProgress(float) = 0;
 
     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
@@ -231,7 +232,7 @@
     virtual void pluginFocusOrWindowFocusChanged(uint64_t pluginComplexTextInputIdentifier, bool pluginHasFocusAndWindowHasFocus) = 0;
     virtual void setPluginComplexTextInputState(uint64_t pluginComplexTextInputIdentifier, PluginComplexTextInputState) = 0;
     virtual void didPerformDictionaryLookup(const DictionaryPopupInfo&) = 0;
-    virtual void dismissContentRelativeChildWindows() = 0;
+    virtual void dismissContentRelativeChildWindows(bool withAnimation = true) = 0;
     virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) = 0;
     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) = 0;
     virtual String dismissCorrectionPanelSoon(WebCore::ReasonForDismissingAlternativeText) = 0;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (183516 => 183517)


--- 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)
@@ -3646,7 +3646,7 @@
 {
     m_uiClient->pageDidScroll(this);
 #if PLATFORM(MAC)
-    m_pageClient.dismissContentRelativeChildWindows();
+    m_pageClient.dismissContentRelativeChildWindows(false);
 #endif
 }
 
@@ -3899,14 +3899,14 @@
     m_findMatchesClient.didGetImageForMatchResult(this, WebImage::create(ShareableBitmap::create(contentImageHandle)).get(), matchIndex);
 }
 
-void WebPageProxy::setTextIndicator(const TextIndicatorData& indicatorData, bool fadeOut)
+void WebPageProxy::setTextIndicator(const TextIndicatorData& indicatorData, uint64_t lifetime)
 {
-    m_pageClient.setTextIndicator(TextIndicator::create(indicatorData), fadeOut);
+    m_pageClient.setTextIndicator(*TextIndicator::create(indicatorData), static_cast<TextIndicatorLifetime>(lifetime));
 }
 
 void WebPageProxy::clearTextIndicator()
 {
-    m_pageClient.setTextIndicator(nullptr, false);
+    m_pageClient.clearTextIndicator();
 }
 
 void WebPageProxy::setTextIndicatorAnimationProgress(float progress)

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (183516 => 183517)


--- 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)
@@ -728,7 +728,7 @@
     void hideFindUI();
     void countStringMatches(const String&, FindOptions, unsigned maxMatchCount);
     void didCountStringMatches(const String&, uint32_t matchCount);
-    void setTextIndicator(const WebCore::TextIndicatorData&, bool fadeOut);
+    void setTextIndicator(const WebCore::TextIndicatorData&, uint64_t /* WebCore::TextIndicatorLifetime */ lifetime = (uint64_t)WebCore::TextIndicatorLifetime::Permanent);
     void setTextIndicatorAnimationProgress(float);
     void clearTextIndicator();
     void didFindString(const String&, uint32_t matchCount, int32_t matchIndex);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (183516 => 183517)


--- 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)
@@ -236,7 +236,7 @@
 
     # Find messages
     DidCountStringMatches(String string, uint32_t matchCount)
-    SetTextIndicator(struct WebCore::TextIndicatorData indicator, bool fadeOut)
+    SetTextIndicator(struct WebCore::TextIndicatorData indicator, uint64_t lifetime)
     ClearTextIndicator()
     DidFindString(String string, uint32_t matchCount, int32_t matchIndex)
     DidFailToFindString(String string)

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h (183516 => 183517)


--- 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)
@@ -99,7 +99,8 @@
 #endif
     virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) override;
     virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) override;
-    virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool fadeOut) override;
+    virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
     virtual void setTextIndicatorAnimationProgress(float) override;
 
     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) override;

Modified: trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm (183516 => 183517)


--- 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)
@@ -453,10 +453,14 @@
     return 0;
 }
 
-void PageClientImpl::setTextIndicator(PassRefPtr<TextIndicator> textIndicator, bool fadeOut)
+void PageClientImpl::setTextIndicator(Ref<TextIndicator> textIndicator, TextIndicatorLifetime)
 {
 }
 
+void PageClientImpl::clearTextIndicator(TextIndicatorDismissalAnimation)
+{
+}
+
 void PageClientImpl::setTextIndicatorAnimationProgress(float)
 {
 }

Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h (183516 => 183517)


--- 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)
@@ -127,7 +127,8 @@
     virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) override;
 #endif
 
-    virtual void setTextIndicator(PassRefPtr<WebCore::TextIndicator>, bool fadeOut) override;
+    virtual void setTextIndicator(Ref<WebCore::TextIndicator>, WebCore::TextIndicatorLifetime = WebCore::TextIndicatorLifetime::Permanent) override;
+    virtual void clearTextIndicator(WebCore::TextIndicatorDismissalAnimation = WebCore::TextIndicatorDismissalAnimation::FadeOut) override;
     virtual void setTextIndicatorAnimationProgress(float) override;
 
     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) override;
@@ -145,7 +146,7 @@
     virtual void makeFirstResponder() override;
     
     virtual void didPerformDictionaryLookup(const DictionaryPopupInfo&) override;
-    virtual void dismissContentRelativeChildWindows() override;
+    virtual void dismissContentRelativeChildWindows(bool withAnimation = true) override;
 
     virtual void showCorrectionPanel(WebCore::AlternativeTextType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings) override;
     virtual void dismissCorrectionPanel(WebCore::ReasonForDismissingAlternativeText) override;

Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (183516 => 183517)


--- 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)
@@ -503,11 +503,16 @@
 }
 #endif
 
-void PageClientImpl::setTextIndicator(PassRefPtr<TextIndicator> textIndicator, bool fadeOut)
+void PageClientImpl::setTextIndicator(Ref<TextIndicator> textIndicator, WebCore::TextIndicatorLifetime lifetime)
 {
-    [m_wkView _setTextIndicator:textIndicator fadeOut:fadeOut];
+    [m_wkView _setTextIndicator:textIndicator.get() withLifetime:lifetime];
 }
 
+void PageClientImpl::clearTextIndicator(WebCore::TextIndicatorDismissalAnimation dismissalAnimation)
+{
+    [m_wkView _clearTextIndicatorWithAnimation:dismissalAnimation];
+}
+
 void PageClientImpl::setTextIndicatorAnimationProgress(float progress)
 {
     [m_wkView _setTextIndicatorAnimationProgress:progress];
@@ -589,16 +594,16 @@
     RetainPtr<NSMutableDictionary> mutableOptions = adoptNS([(NSDictionary *)dictionaryPopupInfo.options.get() mutableCopy]);
 
     if (canLoadLUTermOptionDisableSearchTermIndicator() && dictionaryPopupInfo.textIndicator.contentImage) {
-        [m_wkView _setTextIndicator:TextIndicator::create(dictionaryPopupInfo.textIndicator) fadeOut:NO];
+        [m_wkView _setTextIndicator:*TextIndicator::create(dictionaryPopupInfo.textIndicator) withLifetime:TextIndicatorLifetime::Permanent];
         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
     } else
         [getLULookupDefinitionModuleClass() showDefinitionForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
 }
 
-void PageClientImpl::dismissContentRelativeChildWindows()
+void PageClientImpl::dismissContentRelativeChildWindows(bool withAnimation)
 {
-    [m_wkView _dismissContentRelativeChildWindows];
+    [m_wkView _dismissContentRelativeChildWindowsWithAnimation:withAnimation];
 }
 
 void PageClientImpl::showCorrectionPanel(AlternativeTextType type, const FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings)

Modified: trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm (183516 => 183517)


--- 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)
@@ -377,7 +377,7 @@
         page->send(Messages::WebPage::DataDetectorsDidPresentUI(overlayID));
     } interactionChangedHandler:^() {
         if (_hitTestResultData.detectedDataTextIndicator)
-            page->setTextIndicator(_hitTestResultData.detectedDataTextIndicator->data(), false);
+            page->setTextIndicator(_hitTestResultData.detectedDataTextIndicator->data());
         page->send(Messages::WebPage::DataDetectorsDidChangeUI(overlayID));
     } interactionStoppedHandler:^() {
         page->send(Messages::WebPage::DataDetectorsDidHideUI(overlayID));

Modified: trunk/Source/WebKit2/UIProcess/mac/WKImmediateActionController.mm (183516 => 183517)


--- 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)
@@ -294,7 +294,7 @@
             _currentQLPreviewMenuItem = item;
 
             if (TextIndicator *textIndicator = _hitTestResultData.linkTextIndicator.get())
-                _page->setTextIndicator(textIndicator->data(), false);
+                _page->setTextIndicator(textIndicator->data());
 
             return (id<NSImmediateActionAnimationController>)item;
         }
@@ -406,7 +406,7 @@
         page->send(Messages::WebPage::DataDetectorsDidPresentUI(overlayID));
     } interactionChangedHandler:^() {
         if (_hitTestResultData.detectedDataTextIndicator)
-            page->setTextIndicator(_hitTestResultData.detectedDataTextIndicator->data(), false);
+            page->setTextIndicator(_hitTestResultData.detectedDataTextIndicator->data());
         page->send(Messages::WebPage::DataDetectorsDidChangeUI(overlayID));
     } interactionStoppedHandler:^() {
         page->send(Messages::WebPage::DataDetectorsDidHideUI(overlayID));
@@ -437,7 +437,7 @@
     _currentActionContext = [actionContext contextForView:_wkView altMode:YES interactionStartedHandler:^() {
     } interactionChangedHandler:^() {
         if (_hitTestResultData.linkTextIndicator)
-            page->setTextIndicator(_hitTestResultData.linkTextIndicator->data(), false);
+            page->setTextIndicator(_hitTestResultData.linkTextIndicator->data());
     } interactionStoppedHandler:^() {
         [self _clearImmediateActionState];
     }];
@@ -474,7 +474,8 @@
 
     RetainPtr<NSMutableDictionary> mutableOptions = adoptNS([(NSDictionary *)dictionaryPopupInfo.options.get() mutableCopy]);
     if (canLoadLUTermOptionDisableSearchTermIndicator() && dictionaryPopupInfo.textIndicator.contentImage) {
-        [_wkView _setTextIndicator:TextIndicator::create(dictionaryPopupInfo.textIndicator) fadeOut:NO];
+        RefPtr<TextIndicator> indicator = TextIndicator::create(dictionaryPopupInfo.textIndicator);
+        [_wkView _setTextIndicator:*indicator withLifetime:TextIndicatorLifetime::Permanent];
         [mutableOptions setObject:@YES forKey:getLUTermOptionDisableSearchTermIndicator()];
         return [getLULookupDefinitionModuleClass() lookupAnimationControllerForTerm:dictionaryPopupInfo.attributedString.string.get() atLocation:textBaselineOrigin options:mutableOptions.get()];
     }

Modified: trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp (183516 => 183517)


--- 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)
@@ -322,7 +322,7 @@
         return false;
 
     m_findIndicatorRect = enclosingIntRect(indicator->selectionRectInRootViewCoordinates());
-    m_webPage->send(Messages::WebPageProxy::SetTextIndicator(indicator->data(), !isShowingOverlay));
+    m_webPage->send(Messages::WebPageProxy::SetTextIndicator(indicator->data(), static_cast<uint64_t>(isShowingOverlay ? TextIndicatorLifetime::Permanent : TextIndicatorLifetime::Temporary)));
     m_isShowingFindIndicator = true;
 
     return true;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to