172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/tabs/tab_strip_model.h" 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_navigator.h" 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_window.h" 1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/find_bar/find_bar.h" 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/find_bar/find_bar_controller.h" 1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/find_bar/find_notification_details.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/find_bar/find_tab_helper.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/in_process_browser_test.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host.h" 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_view.h" 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/test/test_server.h" 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/keycodes/keyboard_codes.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS) 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/find_bar_host.h" 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/focus/focus_manager.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(TOOLKIT_GTK) 3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/slide_animator_gtk.h" 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX) 3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h" 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kSimplePage = "404_is_enough_for_us.html"; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kFramePage = "files/find_in_page/frames.html"; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kFrameData = "files/find_in_page/framedata_general.html"; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kUserSelectPage = "files/find_in_page/user-select.html"; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kCrashPage = "files/find_in_page/crash_1341577.html"; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kTooFewMatchesPage = "files/find_in_page/bug_1155639.html"; 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenconst std::string kLongTextareaPage = "files/find_in_page/large_textarea.html"; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kEndState = "files/find_in_page/end_state.html"; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kPrematureEnd = "files/find_in_page/premature_end.html"; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kMoveIfOver = "files/find_in_page/move_if_obscuring.html"; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kBitstackCrash = "files/find_in_page/crash_14491.html"; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kSelectChangesOrdinal = 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "files/find_in_page/select_changes_ordinal.html"; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kSimple = "files/find_in_page/simple.html"; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst std::string kLinkPage = "files/find_in_page/link.html"; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst bool kBack = false; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst bool kFwd = true; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst bool kIgnoreCase = false; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst bool kCaseSensitive = true; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kMoveIterations = 30; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass FindInPageControllerTest : public InProcessBrowserTest { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageControllerTest() { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnableDOMAutomation(); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS) 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DropdownBarHost::disable_animations_during_testing_ = true; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(TOOLKIT_GTK) 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SlideAnimatorGtk::SetAnimationsForTesting(false); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX) 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarBridge::disable_animations_during_testing_ = true; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetFindBarWindowInfoForBrowser( 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* browser, gfx::Point* position, bool* fully_visible) { 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarTesting* find_bar = 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser->GetFindBarController()->find_bar()->GetFindBarTesting(); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return find_bar->GetFindBarWindowInfo(position, fully_visible); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetFindBarWindowInfo(gfx::Point* position, bool* fully_visible) { 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetFindBarWindowInfoForBrowser(browser(), position, fully_visible); 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 GetFindBarTextForBrowser(Browser* browser) { 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarTesting* find_bar = 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser->GetFindBarController()->find_bar()->GetFindBarTesting(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return find_bar->GetFindText(); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch string16 GetFindBarText() { 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetFindBarTextForBrowser(browser()); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen string16 GetFindBarMatchCountTextForBrowser(Browser* browser) { 9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen FindBarTesting* find_bar = 9721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen browser->GetFindBarController()->find_bar()->GetFindBarTesting(); 9821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return find_bar->GetMatchCountText(); 9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen string16 GetMatchCountText() { 10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return GetFindBarMatchCountTextForBrowser(browser()); 10321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 10421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void EnsureFindBoxOpenForBrowser(Browser* browser) { 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser->ShowFindBar(); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point position; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool fully_visible = false; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfoForBrowser( 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser, &position, &fully_visible)); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void EnsureFindBoxOpen() { 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpenForBrowser(browser()); 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Platform independent FindInPage that takes |const wchar_t*| 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// as an input. 12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenint FindInPageWchar(TabContentsWrapper* tab, 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const wchar_t* search_str, 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool forward, 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool case_sensitive, 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int* ordinal) { 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ui_test_utils::FindInPage( 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab, WideToUTF16(std::wstring(search_str)), 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch forward, case_sensitive, ordinal); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test loads a page with frames and starts FindInPage requests. 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageFrames) { 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our frames page. 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kFramePage); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try incremental search (mimicking user typing in). 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(18, FindInPageWchar(tab, L"g", 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(11, FindInPageWchar(tab, L"go", 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(04, FindInPageWchar(tab, L"goo", 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(03, FindInPageWchar(tab, L"goog", 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(02, FindInPageWchar(tab, L"googl", 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(01, FindInPageWchar(tab, L"google", 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(00, FindInPageWchar(tab, L"google!", 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Negative test (no matches should be found). 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"Non-existing string", 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 'horse' only exists in the three right frames. 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"horse", 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 'cat' only exists in the first frame. 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"cat", 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try searching again, should still come up with 1 match. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"cat", 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try searching backwards, ignoring case, should still come up with 1 match. 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"CAT", 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kBack, kIgnoreCase, &ordinal)); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try case sensitive, should NOT find it. 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"CAT", 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kCaseSensitive, &ordinal)); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try again case sensitive, but this time with right case. 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"dog", 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kCaseSensitive, &ordinal)); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Try non-Latin characters ('Hreggvidur' with 'eth' for 'd' in left frame). 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"Hreggvi\u00F0ur", 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"Hreggvi\u00F0ur", 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kCaseSensitive, &ordinal)); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"hreggvi\u00F0ur", 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kCaseSensitive, &ordinal)); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Specifying a prototype so that we can add the WARN_UNUSED_RESULT attribute. 212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool FocusedOnPage(TabContents* tab_contents, std::string* result) 213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WARN_UNUSED_RESULT; 214731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool FocusedOnPage(TabContents* tab_contents, std::string* result) { 216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return ui_test_utils::ExecuteJavaScriptAndExtractString( 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents->render_view_host(), 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"window.domAutomationController.send(getFocusedElement());", 220731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick result); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests the FindInPage end-state, in other words: what is focused when you 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// close the Find box (ie. if you find within a link the link should be 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// focused). 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageEndState) { 2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our special focus tracking page. 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kEndState); 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab_contents = browser()->GetSelectedTabContentsWrapper(); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(NULL != tab_contents); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that nothing has focus. 237731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::string result; 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(FocusedOnPage(tab_contents->tab_contents(), &result)); 239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_STREQ("{nothing focused}", result.c_str()); 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for a text that exists within a link on the page. 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab_contents, L"nk", 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // End the find session, which should set focus to the link. 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents-> 249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen find_tab_helper()->StopFinding(FindBarController::kKeepSelection); 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that the link is focused. 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(FocusedOnPage(tab_contents->tab_contents(), &result)); 253731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_STREQ("link1", result.c_str()); 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for a text that exists within a link on the page. 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab_contents, L"Google", 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Move the selection to link 1, after searching. 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents->render_view_host(), 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"window.domAutomationController.send(selectLink1());", 265731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &result)); 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // End the find session. 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents-> 269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen find_tab_helper()->StopFinding(FindBarController::kKeepSelection); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that link2 is not focused. 27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(FocusedOnPage(tab_contents->tab_contents(), &result)); 273731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_STREQ("", result.c_str()); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test loads a single-frame page and makes sure the ordinal returned makes 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// sense as we FindNext over all the items. 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageOrdinal) { 2793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 2823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kFrameData); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'o', which should make the first item active and return 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // '1 in 3' (1st ordinal of a total of 3 matches). 28772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, ordinal); 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Go back one match. 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kBack, kIgnoreCase, &ordinal)); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, ordinal); 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This should wrap to the top. 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This should go back to the end. 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, FindInPageWchar(tab, L"o", 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kBack, kIgnoreCase, &ordinal)); 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests that the ordinal is correctly adjusted after a selection 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SelectChangesOrdinal_Issue20883) { 3183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our test content. 3213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSelectChangesOrdinal); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for a text that exists within a link on the page. 32572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 32672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(NULL != tab); 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 32872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(4, FindInPageWchar(tab, 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"google", 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Move the selection to link 1, after searching. 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string result; 335731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 33672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab->render_view_host(), 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"", 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"window.domAutomationController.send(selectLink1());", 339731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &result)); 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Do a find-next after the selection. This should move forward 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // from there to the 3rd instance of 'google'. 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(4, FindInPageWchar(tab, 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"google", 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // End the find session. 349dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab->find_tab_helper()->StopFinding(FindBarController::kKeepSelection); 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test loads a page with frames and makes sure the ordinal returned makes 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// sense. 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageMultiFramesOrdinal) { 3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kFramePage); 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'a', which should make the first item active and return 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // '1 in 7' (1st ordinal of a total of 7 matches). 36372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, ordinal); 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(4, ordinal); 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Go back one, which should go back one frame. 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kBack, kIgnoreCase, &ordinal)); 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(4, ordinal); 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(5, ordinal); 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(6, ordinal); 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, ordinal); 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now we should wrap back to frame 1. 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kFwd, kIgnoreCase, &ordinal)); 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now we should wrap back to frame last frame. 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"a", kBack, kIgnoreCase, &ordinal)); 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(7, ordinal); 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// We could get ordinals out of whack when restarting search in subframes. 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See http://crbug.com/5132. 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPage_Issue5132) { 4063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 4093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kFramePage); 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'goa' three times (6 matches on page). 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 41472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(6, FindInPageWchar(tab, L"goa", 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(6, FindInPageWchar(tab, L"goa", 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, ordinal); 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(6, FindInPageWchar(tab, L"goa", 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add space to search (should result in no matches). 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"goa ", 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Remove the space, should be back to '3 out of 6') 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(6, FindInPageWchar(tab, L"goa", 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(3, ordinal); 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Load a page with no selectable text and make sure we don't crash. 43572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindUnselectableText) { 4363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 4393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kUserSelectPage); 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 44372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 44472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(1, FindInPageWchar(tab, L"text", kFwd, kIgnoreCase, &ordinal)); 44572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(1, ordinal); 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Try to reproduce the crash seen in issue 1341577. 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindCrash_Issue1341577) { 4503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 4533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kCrashPage); 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This would crash the tab. These must be the first two find requests issued 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // against the frame, otherwise an active frame pointer is set and it wont 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // produce the crash. 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We used to check the return value and |ordinal|. With ICU 4.2, FiP does 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // not find a stand-alone dependent vowel sign of Indic scripts. So, the 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // exptected values are all 0. To make this test pass regardless of 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ICU version, we just call FiP and see if there's any crash. 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(jungshik): According to a native Malayalam speaker, it's ok not 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to find U+0D4C. Still need to investigate further this issue. 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 46672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"\u0D4C", kFwd, kIgnoreCase, &ordinal); 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"\u0D4C", kFwd, kIgnoreCase, &ordinal); 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This should work fine. 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"\u0D24\u0D46", 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"nostring", 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Try to reproduce the crash seen in http://crbug.com/14491, where an assert 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// hits in the BitStack size comparison in WebKit. 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindCrash_Issue14491) { 4823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 4853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kBitstackCrash); 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This used to crash the tab. 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 49072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(0, FindInPageWchar(browser()->GetSelectedTabContentsWrapper(), 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"s", kFwd, kIgnoreCase, &ordinal)); 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test to make sure Find does the right thing when restarting from a timeout. 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// We used to have a problem where we'd stop finding matches when all of the 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// following conditions were true: 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1) The page has a lot of text to search. 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2) The page contains more than one match. 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3) It takes longer than the time-slice given to each Find operation (100 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ms) to find one or more of those matches (so Find times out and has to try 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// again from where it left off). 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindRestarts_Issue1155639) { 5043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our page. 5073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kTooFewMatchesPage); 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This string appears 5 times at the bottom of a long page. If Find restarts 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // properly after a timeout, it will find 5 matches, not just 1. 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 51372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(5, FindInPageWchar(browser()->GetSelectedTabContentsWrapper(), 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch L"008.xml", 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Make sure we don't get into an infinite loop when text box contains very 52072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// large amount of text. 52172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindRestarts_Issue70505) { 52272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(test_server()->Start()); 52372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 52472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // First we navigate to our page. 52572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GURL url = test_server()->GetURL(kLongTextareaPage); 52672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui_test_utils::NavigateToURL(browser(), url); 52772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 52872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // If this test hangs on the FindInPage call, then it might be a regression 52972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // such as the one found in issue http://crbug.com/70505. 53072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int ordinal = 0; 53172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FindInPageWchar(browser()->GetSelectedTabContentsWrapper(), 53272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen L"a", kFwd, kIgnoreCase, &ordinal); 53372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(1, ordinal); 53472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TODO(finnur): We cannot reliably get the matchcount for this Find call 53572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // until we fix issue http://crbug.com/71176. 53672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 53772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests bug 11761: FindInPage terminates search prematurely. 5393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This test is not expected to pass until bug 11761 is fixed. 5403345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, 5413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISABLED_FindInPagePrematureEnd) { 5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our special focus tracking page. 5453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kPrematureEnd); 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab_contents = browser()->GetSelectedTabContentsWrapper(); 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(NULL != tab_contents); 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for a text that exists within a link on the page. 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, FindInPageWchar(tab_contents, L"html ", 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindDisappearOnNavigate) { 5593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our special focus tracking page. 5623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 5633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url2 = test_server()->GetURL(kFramePage); 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowFindBar(); 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point position; 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool fully_visible = false; 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure it is open. 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reload the tab and make sure Find window doesn't go away. 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->Reload(CURRENT_TAB); 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::WaitForNavigationInCurrentTab(browser()); 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Navigate and make sure the Find window goes away. 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url2); 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(fully_visible); 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// FindDisappearOnNewTabAndHistory is flaky, at least on Mac. 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See http://crbug.com/43072 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define FindDisappearOnNewTabAndHistory FLAKY_FindDisappearOnNewTabAndHistory 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure Find box disappears when History/Downloads page is opened, and 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// when a New Tab is opened. 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindDisappearOnNewTabAndHistory) { 5993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our special focus tracking page. 6023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowFindBar(); 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point position; 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool fully_visible = false; 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure it is open. 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open another tab (tab B). 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->NewTab(); 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure Find box is closed. 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(fully_visible); 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close tab B. 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->CloseTab(); 624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure Find window appears again. 626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowHistoryTab(); 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure Find box is closed. 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(fully_visible); 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure Find box moves out of the way if it is obscuring the active match. 637ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindMovesWhenObscuring) { 6383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kMoveIfOver); 641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowFindBar(); 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is needed on GTK because the reposition operation is asynchronous. 646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point start_position; 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point position; 650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool fully_visible = false; 651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure it is open. 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&start_position, &fully_visible)); 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'Chromium' which the Find box is obscuring. 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 65872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index = 0; 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (; index < kMoveIterations; ++index) { 661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kMoveIterations, FindInPageWchar(tab, L"Chromium", 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check the position. 665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If the Find box has moved then we are done. 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (position.x() != start_position.x()) 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We should not have reached the end. 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_GT(kMoveIterations, index); 675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for something guaranteed not to be obscured by the Find box. 677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"Done", 678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check the position. 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(GetFindBarWindowInfo(&position, &fully_visible)); 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(fully_visible); 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure Find box has moved back to its original location. 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(position.x(), start_position.x()); 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// FindNextInNewTabUsesPrepopulate times-out, at least on Mac. 689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See http://crbug.com/43070 690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define FindNextInNewTabUsesPrepopulate DISABLED_FindNextInNewTabUsesPrepopulate 691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure F3 in a new tab works if Find has previous string to search for. 694c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindNextInNewTabUsesPrepopulate) { 6963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 6993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'no_match'. No matches should be found. 703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 70472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, FindInPageWchar(tab, L"no_match", 706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open another tab (tab B). 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->NewTab(); 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate what happens when you press F3 for FindNext. We should get a 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // response here (a hang means search was aborted). 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ui_test_utils::FindInPage(tab, string16(), 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open another tab (tab C). 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->NewTab(); 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate what happens when you press F3 for FindNext. We should get a 724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // response here (a hang means search was aborted). 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ui_test_utils::FindInPage(tab, string16(), 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(0, ordinal); 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS) 731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure Find box grabs the Esc accelerator and restores it again. 732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, AcceleratorRestoring) { 7333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 7363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::FocusManager* focus_manager = 740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::FocusManager::GetFocusManagerForNativeWindow( 741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->window()->GetNativeHandle()); 742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // See where Escape is registered. 74472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen views::Accelerator escape(ui::VKEY_ESCAPE, false, false, false); 745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::AcceleratorTarget* old_target = 746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch focus_manager->GetCurrentTargetForAccelerator(escape); 747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(old_target != NULL); 748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowFindBar(); 750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Our Find bar should be the new target. 752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::AcceleratorTarget* new_target = 753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch focus_manager->GetCurrentTargetForAccelerator(escape); 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(new_target != NULL); 756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(new_target, old_target); 757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The accelerator for Escape should be back to what it was before. 763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(old_target, 764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch focus_manager->GetCurrentTargetForAccelerator(escape)); 765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // TOOLKIT_VIEWS 767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure Find box does not become UI-inactive when no text is in the box as 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// we switch to a tab contents with an empty find string. See issue 13570. 770c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, StayActive) { 7713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 7743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->ShowFindBar(); 778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate a user clearing the search string. Ideally, we should be 780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // simulating keypresses here for searching for something and pressing 781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // backspace, but that's been proven flaky in the past, so we go straight to 782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // tab_contents. 783dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen FindTabHelper* find_tab_helper = 784dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen browser()->GetSelectedTabContentsWrapper()->find_tab_helper(); 785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stop the (non-existing) find operation, and clear the selection (which 786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // signals the UI is still active). 787dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen find_tab_helper->StopFinding(FindBarController::kClearSelection); 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure the Find UI flag hasn't been cleared, it must be so that the UI 789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // still responds to browser window resizing. 790dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ASSERT_TRUE(find_tab_helper->find_ui_active()); 791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure F3 works after you FindNext a couple of times and end the Find 794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// session. See issue http://crbug.com/28306. 795c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, RestartSearchFromF3) { 7963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to a simple page. 7993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimple); 800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for 'page'. Should have 1 match. 803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 80472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"page", kFwd, kIgnoreCase, &ordinal)); 806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate what happens when you press F3 for FindNext. Still should show 809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // one match. This cleared the pre-populate string at one point (see bug). 810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ui_test_utils::FindInPage(tab, string16(), 811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // End the Find session, thereby making the next F3 start afresh. 815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate F3 while Find box is closed. Should have 1 match. 819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab, L"", kFwd, kIgnoreCase, &ordinal)); 820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, ordinal); 821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// When re-opening the find bar with F3, the find bar should be re-populated 824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// with the last search from the same tab rather than the last overall search. 825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// http://crbug.com/30006 826c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, PreferPreviousSearch) { 8273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 8303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimplePage); 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Find "Default". 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 83572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab1 = browser()->GetSelectedTabContentsWrapper(); 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab1, L"Default", kFwd, kIgnoreCase, &ordinal)); 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a second tab. 839513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // For some reason we can't use AddSelectedTabWithURL here on ChromeOS. It 840513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // could be some delicate assumption about the tab starting off unselected or 841513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // something relating to user gesture. 842513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser::NavigateParams params(browser(), url, PageTransition::TYPED); 843513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch params.disposition = NEW_BACKGROUND_TAB; 844513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch params.tabstrip_add_types = TabStripModel::ADD_NONE; 845513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser::Navigate(¶ms); 846ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->ActivateTabAt(1, false); 84772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab2 = browser()->GetSelectedTabContentsWrapper(); 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1, tab2); 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Find "given". 851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab2, L"given", kFwd, kIgnoreCase, &ordinal); 852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Switch back to first tab. 854ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->ActivateTabAt(0, false); 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate F3. 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::FindInPage(tab1, string16(), kFwd, kIgnoreCase, &ordinal); 859dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(tab1->find_tab_helper()->find_text(), WideToUTF16(L"Default")); 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests that whenever you close and reopen the Find bar, it should show 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the last search entered in that tab. http://crbug.com/40121. 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, PrepopulateSameTab) { 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // FindInPage on Mac doesn't use prepopulated values. Search there is global. 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 8733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimple); 874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "page". 877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 87872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab1 = browser()->GetSelectedTabContentsWrapper(); 879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab1, L"page", kFwd, kIgnoreCase, &ordinal)); 880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box. 882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 88521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(ASCIIToUTF16("1 of 1"), GetMatchCountText()); 886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box again. 892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // After the Find box has been reopened, it should have been prepopulated with 895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the word "page" again. 896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 89721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(ASCIIToUTF16("1 of 1"), GetMatchCountText()); 898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests that whenever you open Find in a new tab it should prepopulate 901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// with a previous search term (in any tab), if a search has not been issued in 902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this tab before. 903c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, PrepopulateInNewTab) { 904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // FindInPage on Mac doesn't use prepopulated values. Search there is global. 906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 9123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimple); 913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "page". 916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 91772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab1 = browser()->GetSelectedTabContentsWrapper(); 918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab1, L"page", kFwd, kIgnoreCase, &ordinal)); 91921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(ASCIIToUTF16("1 of 1"), GetMatchCountText()); 920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now create a second tab and load the same page. 922513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser()->AddSelectedTabWithURL(url, PageTransition::TYPED); 92372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab2 = browser()->GetSelectedTabContentsWrapper(); 924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1, tab2); 925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box. 927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The new tab should have "page" prepopulated, since that was the last search 930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in the first tab. 931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 93221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // But it should not seem like a search has been issued. 93321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_EQ(ASCIIToUTF16(""), GetMatchCountText()); 934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This makes sure that we can search for A in tabA, then for B in tabB and 937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// when we come back to tabA we should still see A (because that was the last 938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// search in that tab). 939c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, PrepopulatePreserveLast) { 940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // FindInPage on Mac doesn't use prepopulated values. Search there is global. 942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to any page. 9483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimple); 949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "page". 952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 95372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab1 = browser()->GetSelectedTabContentsWrapper(); 954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab1, L"page", kFwd, kIgnoreCase, &ordinal)); 955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box. 957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now create a second tab and load the same page. 966513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser::NavigateParams params(browser(), url, PageTransition::TYPED); 967513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch params.disposition = NEW_BACKGROUND_TAB; 968513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch params.tabstrip_add_types = TabStripModel::ADD_NONE; 969513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser::Navigate(¶ms); 970ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->ActivateTabAt(1, false); 97172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab2 = browser()->GetSelectedTabContentsWrapper(); 972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1, tab2); 973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "text". 975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab2, L"text", kFwd, kIgnoreCase, &ordinal); 976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Go back to the first tab and make sure we have NOT switched the prepopulate 978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // text to "text". 979ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen browser()->ActivateTabAt(0, false); 980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box. 982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // After the Find box has been reopened, it should have been prepopulated with 985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the word "page" again, since that was the last search in that tab. 986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Re-open the Find box. 993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is a special case: previous search in TabContents used to get cleared 994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // if you opened and closed the FindBox, which would cause the global 995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // prepopulate value to show instead of last search in this tab. 996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpen(); 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // After the Find box has been reopened, it should have been prepopulated with 999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the word "page" again, since that was the last search in that tab. 1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarText()); 1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(rohitrao): Searching in incognito tabs does not work in browser tests in 100421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Linux views. Investigate and fix. http://crbug.com/40948 1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_LINUX) && defined(TOOLKIT_VIEWS) 1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_NoIncognitoPrepopulate DISABLED_NoIncognitoPrepopulate 1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else 1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_NoIncognitoPrepopulate NoIncognitoPrepopulate 1009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 1010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This tests that search terms entered into an incognito find bar are not used 1012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// as prepopulate terms for non-incognito windows. 1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, MAYBE_NoIncognitoPrepopulate) { 1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // FindInPage on Mac doesn't use prepopulated values. Search there is global. 1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to the "simple" test page. 10223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kSimple); 1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "page" in the normal browser tab. 1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 102772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab1 = browser()->GetSelectedTabContentsWrapper(); 1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(tab1, L"page", kFwd, kIgnoreCase, &ordinal)); 1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box. 1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpenForBrowser(browser()); 1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarTextForBrowser(browser())); 1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser()->GetFindBarController()->EndFindSession( 1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open a new incognito window and navigate to the same page. 1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* incognito_profile = browser()->profile()->GetOffTheRecordProfile(); 1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* incognito_browser = Browser::Create(incognito_profile); 1041513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch incognito_browser->AddSelectedTabWithURL(url, PageTransition::START_PAGE); 1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::WaitForNavigation( 1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch &incognito_browser->GetSelectedTabContents()->controller()); 1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch incognito_browser->window()->Show(); 1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the find box and make sure that it is prepopulated with "page". 1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpenForBrowser(incognito_browser); 1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarTextForBrowser(incognito_browser)); 1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Search for the word "text" in the incognito tab. 105172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* incognito_tab = 105272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen incognito_browser->GetSelectedTabContentsWrapper(); 1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(1, FindInPageWchar(incognito_tab, L"text", 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kFwd, kIgnoreCase, &ordinal)); 1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("text"), GetFindBarTextForBrowser(incognito_browser)); 1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the Find box. 1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch incognito_browser->GetFindBarController()->EndFindSession( 1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindBarController::kKeepSelection); 1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now open a new tab in the original (non-incognito) browser. 1062513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch browser()->AddSelectedTabWithURL(url, PageTransition::TYPED); 106372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab2 = browser()->GetSelectedTabContentsWrapper(); 1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_NE(tab1, tab2); 1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open the Find box and make sure it is prepopulated with the search term 1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // from the original browser, not the search term from the incognito window. 1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EnsureFindBoxOpenForBrowser(browser()); 1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ASCIIToUTF16("page"), GetFindBarTextForBrowser(browser())); 1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This makes sure that dismissing the find bar with kActivateSelection works. 10733345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickIN_PROC_BROWSER_TEST_F(FindInPageControllerTest, ActivateLinkNavigatesPage) { 10743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server()->Start()); 1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First we navigate to our test content. 10773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = test_server()->GetURL(kLinkPage); 1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::NavigateToURL(browser(), url); 1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContentsWrapper* tab = browser()->GetSelectedTabContentsWrapper(); 1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int ordinal = 0; 1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FindInPageWchar(tab, L"link", kFwd, kIgnoreCase, &ordinal); 1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(ordinal, 1); 1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // End the find session, click on the link. 1086dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen tab->find_tab_helper()->StopFinding(FindBarController::kActivateSelection); 1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); 1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 1089