[Cocoa] Text indicator for an image link on the front page of apple.com looks wrong
authorwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2019 19:36:00 +0000 (19:36 +0000)
committerwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Sep 2019 19:36:00 +0000 (19:36 +0000)
commitee9239beb3e52f9e6a4df5e3ed88a2c543572b1c
tree75d665a1ae10e286028b0a3242baaa53616edd21
parent7af9184d59075ef3aee43a2742eb34fe9846d090
[Cocoa] Text indicator for an image link on the front page of apple.com looks wrong
https://bugs.webkit.org/show_bug.cgi?id=201724
<rdar://problem/54622894>

Reviewed by Tim Horton.

Source/WebCore:

When computing the bounds of the range (<a>, 0) to (<a>, 1) for a text indicator snapshot where <a> is a link
with a single non-breaking whitespace character, we currently use the text rect of the single space. This leads
to a confusing text indicator, as the resulting snapshot is a tiny blank square in the top left corner of the
link. This problem manifests when starting a drag or showing the system context menu on iOS, or force clicking
or three-finger tapping to show a preview on macOS.

To address this scenario, tweak the heuristic in the case where the text indicator option
TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges is specified, such that we consider a range
containing only text with whitespaces to be "complex"; additionally, instead of falling back to the range's
bounding rect (which in this case is still tiny), fall back to the common ancestor container's bounding rect,
which encompasses not only the text inside the range but also the element containing the range (in this case,
the anchor element).

Test: fast/text-indicator/text-indicator-empty-link.html

* page/TextIndicator.cpp:
(WebCore::containsOnlyWhiteSpaceText):

Add a helper to determine whether a Range is comprised only of rendered text that only contains whitespace
characters.

(WebCore::initializeIndicator):

See ChangeLog entry above for more detail.

LayoutTests:

Add a new layout test to exercise this scenario.

* fast/text-indicator/text-indicator-empty-link-expected.txt: Added.
* fast/text-indicator/text-indicator-empty-link.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@249813 268f45cc-cd09-0410-ab3c-d52691b4dbfc
LayoutTests/ChangeLog
LayoutTests/fast/text-indicator/text-indicator-empty-link-expected.txt [new file with mode: 0644]
LayoutTests/fast/text-indicator/text-indicator-empty-link.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/page/TextIndicator.cpp