summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui')
-rw-r--r--chrome/browser/ui/views/keyboard_access_browsertest.cc81
1 files changed, 73 insertions, 8 deletions
diff --git a/chrome/browser/ui/views/keyboard_access_browsertest.cc b/chrome/browser/ui/views/keyboard_access_browsertest.cc
index a2e7658..04684bd 100644
--- a/chrome/browser/ui/views/keyboard_access_browsertest.cc
+++ b/chrome/browser/ui/views/keyboard_access_browsertest.cc
@@ -9,6 +9,7 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop.h"
#include "base/string_util.h"
+#include "base/time.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
@@ -80,24 +81,47 @@ class ViewFocusChangeWaiter : public views::FocusChangeListener {
class SendKeysMenuListener : public views::MenuListener {
public:
- SendKeysMenuListener(ToolbarView* toolbar_view, Browser* browser)
- : toolbar_view_(toolbar_view), browser_(browser) {
+ SendKeysMenuListener(ToolbarView* toolbar_view,
+ Browser* browser,
+ bool test_dismiss_menu)
+ : toolbar_view_(toolbar_view), browser_(browser), menu_open_count_(0),
+ test_dismiss_menu_(test_dismiss_menu) {
toolbar_view_->AddMenuListener(this);
}
- virtual ~SendKeysMenuListener() {}
+ virtual ~SendKeysMenuListener() {
+ if (test_dismiss_menu_)
+ toolbar_view_->RemoveMenuListener(this);
+ }
+
+ int menu_open_count() const {
+ return menu_open_count_;
+ }
private:
// Overridden from views::MenuListener:
virtual void OnMenuOpened() OVERRIDE {
- toolbar_view_->RemoveMenuListener(this);
- // Press DOWN to select the first item, then RETURN to select it.
- SendKeyPress(browser_, ui::VKEY_DOWN);
- SendKeyPress(browser_, ui::VKEY_RETURN);
+ menu_open_count_++;
+ if (!test_dismiss_menu_) {
+ toolbar_view_->RemoveMenuListener(this);
+ // Press DOWN to select the first item, then RETURN to select it.
+ SendKeyPress(browser_, ui::VKEY_DOWN);
+ SendKeyPress(browser_, ui::VKEY_RETURN);
+ } else {
+ SendKeyPress(browser_, ui::VKEY_ESCAPE);
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, MessageLoop::QuitClosure(),
+ base::TimeDelta::FromMilliseconds(200));
+ }
}
ToolbarView* toolbar_view_;
Browser* browser_;
+ // Keeps track of the number of times the menu was opened.
+ int menu_open_count_;
+ // If this is set then on receiving a notification that the menu was opened
+ // we dismiss it by sending the ESC key.
+ bool test_dismiss_menu_;
DISALLOW_COPY_AND_ASSIGN(SendKeysMenuListener);
};
@@ -143,6 +167,13 @@ class KeyboardAccessTest : public InProcessBrowserTest {
void TestSystemMenuWithKeyboard();
#endif
+#if defined(USE_AURA)
+ // Uses the keyboard to select the wrench menu i.e. with the F10 key.
+ // It verifies that the menu when dismissed by sending the ESC key it does
+ // not display twice.
+ void TestMenuKeyboardAccessAndDismiss();
+#endif
+
DISALLOW_COPY_AND_ASSIGN(KeyboardAccessTest);
};
@@ -169,7 +200,7 @@ void KeyboardAccessTest::TestMenuKeyboardAccess(bool alternate_key_sequence,
BrowserView* browser_view = reinterpret_cast<BrowserView*>(
browser()->window());
ToolbarView* toolbar_view = browser_view->GetToolbarView();
- SendKeysMenuListener menu_listener(toolbar_view, browser());
+ SendKeysMenuListener menu_listener(toolbar_view, browser(), false);
if (focus_omnibox)
browser()->window()->GetLocationBar()->FocusLocation(false);
@@ -269,6 +300,34 @@ void KeyboardAccessTest::TestSystemMenuWithKeyboard() {
}
#endif
+#if defined(USE_AURA)
+void KeyboardAccessTest::TestMenuKeyboardAccessAndDismiss() {
+ ui_test_utils::NavigateToURL(browser(), GURL("about:"));
+
+ ASSERT_EQ(0, browser()->tab_strip_model()->active_index());
+
+ ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser()));
+
+ int original_view_id = GetFocusedViewID();
+
+ BrowserView* browser_view = reinterpret_cast<BrowserView*>(
+ browser()->window());
+ ToolbarView* toolbar_view = browser_view->GetToolbarView();
+ SendKeysMenuListener menu_listener(toolbar_view, browser(), true);
+
+ browser()->window()->GetLocationBar()->FocusLocation(false);
+
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_F10, false, false, false, false));
+
+ WaitForFocusedViewIDToChange(original_view_id);
+
+ SendKeyPress(browser(), ui::VKEY_DOWN);
+ content::RunMessageLoop();
+ ASSERT_EQ(1, menu_listener.menu_open_count());
+}
+#endif
+
// http://crbug.com/62310.
#if defined(OS_CHROMEOS)
#define MAYBE_TestMenuKeyboardAccess DISABLED_TestMenuKeyboardAccess
@@ -313,6 +372,12 @@ IN_PROC_BROWSER_TEST_F(KeyboardAccessTest, TestSystemMenuWithKeyboard) {
}
#endif
+#if defined(USE_AURA)
+IN_PROC_BROWSER_TEST_F(KeyboardAccessTest, TestMenuKeyboardOpenDismiss) {
+ TestMenuKeyboardAccessAndDismiss();
+}
+#endif
+
// Test that JavaScript cannot intercept reserved keyboard accelerators like
// ctrl-t to open a new tab or ctrl-f4 to close a tab.
// TODO(isherman): This test times out on ChromeOS. We should merge it with