Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Unified Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 1605863002: Restart search in page when new text is found. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index 912a0fd56e72d73e65100a382b85e85963eea718..9d7320693622e308883f075077004e487d277548 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -3569,7 +3569,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPage)
WebFindOptions options;
// Find in a <div> element.
- EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar1"), options, false, 0));
+ EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar1"), options, false, 0, nullptr));
frame->stopFinding(false);
WebRange range = frame->selectionRange();
EXPECT_EQ(5, range.startOffset());
@@ -3577,7 +3577,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPage)
EXPECT_TRUE(frame->document().focusedElement().isNull());
// Find in an <input> value.
- EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar2"), options, false, 0));
+ EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar2"), options, false, 0, nullptr));
// Confirm stopFinding(false) sets the selection on the found text.
frame->stopFinding(false);
range = frame->selectionRange();
@@ -3587,7 +3587,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPage)
EXPECT_TRUE(frame->document().focusedElement().hasHTMLTagName("input"));
// Find in a <textarea> content.
- EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar3"), options, false, 0));
+ EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar3"), options, false, 0, nullptr));
// Confirm stopFinding(false) sets the selection on the found text.
frame->stopFinding(false);
range = frame->selectionRange();
@@ -3597,7 +3597,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPage)
EXPECT_TRUE(frame->document().focusedElement().hasHTMLTagName("textarea"));
// Find in a contentEditable element.
- EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar4"), options, false, 0));
+ EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar4"), options, false, 0, nullptr));
// Confirm stopFinding(false) sets the selection on the found text.
frame->stopFinding(false);
range = frame->selectionRange();
@@ -3608,7 +3608,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPage)
EXPECT_TRUE(frame->document().focusedElement().hasHTMLTagName("div"));
// Find in <select> content.
- EXPECT_FALSE(frame->find(findIdentifier, WebString::fromUTF8("bar5"), options, false, 0));
+ EXPECT_FALSE(frame->find(findIdentifier, WebString::fromUTF8("bar5"), options, false, 0, nullptr));
// If there are any matches, stopFinding will set the selection on the found text.
// However, we do not expect any matches, so check that the selection is null.
frame->stopFinding(false);
@@ -3755,7 +3755,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPageMatchRects)
WebFindOptions options;
WebString searchText = WebString::fromUTF8(kFindString);
WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()->mainFrame());
- EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0, nullptr));
mainFrame->resetMatchCount();
@@ -3871,7 +3871,7 @@ TEST_P(ParameterizedWebFrameTest, FindInPageSkipsHiddenFrames)
WebFindOptions options;
WebString searchText = WebString::fromUTF8(kFindString);
WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()->mainFrame());
- EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0, nullptr));
mainFrame->resetMatchCount();
@@ -3906,8 +3906,8 @@ TEST_P(ParameterizedWebFrameTest, FindOnDetachedFrame)
// Detach the frame before finding.
removeElementById(mainFrame, "frame");
- EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0));
- EXPECT_FALSE(secondFrame->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0, nullptr));
+ EXPECT_FALSE(secondFrame->find(kFindIdentifier, searchText, options, false, 0, nullptr));
runPendingTasks();
EXPECT_FALSE(client.findResultsAreReady());
@@ -3942,7 +3942,7 @@ TEST_P(ParameterizedWebFrameTest, FindDetachFrameBeforeScopeStrings)
RefPtrWillBeRawPtr<LocalFrame> holdSecondFrame(secondFrame->frame());
for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
- EXPECT_TRUE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0, nullptr));
runPendingTasks();
EXPECT_FALSE(client.findResultsAreReady());
@@ -3980,7 +3980,7 @@ TEST_P(ParameterizedWebFrameTest, FindDetachFrameWhileScopingStrings)
RefPtrWillBeRawPtr<LocalFrame> holdSecondFrame(secondFrame->frame());
for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
- EXPECT_TRUE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0, nullptr));
runPendingTasks();
EXPECT_FALSE(client.findResultsAreReady());
@@ -4018,7 +4018,7 @@ TEST_P(ParameterizedWebFrameTest, ResetMatchCount)
EXPECT_TRUE(!!mainFrame->traverseNext(false));
for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
- EXPECT_FALSE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_FALSE(frame->toWebLocalFrame()->find(kFindIdentifier, searchText, options, false, 0, nullptr));
runPendingTasks();
EXPECT_FALSE(client.findResultsAreReady());
@@ -4042,7 +4042,7 @@ TEST_P(ParameterizedWebFrameTest, SetTickmarks)
WebFindOptions options;
WebString searchText = WebString::fromUTF8(kFindString);
WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()->mainFrame());
- EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0));
+ EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0, nullptr));
mainFrame->resetMatchCount();
mainFrame->scopeStringMatches(kFindIdentifier, searchText, options, true);
@@ -4079,6 +4079,53 @@ TEST_P(ParameterizedWebFrameTest, SetTickmarks)
EXPECT_EQ(originalTickmarks, originalTickmarksAfterReset);
}
+TEST_P(ParameterizedWebFrameTest, FindInPageJavaScriptUpdatesDOM)
+{
+ registerMockedHttpURLLoad("find.html");
+
+ FindUpdateWebFrameClient client;
+ FrameTestHelpers::WebViewHelper webViewHelper(this);
+ webViewHelper.initializeAndLoad(m_baseURL + "find.html", true, &client);
+ webViewHelper.resize(WebSize(640, 480));
+ runPendingTasks();
+
+ WebLocalFrame* frame = webViewHelper.webView()->mainFrame()->toWebLocalFrame();
+ const int findIdentifier = 12345;
+ static const char* kFindString = "foo";
+ WebString searchText = WebString::fromUTF8(kFindString);
+ WebFindOptions options;
+ bool activeNow;
+
+ frame->resetMatchCount();
+ frame->scopeStringMatches(findIdentifier, searchText, options, true);
+ runPendingTasks();
+ EXPECT_TRUE(client.findResultsAreReady());
+
+ // Find in a <div> element.
+ options.findNext = true;
+ EXPECT_TRUE(frame->find(findIdentifier, searchText, options, false, 0, &activeNow));
+ EXPECT_TRUE(activeNow);
+
+ // Insert new text, which contains occurence of |searchText|.
+ frame->executeScript(WebScriptSource(
+ "var newTextNode = document.createTextNode('bar5 foo5');"
+ "var textArea = document.getElementsByTagName('textarea')[0];"
+ "document.body.insertBefore(newTextNode, textArea);"));
+
+ // Find in a <input> element.
+ EXPECT_TRUE(frame->find(findIdentifier, searchText, options, false, 0, &activeNow));
+ EXPECT_TRUE(activeNow);
+
+ // Find in the inserted text node.
+ EXPECT_TRUE(frame->find(findIdentifier, searchText, options, false, 0, &activeNow));
+ frame->stopFinding(false);
+ WebRange range = frame->selectionRange();
+ EXPECT_EQ(5, range.startOffset());
+ EXPECT_EQ(8, range.endOffset());
+ EXPECT_TRUE(frame->document().focusedElement().isNull());
+ EXPECT_FALSE(activeNow);
+}
+
static WebPoint topLeft(const WebRect& rect)
{
return WebPoint(rect.x, rect.y);

Powered by Google App Engine
This is Rietveld 408576698