| Index: third_party/WebKit/Source/web/tests/TextFinderTest.cpp
|
| diff --git a/third_party/WebKit/Source/web/tests/TextFinderTest.cpp b/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
|
| index dc79c9f70374412e547454a6092adb04a728f5a3..fa1630d541149582978246355631f83f544496db 100644
|
| --- a/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
|
| +++ b/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
|
| @@ -76,8 +76,9 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| WebFindOptions findOptions; // Default.
|
| bool wrapWithinFrame = true;
|
| WebRect* selectionRect = nullptr;
|
| + bool* activeNow = nullptr;
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| Range* activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -86,7 +87,7 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| EXPECT_EQ(10, activeMatch->endOffset());
|
|
|
| findOptions.findNext = true;
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -95,7 +96,7 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| EXPECT_EQ(20, activeMatch->endOffset());
|
|
|
| // Should wrap to the first match.
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -108,7 +109,7 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| findOptions = WebFindOptions();
|
| findOptions.forward = false;
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -117,7 +118,7 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| EXPECT_EQ(20, activeMatch->endOffset());
|
|
|
| findOptions.findNext = true;
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -126,7 +127,7 @@ TEST_F(TextFinderTest, FindTextSimple)
|
| EXPECT_EQ(10, activeMatch->endOffset());
|
|
|
| // Wrap to the first match (last occurence in the document).
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textNode, activeMatch->startContainer());
|
| @@ -144,6 +145,7 @@ TEST_F(TextFinderTest, FindTextAutosizing)
|
| WebFindOptions findOptions; // Default.
|
| bool wrapWithinFrame = true;
|
| WebRect* selectionRect = nullptr;
|
| + bool* activeNow = nullptr;
|
|
|
| // Set viewport scale to 20 in order to simulate zoom-in
|
| VisualViewport& visualViewport = document().page()->frameHost().visualViewport();
|
| @@ -155,7 +157,7 @@ TEST_F(TextFinderTest, FindTextAutosizing)
|
| document().textAutosizer()->updatePageInfo();
|
|
|
| // In case of autosizing, scale _should_ change
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| ASSERT_TRUE(textFinder().activeMatch());
|
| ASSERT_EQ(1, visualViewport.scale()); // in this case to 1
|
|
|
| @@ -164,7 +166,7 @@ TEST_F(TextFinderTest, FindTextAutosizing)
|
| document().settings()->setTextAutosizingEnabled(false);
|
| document().textAutosizer()->updatePageInfo();
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| ASSERT_TRUE(textFinder().activeMatch());
|
| ASSERT_EQ(20, visualViewport.scale());
|
| }
|
| @@ -178,8 +180,9 @@ TEST_F(TextFinderTest, FindTextNotFound)
|
| WebFindOptions findOptions; // Default.
|
| bool wrapWithinFrame = true;
|
| WebRect* selectionRect = nullptr;
|
| + bool* activeNow = nullptr;
|
|
|
| - EXPECT_FALSE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + EXPECT_FALSE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| EXPECT_FALSE(textFinder().activeMatch());
|
| }
|
|
|
| @@ -197,11 +200,12 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| WebFindOptions findOptions; // Default.
|
| bool wrapWithinFrame = true;
|
| WebRect* selectionRect = nullptr;
|
| + bool* activeNow = nullptr;
|
|
|
| // TextIterator currently returns the matches in the composed treeorder, so
|
| // in this case the matches will be returned in the order of
|
| // <i> -> <u> -> <b>.
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| Range* activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInIElement, activeMatch->startContainer());
|
| @@ -210,7 +214,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| findOptions.findNext = true;
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInUElement, activeMatch->startContainer());
|
| @@ -218,7 +222,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(textInUElement, activeMatch->endContainer());
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInBElement, activeMatch->startContainer());
|
| @@ -227,7 +231,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| // Should wrap to the first match.
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInIElement, activeMatch->startContainer());
|
| @@ -240,7 +244,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| findOptions = WebFindOptions();
|
| findOptions.forward = false;
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInBElement, activeMatch->startContainer());
|
| @@ -249,7 +253,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| findOptions.findNext = true;
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInUElement, activeMatch->startContainer());
|
| @@ -257,7 +261,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(textInUElement, activeMatch->endContainer());
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInIElement, activeMatch->startContainer());
|
| @@ -266,7 +270,7 @@ TEST_F(TextFinderTest, FindTextInShadowDOM)
|
| EXPECT_EQ(3, activeMatch->endOffset());
|
|
|
| // And wrap.
|
| - ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect));
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, activeNow));
|
| activeMatch = textFinder().activeMatch();
|
| ASSERT_TRUE(activeMatch);
|
| EXPECT_EQ(textInBElement, activeMatch->startContainer());
|
| @@ -394,6 +398,58 @@ TEST_F(TextFinderTest, SequentialMatches)
|
| EXPECT_EQ(findInPageRect(textNode, 4, textNode, 6), matchRects[2]);
|
| }
|
|
|
| +TEST_F(TextFinderTest, FindTextJavaScriptUpdatesDOM)
|
| +{
|
| + document().body()->setInnerHTML("<b>XXXXFindMeYYYY</b><i></i>", ASSERT_NO_EXCEPTION);
|
| +
|
| + int identifier = 0;
|
| + WebString searchText(String("FindMe"));
|
| + WebFindOptions findOptions; // Default.
|
| + bool wrapWithinFrame = true;
|
| + WebRect* selectionRect = nullptr;
|
| + bool activeNow;
|
| +
|
| + textFinder().resetMatchCount();
|
| + textFinder().scopeStringMatches(identifier, searchText, findOptions, true);
|
| + while (textFinder().scopingInProgress())
|
| + runPendingTasks();
|
| +
|
| + findOptions.findNext = true;
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, &activeNow));
|
| + EXPECT_TRUE(activeNow);
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, &activeNow));
|
| + EXPECT_TRUE(activeNow);
|
| +
|
| + // Add new text to DOM and try FindNext.
|
| + Element* iElement = toElement(document().body()->lastChild());
|
| + ASSERT_TRUE(iElement);
|
| + iElement->setInnerHTML("ZZFindMe", ASSERT_NO_EXCEPTION);
|
| +
|
| + ASSERT_TRUE(textFinder().find(identifier, searchText, findOptions, wrapWithinFrame, selectionRect, &activeNow));
|
| + Range* activeMatch = textFinder().activeMatch();
|
| + ASSERT_TRUE(activeMatch);
|
| + EXPECT_FALSE(activeNow);
|
| + EXPECT_EQ(2, activeMatch->startOffset());
|
| + EXPECT_EQ(8, activeMatch->endOffset());
|
| +
|
| + // Restart full search and check that added text is found.
|
| + findOptions.findNext = false;
|
| + textFinder().resetMatchCount();
|
| + textFinder().cancelPendingScopingEffort();
|
| + textFinder().scopeStringMatches(identifier, searchText, findOptions, true);
|
| + while (textFinder().scopingInProgress())
|
| + runPendingTasks();
|
| + EXPECT_EQ(2, textFinder().totalMatchCount());
|
| +
|
| + WebVector<WebFloatRect> matchRects;
|
| + textFinder().findMatchRects(matchRects);
|
| + ASSERT_EQ(2u, matchRects.size());
|
| + Node* textInBElement = document().body()->firstChild()->firstChild();
|
| + Node* textInIElement = document().body()->lastChild()->firstChild();
|
| + EXPECT_EQ(findInPageRect(textInBElement, 4, textInBElement, 10), matchRects[0]);
|
| + EXPECT_EQ(findInPageRect(textInIElement, 2, textInIElement, 8), matchRects[1]);
|
| +}
|
| +
|
| class TextFinderFakeTimerTest : public TextFinderTest {
|
| protected:
|
| // A simple platform that mocks out the clock.
|
|
|