Chromium Code Reviews| Index: third_party/WebKit/Source/web/TextFinder.cpp |
| diff --git a/third_party/WebKit/Source/web/TextFinder.cpp b/third_party/WebKit/Source/web/TextFinder.cpp |
| index c7bf5df78082fb3b81d86ccfc523f9d678440ed5..ebe8ec157faff2c3575b3c24253e03bd1a6d6a6b 100644 |
| --- a/third_party/WebKit/Source/web/TextFinder.cpp |
| +++ b/third_party/WebKit/Source/web/TextFinder.cpp |
| @@ -113,6 +113,41 @@ private: |
| const bool m_reset; |
| }; |
| +template <typename Strategy> |
| +static PassRefPtrWillBeRawPtr<Range> findStringAndScrollToVisibleAlgorithm( |
| + Editor& editor, |
| + const String& searchText, |
| + EphemeralRangeTemplate<Strategy> searchRange, |
| + FindOptions findOptions) |
| +{ |
| + do { |
| + EphemeralRangeTemplate<Strategy> result = editor.findStringAndScrollToVisible(searchText, searchRange, findOptions); |
| + if (result.isCollapsed()) { |
| + // Not found. |
| + return nullptr; |
| + } |
| + |
| + RefPtrWillBeRawPtr<Range> resultRange = Range::create(result.document(), toPositionInDOMTree(result.startPosition()), toPositionInDOMTree(result.endPosition())); |
| + if (!resultRange->collapsed()) { |
|
yosin_UTC9
2015/11/02 03:44:17
nit: Please get rid of redundant curly braces.
Andrey Kraynov
2015/11/02 14:06:57
Done.
|
| + return resultRange; |
| + } |
| + |
| + // resultRange will be collapsed if the matched text spans over multiple TreeScopes. |
| + // FIXME: Show such matches to users. |
|
yosin_UTC9
2015/11/02 03:44:17
nit: Please use "TODO(iceman):" instead of "FIXME:
Andrey Kraynov
2015/11/02 14:06:57
Done.
|
| + searchRange = EphemeralRangeTemplate<Strategy>(result.endPosition(), searchRange.endPosition()); |
| + } while (!searchRange.isCollapsed()); |
| + |
| + return nullptr; |
| +} |
| + |
| +PassRefPtrWillBeRawPtr<Range> TextFinder::findStringAndScrollToVisible(const String& searchText, FindOptions findOptions) |
| +{ |
| + if (RuntimeEnabledFeatures::selectionForComposedTreeEnabled()) |
| + return findStringAndScrollToVisibleAlgorithm(ownerFrame().frame()->editor(), searchText, EphemeralRangeInComposedTree(m_activeMatch.get()), findOptions); |
| + |
| + return findStringAndScrollToVisibleAlgorithm(ownerFrame().frame()->editor(), searchText, EphemeralRange(m_activeMatch.get()), findOptions); |
| +} |
| + |
| bool TextFinder::find(int identifier, const WebString& searchText, const WebFindOptions& options, bool wrapWithinFrame, WebRect* selectionRect) |
| { |
| if (!ownerFrame().frame() || !ownerFrame().frame()->page()) |
| @@ -145,7 +180,7 @@ bool TextFinder::find(int identifier, const WebString& searchText, const WebFind |
| | (options.wordStart ? AtWordStarts : 0) |
| | (options.medialCapitalAsWordStart ? TreatMedialCapitalAsWordStart : 0) |
| | (options.findNext ? 0 : StartInSelection); |
| - m_activeMatch = ownerFrame().frame()->editor().findStringAndScrollToVisible(searchText, m_activeMatch.get(), findOptions); |
| + m_activeMatch = findStringAndScrollToVisible(searchText, findOptions); |
| if (!m_activeMatch) { |
| // If we're finding next the next active match might not be in the current frame. |