1c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// Use of this source code is governed by a BSD-style license that can be 3c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org// found in the LICENSE file. 4c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 5c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/browser/ui/find_bar/find_bar_controller.h" 6c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 7c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "base/files/file_path.h" 8c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/browser/ui/browser.h" 9c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/browser/ui/browser_commands.h" 10c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/browser/ui/browser_window.h" 11c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/browser/ui/find_bar/find_bar_host_unittest_util.h" 12c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/test/base/in_process_browser_test.h" 13c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "chrome/test/base/ui_test_utils.h" 14c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "ui/base/accelerators/accelerator.h" 15c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "ui/views/focus/focus_manager.h" 16c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "ui/views/widget/widget.h" 17c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org#include "url/gurl.h" 187825966d9566c8ced01471f1e6e6bf1e715f6572rouslan@chromium.org 19c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgnamespace { 20c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 21c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgconst char kSimple[] = "simple.html"; 22c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 23c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgGURL GetURL(const std::string& filename) { 24c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org return ui_test_utils::GetTestUrl(base::FilePath().AppendASCII("find_in_page"), 25c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org base::FilePath().AppendASCII(filename)); 26c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org} 27c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 28c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.orgclass FindBarControllerTest : public InProcessBrowserTest { 29c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org public: 30c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org FindBarControllerTest() { 31c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org chrome::DisableFindBarAnimationsDuringTesting(true); 32c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org } 33c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org}; 34f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org 35f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org// Make sure Find box grabs the Esc accelerator and restores it again. 36f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.orgIN_PROC_BROWSER_TEST_F(FindBarControllerTest, AcceleratorRestoring) { 37c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // First we navigate to any page. 38c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org ui_test_utils::NavigateToURL(browser(), GetURL(kSimple)); 39c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 40c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org gfx::NativeWindow window = browser()->window()->GetNativeWindow(); 41c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); 42c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org views::FocusManager* focus_manager = widget->GetFocusManager(); 43c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 44c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // See where Escape is registered. 45c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org ui::Accelerator escape(ui::VKEY_ESCAPE, ui::EF_NONE); 46c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org ui::AcceleratorTarget* old_target = 47f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org focus_manager->GetCurrentTargetForAccelerator(escape); 48f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org EXPECT_TRUE(old_target != NULL); 49f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org 50c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org chrome::ShowFindBar(browser()); 51c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 52c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // Our Find bar should be the new target. 53c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org ui::AcceleratorTarget* new_target = 54c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org focus_manager->GetCurrentTargetForAccelerator(escape); 55f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org 56f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org EXPECT_TRUE(new_target != NULL); 57c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org EXPECT_NE(new_target, old_target); 58c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 59c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // Close the Find box. 60c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org browser()->GetFindBarController()->EndFindSession( 61c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org FindBarController::kKeepSelectionOnPage, 62f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org FindBarController::kKeepResultsInFindBox); 63f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org 64f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org // The accelerator for Escape should be back to what it was before. 65c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org EXPECT_EQ(old_target, 66c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org focus_manager->GetCurrentTargetForAccelerator(escape)); 67c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 68c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // Show find bar again with animation on, and the target should be on 69c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org // find bar. 70f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org chrome::DisableFindBarAnimationsDuringTesting(false); 71f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org chrome::ShowFindBar(browser()); 72f924b7dfea039ad262f25c2d19fb9bd4905b96e8rouslan@chromium.org EXPECT_EQ(new_target, 73c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org focus_manager->GetCurrentTargetForAccelerator(escape)); 74c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org} 75c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org 76c49156d6c80a08cc55ed968e4ab3a616409e72bcrouslan@chromium.org} // namespace 779df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com