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