Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: chrome/browser/ui/browser_command_controller_interactive_browsertest.cc

Issue 2922773002: Add BrowserCommandController Interactive Test (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/browser_command_controller_interactive_browsertest.cc
diff --git a/chrome/browser/ui/browser_command_controller_interactive_browsertest.cc b/chrome/browser/ui/browser_command_controller_interactive_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0db16364bf7ae0b9cd9f2ac2f8bc07928a16f365
--- /dev/null
+++ b/chrome/browser/ui/browser_command_controller_interactive_browsertest.cc
@@ -0,0 +1,397 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "base/strings/string_util.h"
+#include "build/build_config.h"
+#include "chrome/app/chrome_command_ids.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/interactive_test_utils.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/test/browser_test_utils.h"
+#include "ui/events/keycodes/keyboard_codes.h"
+#include "url/gurl.h"
+
+namespace {
+constexpr char kFullscreenKeyboardLockHTML[] =
msw 2017/06/06 20:32:07 nit: comment on what this is
Hzj_jie 2017/06/28 00:34:43 Done.
+ "/fullscreen_keyboardlock/fullscreen_keyboardlock.html";
+
+class FullscreenNotificationObserver
msw 2017/06/06 20:32:07 Avoid this subclass, just construct a WindowedNoti
Hzj_jie 2017/06/28 00:34:43 Done.
+ : public content::WindowedNotificationObserver {
msw 2017/06/06 20:32:06 nit: include content/public/test/test_utils.h to u
Hzj_jie 2017/06/28 00:34:43 Done.
+ public:
+ FullscreenNotificationObserver() : WindowedNotificationObserver(
+ chrome::NOTIFICATION_FULLSCREEN_CHANGED,
+ content::NotificationService::AllSources()) {}
+ ~FullscreenNotificationObserver() override {
+ Wait();
+ }
+};
+
+} // namespace
+
+using BrowserCommandControllerInteractiveTest = InProcessBrowserTest;
+
+#if defined(OS_MACOSX)
+// On Mac OSX, accelerators cannot receive the events sent from
+// SendKeyPressSync(), so the following tests cannot work.
+// TODO(zijiehe): Make SendKeyPressSync() respect shortcuts on Mac OSX.
msw 2017/06/06 20:32:06 File a bug; cite its number here.
Hzj_jie 2017/06/28 00:34:43 Done.
+#define MAYBE(X) DISABLED_##X
+#elif defined(OS_CHROMEOS)
+// Crash on ChromeOS
+// BrowserTestBase received signal: Terminated. Backtrace:
msw 2017/06/06 20:32:06 Don't include a stack trace here; address this bef
Hzj_jie 2017/06/28 00:34:43 Done.
+// #0 0x000003363eec base::debug::StackTrace::StackTrace()
+// #1 0x0000029b7f62 content::(anonymous namespace)::DumpStackTraceSignalHandler()
+// #2 0x7f0297078cb0 <unknown>
+// #3 0x7f029713284d __poll
+// #4 0x7f029ade5fe4 <unknown>
+// #5 0x7f029ade60ec g_main_context_iteration
+// #6 0x000003386825 base::MessagePumpGlib::Run()
+// #7 0x0000033840eb base::MessageLoop::Run()
+// #8 0x0000033ae25a base::RunLoop::Run()
+// #9 0x0000029c2726 content::MessageLoopRunner::Run()
+// #10 0x0000029c2b9d content::WindowedNotificationObserver::Wait()
+// TODO(zijiehe): Fix crash on ChromeOS.
+#define MAYBE(X) DISABLED_##X
+#elif defined(OS_WIN)
+// Tests depending on keyboard inputs are flaky on Windows, see test case
msw 2017/06/06 20:32:07 Citing that file isn't sufficient (I don't see wha
Hzj_jie 2017/06/28 00:34:43 Done.
+// https://cs.chromium.org/chromium/src/chrome/browser/browser_keyevents_browsertest.cc
+// for detail.
+#define MAYBE(X) DISABLED_##X
msw 2017/06/06 20:32:06 Sorry I don't have any great ideas for making thes
Hzj_jie 2017/06/28 00:34:43 Done.
+#else
+#define MAYBE(X) X
+#endif
+
+IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
+ MAYBE(InF11Fullscreen)) {
msw 2017/06/06 20:32:06 nit: use a better name here, what is this test che
Hzj_jie 2017/06/28 00:34:43 Done.
+ ASSERT_TRUE(embedded_test_server()->Start());
+ {
+ FullscreenNotificationObserver fullscreen_observer;
+ // Enter fullscreen.
+#if defined(OS_MACOSX)
msw 2017/06/06 20:32:06 nit: add a local helper: void PressFullscreenShort
Hzj_jie 2017/06/28 00:34:43 Done.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_F, true, false, false, true));
+#else
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_F11, false, false, false, false));
+#endif
+ }
+ ui_test_utils::NavigateToURL(browser(),
+ embedded_test_server()->GetURL(kFullscreenKeyboardLockHTML));
+#if defined(OS_MACOSX)
msw 2017/06/06 20:32:07 nit: add a local helper: bool PressKeySync(ui::Key
Hzj_jie 2017/06/28 00:34:43 Done.
+ const bool control_modifier = false;
+ const bool command_modifier = true;
+#else
+ const bool control_modifier = true;
+ const bool command_modifier = false;
+#endif
+ // Close tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, false, false, command_modifier));
+ // Close window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, true, false, command_modifier));
+ // New tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, false, false, command_modifier));
+ // New window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, false, false, command_modifier));
+ // New incognito window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, true, false, command_modifier));
+ // Restore tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, true, false, command_modifier));
+ // Next tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, false, false, command_modifier));
+ // Previous tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, true, false, command_modifier));
+ // Esc.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_ESCAPE, false, false, false, false));
+ // Magic key X to stop the test.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_X, false, false, false, false));
+
+ std::string result;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
+ "report()",
+ &result));
+#if defined(OS_MACOSX)
+ base::ReplaceSubstringsAfterOffset(&result, 0, "MetaLeft", "ControlLeft");
+#endif
+ base::TrimWhitespaceASCII(result, base::TRIM_ALL, &result);
+ ASSERT_EQ(result,
+ "keydown ControlLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown Escape\n"
+ "keyup Escape\n"
+ "keydown KeyX\n"
+ "keyup KeyX");
+}
+
+IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
+ MAYBE(ExitHTMLFullscreenWithEsc)) {
msw 2017/06/06 20:32:06 nit: try to use a consistent naming pattern for th
Hzj_jie 2017/06/28 00:34:43 Done.
+ ASSERT_TRUE(embedded_test_server()->Start());
+ ui_test_utils::NavigateToURL(browser(),
+ embedded_test_server()->GetURL(kFullscreenKeyboardLockHTML));
+ {
+ FullscreenNotificationObserver fullscreen_observer;
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_S, false, false, false, false));
msw 2017/06/06 20:32:07 q: Is 's' another magic key to make the page trigg
Hzj_jie 2017/06/28 00:34:43 Done.
+ }
+#if defined(OS_MACOSX)
+ const bool control_modifier = false;
+ const bool command_modifier = true;
+#else
+ const bool control_modifier = true;
+ const bool command_modifier = false;
+#endif
+ // Close tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, false, false, command_modifier));
+ // Close window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, true, false, command_modifier));
+ // New tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, false, false, command_modifier));
+ // New window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, false, false, command_modifier));
+ // New incognito window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, true, false, command_modifier));
+ // Restore tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, true, false, command_modifier));
+ // Next tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, false, false, command_modifier));
+ // Previous tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, true, false, command_modifier));
+ {
+ FullscreenNotificationObserver fullscreen_observer;
+ // Esc.
msw 2017/06/06 20:32:06 nit: "// Esc should exit fullscreen, when ..." (ex
Hzj_jie 2017/06/28 00:34:43 Done.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_ESCAPE, false, false, false, command_modifier));
+ }
+ // Magic key X to stop the test.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_X, false, false, false, false));
+
+ std::string result;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
+ "report()",
+ &result));
+#if defined(OS_MACOSX)
+ base::ReplaceSubstringsAfterOffset(&result, 0, "MetaLeft", "ControlLeft");
+#endif
+ base::TrimWhitespaceASCII(result, base::TRIM_ALL, &result);
+ ASSERT_EQ(result,
+ "keydown KeyS\n"
+ "keyup KeyS\n"
+ "keydown ControlLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown KeyX\n"
+ "keyup KeyX");
+}
+
+IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
+ MAYBE(ExitHTMLFullscreenWithF11)) {
+ ASSERT_TRUE(embedded_test_server()->Start());
+ ui_test_utils::NavigateToURL(browser(),
+ embedded_test_server()->GetURL(kFullscreenKeyboardLockHTML));
+ {
+ FullscreenNotificationObserver fullscreen_observer;
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_S, false, false, false, false));
+ }
+#if defined(OS_MACOSX)
+ const bool control_modifier = false;
+ const bool command_modifier = true;
+#else
+ const bool control_modifier = true;
+ const bool command_modifier = false;
+#endif
+ // Close tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, false, false, command_modifier));
+ // Close window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_W, control_modifier, true, false, command_modifier));
+ // New tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, false, false, command_modifier));
+ // New window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, false, false, command_modifier));
+ // New incognito window.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_N, control_modifier, true, false, command_modifier));
+ // Restore tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_T, control_modifier, true, false, command_modifier));
+ // Next tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, false, false, command_modifier));
+ // Previous tab.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_TAB, control_modifier, true, false, command_modifier));
+ {
+ FullscreenNotificationObserver fullscreen_observer;
+ // Exit fullscreen.
+#if defined(OS_MACOSX)
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_F, true, false, false, true));
+#else
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(
+ browser(), ui::VKEY_F11, false, false, false, false));
+#endif
+ }
+ // Magic key X to stop the test.
+ ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(),
+ ui::VKEY_X, false, false, false, false));
+
+ std::string result;
+ ASSERT_TRUE(content::ExecuteScriptAndExtractString(
+ browser()->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(),
+ "report()",
+ &result));
+#if defined(OS_MACOSX)
+ base::ReplaceSubstringsAfterOffset(&result, 0, "MetaLeft", "ControlLeft");
+#endif
+ base::TrimWhitespaceASCII(result, base::TRIM_ALL, &result);
+ ASSERT_EQ(result,
+ "keydown KeyS\n"
+ "keyup KeyS\n"
+ "keydown ControlLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyW\n"
+ "keyup KeyW\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyN\n"
+ "keyup KeyN\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown KeyT\n"
+ "keyup KeyT\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ControlLeft\n"
+ "keydown ControlLeft\n"
+ "keydown ShiftLeft\n"
+ "keydown Tab\n"
+ "keyup Tab\n"
+ "keyup ShiftLeft\n"
+ "keyup ControlLeft\n"
+ "keydown KeyX\n"
+ "keyup KeyX");
+}
« no previous file with comments | « no previous file | chrome/test/BUILD.gn » ('j') | chrome/test/data/fullscreen_keyboardlock/fullscreen_keyboardlock.html » ('J')

Powered by Google App Engine
This is Rietveld 408576698