OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/macros.h" | 5 #include "base/macros.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
8 #include "chrome/browser/extensions/extension_action_test_util.h" | 8 #include "chrome/browser/extensions/extension_action_test_util.h" |
9 #include "chrome/browser/extensions/extension_browsertest.h" | 9 #include "chrome/browser/extensions/extension_browsertest.h" |
10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 EXPECT_TRUE(action_view->visible()); | 56 EXPECT_TRUE(action_view->visible()); |
57 | 57 |
58 // Click on the toolbar action to activate it. | 58 // Click on the toolbar action to activate it. |
59 gfx::Point action_view_loc = | 59 gfx::Point action_view_loc = |
60 test::GetCenterInScreenCoordinates(action_view); | 60 test::GetCenterInScreenCoordinates(action_view); |
61 ui_controls::SendMouseMove(action_view_loc.x(), action_view_loc.y()); | 61 ui_controls::SendMouseMove(action_view_loc.x(), action_view_loc.y()); |
62 ui_controls::SendMouseEventsNotifyWhenDone( | 62 ui_controls::SendMouseEventsNotifyWhenDone( |
63 button, ui_controls::DOWN | ui_controls::UP, quit_closure); | 63 button, ui_controls::DOWN | ui_controls::UP, quit_closure); |
64 } | 64 } |
65 | 65 |
| 66 void ActivateOverflowedActionWithKeyboard(Browser* browser, |
| 67 const base::Closure& closure) { |
| 68 AppMenuButton* app_menu_button = GetAppButtonFromBrowser(browser); |
| 69 EXPECT_TRUE(app_menu_button->IsMenuShowing()); |
| 70 // We need to dispatch key events to the menu's native window, rather than the |
| 71 // browser's. |
| 72 gfx::NativeWindow native_window = |
| 73 views::MenuController::GetActiveInstance()->owner()->GetNativeWindow(); |
| 74 |
| 75 // Send two key down events followed by the return key. |
| 76 // The two key down events target the toolbar action in the app menu. |
| 77 // TODO(devlin): Shouldn't this be one key down event? |
| 78 ui_controls::SendKeyPress(native_window, |
| 79 ui::VKEY_DOWN, |
| 80 false, false, false, false); |
| 81 ui_controls::SendKeyPress(native_window, |
| 82 ui::VKEY_DOWN, |
| 83 false, false, false, false); |
| 84 ui_controls::SendKeyPressNotifyWhenDone(native_window, |
| 85 ui::VKEY_RETURN, |
| 86 false, false, false, false, closure); |
| 87 } |
| 88 |
66 // Tests the context menu of an overflowed action. | 89 // Tests the context menu of an overflowed action. |
67 void TestWhileContextMenuOpen(bool* did_test_while_menu_open, | 90 void TestWhileContextMenuOpen(bool* did_test_while_menu_open, |
68 Browser* browser, | 91 Browser* browser, |
69 ToolbarActionView* context_menu_action) { | 92 ToolbarActionView* context_menu_action) { |
70 *did_test_while_menu_open = true; | 93 *did_test_while_menu_open = true; |
71 | 94 |
72 views::MenuItemView* menu_root = context_menu_action->menu_for_testing(); | 95 views::MenuItemView* menu_root = context_menu_action->menu_for_testing(); |
73 ASSERT_TRUE(menu_root); | 96 ASSERT_TRUE(menu_root); |
74 ASSERT_TRUE(menu_root->GetSubmenu()); | 97 ASSERT_TRUE(menu_root->GetSubmenu()); |
75 EXPECT_TRUE(menu_root->GetSubmenu()->IsShowing()); | 98 EXPECT_TRUE(menu_root->GetSubmenu()->IsShowing()); |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 | 353 |
331 EXPECT_FALSE(view_controller->is_showing_popup()); | 354 EXPECT_FALSE(view_controller->is_showing_popup()); |
332 EXPECT_EQ(nullptr, toolbar_actions_bar->popup_owner()); | 355 EXPECT_EQ(nullptr, toolbar_actions_bar->popup_owner()); |
333 | 356 |
334 // Releasing the mouse shouldn't result in the popup being shown again. | 357 // Releasing the mouse shouldn't result in the popup being shown again. |
335 EXPECT_TRUE( | 358 EXPECT_TRUE( |
336 ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::UP)); | 359 ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::UP)); |
337 EXPECT_FALSE(view_controller->is_showing_popup()); | 360 EXPECT_FALSE(view_controller->is_showing_popup()); |
338 EXPECT_EQ(nullptr, toolbar_actions_bar->popup_owner()); | 361 EXPECT_EQ(nullptr, toolbar_actions_bar->popup_owner()); |
339 } | 362 } |
| 363 |
| 364 #if defined(USE_OZONE) |
| 365 // ozone bringup - http://crbug.com/401304 |
| 366 #define MAYBE_ActivateOverflowedToolbarActionWithKeyboard \ |
| 367 DISABLED_ActivateOverflowedToolbarActionWithKeyboard |
| 368 #else |
| 369 #define MAYBE_ActivateOverflowedToolbarActionWithKeyboard \ |
| 370 ActivateOverflowedToolbarActionWithKeyboard |
| 371 #endif |
| 372 IN_PROC_BROWSER_TEST_F(ToolbarActionViewInteractiveUITest, |
| 373 MAYBE_ActivateOverflowedToolbarActionWithKeyboard) { |
| 374 views::MenuController::TurnOffMenuSelectionHoldForTest(); |
| 375 // Load an extension with an action. |
| 376 ASSERT_TRUE(LoadExtension( |
| 377 test_data_dir_.AppendASCII("ui").AppendASCII("browser_action_popup"))); |
| 378 base::RunLoop().RunUntilIdle(); // Ensure the extension is fully loaded. |
| 379 |
| 380 // Reduce visible count to 0 so that all actions are overflowed. |
| 381 ToolbarActionsModel::Get(profile())->SetVisibleIconCount(0); |
| 382 |
| 383 // Set up a listener for the extension being triggered. |
| 384 ExtensionTestMessageListener listener("Popup opened", false); |
| 385 |
| 386 // Open the app menu, navigate to the toolbar action, and activate it via the |
| 387 // keyboard. |
| 388 AppMenuButton* app_menu_button = GetAppButtonFromBrowser(browser()); |
| 389 gfx::Point app_button_loc = |
| 390 test::GetCenterInScreenCoordinates(app_menu_button); |
| 391 base::RunLoop loop; |
| 392 ui_controls::SendMouseMove(app_button_loc.x(), app_button_loc.y()); |
| 393 ui_controls::SendMouseEventsNotifyWhenDone( |
| 394 ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, |
| 395 base::Bind(&ActivateOverflowedActionWithKeyboard, |
| 396 browser(), loop.QuitClosure())); |
| 397 loop.Run(); |
| 398 |
| 399 // The app menu should no longer be showing. |
| 400 EXPECT_FALSE(app_menu_button->IsMenuShowing()); |
| 401 // And the extension should have been activated. |
| 402 EXPECT_TRUE(listener.WaitUntilSatisfied()); |
| 403 } |
OLD | NEW |