Title: [238657] trunk/Source
Revision
238657
Author
commit-qu...@webkit.org
Date
2018-11-28 18:55:59 -0800 (Wed, 28 Nov 2018)

Log Message

Unreviewed, rolling out r238653 and r238656.
https://bugs.webkit.org/show_bug.cgi?id=192130

Breaks iOS build (Requested by smfr on #webkit).

Reverted changesets:

"Move Lookup Code for better cross platform usage"
https://bugs.webkit.org/show_bug.cgi?id=191732
https://trac.webkit.org/changeset/238653

"Attempt to fix the iOS build by only including RevealSPI.h
when it's needed."
https://trac.webkit.org/changeset/238656

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (238656 => 238657)


--- trunk/Source/WebCore/ChangeLog	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/ChangeLog	2018-11-29 02:55:59 UTC (rev 238657)
@@ -1,3 +1,20 @@
+2018-11-28  Commit Queue  <commit-qu...@webkit.org>
+
+        Unreviewed, rolling out r238653 and r238656.
+        https://bugs.webkit.org/show_bug.cgi?id=192130
+
+        Breaks iOS build (Requested by smfr on #webkit).
+
+        Reverted changesets:
+
+        "Move Lookup Code for better cross platform usage"
+        https://bugs.webkit.org/show_bug.cgi?id=191732
+        https://trac.webkit.org/changeset/238653
+
+        "Attempt to fix the iOS build by only including RevealSPI.h
+        when it's needed."
+        https://trac.webkit.org/changeset/238656
+
 2018-11-28  Simon Fraser  <simon.fra...@apple.com>
 
         Attempt to fix the iOS build by only including RevealSPI.h when it's needed.

Modified: trunk/Source/WebCore/PAL/ChangeLog (238656 => 238657)


--- trunk/Source/WebCore/PAL/ChangeLog	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/PAL/ChangeLog	2018-11-29 02:55:59 UTC (rev 238657)
@@ -1,3 +1,20 @@
+2018-11-28  Commit Queue  <commit-qu...@webkit.org>
+
+        Unreviewed, rolling out r238653 and r238656.
+        https://bugs.webkit.org/show_bug.cgi?id=192130
+
+        Breaks iOS build (Requested by smfr on #webkit).
+
+        Reverted changesets:
+
+        "Move Lookup Code for better cross platform usage"
+        https://bugs.webkit.org/show_bug.cgi?id=191732
+        https://trac.webkit.org/changeset/238653
+
+        "Attempt to fix the iOS build by only including RevealSPI.h
+        when it's needed."
+        https://trac.webkit.org/changeset/238656
+
 2018-11-15  Megan Gardner  <megan_gard...@apple.com>
 
         Move Lookup Code for better cross platform usage

Modified: trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj (238656 => 238657)


--- trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj	2018-11-29 02:55:59 UTC (rev 238657)
@@ -406,7 +406,6 @@
 				0C2DA1391F3BEB4900DBC317 /* PassKitSPI.h */,
 				0C2DA13A1F3BEB4900DBC317 /* pthreadSPI.h */,
 				0C2DA13B1F3BEB4900DBC317 /* QuartzCoreSPI.h */,
-				442956CC218A72DE0080DB54 /* RevealSPI.h */,
 				570AB8F020AE2E8D00B8BE87 /* SecKeyProxySPI.h */,
 				0C2DA13C1F3BEB4900DBC317 /* ServersSPI.h */,
 				0C2DA12B1F3BEB4900DBC317 /* URLFormattingSPI.h */,
@@ -472,6 +471,7 @@
 				0C7785861F45130F00F4EBB6 /* QTKitSPI.h */,
 				A102658A1F56748C00B4C844 /* QuickDrawSPI.h */,
 				0C7785871F45130F00F4EBB6 /* QuickLookMacSPI.h */,
+				442956CC218A72DE0080DB54 /* RevealSPI.h */,
 				A1175B481F6AFF8E00C4B9F0 /* SpeechSynthesisSPI.h */,
 				0C7785881F45130F00F4EBB6 /* TUCallSPI.h */,
 			);

Deleted: trunk/Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h (238656 => 238657)


--- trunk/Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#import <objc/runtime.h>
-#if PLATFORM(MAC)
-#import <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
-#endif // PLATFORM(MAC)
-#import <wtf/SoftLinking.h>
-
-SOFT_LINK_PRIVATE_FRAMEWORK(Reveal)
-SOFT_LINK_PRIVATE_FRAMEWORK(RevealCore)
-SOFT_LINK_CLASS_OPTIONAL(Reveal, RVPresenter)
-SOFT_LINK_CLASS_OPTIONAL(Reveal, RVPresentingContext)
-SOFT_LINK_CLASS_OPTIONAL(RevealCore, RVItem)
-SOFT_LINK_CLASS_OPTIONAL(RevealCore, RVSelection)
-
-#if USE(APPLE_INTERNAL_SDK)
-
-#if PLATFORM(MAC)
-#import <Reveal/RVPresenter.h>
-#import <Reveal/Reveal.h>
-#endif // PLATFORM(MAC)
-#import <RevealCore/RVSelection.h>
-#import <RevealCore/RevealCore.h>
-
-#else // USE(APPLE_INTERNAL_SDK)
-
-
-@protocol RVPresenterHighlightDelegate;
-
-@interface RVItem : NSObject <NSSecureCoding>
-- (instancetype)initWithText:(NSString *)text selectedRange:(NSRange)selectedRange NS_DESIGNATED_INITIALIZER;
-@end
-
-@interface RVSelection : NSObject
-+ (NSRange)revealRangeAtIndex:(NSUInteger)clickIndex selectedRanges:(NSArray <NSValue *> *)selectedRanges shouldUpdateSelection:(BOOL *)shouldUpdateSelection;
-@end
-
-@interface RVPresentingContext : NSObject
-- (instancetype)initWithPointerLocationInView:(NSPoint)pointerLocationInView inView:(NSView *)view highlightDelegate:(id<RVPresenterHighlightDelegate>)highlightDelegate;
-@end
-
-@protocol RVPresenterHighlightDelegate <NSObject>
-@required
-- (NSArray <NSValue *> *)revealContext:(RVPresentingContext *)context rectsForItem:(RVItem *)item;
-@optional
-- (void)revealContext:(RVPresentingContext *)context stopHighlightingItem:(RVItem *)item;
-- (void)revealContext:(RVPresentingContext *)context drawRectsForItem:(RVItem *)item;
-@end
-
-@interface RVDocumentContext : NSObject < NSSecureCoding >
-@end
-
-@interface RVPresenter : NSObject
-#if PLATFORM(MAC)
-- (id<NSImmediateActionAnimationController>)animationControllerForItem:(RVItem *)item documentContext:(RVDocumentContext *)documentContext presentingContext:(RVPresentingContext *)presentingContext options:(NSDictionary *)options;
-#endif // PLATFORM(MAC)
-- (BOOL)revealItem:(RVItem *)item documentContext:(RVDocumentContext *)documentContext presentingContext:(RVPresentingContext *)presentingContext options:(NSDictionary *)options;
-@end
-
-#endif // !USE(APPLE_INTERNAL_SDK)

Modified: trunk/Source/WebCore/PAL/pal/spi/mac/LookupSPI.h (238656 => 238657)


--- trunk/Source/WebCore/PAL/pal/spi/mac/LookupSPI.h	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/LookupSPI.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -23,13 +23,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-
-#if PLATFORM(MAC)
-
 #import <objc/runtime.h>
 #import <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
 #import <wtf/SoftLinking.h>
 
+#if PLATFORM(MAC)
+
 SOFT_LINK_PRIVATE_FRAMEWORK_OPTIONAL(Lookup)
 SOFT_LINK_CLASS_OPTIONAL(Lookup, LULookupDefinitionModule)
 

Copied: trunk/Source/WebCore/PAL/pal/spi/mac/RevealSPI.h (from rev 238656, trunk/Source/WebCore/PAL/pal/spi/cocoa/RevealSPI.h) (0 => 238657)


--- trunk/Source/WebCore/PAL/pal/spi/mac/RevealSPI.h	                        (rev 0)
+++ trunk/Source/WebCore/PAL/pal/spi/mac/RevealSPI.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2018 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#import <objc/runtime.h>
+#import <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
+#import <wtf/SoftLinking.h>
+
+SOFT_LINK_PRIVATE_FRAMEWORK(Reveal)
+SOFT_LINK_PRIVATE_FRAMEWORK(RevealCore)
+SOFT_LINK_CLASS_OPTIONAL(Reveal, RVPresenter)
+SOFT_LINK_CLASS_OPTIONAL(Reveal, RVPresentingContext)
+SOFT_LINK_CLASS_OPTIONAL(RevealCore, RVItem)
+SOFT_LINK_CLASS_OPTIONAL(RevealCore, RVSelection)
+
+#if USE(APPLE_INTERNAL_SDK)
+
+#import <Reveal/RVPresenter.h>
+#import <Reveal/Reveal.h>
+#import <RevealCore/RVSelection.h>
+#import <RevealCore/RevealCore.h>
+
+
+#else
+
+@interface RVItem : NSObject <NSSecureCoding>
+- (instancetype)initWithText:(NSString *)text selectedRange:(NSRange)selectedRange NS_DESIGNATED_INITIALIZER;
+@end
+
+@interface RVSelection : NSObject
++ (NSRange)revealRangeAtIndex:(NSUInteger)clickIndex selectedRanges:(NSArray <NSValue *> *)selectedRanges shouldUpdateSelection:(BOOL *)shouldUpdateSelection;
+@end
+
+@interface RVPresenter : NSObject
+- (id<NSImmediateActionAnimationController>)animationControllerForItem:(RVItem *)item documentContext:(RVDocumentContext *)documentContext presentingContext:(RVPresentingContext *)presentingContext options:(NSDictionary *)options;
+- (BOOL)revealItem:(RVItem *)item documentContext:(RVDocumentContext *)documentContext presentingContext:(RVPresentingContext *)presentingContext options:(NSDictionary *)options;
+@end
+
+#endif // !USE(APPLE_INTERNAL_SDK)

Modified: trunk/Source/WebCore/SourcesCocoa.txt (238656 => 238657)


--- trunk/Source/WebCore/SourcesCocoa.txt	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/SourcesCocoa.txt	2018-11-29 02:55:59 UTC (rev 238657)
@@ -77,7 +77,6 @@
 editing/SmartReplaceCF.cpp
 
 editing/cocoa/DataDetection.mm
-editing/cocoa/DictionaryLookup.mm
 editing/cocoa/EditorCocoa.mm
 editing/cocoa/FontAttributeChangesCocoa.mm
 editing/cocoa/FontAttributesCocoa.mm
@@ -91,6 +90,7 @@
 editing/ios/EditorIOS.mm
 
 editing/mac/AlternativeTextUIController.mm
+editing/mac/DictionaryLookup.mm
 editing/mac/DictionaryLookupLegacy.mm
 editing/mac/EditorMac.mm
 editing/mac/FrameSelectionMac.mm

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (238656 => 238657)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2018-11-29 02:55:59 UTC (rev 238657)
@@ -20519,7 +20519,6 @@
 			children = (
 				C5227DEF1C3C6DD700F5ED54 /* DataDetection.h */,
 				C5227DF01C3C6DD700F5ED54 /* DataDetection.mm */,
-				937FF3D61A10131B008EBA31 /* DictionaryLookup.mm */,
 				9B55EEE81B3E8898005342BC /* EditorCocoa.mm */,
 				F42CEB54214031EE002DCA72 /* FontAttributeChangesCocoa.mm */,
 				F48D2A752156FE5700C6752B /* FontAttributesCocoa.mm */,
@@ -26226,6 +26225,7 @@
 				CE7B2DAF1586ABAD0098B3FA /* AlternativeTextUIController.h */,
 				CE7B2DB01586ABAD0098B3FA /* AlternativeTextUIController.mm */,
 				937FF3D41A1012D6008EBA31 /* DictionaryLookup.h */,
+				937FF3D61A10131B008EBA31 /* DictionaryLookup.mm */,
 				442956CA218A6D300080DB54 /* DictionaryLookupLegacy.mm */,
 				ED501DC50B249F2900AE18D9 /* EditorMac.mm */,
 				4A8C96EA0BE69032004EEFF0 /* FrameSelectionMac.mm */,

Deleted: trunk/Source/WebCore/editing/cocoa/DictionaryLookup.mm (238656 => 238657)


--- trunk/Source/WebCore/editing/cocoa/DictionaryLookup.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/editing/cocoa/DictionaryLookup.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -1,424 +0,0 @@
-/*
- * Copyright (C) 2014-2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-#import "DictionaryLookup.h"
-
-#if PLATFORM(COCOA)
-
-#import "Document.h"
-#import "Editing.h"
-#import "FocusController.h"
-#import "Frame.h"
-#import "FrameSelection.h"
-#import "HTMLConverter.h"
-#import "HitTestResult.h"
-#import "NotImplemented.h"
-#import "Page.h"
-#import "Range.h"
-#import "RenderObject.h"
-#import "TextIterator.h"
-#import "VisiblePosition.h"
-#import "VisibleSelection.h"
-#import "VisibleUnits.h"
-#import <PDFKit/PDFKit.h>
-#import <pal/spi/mac/LookupSPI.h>
-#import <wtf/BlockObjCExceptions.h>
-#import <wtf/RefPtr.h>
-
-#if ENABLE(REVEAL)
-#import <pal/spi/cocoa/RevealSPI.h>
-
-#if PLATFORM(MAC)
-
-@interface WebRevealHighlight <RVPresenterHighlightDelegate> : NSObject {
-@private
-    Function<void()> _clearTextIndicator;
-    NSRect _highlightRect;
-    BOOL _useDefaultHighlight;
-    NSAttributedString *_attributedString;
-}
-
-@property (nonatomic, readonly) NSRect highlightRect;
-@property (nonatomic, readonly) BOOL useDefaultHighlight;
-@property (nonatomic, readonly) NSAttributedString *attributedString;
-
-- (instancetype)initWithHighlightRect:(NSRect)highlightRect useDefaultHighlight:(BOOL)useDefaultHighlight attributedString:(NSAttributedString *) attributedString;
-- (void)setClearTextIndicator:(Function<void()>&&)clearTextIndicator;
-
-@end
-
-@implementation WebRevealHighlight
-
-@synthesize highlightRect=_highlightRect;
-@synthesize useDefaultHighlight=_useDefaultHighlight;
-@synthesize attributedString=_attributedString;
-
-- (instancetype)initWithHighlightRect:(NSRect)highlightRect useDefaultHighlight:(BOOL)useDefaultHighlight attributedString:(NSAttributedString *) attributedString
-{
-    if (!(self = [super init]))
-        return nil;
-    
-    _highlightRect = highlightRect;
-    _useDefaultHighlight = useDefaultHighlight;
-    _attributedString = attributedString;
-    
-    return self;
-}
-
-- (void)setClearTextIndicator:(Function<void()>&&)clearTextIndicator
-{
-    _clearTextIndicator = WTFMove(clearTextIndicator);
-}
-
-- (NSArray<NSValue *> *)revealContext:(RVPresentingContext *)context rectsForItem:(RVItem *)item
-{
-    UNUSED_PARAM(context);
-    UNUSED_PARAM(item);
-    return @[[NSValue valueWithRect:self.highlightRect]];
-}
-
-- (void)revealContext:(RVPresentingContext *)context drawRectsForItem:(RVItem *)item
-{
-    UNUSED_PARAM(item);
-    
-    for (NSValue *rectVal in context.itemRectsInView) {
-        NSRect rect = rectVal.rectValue;
-
-        // Get current font attributes from the attributed string above, and add paragraph style attribute in order to center text.
-        RetainPtr<NSMutableDictionary> attributes = adoptNS([[NSMutableDictionary alloc] initWithDictionary:[self.attributedString fontAttributesInRange:NSMakeRange(0, [self.attributedString length])]]);
-        RetainPtr<NSMutableParagraphStyle> paragraph = adoptNS([[NSMutableParagraphStyle alloc] init]);
-        [paragraph setAlignment:NSTextAlignmentCenter];
-        [attributes setObject:paragraph.get() forKey:NSParagraphStyleAttributeName];
-    
-        RetainPtr<NSAttributedString> string = adoptNS([[NSAttributedString alloc] initWithString:[self.attributedString string] attributes:attributes.get()]);
-        [string drawInRect:rect];
-    }
-}
-
-- (BOOL)revealContext:(RVPresentingContext *)context shouldUseDefaultHighlightForItem:(RVItem *)item
-{
-    UNUSED_PARAM(context);
-    UNUSED_PARAM(item);
-    return self.useDefaultHighlight;
-}
-
-- (void)revealContext:(RVPresentingContext *)context stopHighlightingItem:(RVItem *)item
-{
-    UNUSED_PARAM(context);
-    UNUSED_PARAM(item);
-    auto block = WTFMove(_clearTextIndicator);
-    if (block)
-        block();
-}
-
-@end
-
-#endif // PLATFORM(MAC)
-
-#endif // ENABLE(REVEAL)
-
-namespace WebCore {
-
-#if ENABLE(REVEAL)
-
-std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeForSelection(const VisibleSelection& selection)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-    if (!getRVItemClass())
-        return { nullptr, nil };
-    
-    auto selectedRange = selection.toNormalizedRange();
-    if (!selectedRange)
-        return { nullptr, nil };
-
-    // Since we already have the range we want, we just need to grab the returned options.
-    auto selectionStart = selection.visibleStart();
-    auto selectionEnd = selection.visibleEnd();
-
-    // As context, we are going to use the surrounding paragraphs of text.
-    auto paragraphStart = startOfParagraph(selectionStart);
-    auto paragraphEnd = endOfParagraph(selectionEnd);
-
-    int lengthToSelectionStart = TextIterator::rangeLength(makeRange(paragraphStart, selectionStart).get());
-    int lengthToSelectionEnd = TextIterator::rangeLength(makeRange(paragraphStart, selectionEnd).get());
-    NSRange rangeToPass = NSMakeRange(lengthToSelectionStart, lengthToSelectionEnd - lengthToSelectionStart);
-    
-    RefPtr<Range> fullCharacterRange = makeRange(paragraphStart, paragraphEnd);
-    String itemString = plainText(fullCharacterRange.get());
-    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:itemString selectedRange:rangeToPass]);
-    NSRange highlightRange = item.get().highlightRange;
-    
-    return { TextIterator::subrange(*fullCharacterRange, highlightRange.location, highlightRange.length), nil };
-    
-    END_BLOCK_OBJC_EXCEPTIONS;
-    
-    return { nullptr, nil };
-}
-
-std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeAtHitTestResult(const HitTestResult& hitTestResult)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-    if (!getRVItemClass())
-        return { nullptr, nil };
-    
-    auto* node = hitTestResult.innerNonSharedNode();
-    if (!node || !node->renderer())
-        return { nullptr, nil };
-
-    auto* frame = node->document().frame();
-    if (!frame)
-        return { nullptr, nil };
-
-    // Don't do anything if there is no character at the point.
-    auto framePoint = hitTestResult.roundedPointInInnerNodeFrame();
-    if (!frame->rangeForPoint(framePoint))
-        return { nullptr, nil };
-
-    auto position = frame->visiblePositionForPoint(framePoint);
-    if (position.isNull())
-        position = firstPositionInOrBeforeNode(node);
-
-    auto selection = frame->page()->focusController().focusedOrMainFrame().selection().selection();
-    NSRange selectionRange;
-    int hitIndex;
-    RefPtr<Range> fullCharacterRange;
-    
-    if (selection.selectionType() == VisibleSelection::RangeSelection) {
-        auto selectionStart = selection.visibleStart();
-        auto selectionEnd = selection.visibleEnd();
-        
-        // As context, we are going to use the surrounding paragraphs of text.
-        auto paragraphStart = startOfParagraph(selectionStart);
-        auto paragraphEnd = endOfParagraph(selectionEnd);
-        
-        auto rangeToSelectionStart = makeRange(paragraphStart, selectionStart);
-        auto rangeToSelectionEnd = makeRange(paragraphStart, selectionEnd);
-        
-        fullCharacterRange = makeRange(paragraphStart, paragraphEnd);
-        
-        selectionRange = NSMakeRange(TextIterator::rangeLength(rangeToSelectionStart.get()), TextIterator::rangeLength(makeRange(selectionStart, selectionEnd).get()));
-        
-        hitIndex = TextIterator::rangeLength(makeRange(paragraphStart, position).get());
-    } else {
-        VisibleSelection selectionAccountingForLineRules { position };
-        selectionAccountingForLineRules.expandUsingGranularity(WordGranularity);
-        position = selectionAccountingForLineRules.start();
-        // As context, we are going to use 250 characters of text before and after the point.
-        fullCharacterRange = rangeExpandedAroundPositionByCharacters(position, 250);
-        
-        if (!fullCharacterRange)
-            return { nullptr, nil };
-        
-        selectionRange = NSMakeRange(NSNotFound, 0);
-        hitIndex = TextIterator::rangeLength(makeRange(fullCharacterRange->startPosition(), position).get());
-    }
-    
-    NSRange selectedRange = [getRVSelectionClass() revealRangeAtIndex:hitIndex selectedRanges:@[[NSValue valueWithRange:selectionRange]] shouldUpdateSelection:nil];
-    
-    String itemString = plainText(fullCharacterRange.get());
-    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:itemString selectedRange:selectedRange]);
-    NSRange highlightRange = item.get().highlightRange;
-
-    if (highlightRange.location == NSNotFound || !highlightRange.length)
-        return { nullptr, nil };
-    
-    return { TextIterator::subrange(*fullCharacterRange, highlightRange.location, highlightRange.length), nil };
-    
-    END_BLOCK_OBJC_EXCEPTIONS;
-    
-    return { nullptr, nil };
-    
-}
-
-static void expandSelectionByCharacters(PDFSelection *selection, NSInteger numberOfCharactersToExpand, NSInteger& charactersAddedBeforeStart, NSInteger& charactersAddedAfterEnd)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-
-    size_t originalLength = selection.string.length;
-    [selection extendSelectionAtStart:numberOfCharactersToExpand];
-    
-    charactersAddedBeforeStart = selection.string.length - originalLength;
-    
-    [selection extendSelectionAtEnd:numberOfCharactersToExpand];
-    charactersAddedAfterEnd = selection.string.length - originalLength - charactersAddedBeforeStart;
-
-    END_BLOCK_OBJC_EXCEPTIONS;
-}
-
-std::tuple<NSString *, NSDictionary *> DictionaryLookup::stringForPDFSelection(PDFSelection *selection)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-    if (!getRVItemClass())
-        return { nullptr, nil };
-
-    // Don't do anything if there is no character at the point.
-    if (!selection || !selection.string.length)
-        return { @"", nil };
-
-    RetainPtr<PDFSelection> selectionForLookup = adoptNS([selection copy]);
-
-    // As context, we are going to use 250 characters of text before and after the point.
-    auto originalLength = [selectionForLookup string].length;
-    NSInteger charactersAddedBeforeStart = 0;
-    NSInteger charactersAddedAfterEnd = 0;
-    expandSelectionByCharacters(selectionForLookup.get(), 250, charactersAddedBeforeStart, charactersAddedAfterEnd);
-
-    auto fullPlainTextString = [selectionForLookup string];
-    auto rangeToPass = NSMakeRange(charactersAddedBeforeStart, 0);
-
-    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:fullPlainTextString selectedRange:rangeToPass]);
-    NSRange extractedRange = item.get().highlightRange;
-    
-    if (extractedRange.location == NSNotFound)
-        return { selection.string, nil };
-
-    NSInteger lookupAddedBefore = rangeToPass.location - extractedRange.location;
-    NSInteger lookupAddedAfter = (extractedRange.location + extractedRange.length) - (rangeToPass.location + originalLength);
-
-    [selection extendSelectionAtStart:lookupAddedBefore];
-    [selection extendSelectionAtEnd:lookupAddedAfter];
-
-    ASSERT([selection.string isEqualToString:[fullPlainTextString substringWithRange:extractedRange]]);
-    return { selection.string, nil };
-
-    END_BLOCK_OBJC_EXCEPTIONS;
-
-    return { @"", nil };
-}
-
-static WKRevealController showPopupOrCreateAnimationController(bool createAnimationController, const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
-{
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    
-#if PLATFORM(MAC)
-    
-    if (!getRVItemClass() || !getRVPresenterClass())
-        return nil;
-
-    RetainPtr<NSMutableDictionary> mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
-    if (NSDictionary *options = dictionaryPopupInfo.options.get())
-        [mutableOptions addEntriesFromDictionary:options];
-
-    auto textIndicator = TextIndicator::create(dictionaryPopupInfo.textIndicator);
-    
-    RetainPtr<RVPresenter> presenter = adoptNS([allocRVPresenterInstance() init]);
-    
-    NSRect highlightRect;
-    NSPoint pointerLocation;
-    
-    if (textIndicator.get().contentImage()) {
-        textIndicatorInstallationCallback(textIndicator.get());
-
-        FloatRect firstTextRectInViewCoordinates = textIndicator.get().textRectsInBoundingRectCoordinates()[0];
-        FloatRect textBoundingRectInViewCoordinates = textIndicator.get().textBoundingRectInRootViewCoordinates();
-        FloatRect selectionBoundingRectInViewCoordinates = textIndicator.get().selectionRectInRootViewCoordinates();
-        
-        if (rootViewToViewConversionCallback) {
-            textBoundingRectInViewCoordinates = rootViewToViewConversionCallback(textBoundingRectInViewCoordinates);
-            selectionBoundingRectInViewCoordinates = rootViewToViewConversionCallback(selectionBoundingRectInViewCoordinates);
-        }
-        
-        firstTextRectInViewCoordinates.moveBy(textBoundingRectInViewCoordinates.location());
-        highlightRect = selectionBoundingRectInViewCoordinates;
-        pointerLocation = firstTextRectInViewCoordinates.location();
-        
-    } else {
-        NSPoint textBaselineOrigin = dictionaryPopupInfo.origin;
-        
-        highlightRect = textIndicator->selectionRectInRootViewCoordinates();
-        pointerLocation = [view convertPoint:textBaselineOrigin toView:nil];
-    }
-    
-    RetainPtr<WebRevealHighlight> webHighlight =  adoptNS([[WebRevealHighlight alloc] initWithHighlightRect: highlightRect useDefaultHighlight:!textIndicator.get().contentImage() attributedString:dictionaryPopupInfo.attributedString.get()]);
-    RetainPtr<RVPresentingContext> context = adoptNS([allocRVPresentingContextInstance() initWithPointerLocationInView:pointerLocation inView:view highlightDelegate:(id<RVPresenterHighlightDelegate>) webHighlight.get()]);
-    
-    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:dictionaryPopupInfo.attributedString.get().string selectedRange:NSMakeRange(0, 0)]);
-    
-    [webHighlight setClearTextIndicator:[webHighlight = WTFMove(webHighlight), clearTextIndicator = WTFMove(clearTextIndicator)] {
-        if (clearTextIndicator)
-            clearTextIndicator();
-    }];
-    
-    if (createAnimationController)
-        return [presenter animationControllerForItem:item.get() documentContext:nil presentingContext:context.get() options:nil];
-    [presenter revealItem:item.get() documentContext:nil presentingContext:context.get() options:nil];
-    return nil;
-    
-#else // PLATFORM(MAC)
-    
-    UNUSED_PARAM(createAnimationController);
-    UNUSED_PARAM(dictionaryPopupInfo);
-    UNUSED_PARAM(view);
-    UNUSED_PARAM(textIndicatorInstallationCallback);
-    UNUSED_PARAM(rootViewToViewConversionCallback);
-    UNUSED_PARAM(clearTextIndicator);
-    
-    return nil;
-#endif // PLATFORM(MAC)
-    
-    END_BLOCK_OBJC_EXCEPTIONS;
-    
-}
-
-void DictionaryLookup::showPopup(const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
-{
-    showPopupOrCreateAnimationController(false, dictionaryPopupInfo, view, textIndicatorInstallationCallback, rootViewToViewConversionCallback, WTFMove(clearTextIndicator));
-}
-
-void DictionaryLookup::hidePopup()
-{
-    notImplemented();
-}
-
-#if PLATFORM(MAC)
-
-WKRevealController DictionaryLookup::animationControllerForPopup(const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
-{
-    return showPopupOrCreateAnimationController(true, dictionaryPopupInfo, view, textIndicatorInstallationCallback, rootViewToViewConversionCallback, WTFMove(clearTextIndicator));
-}
-
-#endif // PLATFORM(MAC)
-
-#elif PLATFORM(IOS_FAMILY) // ENABLE(REVEAL)
-
-std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeForSelection(const VisibleSelection&)
-{
-    return { nullptr, nil };
-}
-
-std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeAtHitTestResult(const HitTestResult&)
-{
-    return { nullptr, nil };
-}
-
-#endif // ENABLE(REVEAL)
-
-} // namespace WebCore
-
-#endif // PLATFORM(COCOA)

Modified: trunk/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm (238656 => 238657)


--- trunk/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -34,8 +34,6 @@
 #import "Document.h"
 #import "DocumentFragment.h"
 #import "DocumentLoader.h"
-#import "Editor.h"
-#import "EditorClient.h"
 #import "File.h"
 #import "FileSystem.h"
 #import "Frame.h"

Modified: trunk/Source/WebCore/editing/mac/DictionaryLookup.h (238656 => 238657)


--- trunk/Source/WebCore/editing/mac/DictionaryLookup.h	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebCore/editing/mac/DictionaryLookup.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -23,25 +23,15 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#pragma once
+#if PLATFORM(MAC)
 
-#if PLATFORM(COCOA)
-
 #include "DictionaryPopupInfo.h"
-#if PLATFORM(MAC)
-#import <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
-#endif // PLATFORM(MAC)
+#include <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
 #include <wtf/Function.h>
 
 OBJC_CLASS NSView;
 OBJC_CLASS PDFSelection;
 
-#if PLATFORM(MAC)
-typedef id <NSImmediateActionAnimationController> WKRevealController;
-#else
-typedef id WKRevealController;
-#endif // PLATFORM(MAC)
-
 namespace WebCore {
 
 class HitTestResult;
@@ -58,11 +48,8 @@
 
     WEBCORE_EXPORT static void showPopup(const DictionaryPopupInfo&, NSView *, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback = nullptr, WTF::Function<void()>&& clearTextIndicator = nullptr);
     WEBCORE_EXPORT static void hidePopup();
-    
-#if PLATFORM(MAC)
-    WEBCORE_EXPORT static WKRevealController animationControllerForPopup(const DictionaryPopupInfo&, NSView *, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback = nullptr, WTF::Function<void()>&& clearTextIndicator = nullptr);
-#endif // PLATFORM(MAC)
-    
+
+    WEBCORE_EXPORT static id <NSImmediateActionAnimationController> animationControllerForPopup(const DictionaryPopupInfo&, NSView *, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback = nullptr, WTF::Function<void()>&& clearTextIndicator = nullptr);
 };
 
 } // namespace WebCore

Copied: trunk/Source/WebCore/editing/mac/DictionaryLookup.mm (from rev 238656, trunk/Source/WebCore/editing/cocoa/DictionaryLookup.mm) (0 => 238657)


--- trunk/Source/WebCore/editing/mac/DictionaryLookup.mm	                        (rev 0)
+++ trunk/Source/WebCore/editing/mac/DictionaryLookup.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2014-2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "DictionaryLookup.h"
+
+#if PLATFORM(MAC) && ENABLE(REVEAL)
+
+#import "Document.h"
+#import "Editing.h"
+#import "FocusController.h"
+#import "Frame.h"
+#import "FrameSelection.h"
+#import "HTMLConverter.h"
+#import "HitTestResult.h"
+#import "Page.h"
+#import "Range.h"
+#import "RenderObject.h"
+#import "TextIterator.h"
+#import "VisiblePosition.h"
+#import "VisibleSelection.h"
+#import "VisibleUnits.h"
+#import <PDFKit/PDFKit.h>
+#import <pal/spi/mac/LookupSPI.h>
+#import <pal/spi/mac/NSImmediateActionGestureRecognizerSPI.h>
+#import <pal/spi/mac/RevealSPI.h>
+#import <wtf/BlockObjCExceptions.h>
+#import <wtf/RefPtr.h>
+
+@interface WebRevealHighlight <RVPresenterHighlightDelegate> : NSObject {
+@private
+    Function<void()> _clearTextIndicator;
+    NSRect _highlightRect;
+    BOOL _useDefaultHighlight;
+    NSAttributedString *_attributedString;
+}
+
+@property (nonatomic, readonly) NSRect highlightRect;
+@property (nonatomic, readonly) BOOL useDefaultHighlight;
+@property (nonatomic, readonly) NSAttributedString *attributedString;
+
+- (instancetype)initWithHighlightRect:(NSRect)highlightRect useDefaultHighlight:(BOOL)useDefaultHighlight attributedString:(NSAttributedString *) attributedString;
+- (void)setClearTextIndicator:(Function<void()>&&)clearTextIndicator;
+
+@end
+
+@implementation WebRevealHighlight
+
+@synthesize highlightRect=_highlightRect;
+@synthesize useDefaultHighlight=_useDefaultHighlight;
+@synthesize attributedString=_attributedString;
+
+- (instancetype)initWithHighlightRect:(NSRect)highlightRect useDefaultHighlight:(BOOL)useDefaultHighlight attributedString:(NSAttributedString *) attributedString
+{
+    if (!(self = [super init]))
+        return nil;
+    
+    _highlightRect = highlightRect;
+    _useDefaultHighlight = useDefaultHighlight;
+    _attributedString = attributedString;
+    
+    return self;
+}
+
+- (void)setClearTextIndicator:(Function<void()>&&)clearTextIndicator
+{
+    _clearTextIndicator = WTFMove(clearTextIndicator);
+}
+
+- (NSArray<NSValue *> *)revealContext:(RVPresentingContext *)context rectsForItem:(RVItem *)item
+{
+    UNUSED_PARAM(context);
+    UNUSED_PARAM(item);
+    return @[[NSValue valueWithRect:self.highlightRect]];
+}
+
+- (void)revealContext:(RVPresentingContext *)context drawRectsForItem:(RVItem *)item
+{
+    UNUSED_PARAM(item);
+    
+    for (NSValue *rectVal in context.itemRectsInView) {
+        NSRect rect = rectVal.rectValue;
+
+        // Get current font attributes from the attributed string above, and add paragraph style attribute in order to center text.
+        RetainPtr<NSMutableDictionary> attributes = adoptNS([[NSMutableDictionary alloc] initWithDictionary:[self.attributedString fontAttributesInRange:NSMakeRange(0, [self.attributedString length])]]);
+        RetainPtr<NSMutableParagraphStyle> paragraph = adoptNS([[NSMutableParagraphStyle alloc] init]);
+        [paragraph setAlignment:NSTextAlignmentCenter];
+        [attributes setObject:paragraph.get() forKey:NSParagraphStyleAttributeName];
+    
+        RetainPtr<NSAttributedString> string = adoptNS([[NSAttributedString alloc] initWithString:[self.attributedString string] attributes:attributes.get()]);
+        [string drawInRect:rect];
+    }
+}
+
+- (BOOL)revealContext:(RVPresentingContext *)context shouldUseDefaultHighlightForItem:(RVItem *)item
+{
+    UNUSED_PARAM(context);
+    UNUSED_PARAM(item);
+    return self.useDefaultHighlight;
+}
+
+- (void)revealContext:(RVPresentingContext *)context stopHighlightingItem:(RVItem *)item
+{
+    UNUSED_PARAM(context);
+    UNUSED_PARAM(item);
+    auto block = WTFMove(_clearTextIndicator);
+    if (block)
+        block();
+}
+
+@end
+
+namespace WebCore {
+
+std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeForSelection(const VisibleSelection& selection)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    
+    if (!getRVItemClass())
+        return { nullptr, nil };
+    
+    auto selectedRange = selection.toNormalizedRange();
+    if (!selectedRange)
+        return { nullptr, nil };
+
+    // Since we already have the range we want, we just need to grab the returned options.
+    auto selectionStart = selection.visibleStart();
+    auto selectionEnd = selection.visibleEnd();
+
+    // As context, we are going to use the surrounding paragraphs of text.
+    auto paragraphStart = startOfParagraph(selectionStart);
+    auto paragraphEnd = endOfParagraph(selectionEnd);
+
+    int lengthToSelectionStart = TextIterator::rangeLength(makeRange(paragraphStart, selectionStart).get());
+    int lengthToSelectionEnd = TextIterator::rangeLength(makeRange(paragraphStart, selectionEnd).get());
+    NSRange rangeToPass = NSMakeRange(lengthToSelectionStart, lengthToSelectionEnd - lengthToSelectionStart);
+    
+    RefPtr<Range> fullCharacterRange = makeRange(paragraphStart, paragraphEnd);
+    String itemString = plainText(fullCharacterRange.get());
+    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:itemString selectedRange:rangeToPass]);
+    NSRange highlightRange = item.get().highlightRange;
+    
+    return { TextIterator::subrange(*fullCharacterRange, highlightRange.location, highlightRange.length), nil };
+    
+    END_BLOCK_OBJC_EXCEPTIONS;
+    
+    return { nullptr, nil };
+}
+
+std::tuple<RefPtr<Range>, NSDictionary *> DictionaryLookup::rangeAtHitTestResult(const HitTestResult& hitTestResult)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    
+    if (!getRVItemClass())
+        return { nullptr, nil };
+    
+    auto* node = hitTestResult.innerNonSharedNode();
+    if (!node || !node->renderer())
+        return { nullptr, nil };
+
+    auto* frame = node->document().frame();
+    if (!frame)
+        return { nullptr, nil };
+
+    // Don't do anything if there is no character at the point.
+    auto framePoint = hitTestResult.roundedPointInInnerNodeFrame();
+    if (!frame->rangeForPoint(framePoint))
+        return { nullptr, nil };
+
+    auto position = frame->visiblePositionForPoint(framePoint);
+    if (position.isNull())
+        position = firstPositionInOrBeforeNode(node);
+
+    auto selection = frame->page()->focusController().focusedOrMainFrame().selection().selection();
+    NSRange selectionRange;
+    int hitIndex;
+    RefPtr<Range> fullCharacterRange;
+    
+    if (selection.selectionType() == VisibleSelection::RangeSelection) {
+        auto selectionStart = selection.visibleStart();
+        auto selectionEnd = selection.visibleEnd();
+        
+        // As context, we are going to use the surrounding paragraphs of text.
+        auto paragraphStart = startOfParagraph(selectionStart);
+        auto paragraphEnd = endOfParagraph(selectionEnd);
+        
+        auto rangeToSelectionStart = makeRange(paragraphStart, selectionStart);
+        auto rangeToSelectionEnd = makeRange(paragraphStart, selectionEnd);
+        
+        fullCharacterRange = makeRange(paragraphStart, paragraphEnd);
+        
+        selectionRange = NSMakeRange(TextIterator::rangeLength(rangeToSelectionStart.get()), TextIterator::rangeLength(makeRange(selectionStart, selectionEnd).get()));
+        
+        hitIndex = TextIterator::rangeLength(makeRange(paragraphStart, position).get());
+    } else {
+        VisibleSelection selectionAccountingForLineRules { position };
+        selectionAccountingForLineRules.expandUsingGranularity(WordGranularity);
+        position = selectionAccountingForLineRules.start();
+        // As context, we are going to use 250 characters of text before and after the point.
+        fullCharacterRange = rangeExpandedAroundPositionByCharacters(position, 250);
+        
+        if (!fullCharacterRange)
+            return { nullptr, nil };
+        
+        selectionRange = NSMakeRange(NSNotFound, 0);
+        hitIndex = TextIterator::rangeLength(makeRange(fullCharacterRange->startPosition(), position).get());
+    }
+    
+    NSRange selectedRange = [getRVSelectionClass() revealRangeAtIndex:hitIndex selectedRanges:@[[NSValue valueWithRange:selectionRange]] shouldUpdateSelection:nil];
+    
+    String itemString = plainText(fullCharacterRange.get());
+    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:itemString selectedRange:selectedRange]);
+    NSRange highlightRange = item.get().highlightRange;
+
+    if (highlightRange.location == NSNotFound || !highlightRange.length)
+        return { nullptr, nil };
+    
+    return { TextIterator::subrange(*fullCharacterRange, highlightRange.location, highlightRange.length), nil };
+    
+    END_BLOCK_OBJC_EXCEPTIONS;
+    
+    return { nullptr, nil };
+    
+}
+
+static void expandSelectionByCharacters(PDFSelection *selection, NSInteger numberOfCharactersToExpand, NSInteger& charactersAddedBeforeStart, NSInteger& charactersAddedAfterEnd)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+
+    size_t originalLength = selection.string.length;
+    [selection extendSelectionAtStart:numberOfCharactersToExpand];
+    
+    charactersAddedBeforeStart = selection.string.length - originalLength;
+    
+    [selection extendSelectionAtEnd:numberOfCharactersToExpand];
+    charactersAddedAfterEnd = selection.string.length - originalLength - charactersAddedBeforeStart;
+
+    END_BLOCK_OBJC_EXCEPTIONS;
+}
+
+std::tuple<NSString *, NSDictionary *> DictionaryLookup::stringForPDFSelection(PDFSelection *selection)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    
+    if (!getRVItemClass())
+        return { nullptr, nil };
+
+    // Don't do anything if there is no character at the point.
+    if (!selection || !selection.string.length)
+        return { @"", nil };
+
+    RetainPtr<PDFSelection> selectionForLookup = adoptNS([selection copy]);
+
+    // As context, we are going to use 250 characters of text before and after the point.
+    auto originalLength = [selectionForLookup string].length;
+    NSInteger charactersAddedBeforeStart = 0;
+    NSInteger charactersAddedAfterEnd = 0;
+    expandSelectionByCharacters(selectionForLookup.get(), 250, charactersAddedBeforeStart, charactersAddedAfterEnd);
+
+    auto fullPlainTextString = [selectionForLookup string];
+    auto rangeToPass = NSMakeRange(charactersAddedBeforeStart, 0);
+
+    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:fullPlainTextString selectedRange:rangeToPass]);
+    NSRange extractedRange = item.get().highlightRange;
+    
+    if (extractedRange.location == NSNotFound)
+        return { selection.string, nil };
+
+    NSInteger lookupAddedBefore = rangeToPass.location - extractedRange.location;
+    NSInteger lookupAddedAfter = (extractedRange.location + extractedRange.length) - (rangeToPass.location + originalLength);
+
+    [selection extendSelectionAtStart:lookupAddedBefore];
+    [selection extendSelectionAtEnd:lookupAddedAfter];
+
+    ASSERT([selection.string isEqualToString:[fullPlainTextString substringWithRange:extractedRange]]);
+    return { selection.string, nil };
+
+    END_BLOCK_OBJC_EXCEPTIONS;
+
+    return { @"", nil };
+}
+
+static id <NSImmediateActionAnimationController> showPopupOrCreateAnimationController(bool createAnimationController, const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+    
+    if (!getRVItemClass())
+        return nil;
+
+    RetainPtr<NSMutableDictionary> mutableOptions = adoptNS([[NSMutableDictionary alloc] init]);
+    if (NSDictionary *options = dictionaryPopupInfo.options.get())
+        [mutableOptions addEntriesFromDictionary:options];
+
+    auto textIndicator = TextIndicator::create(dictionaryPopupInfo.textIndicator);
+    
+    RetainPtr<RVPresenter> presenter = adoptNS([allocRVPresenterInstance() init]);
+    
+    NSRect highlightRect;
+    NSPoint pointerLocation;
+    
+    if (textIndicator.get().contentImage()) {
+        textIndicatorInstallationCallback(textIndicator.get());
+
+        FloatRect firstTextRectInViewCoordinates = textIndicator.get().textRectsInBoundingRectCoordinates()[0];
+        FloatRect textBoundingRectInViewCoordinates = textIndicator.get().textBoundingRectInRootViewCoordinates();
+        FloatRect selectionBoundingRectInViewCoordinates = textIndicator.get().selectionRectInRootViewCoordinates();
+        
+        if (rootViewToViewConversionCallback) {
+            textBoundingRectInViewCoordinates = rootViewToViewConversionCallback(textBoundingRectInViewCoordinates);
+            selectionBoundingRectInViewCoordinates = rootViewToViewConversionCallback(selectionBoundingRectInViewCoordinates);
+        }
+        
+        firstTextRectInViewCoordinates.moveBy(textBoundingRectInViewCoordinates.location());
+        highlightRect = selectionBoundingRectInViewCoordinates;
+        pointerLocation = firstTextRectInViewCoordinates.location();
+        
+    } else {
+        NSPoint textBaselineOrigin = dictionaryPopupInfo.origin;
+        
+        highlightRect = textIndicator->selectionRectInRootViewCoordinates();
+        pointerLocation = [view convertPoint:textBaselineOrigin toView:nil];
+    }
+    
+    RetainPtr<WebRevealHighlight> webHighlight =  adoptNS([[WebRevealHighlight alloc] initWithHighlightRect: highlightRect useDefaultHighlight:!textIndicator.get().contentImage() attributedString:dictionaryPopupInfo.attributedString.get()]);
+    RetainPtr<RVPresentingContext> context = adoptNS([allocRVPresentingContextInstance() initWithPointerLocationInView:pointerLocation inView:view highlightDelegate:(id<RVPresenterHighlightDelegate>) webHighlight.get()]);
+    
+    RetainPtr<RVItem> item = adoptNS([allocRVItemInstance() initWithText:dictionaryPopupInfo.attributedString.get().string selectedRange:NSMakeRange(0, 0)]);
+    
+    [webHighlight setClearTextIndicator:[webHighlight = WTFMove(webHighlight), clearTextIndicator = WTFMove(clearTextIndicator)] {
+        if (clearTextIndicator)
+            clearTextIndicator();
+    }];
+    
+    if (createAnimationController)
+        return [presenter animationControllerForItem:item.get() documentContext:nil presentingContext:context.get() options:nil];
+    [presenter revealItem:item.get() documentContext:nil presentingContext:context.get() options:nil];
+    return nil;
+
+    END_BLOCK_OBJC_EXCEPTIONS;
+    return nil;
+}
+
+void DictionaryLookup::showPopup(const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
+{
+    showPopupOrCreateAnimationController(false, dictionaryPopupInfo, view, textIndicatorInstallationCallback, rootViewToViewConversionCallback, WTFMove(clearTextIndicator));
+}
+
+void DictionaryLookup::hidePopup()
+{
+    BEGIN_BLOCK_OBJC_EXCEPTIONS;
+
+    if (!getLULookupDefinitionModuleClass())
+        return;
+    [getLULookupDefinitionModuleClass() hideDefinition];
+
+    END_BLOCK_OBJC_EXCEPTIONS;
+}
+
+id <NSImmediateActionAnimationController> DictionaryLookup::animationControllerForPopup(const DictionaryPopupInfo& dictionaryPopupInfo, NSView *view, const WTF::Function<void(TextIndicator&)>& textIndicatorInstallationCallback, const WTF::Function<FloatRect(FloatRect)>& rootViewToViewConversionCallback, WTF::Function<void()>&& clearTextIndicator)
+{
+    return showPopupOrCreateAnimationController(true, dictionaryPopupInfo, view, textIndicatorInstallationCallback, rootViewToViewConversionCallback, WTFMove(clearTextIndicator));
+}
+
+} // namespace WebCore
+
+#endif // PLATFORM(MAC)

Modified: trunk/Source/WebKit/ChangeLog (238656 => 238657)


--- trunk/Source/WebKit/ChangeLog	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/ChangeLog	2018-11-29 02:55:59 UTC (rev 238657)
@@ -1,4 +1,20 @@
+2018-11-28  Commit Queue  <commit-qu...@webkit.org>
 
+        Unreviewed, rolling out r238653 and r238656.
+        https://bugs.webkit.org/show_bug.cgi?id=192130
+
+        Breaks iOS build (Requested by smfr on #webkit).
+
+        Reverted changesets:
+
+        "Move Lookup Code for better cross platform usage"
+        https://bugs.webkit.org/show_bug.cgi?id=191732
+        https://trac.webkit.org/changeset/238653
+
+        "Attempt to fix the iOS build by only including RevealSPI.h
+        when it's needed."
+        https://trac.webkit.org/changeset/238656
+
 2018-11-28  Alex Christensen  <achristen...@webkit.org>
 
         Modernize BlobRegistry::writeBlobsToTemporaryFiles

Modified: trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h (238656 => 238657)


--- trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -733,9 +733,6 @@
     bool isPotentialTap;
 };
 
-@interface _UILookupGestureRecognizer : UIGestureRecognizer
-@end
-
 @class UIWebTouchEventsGestureRecognizer;
 
 @protocol UIWebTouchEventsGestureRecognizerDelegate <NSObject>

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm (238656 => 238657)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebPageProxyCocoa.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -33,7 +33,6 @@
 #import "PageClient.h"
 #import "SafeBrowsingSPI.h"
 #import "SafeBrowsingWarning.h"
-#import "WebPageMessages.h"
 #import "WebProcessProxy.h"
 #import <WebCore/DragItem.h>
 #import <WebCore/NotImplemented.h>
@@ -190,21 +189,5 @@
 }
 
 #endif // ENABLE(ATTACHMENT_ELEMENT)
-    
-void WebPageProxy::performDictionaryLookupAtLocation(const WebCore::FloatPoint& point)
-{
-    if (!isValid())
-        return;
-    
-    process().send(Messages::WebPage::PerformDictionaryLookupAtLocation(point), m_pageID);
-}
 
-void WebPageProxy::performDictionaryLookupOfCurrentSelection()
-{
-    if (!isValid())
-        return;
-    
-    process().send(Messages::WebPage::PerformDictionaryLookupOfCurrentSelection(), m_pageID);
 }
-
-} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h (238656 => 238657)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h	2018-11-29 02:55:59 UTC (rev 238657)
@@ -87,7 +87,6 @@
 class WebPageProxy;
 }
 
-@class _UILookupGestureRecognizer;
 @class _UIHighlightView;
 @class _UIWebHighlightLongPressGestureRecognizer;
 @class UIHoverGestureRecognizer;
@@ -216,7 +215,6 @@
 
 #if PLATFORM(IOSMAC)
     RetainPtr<UIHoverGestureRecognizer> _hoverGestureRecognizer;
-    RetainPtr<_UILookupGestureRecognizer> _lookupGestureRecognizer;
 #endif
 
     RetainPtr<UIWKTextInteractionAssistant> _textSelectionAssistant;

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (238656 => 238657)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -112,7 +112,6 @@
 #if PLATFORM(IOSMAC)
 #import "NativeWebMouseEvent.h"
 #import <UIKit/UIHoverGestureRecognizer.h>
-#import <UIKit/_UILookupGestureRecognizer.h>
 #import <pal/spi/ios/GraphicsServicesSPI.h>
 #endif
 
@@ -650,11 +649,6 @@
     _hoverGestureRecognizer = adoptNS([[UIHoverGestureRecognizer alloc] initWithTarget:self action:@selector(_hoverGestureRecognizerChanged:)]);
     [_hoverGestureRecognizer setDelegate:self];
     [self addGestureRecognizer:_hoverGestureRecognizer.get()];
-    
-    _lookupGestureRecognizer = adoptNS([[_UILookupGestureRecognizer alloc] initWithTarget:self action:@selector(_lookupGestureRecognized:)]);
-    [_lookupGestureRecognizer setDelegate:self];
-    [self addGestureRecognizer:_lookupGestureRecognizer.get()];
-    
 #endif
 
     _singleTapGestureRecognizer = adoptNS([[WKSyntheticClickTapGestureRecognizer alloc] initWithTarget:self action:@selector(_singleTapCommited:)]);
@@ -765,9 +759,6 @@
 #if PLATFORM(IOSMAC)
     [_hoverGestureRecognizer setDelegate:nil];
     [self removeGestureRecognizer:_hoverGestureRecognizer.get()];
-    
-    [_lookupGestureRecognizer setDelegate:nil];
-    [self removeGestureRecognizer:_lookupGestureRecognizer.get()];
 #endif
 
     [_singleTapGestureRecognizer setDelegate:nil];
@@ -855,7 +846,6 @@
     [self removeGestureRecognizer:_stylusSingleTapGestureRecognizer.get()];
 #if PLATFORM(IOSMAC)
     [self removeGestureRecognizer:_hoverGestureRecognizer.get()];
-    [self removeGestureRecognizer:_lookupGestureRecognizer.get()];
 #endif
 }
 
@@ -871,7 +861,6 @@
     [self addGestureRecognizer:_stylusSingleTapGestureRecognizer.get()];
 #if PLATFORM(IOSMAC)
     [self addGestureRecognizer:_hoverGestureRecognizer.get()];
-    [self addGestureRecognizer:_lookupGestureRecognizer.get()];
 #endif
 }
 
@@ -1478,10 +1467,6 @@
 
     if ([gestureRecognizer isKindOfClass:[UIHoverGestureRecognizer class]] || [otherGestureRecognizer isKindOfClass:[UIHoverGestureRecognizer class]])
         return YES;
-    
-    if (([gestureRecognizer isKindOfClass:[_UILookupGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) || ([otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && [gestureRecognizer isKindOfClass:[_UILookupGestureRecognizer class]]))
-        return YES;
-
 #endif
     if (isSamePair(gestureRecognizer, otherGestureRecognizer, _highlightLongPressGestureRecognizer.get(), _textSelectionAssistant.get().forcePressGesture))
         return YES;
@@ -6072,12 +6057,6 @@
 #endif // PLATFORM(WATCHOS)
 
 #if PLATFORM(IOSMAC)
-- (void)_lookupGestureRecognized:(UIGestureRecognizer *)gestureRecognizer
-{
-    NSPoint locationInViewCoordinates = [gestureRecognizer locationInView:self];
-    _page->performDictionaryLookupAtLocation(WebCore::FloatPoint(locationInViewCoordinates));
-}
-
 - (void)_hoverGestureRecognizerChanged:(UIGestureRecognizer *)gestureRecognizer
 {
     if (!_page->isValid())

Modified: trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (238656 => 238657)


--- trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -121,6 +121,11 @@
     return false;
 }
 
+void WebPageProxy::performDictionaryLookupAtLocation(const WebCore::FloatPoint&)
+{
+    notImplemented();
+}
+
 void WebPageProxy::gestureCallback(const WebCore::IntPoint& point, uint32_t gestureType, uint32_t gestureState, uint32_t flags, CallbackID callbackID)
 {
     auto callback = m_callbacks.take<GestureCallback>(callbackID);

Modified: trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm (238656 => 238657)


--- trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/UIProcess/mac/WebPageProxyMac.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -323,6 +323,22 @@
 
 #endif
 
+void WebPageProxy::performDictionaryLookupAtLocation(const WebCore::FloatPoint& point)
+{
+    if (!isValid())
+        return;
+
+    process().send(Messages::WebPage::PerformDictionaryLookupAtLocation(point), m_pageID);
+}
+
+void WebPageProxy::performDictionaryLookupOfCurrentSelection()
+{
+    if (!isValid())
+        return;
+
+    process().send(Messages::WebPage::PerformDictionaryLookupOfCurrentSelection(), m_pageID);
+}
+
 // Complex text input support for plug-ins.
 void WebPageProxy::sendComplexTextInputToPlugin(uint64_t pluginComplexTextInputIdentifier, const String& textInput)
 {

Modified: trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm (238656 => 238657)


--- trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -26,20 +26,9 @@
 #import "config.h"
 #import "WebPage.h"
 
-
 #import "LoadParameters.h"
-#import "PluginView.h"
 #import "WebPageProxyMessages.h"
-#import <WebCore/DictionaryLookup.h>
-#import <WebCore/Editor.h>
-#import <WebCore/EventHandler.h>
-#import <WebCore/FocusController.h>
-#import <WebCore/HTMLConverter.h>
-#import <WebCore/HitTestResult.h>
-#import <WebCore/NodeRenderStyle.h>
 #import <WebCore/PlatformMediaSessionManager.h>
-#import <WebCore/RenderElement.h>
-#import <WebCore/RenderObject.h>
 
 #if PLATFORM(COCOA)
 
@@ -70,115 +59,7 @@
 
     send(Messages::WebPageProxy::NowPlayingInfoCallback(hasActiveSession, registeredAsNowPlayingApplication, title, duration, elapsedTime, uniqueIdentifier, callbackID));
 }
-    
-void WebPage::performDictionaryLookupAtLocation(const FloatPoint& floatPoint)
-{
-    if (auto* pluginView = pluginViewForFrame(&m_page->mainFrame())) {
-        if (pluginView->performDictionaryLookupAtLocation(floatPoint))
-            return;
-    }
-    
-    // Find the frame the point is over.
-    HitTestResult result = m_page->mainFrame().eventHandler().hitTestResultAtPoint(m_page->mainFrame().view()->windowToContents(roundedIntPoint(floatPoint)));
-    RefPtr<Range> range;
-    NSDictionary *options;
-    std::tie(range, options) = DictionaryLookup::rangeAtHitTestResult(result);
-    if (!range)
-        return;
-    
-    auto* frame = result.innerNonSharedNode() ? result.innerNonSharedNode()->document().frame() : &m_page->focusController().focusedOrMainFrame();
-    if (!frame)
-        return;
-    
-    performDictionaryLookupForRange(*frame, *range, options, TextIndicatorPresentationTransition::Bounce);
-}
 
-void WebPage::performDictionaryLookupForSelection(Frame& frame, const VisibleSelection& selection, TextIndicatorPresentationTransition presentationTransition)
-{
-    RefPtr<Range> selectedRange;
-    NSDictionary *options;
-    std::tie(selectedRange, options) = DictionaryLookup::rangeForSelection(selection);
-    if (selectedRange)
-        performDictionaryLookupForRange(frame, *selectedRange, options, presentationTransition);
-}
-
-void WebPage::performDictionaryLookupOfCurrentSelection()
-{
-    auto& frame = m_page->focusController().focusedOrMainFrame();
-    performDictionaryLookupForSelection(frame, frame.selection().selection(), TextIndicatorPresentationTransition::BounceAndCrossfade);
-}
-    
-void WebPage::performDictionaryLookupForRange(Frame& frame, Range& range, NSDictionary *options, TextIndicatorPresentationTransition presentationTransition)
-{
-    send(Messages::WebPageProxy::DidPerformDictionaryLookup(dictionaryPopupInfoForRange(frame, range, options, presentationTransition)));
-}
-
-DictionaryPopupInfo WebPage::dictionaryPopupInfoForRange(Frame& frame, Range& range, NSDictionary *options, TextIndicatorPresentationTransition presentationTransition)
-{
-    Editor& editor = frame.editor();
-    editor.setIsGettingDictionaryPopupInfo(true);
-    
-    DictionaryPopupInfo dictionaryPopupInfo;
-    if (range.text().stripWhiteSpace().isEmpty()) {
-        editor.setIsGettingDictionaryPopupInfo(false);
-        return dictionaryPopupInfo;
-    }
-    
-    Vector<FloatQuad> quads;
-    range.absoluteTextQuads(quads);
-    if (quads.isEmpty()) {
-        editor.setIsGettingDictionaryPopupInfo(false);
-        return dictionaryPopupInfo;
-    }
-    
-    IntRect rangeRect = frame.view()->contentsToWindow(quads[0].enclosingBoundingBox());
-    
-    const RenderStyle* style = range.startContainer().renderStyle();
-    float scaledAscent = style ? style->fontMetrics().ascent() * pageScaleFactor() : 0;
-    dictionaryPopupInfo.origin = FloatPoint(rangeRect.x(), rangeRect.y() + scaledAscent);
-    dictionaryPopupInfo.options = options;
-
-#if PLATFORM(MAC)
-
-    NSAttributedString *nsAttributedString = editingAttributedStringFromRange(range, IncludeImagesInAttributedString::No);
-    
-    RetainPtr<NSMutableAttributedString> scaledNSAttributedString = adoptNS([[NSMutableAttributedString alloc] initWithString:[nsAttributedString string]]);
-    
-    NSFontManager *fontManager = [NSFontManager sharedFontManager];
-    
-    [nsAttributedString enumerateAttributesInRange:NSMakeRange(0, [nsAttributedString length]) options:0 usingBlock:^(NSDictionary *attributes, NSRange range, BOOL *stop) {
-        RetainPtr<NSMutableDictionary> scaledAttributes = adoptNS([attributes mutableCopy]);
-        
-        NSFont *font = [scaledAttributes objectForKey:NSFontAttributeName];
-        if (font)
-            font = [fontManager convertFont:font toSize:font.pointSize * pageScaleFactor()];
-        if (font)
-            [scaledAttributes setObject:font forKey:NSFontAttributeName];
-        
-        [scaledNSAttributedString addAttributes:scaledAttributes.get() range:range];
-    }];
-
-#endif // PLATFORM(MAC)
-    
-    TextIndicatorOptions indicatorOptions = TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges;
-    if (presentationTransition == TextIndicatorPresentationTransition::BounceAndCrossfade)
-        indicatorOptions |= TextIndicatorOptionIncludeSnapshotWithSelectionHighlight;
-    
-    RefPtr<TextIndicator> textIndicator = TextIndicator::createWithRange(range, indicatorOptions, presentationTransition);
-    if (!textIndicator) {
-        editor.setIsGettingDictionaryPopupInfo(false);
-        return dictionaryPopupInfo;
-    }
-    
-    dictionaryPopupInfo.textIndicator = textIndicator->data();
-#if PLATFORM(MAC)
-    dictionaryPopupInfo.attributedString = scaledNSAttributedString;
-#endif // PLATFORM(MAC)
-    
-    editor.setIsGettingDictionaryPopupInfo(false);
-    return dictionaryPopupInfo;
-}
-
 } // namespace WebKit
 
 #endif // PLATFORM(COCOA)

Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (238656 => 238657)


--- trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -417,6 +417,21 @@
     notImplemented();
 }
 
+void WebPage::performDictionaryLookupAtLocation(const FloatPoint&)
+{
+    notImplemented();
+}
+
+void WebPage::performDictionaryLookupForSelection(Frame&, const VisibleSelection&, TextIndicatorPresentationTransition)
+{
+    notImplemented();
+}
+
+void WebPage::performDictionaryLookupForRange(Frame&, Range&, NSDictionary *, TextIndicatorPresentationTransition)
+{
+    notImplemented();
+}
+
 bool WebPage::performNonEditingBehaviorForSelector(const String&, WebCore::KeyboardEvent*)
 {
     notImplemented();

Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm (238656 => 238657)


--- trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm	2018-11-29 02:25:16 UTC (rev 238656)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm	2018-11-29 02:55:59 UTC (rev 238657)
@@ -389,8 +389,103 @@
     send(Messages::WebPageProxy::FontAtSelectionCallback(fontName, fontSize, selectionHasMultipleFonts, callbackID));
 }
     
+void WebPage::performDictionaryLookupAtLocation(const FloatPoint& floatPoint)
+{
+    if (auto* pluginView = pluginViewForFrame(&m_page->mainFrame())) {
+        if (pluginView->performDictionaryLookupAtLocation(floatPoint))
+            return;
+    }
 
+    // Find the frame the point is over.
+    HitTestResult result = m_page->mainFrame().eventHandler().hitTestResultAtPoint(m_page->mainFrame().view()->windowToContents(roundedIntPoint(floatPoint)));
+    RefPtr<Range> range;
+    NSDictionary *options;
+    std::tie(range, options) = DictionaryLookup::rangeAtHitTestResult(result);
+    if (!range)
+        return;
 
+    auto* frame = result.innerNonSharedNode() ? result.innerNonSharedNode()->document().frame() : &m_page->focusController().focusedOrMainFrame();
+    if (!frame)
+        return;
+
+    performDictionaryLookupForRange(*frame, *range, options, TextIndicatorPresentationTransition::Bounce);
+}
+
+void WebPage::performDictionaryLookupForSelection(Frame& frame, const VisibleSelection& selection, TextIndicatorPresentationTransition presentationTransition)
+{
+    RefPtr<Range> selectedRange;
+    NSDictionary *options;
+    std::tie(selectedRange, options) = DictionaryLookup::rangeForSelection(selection);
+    if (selectedRange)
+        performDictionaryLookupForRange(frame, *selectedRange, options, presentationTransition);
+}
+
+void WebPage::performDictionaryLookupOfCurrentSelection()
+{
+    auto& frame = m_page->focusController().focusedOrMainFrame();
+    performDictionaryLookupForSelection(frame, frame.selection().selection(), TextIndicatorPresentationTransition::BounceAndCrossfade);
+}
+
+DictionaryPopupInfo WebPage::dictionaryPopupInfoForRange(Frame& frame, Range& range, NSDictionary *options, TextIndicatorPresentationTransition presentationTransition)
+{
+    Editor& editor = frame.editor();
+    editor.setIsGettingDictionaryPopupInfo(true);
+
+    DictionaryPopupInfo dictionaryPopupInfo;
+    if (range.text().stripWhiteSpace().isEmpty()) {
+        editor.setIsGettingDictionaryPopupInfo(false);
+        return dictionaryPopupInfo;
+    }
+
+    Vector<FloatQuad> quads;
+    range.absoluteTextQuads(quads);
+    if (quads.isEmpty()) {
+        editor.setIsGettingDictionaryPopupInfo(false);
+        return dictionaryPopupInfo;
+    }
+
+    IntRect rangeRect = frame.view()->contentsToWindow(quads[0].enclosingBoundingBox());
+
+    const RenderStyle* style = range.startContainer().renderStyle();
+    float scaledAscent = style ? style->fontMetrics().ascent() * pageScaleFactor() : 0;
+    dictionaryPopupInfo.origin = FloatPoint(rangeRect.x(), rangeRect.y() + scaledAscent);
+    dictionaryPopupInfo.options = options;
+
+    NSAttributedString *nsAttributedString = editingAttributedStringFromRange(range, IncludeImagesInAttributedString::No);
+
+    RetainPtr<NSMutableAttributedString> scaledNSAttributedString = adoptNS([[NSMutableAttributedString alloc] initWithString:[nsAttributedString string]]);
+
+    NSFontManager *fontManager = [NSFontManager sharedFontManager];
+
+    [nsAttributedString enumerateAttributesInRange:NSMakeRange(0, [nsAttributedString length]) options:0 usingBlock:^(NSDictionary *attributes, NSRange range, BOOL *stop) {
+        RetainPtr<NSMutableDictionary> scaledAttributes = adoptNS([attributes mutableCopy]);
+
+        NSFont *font = [scaledAttributes objectForKey:NSFontAttributeName];
+        if (font)
+            font = [fontManager convertFont:font toSize:font.pointSize * pageScaleFactor()];
+        if (font)
+            [scaledAttributes setObject:font forKey:NSFontAttributeName];
+
+        [scaledNSAttributedString addAttributes:scaledAttributes.get() range:range];
+    }];
+
+    TextIndicatorOptions indicatorOptions = TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges;
+    if (presentationTransition == TextIndicatorPresentationTransition::BounceAndCrossfade)
+        indicatorOptions |= TextIndicatorOptionIncludeSnapshotWithSelectionHighlight;
+
+    RefPtr<TextIndicator> textIndicator = TextIndicator::createWithRange(range, indicatorOptions, presentationTransition);
+    if (!textIndicator) {
+        editor.setIsGettingDictionaryPopupInfo(false);
+        return dictionaryPopupInfo;
+    }
+
+    dictionaryPopupInfo.textIndicator = textIndicator->data();
+    dictionaryPopupInfo.attributedString = scaledNSAttributedString;
+
+    editor.setIsGettingDictionaryPopupInfo(false);
+    return dictionaryPopupInfo;
+}
+
 #if ENABLE(PDFKIT_PLUGIN)
 
 DictionaryPopupInfo WebPage::dictionaryPopupInfoForSelectionInPDFPlugin(PDFSelection *selection, PDFPlugin& pdfPlugin, NSDictionary *options, WebCore::TextIndicatorPresentationTransition presentationTransition)
@@ -444,6 +539,11 @@
 
 #endif
 
+void WebPage::performDictionaryLookupForRange(Frame& frame, Range& range, NSDictionary *options, TextIndicatorPresentationTransition presentationTransition)
+{
+    send(Messages::WebPageProxy::DidPerformDictionaryLookup(dictionaryPopupInfoForRange(frame, range, options, presentationTransition)));
+}
+
 bool WebPage::performNonEditingBehaviorForSelector(const String& selector, KeyboardEvent* event)
 {
     // First give accessibility a chance to handle the event.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to