diff options
-rw-r--r-- | chrome/browser/views/find_bar_win_browsertest.cc | 250 | ||||
-rw-r--r-- | chrome/browser/views/find_bar_win_uitest.cc | 174 | ||||
-rw-r--r-- | chrome/test/data/find_in_page/premature_end.html | 5 |
3 files changed, 235 insertions, 194 deletions
diff --git a/chrome/browser/views/find_bar_win_browsertest.cc b/chrome/browser/views/find_bar_win_browsertest.cc index 3f93af5..84248ba 100644 --- a/chrome/browser/views/find_bar_win_browsertest.cc +++ b/chrome/browser/views/find_bar_win_browsertest.cc @@ -4,6 +4,7 @@ #include "base/message_loop.h" #include "chrome/browser/browser.h" +#include "chrome/browser/find_bar_controller.h" #include "chrome/browser/find_notification_details.h" #include "chrome/browser/renderer_host/render_view_host.h" #include "chrome/browser/tab_contents/tab_contents.h" @@ -19,6 +20,7 @@ const std::wstring kUserSelectPage = L"files/find_in_page/user-select.html"; const std::wstring kCrashPage = L"files/find_in_page/crash_1341577.html"; const std::wstring kTooFewMatchesPage = L"files/find_in_page/bug_1155639.html"; const std::wstring kEndState = L"files/find_in_page/end_state.html"; +const std::wstring kPrematureEnd = L"files/find_in_page/premature_end.html"; class FindInPageNotificationObserver : public NotificationObserver { public: @@ -87,7 +89,8 @@ class FindInPageControllerTest : public InProcessBrowserTest { int FindInPage(const std::wstring& search_string, FindInPageDirection forward, FindInPageCase match_case, - bool find_next) { + bool find_next, + int* ordinal) { TabContents* tab_contents = browser()->GetSelectedTabContents(); tab_contents->set_current_find_request_id( FindInPageNotificationObserver::kFindInPageRequestId); @@ -95,7 +98,11 @@ class FindInPageControllerTest : public InProcessBrowserTest { FindInPageNotificationObserver::kFindInPageRequestId, search_string, forward == FWD, match_case == CASE_SENSITIVE, find_next); - return FindInPageNotificationObserver(tab_contents).number_of_matches(); + FindInPageNotificationObserver observer = + FindInPageNotificationObserver(tab_contents); + if (ordinal) + *ordinal = observer.active_match_ordinal(); + return observer.number_of_matches(); } }; @@ -108,39 +115,61 @@ IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageFrames) { ui_test_utils::NavigateToURL(browser(), url); // Try incremental search (mimicking user typing in). - EXPECT_EQ(18, FindInPage(L"g", FWD, IGNORE_CASE, false)); - EXPECT_EQ(11, FindInPage(L"go", FWD, IGNORE_CASE, false)); - EXPECT_EQ(04, FindInPage(L"goo", FWD, IGNORE_CASE, false)); - EXPECT_EQ(03, FindInPage(L"goog", FWD, IGNORE_CASE, false)); - EXPECT_EQ(02, FindInPage(L"googl", FWD, IGNORE_CASE, false)); - EXPECT_EQ(01, FindInPage(L"google", FWD, IGNORE_CASE, false)); - EXPECT_EQ(00, FindInPage(L"google!", FWD, IGNORE_CASE, false)); + int ordinal = 0; + EXPECT_EQ(18, FindInPage(L"g", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(11, FindInPage(L"go", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(04, FindInPage(L"goo", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(03, FindInPage(L"goog", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(02, FindInPage(L"googl", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(01, FindInPage(L"google", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(00, FindInPage(L"google!", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(0, ordinal); // Negative test (no matches should be found). - EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, false)); + EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, + false, &ordinal)); + EXPECT_EQ(0, ordinal); // 'horse' only exists in the three right frames. - EXPECT_EQ(3, FindInPage(L"horse", FWD, IGNORE_CASE, false)); + EXPECT_EQ(3, FindInPage(L"horse", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // 'cat' only exists in the first frame. - EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false)); + EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // Try searching again, should still come up with 1 match. - EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false)); + EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // Try searching backwards, ignoring case, should still come up with 1 match. - EXPECT_EQ(1, FindInPage(L"CAT", BACK, IGNORE_CASE, false)); + EXPECT_EQ(1, FindInPage(L"CAT", BACK, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // Try case sensitive, should NOT find it. - EXPECT_EQ(0, FindInPage(L"CAT", FWD, CASE_SENSITIVE, false)); + EXPECT_EQ(0, FindInPage(L"CAT", FWD, CASE_SENSITIVE, false, &ordinal)); + EXPECT_EQ(0, ordinal); // Try again case sensitive, but this time with right case. - EXPECT_EQ(1, FindInPage(L"dog", FWD, CASE_SENSITIVE, false)); + EXPECT_EQ(1, FindInPage(L"dog", FWD, CASE_SENSITIVE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // Try non-Latin characters ('Hreggvidur' with 'eth' for 'd' in left frame). - EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, IGNORE_CASE, false)); - EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, CASE_SENSITIVE, false)); - EXPECT_EQ(0, FindInPage(L"hreggvi\u00F0ur", FWD, CASE_SENSITIVE, false)); + EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, IGNORE_CASE, + false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, CASE_SENSITIVE, + false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(0, FindInPage(L"hreggvi\u00F0ur", FWD, CASE_SENSITIVE, + false, &ordinal)); + EXPECT_EQ(0, ordinal); } std::string FocusedOnPage(TabContents* tab_contents) { @@ -170,7 +199,9 @@ IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageEndState) { ASSERT_STREQ("{nothing focused}", FocusedOnPage(tab_contents).c_str()); // Search for a text that exists within a link on the page. - EXPECT_EQ(1, FindInPage(L"nk", FWD, IGNORE_CASE, false)); + int ordinal = 0; + EXPECT_EQ(1, FindInPage(L"nk", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // End the find session, which should set focus to the link. tab_contents->StopFinding(false); @@ -179,7 +210,8 @@ IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageEndState) { EXPECT_STREQ("link1", FocusedOnPage(tab_contents).c_str()); // Search for a text that exists within a link on the page. - EXPECT_EQ(1, FindInPage(L"Google", FWD, IGNORE_CASE, false)); + EXPECT_EQ(1, FindInPage(L"Google", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); // Move the selection to link 1, after searching. std::string result; @@ -195,3 +227,179 @@ IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageEndState) { // Verify that link2 is not focused. EXPECT_STREQ("", FocusedOnPage(tab_contents).c_str()); } + +// This test loads a single-frame page and makes sure the ordinal returned makes +// sense as we FindNext over all the items. +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageOrdinal) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kFrameData); + ui_test_utils::NavigateToURL(browser(), url); + + // Search for 'o', which should make the first item active and return + // '1 in 3' (1st ordinal of a total of 3 matches). + int ordinal = 0; + EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(2, ordinal); + EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); + // Go back one match. + EXPECT_EQ(3, FindInPage(L"o", BACK, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(2, ordinal); + EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); + // This should wrap to the top. + EXPECT_EQ(3, FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(1, ordinal); + // This should go back to the end. + EXPECT_EQ(3, FindInPage(L"o", BACK, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); +} + +// This test loads a page with frames and makes sure the ordinal returned makes +// sense. +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageMultiFramesOrdinal) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kFramePage); + ui_test_utils::NavigateToURL(browser(), url); + + // Search for 'a', which should make the first item active and return + // '1 in 7' (1st ordinal of a total of 7 matches). + int ordinal = 0; + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(2, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(4, ordinal); + // Go back one, which should go back one frame. + EXPECT_EQ(7, FindInPage(L"a", BACK, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(4, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(5, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(6, ordinal); + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(7, ordinal); + // Now we should wrap back to frame 1. + EXPECT_EQ(7, FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(1, ordinal); + // Now we should wrap back to frame last frame. + EXPECT_EQ(7, FindInPage(L"a", BACK, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(7, ordinal); +} + +// We could get ordinals out of whack when restarting search in subframes. +// See http://crbug.com/5132 +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPage_Issue5132) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kFramePage); + ui_test_utils::NavigateToURL(browser(), url); + + // Search for 'goa' three times (6 matches on page). + int ordinal = 0; + EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(2, ordinal); + EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(3, ordinal); + // Add space to search (should result in no matches). + EXPECT_EQ(0, FindInPage(L"goa ", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(0, ordinal); + // Remove the space, should be back to '3 out of 6') + EXPECT_EQ(6, FindInPage(L"goa", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(3, ordinal); +} + +// Load a page with no selectable text and make sure we don't crash. +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindUnSelectableText) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kUserSelectPage); + ui_test_utils::NavigateToURL(browser(), url); + + int ordinal = 0; + EXPECT_EQ(0, FindInPage(L"text", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(-1, ordinal); // Nothing is selected. + EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, + false, &ordinal)); + EXPECT_EQ(0, ordinal); +} + +// Try to reproduce the crash seen in issue 1341577. +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindCrash_Issue1341577) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kCrashPage); + ui_test_utils::NavigateToURL(browser(), url); + + // This would crash the tab. These must be the first two find requests issued + // against the frame, otherwise an active frame pointer is set and it wont + // produce the crash. + int ordinal = 0; + EXPECT_EQ(1, FindInPage(L"\u0D4C", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(1, FindInPage(L"\u0D4C", FWD, IGNORE_CASE, true, &ordinal)); + EXPECT_EQ(1, ordinal); + + // This should work fine. + EXPECT_EQ(1, FindInPage(L"\u0D24\u0D46", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); + EXPECT_EQ(0, FindInPage(L"nostring", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(0, ordinal); +} + +// Test to make sure Find does the right thing when restarting from a timeout. +// We used to have a problem where we'd stop finding matches when all of the +// following conditions were true: +// 1) The page has a lot of text to search. +// 2) The page contains more than one match. +// 3) It takes longer than the time-slice given to each Find operation (100 +// ms) to find one or more of those matches (so Find times out and has to try +// again from where it left off). +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindRestarts_Issue1155639) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our page. + GURL url = server->TestServerPageW(kTooFewMatchesPage); + ui_test_utils::NavigateToURL(browser(), url); + + // This string appears 5 times at the bottom of a long page. If Find restarts + // properly after a timeout, it will find 5 matches, not just 1. + int ordinal = 0; + EXPECT_EQ(5, FindInPage(L"008.xml", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); +} + +// This tests bug 11761: FindInPage terminates search prematurely. +// This test will be enabled once the bug is fixed. +IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, + DISABLED_FindInPagePrematureEnd) { + HTTPTestServer* server = StartHTTPServer(); + + // First we navigate to our special focus tracking page. + GURL url = server->TestServerPageW(kPrematureEnd); + ui_test_utils::NavigateToURL(browser(), url); + + TabContents* tab_contents = browser()->GetSelectedTabContents(); + ASSERT_TRUE(NULL != tab_contents); + + // Search for a text that exists within a link on the page. + int ordinal = 0; + EXPECT_EQ(2, FindInPage(L"html ", FWD, IGNORE_CASE, false, &ordinal)); + EXPECT_EQ(1, ordinal); +} diff --git a/chrome/browser/views/find_bar_win_uitest.cc b/chrome/browser/views/find_bar_win_uitest.cc index e646fde..2b9a5ac 100644 --- a/chrome/browser/views/find_bar_win_uitest.cc +++ b/chrome/browser/views/find_bar_win_uitest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -19,178 +19,6 @@ class FindInPageControllerTest : public UITest { const std::wstring kSimplePage = L"404_is_enough_for_us.html"; const std::wstring kFramePage = L"files/find_in_page/frames.html"; -const std::wstring kFrameData = L"files/find_in_page/framedata_general.html"; -const std::wstring kUserSelectPage = L"files/find_in_page/user-select.html"; -const std::wstring kCrashPage = L"files/find_in_page/crash_1341577.html"; -const std::wstring kTooFewMatchesPage = L"files/find_in_page/bug_1155639.html"; - -// This test loads a single-frame page and makes sure the ordinal returned makes -// sense as we FindNext over all the items. -TEST_F(FindInPageControllerTest, FindInPageOrdinal) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - // First we navigate to our frames page. - GURL url = server->TestServerPageW(kFrameData); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - // Search for 'o', which should make the first item active and return - // '1 in 3' (1st ordinal of a total of 3 matches). - int ordinal = 0; - EXPECT_EQ(3, tab->FindInPage(L"o", FWD, IGNORE_CASE, false, &ordinal)); - EXPECT_EQ(1, ordinal); - EXPECT_EQ(3, tab->FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(2, ordinal); - EXPECT_EQ(3, tab->FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); - // Go back one match. - EXPECT_EQ(3, tab->FindInPage(L"o", BACK, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(2, ordinal); - EXPECT_EQ(3, tab->FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); - // This should wrap to the top. - EXPECT_EQ(3, tab->FindInPage(L"o", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(1, ordinal); - // This should go back to the end. - EXPECT_EQ(3, tab->FindInPage(L"o", BACK, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); -} - -// This test loads a page with frames and makes sure the ordinal returned makes -// sense. -TEST_F(FindInPageControllerTest, FindInPageMultiFramesOrdinal) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - // First we navigate to our frames page. - GURL url = server->TestServerPageW(kFramePage); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - // Search for 'a', which should make the first item active and return - // '1 in 7' (1st ordinal of a total of 7 matches). - int ordinal = 0; - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, false, &ordinal)); - EXPECT_EQ(1, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(2, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(4, ordinal); - // Go back one, which should go back one frame. - EXPECT_EQ(7, tab->FindInPage(L"a", BACK, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(4, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(5, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(6, ordinal); - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(7, ordinal); - // Now we should wrap back to frame 1. - EXPECT_EQ(7, tab->FindInPage(L"a", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(1, ordinal); - // Now we should wrap back to frame last frame. - EXPECT_EQ(7, tab->FindInPage(L"a", BACK, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(7, ordinal); -} - -// We could get ordinals out of whack when restarting search in subframes. -// See http://crbug.com/5132 -TEST_F(FindInPageControllerTest, FindInPage_Issue5132) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - // First we navigate to our frames page. - GURL url = server->TestServerPageW(kFramePage); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - // Search for 'goa' three times (6 matches on page). - int ordinal = 0; - EXPECT_EQ(6, tab->FindInPage(L"goa", FWD, IGNORE_CASE, false, &ordinal)); - EXPECT_EQ(1, ordinal); - EXPECT_EQ(6, tab->FindInPage(L"goa", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(2, ordinal); - EXPECT_EQ(6, tab->FindInPage(L"goa", FWD, IGNORE_CASE, true, &ordinal)); - EXPECT_EQ(3, ordinal); - // Add space to search (should result in no matches). - EXPECT_EQ(0, tab->FindInPage(L"goa ", FWD, IGNORE_CASE, false, &ordinal)); - EXPECT_EQ(0, ordinal); - // Remove the space, should be back to '3 out of 6') - EXPECT_EQ(6, tab->FindInPage(L"goa", FWD, IGNORE_CASE, false, &ordinal)); - EXPECT_EQ(3, ordinal); -} - -// Load a page with no selectable text and make sure we don't crash. -TEST_F(FindInPageControllerTest, FindUnSelectableText) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - GURL url = server->TestServerPageW(kUserSelectPage); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - EXPECT_EQ(0, tab->FindInPage(L"text", FWD, IGNORE_CASE, false, NULL)); - EXPECT_EQ(0, tab->FindInPage(L"Non-existing string", FWD, IGNORE_CASE, - false, NULL)); -} - -// Try to reproduce the crash seen in issue 1341577. -TEST_F(FindInPageControllerTest, FindCrash_Issue1341577) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - GURL url = server->TestServerPageW(kCrashPage); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - // This would crash the tab. These must be the first two find requests issued - // against the frame, otherwise an active frame pointer is set and it wont - // produce the crash. - EXPECT_EQ(1, tab->FindInPage(L"\u0D4C", FWD, IGNORE_CASE, false, NULL)); - EXPECT_EQ(1, tab->FindInPage(L"\u0D4C", FWD, IGNORE_CASE, true, NULL)); - - // This should work fine. - EXPECT_EQ(1, tab->FindInPage(L"\u0D24\u0D46", FWD, IGNORE_CASE, false, NULL)); - EXPECT_EQ(0, tab->FindInPage(L"nostring", FWD, IGNORE_CASE, false, NULL)); -} - -// Test to make sure Find does the right thing when restarting from a timeout. -// We used to have a problem where we'd stop finding matches when all of the -// following conditions were true: -// 1) The page has a lot of text to search. -// 2) The page contains more than one match. -// 3) It takes longer than the time-slice given to each Find operation (100 -// ms) to find one or more of those matches (so Find times out and has to try -// again from where it left off). -TEST_F(FindInPageControllerTest, FindEnoughMatches_Issue1155639) { - scoped_refptr<HTTPTestServer> server = - HTTPTestServer::CreateServer(L"chrome/test/data", NULL); - ASSERT_TRUE(NULL != server.get()); - - GURL url = server->TestServerPageW(kTooFewMatchesPage); - scoped_ptr<TabProxy> tab(GetActiveTab()); - ASSERT_TRUE(tab->NavigateToURL(url)); - WaitUntilTabCount(1); - - // This string appears 5 times at the bottom of a long page. If Find restarts - // properly after a timeout, it will find 5 matches, not just 1. - EXPECT_EQ(5, tab->FindInPage(L"008.xml", FWD, IGNORE_CASE, false, NULL)); -} // The find window should not change its location just because we open and close // a new tab. diff --git a/chrome/test/data/find_in_page/premature_end.html b/chrome/test/data/find_in_page/premature_end.html new file mode 100644 index 0000000..e681528 --- /dev/null +++ b/chrome/test/data/find_in_page/premature_end.html @@ -0,0 +1,5 @@ +<!doctype html>
+<body>
+ <input type=text value="html">
+ Search for html[space] with FindInPage and you should find the next two words: html html done.
+</body>
\ No newline at end of file |