15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h"
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_bar_controller.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_notification_details.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/view_ids.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/find_bar_host.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h"
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/focus_manager.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_delegate.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char kSimplePage[] = "files/find_in_page/simple.html";
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FindInPageTest : public InProcessBrowserTest {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FindInPageTest() {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FindBarHost::disable_animations_during_testing_ = true;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 GetFindBarText() {
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    FindBar* find_bar = browser()->GetFindBarController()->find_bar();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return find_bar->GetFindText();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 GetFindBarSelectedText() {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FindBarTesting* find_bar =
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        browser()->GetFindBarController()->find_bar()->GetFindBarTesting();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return find_bar->GetFindSelectedText();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FindInPageTest);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Flaky because the test server fails to start? See: http://crbug.com/96594.
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, CrashEscHandlers) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First we navigate to our test page (tab A).
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = test_server()->GetURL(kSimplePage);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Find(browser());
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Open another tab (tab B).
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Find(browser());
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Select tab A.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close tab B.
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->CloseWebContentsAt(1,
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   TabStripModel::CLOSE_NONE);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Click on the location bar so that Find box loses focus.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(ui_test_utils::ClickOnView(browser(),
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                     VIEW_ID_OMNIBOX));
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Check the location bar is focused.
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This used to crash until bug 1303709 was fixed.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_ESCAPE, false, false, false, false));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931
961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusRestore DISABLED_FocusRestore
971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusRestore FocusRestore
991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif
1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Flaky because the test server fails to start? See: http://crbug.com/96594.
1021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_FocusRestore) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = test_server()->GetURL("title1.html");
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focus the location bar, open and close the find-in-page, focus should
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // return to the location bar.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::FocusLocationBar(browser());
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure the creation of the find bar controller.
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->EndFindSession(
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepSelectionOnPage,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepResultsInFindBox);
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focus the location bar, find something on the page, close the find box,
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // focus should go to the page.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::FocusLocationBar(browser());
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Find(browser());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::FindInPage(
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents(),
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ASCIIToUTF16("a"), true, false, NULL, NULL);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->EndFindSession(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepSelectionOnPage,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepResultsInFindBox);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_TAB_CONTAINER));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focus the location bar, open and close the find box, focus should return to
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the location bar (same as before, just checking that http://crbug.com/23599
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is fixed).
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::FocusLocationBar(browser());
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->EndFindSession(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepSelectionOnPage,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FindBarController::kKeepResultsInFindBox);
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(phajdan.jr): Disabling due to possible timing issues on XP
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// interactive_ui_tests.
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// http://crbug.com/311363
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, DISABLED_SelectionRestoreOnTabSwitch) {
1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Make sure Chrome is in the foreground, otherwise sending input
1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // won't do anything and the test will hang.
1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // First we navigate to any page in the current tab (tab A).
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  GURL url = test_server()->GetURL(kSimplePage);
1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Show the Find bar.
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser()->GetFindBarController()->Show();
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Search for "abc".
1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_A, false, false, false, false));
1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_B, false, false, false, false));
1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_C, false, false, false, false));
1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("abc"), GetFindBarText());
1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Select "bc".
1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_LEFT, false, true, false, false));
1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_LEFT, false, true, false, false));
1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("bc"), GetFindBarSelectedText());
1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Open another tab (tab B).
1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  content::WindowedNotificationObserver observer(
1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      content::NOTIFICATION_LOAD_STOP,
1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      content::NotificationService::AllSources());
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED);
1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  observer.Wait();
1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Show the Find bar.
1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser()->GetFindBarController()->Show();
1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Search for "def".
1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_D, false, false, false, false));
1964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_E, false, false, false, false));
1984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_F, false, false, false, false));
2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("def"), GetFindBarText());
2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Select "de".
2034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_HOME, false, false, false, false));
2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_RIGHT, false, true, false, false));
2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_RIGHT, false, true, false, false));
2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("de"), GetFindBarSelectedText());
2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Select tab A. Find bar should select "bc".
2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("bc"), GetFindBarSelectedText());
2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Select tab B. Find bar should select "de".
2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(1, true);
2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("de"), GetFindBarSelectedText());
2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA)
2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931
2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusRestoreOnTabSwitch DISABLED_FocusRestoreOnTabSwitch
2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else
2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_FocusRestoreOnTabSwitch FocusRestoreOnTabSwitch
2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif
2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Flaky because the test server fails to start? See: http://crbug.com/96594.
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_FocusRestoreOnTabSwitch) {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First we navigate to our test page (tab A).
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = test_server()->GetURL(kSimplePage);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Find(browser());
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Search for 'a'.
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::FindInPage(
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents(),
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ASCIIToUTF16("a"), true, false, NULL, NULL);
2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText());
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Open another tab (tab B).
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WindowedNotificationObserver observer(
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::NOTIFICATION_LOAD_STOP,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::NotificationService::AllSources());
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome::AddSelectedTabWithURL(browser(), url, ui::PAGE_TRANSITION_TYPED);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  observer.Wait();
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure Find box is open.
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Find(browser());
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Search for 'b'.
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::FindInPage(
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents(),
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ASCIIToUTF16("b"), true, false, NULL, NULL);
2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("b"), GetFindBarSelectedText());
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set focus away from the Find bar (to the Location bar).
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::FocusLocationBar(browser());
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Select tab A. Find bar should get focus.
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText());
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Select tab B. Location bar should get focus.
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(1, true);
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// FindInPage on Mac doesn't use prepopulated values. Search there is global.
28323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#if !defined(OS_MACOSX) && !defined(USE_AURA)
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Flaky because the test server fails to start? See: http://crbug.com/96594.
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests that whenever you clear values from the Find box and close it that
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// it respects that and doesn't show you the last search, as reported in bug:
287d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// http://crbug.com/40121. For Aura see bug http://crbug.com/292299.
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, PrepopulateRespectBlank) {
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure Chrome is in the foreground, otherwise sending input
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // won't do anything and the test will hang.
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First we navigate to any page.
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = test_server()->GetURL(kSimplePage);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show the Find bar.
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Search for "a".
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_A, false, false, false, false));
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should find "a" here.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarText());
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delete "a".
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_BACK, false, false, false, false));
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Validate we have cleared the text.
3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::string16(), GetFindBarText());
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the Find box.
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_ESCAPE, false, false, false, false));
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show the Find bar.
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // After the Find box has been reopened, it should not have been prepopulated
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // with "a" again.
3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::string16(), GetFindBarText());
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Close the Find box.
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_ESCAPE, false, false, false, false));
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Press F3 to trigger FindNext.
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_F3, false, false, false, false));
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // After the Find box has been reopened, it should still have no prepopulate
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // value.
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(base::string16(), GetFindBarText());
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
33923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky on Win. http://crbug.com/92467
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky on ChromeOS. http://crbug.com/118216
3431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Flaky on linux aura. http://crbug.com/163931
3441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(TOOLKIT_VIEWS)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PasteWithoutTextChange DISABLED_PasteWithoutTextChange
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_PasteWithoutTextChange PasteWithoutTextChange
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, MAYBE_PasteWithoutTextChange) {
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(test_server()->Start());
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure Chrome is in the foreground, otherwise sending input
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // won't do anything and the test will hang.
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First we navigate to any page.
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GURL url = test_server()->GetURL(kSimplePage);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(browser(), url);
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show the Find bar.
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Search for "a".
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_A, false, false, false, false));
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should find "a" here.
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarText());
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reload the page to clear the matching result.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chrome::Reload(browser(), CURRENT_TAB);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focus the Find bar again to make sure the text is selected.
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->GetFindBarController()->Show();
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(),
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "a" should be selected.
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), GetFindBarSelectedText());
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Press Ctrl-C to copy the content.
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_C, true, false, false, false));
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 str;
3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ui::Clipboard::GetForCurrentThread()->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE,
3924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                                 &str);
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure the text is copied successfully.
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("a"), str);
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Press Ctrl-V to paste the content back, it should start finding even if the
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // content is not changed.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::Source<WebContents> notification_source(
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents());
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::WindowedNotificationObserverWithDetails
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      <FindNotificationDetails> observer(
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          chrome::NOTIFICATION_FIND_RESULT_AVAILABLE, notification_source);
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(), ui::VKEY_V, true, false, false, false));
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NO_FATAL_FAILURE(observer.Wait());
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FindNotificationDetails details;
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(observer.GetDetailsFor(notification_source.map_key(), &details));
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(details.number_of_matches() > 0);
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(OS_WIN)
4151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(phajdan.jr): Disabling due to possible timing issues on XP
4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// interactive_ui_tests.
4171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// http://crbug.com/311363
4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FindInPageTest, DISABLED_CtrlEnter) {
4194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ui_test_utils::NavigateToURL(browser(),
4204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                               GURL("data:text/html,This is some text with a "
4214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                    "<a href=\"about:blank\">link</a>."));
4224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  browser()->GetFindBarController()->Show();
4244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Search for "link".
4264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_L, false, false, false, false));
4284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_I, false, false, false, false));
4304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_N, false, false, false, false));
4324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_K, false, false, false, false));
4344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("link"), GetFindBarText());
4354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ui_test_utils::UrlLoadObserver observer(
4374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      GURL("about:blank"), content::NotificationService::AllSources());
4384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Send Ctrl-Enter, should cause navigation to about:blank.
4404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
4414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      browser(), ui::VKEY_RETURN, true, false, false, false));
4424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
4434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  observer.Wait();
4444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
4454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif
446