blob: 20530f2baca71462bd715d5b5e3a617c82bad46b [file] [log] [blame]
zijiehebb317b92017-07-15 00:01:401// Copyright 2017 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
zijiehebb317b92017-07-15 00:01:405#include "base/macros.h"
zijiehebb317b92017-07-15 00:01:406#include "build/build_config.h"
zijiehebb317b92017-07-15 00:01:407#include "chrome/browser/ui/browser.h"
Joe Downinga7235f92018-05-30 22:40:528#include "chrome/browser/ui/fullscreen_keyboard_browsertest_base.h"
zijiehebb317b92017-07-15 00:01:409#include "chrome/test/base/in_process_browser_test.h"
Peter Kasting919ce652020-05-07 10:22:3610#include "content/public/test/browser_test.h"
zijiehebb317b92017-07-15 00:01:4011#include "ui/events/keycodes/keyboard_codes.h"
zijiehebb317b92017-07-15 00:01:4012
13#if defined(OS_MACOSX)
14#include "base/mac/mac_util.h"
15#endif
16
Joe Downinga7235f92018-05-30 22:40:5217using BrowserCommandControllerInteractiveTest =
18 FullscreenKeyboardBrowserTestBase;
Tatiana Gornake8c2d5112018-06-13 13:32:5119#if defined(OS_MACOSX)
20// Flaky http://crbug.com/852285
21#define MAYBE_ShortcutsShouldTakeEffectInWindowMode \
22 DISABLED_ShortcutsShouldTakeEffectInWindowMode
23#else
24#define MAYBE_ShortcutsShouldTakeEffectInWindowMode \
25 ShortcutsShouldTakeEffectInWindowMode
26#endif
zijiehebb317b92017-07-15 00:01:4027IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
Tatiana Gornake8c2d5112018-06-13 13:32:5128 MAYBE_ShortcutsShouldTakeEffectInWindowMode) {
Hzj_jie24cdbc102017-08-11 20:02:2429 ASSERT_EQ(1, GetTabCount());
zijiehebb317b92017-07-15 00:01:4030 ASSERT_NO_FATAL_FAILURE(SendShortcut(ui::VKEY_T));
Hzj_jie24cdbc102017-08-11 20:02:2431 ASSERT_EQ(2, GetTabCount());
zijiehebb317b92017-07-15 00:01:4032 ASSERT_NO_FATAL_FAILURE(SendShortcut(ui::VKEY_T));
Hzj_jie24cdbc102017-08-11 20:02:2433 ASSERT_EQ(3, GetTabCount());
zijiehebb317b92017-07-15 00:01:4034 ASSERT_NO_FATAL_FAILURE(SendShortcut(ui::VKEY_W));
Hzj_jie24cdbc102017-08-11 20:02:2435 ASSERT_EQ(2, GetTabCount());
zijiehebb317b92017-07-15 00:01:4036 ASSERT_NO_FATAL_FAILURE(SendShortcut(ui::VKEY_W));
Hzj_jie24cdbc102017-08-11 20:02:2437 ASSERT_EQ(1, GetTabCount());
zijiehebb317b92017-07-15 00:01:4038 ASSERT_NO_FATAL_FAILURE(SendFullscreenShortcutAndWait());
Hzj_jie24cdbc102017-08-11 20:02:2439 ASSERT_TRUE(IsInBrowserFullscreen());
40 ASSERT_FALSE(IsActiveTabFullscreen());
zijiehebb317b92017-07-15 00:01:4041}
42
43IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
44 UnpreservedShortcutsShouldBePreventable) {
Hzj_jie24cdbc102017-08-11 20:02:2445 ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
zijiehebb317b92017-07-15 00:01:4046
47 // The browser print function should be blocked by the web page.
48 ASSERT_NO_FATAL_FAILURE(SendShortcut(ui::VKEY_P));
49 // The system print function should be blocked by the web page.
50 ASSERT_NO_FATAL_FAILURE(SendShiftShortcut(ui::VKEY_P));
51 ASSERT_NO_FATAL_FAILURE(FinishTestAndVerifyResult());
52}
53
54#if defined(OS_MACOSX)
55// TODO(zijiehe): Figure out why this test crashes on Mac OSX. The suspicious
56// command is "SendFullscreenShortcutAndWait()". See, http://crbug.com/738949.
57#define MAYBE_KeyEventsShouldBeConsumedByWebPageInBrowserFullscreen \
58 DISABLED_KeyEventsShouldBeConsumedByWebPageInBrowserFullscreen
59#else
60#define MAYBE_KeyEventsShouldBeConsumedByWebPageInBrowserFullscreen \
61 KeyEventsShouldBeConsumedByWebPageInBrowserFullscreen
62#endif
63IN_PROC_BROWSER_TEST_F(
64 BrowserCommandControllerInteractiveTest,
65 MAYBE_KeyEventsShouldBeConsumedByWebPageInBrowserFullscreen) {
Hzj_jie24cdbc102017-08-11 20:02:2466 ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
zijiehebb317b92017-07-15 00:01:4067
68 ASSERT_NO_FATAL_FAILURE(SendFullscreenShortcutAndWait());
Hzj_jie24cdbc102017-08-11 20:02:2469 ASSERT_FALSE(IsActiveTabFullscreen());
70 ASSERT_TRUE(IsInBrowserFullscreen());
71 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectPrevented());
zijiehebb317b92017-07-15 00:01:4072 // Current page should not exit browser fullscreen mode.
73 ASSERT_NO_FATAL_FAILURE(SendEscape());
74
75 ASSERT_NO_FATAL_FAILURE(FinishTestAndVerifyResult());
Hzj_jie24cdbc102017-08-11 20:02:2476
77 ASSERT_NO_FATAL_FAILURE(SendFullscreenShortcutAndWait());
78 ASSERT_FALSE(IsActiveTabFullscreen());
79 ASSERT_FALSE(IsInBrowserFullscreen());
zijiehebb317b92017-07-15 00:01:4080}
81
Elly Fong-Jonesef8284d2019-11-04 18:50:4482#if defined(OS_MACOSX)
83// https://crbug.com/850594
84#define MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForEsc \
85 DISABLED_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForEsc
86#else
87#define MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForEsc \
88 KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForEsc
89#endif
zijiehebb317b92017-07-15 00:01:4090IN_PROC_BROWSER_TEST_F(
91 BrowserCommandControllerInteractiveTest,
Elly Fong-Jonesef8284d2019-11-04 18:50:4492 MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForEsc) {
Hzj_jie24cdbc102017-08-11 20:02:2493 ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
zijiehebb317b92017-07-15 00:01:4094
95 ASSERT_NO_FATAL_FAILURE(SendJsFullscreenShortcutAndWait());
Hzj_jie24cdbc102017-08-11 20:02:2496 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectPrevented());
zijiehebb317b92017-07-15 00:01:4097 // Current page should exit HTML fullscreen mode.
98 ASSERT_NO_FATAL_FAILURE(SendEscapeAndWaitForExitingFullscreen());
99
100 ASSERT_NO_FATAL_FAILURE(FinishTestAndVerifyResult());
101}
102
Robert Liao31d07982018-03-22 12:50:40103#if defined(OS_MACOSX)
104// Triggers a DCHECK in MacViews: http://crbug.com/823478
105#define MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForF11 \
Aran Gilmand217b5b2019-04-11 17:45:43106 DISABLED_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForF11
Robert Liao31d07982018-03-22 12:50:40107#else
108#define MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForF11 \
Aran Gilmand217b5b2019-04-11 17:45:43109 KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForF11
Robert Liao31d07982018-03-22 12:50:40110#endif
zijiehebb317b92017-07-15 00:01:40111IN_PROC_BROWSER_TEST_F(
112 BrowserCommandControllerInteractiveTest,
Robert Liao31d07982018-03-22 12:50:40113 MAYBE_KeyEventsShouldBeConsumedByWebPageInJsFullscreenExceptForF11) {
Hzj_jie24cdbc102017-08-11 20:02:24114 ASSERT_NO_FATAL_FAILURE(StartFullscreenLockPage());
zijiehebb317b92017-07-15 00:01:40115
116 ASSERT_NO_FATAL_FAILURE(SendJsFullscreenShortcutAndWait());
Hzj_jie24cdbc102017-08-11 20:02:24117 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectPrevented());
Avi Drissman438827be2019-06-06 18:46:11118
zijiehebb317b92017-07-15 00:01:40119 // Current page should exit browser fullscreen mode.
120 ASSERT_NO_FATAL_FAILURE(SendFullscreenShortcutAndWait());
Hzj_jie24cdbc102017-08-11 20:02:24121 ASSERT_FALSE(IsActiveTabFullscreen());
122 ASSERT_FALSE(IsInBrowserFullscreen());
zijiehebb317b92017-07-15 00:01:40123
124 ASSERT_NO_FATAL_FAILURE(FinishTestAndVerifyResult());
125}
Hzj_jie24cdbc102017-08-11 20:02:24126
127#if defined(OS_MACOSX)
128// TODO(zijiehe): Figure out why this test crashes on Mac OSX. The suspicious
129// command is "SendFullscreenShortcutAndWait()". See, http://crbug.com/738949.
130#define MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43131 DISABLED_ShortcutsShouldTakeEffectInBrowserFullscreen
Hzj_jie24cdbc102017-08-11 20:02:24132#else
133#define MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43134 ShortcutsShouldTakeEffectInBrowserFullscreen
Hzj_jie24cdbc102017-08-11 20:02:24135#endif
136IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
137 MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen) {
Hzj_jie24cdbc102017-08-11 20:02:24138 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectNotPrevented(false));
139}
140
141#if !defined(OS_MACOSX)
142// HTML fullscreen is automatically exited after some commands are executed,
143// such as Ctrl + T (new tab). But some commands won't have this effect, such as
144// Ctrl + N (new window).
145// On Mac OSX, AppKit implementation is used for HTML fullscreen mode. Entering
146// and exiting AppKit fullscreen mode triggers an animation. A
147// FullscreenChangeObserver is needed to ensure the animation is finished. But
148// the FullscreenChangeObserver won't finish if the command actually won't cause
149// the page to exit fullscreen mode. So we need to maintain a list of exiting /
150// non-exiting commands, which is not the goal of this test.
Zijie He19852bf52017-08-19 06:56:10151
Zijie He729922fb2017-08-29 23:59:32152#if defined(OS_CHROMEOS)
153// This test is flaky on ChromeOS, see http://crbug.com/754878.
Zijie He19852bf52017-08-19 06:56:10154#define MAYBE_ShortcutsShouldTakeEffectInJsFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43155 DISABLED_ShortcutsShouldTakeEffectInJsFullscreen
Zijie He19852bf52017-08-19 06:56:10156#else
157#define MAYBE_ShortcutsShouldTakeEffectInJsFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43158 ShortcutsShouldTakeEffectInJsFullscreen
Zijie He19852bf52017-08-19 06:56:10159#endif
Hzj_jie24cdbc102017-08-11 20:02:24160IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
Zijie He19852bf52017-08-19 06:56:10161 MAYBE_ShortcutsShouldTakeEffectInJsFullscreen) {
John Abd-El-Malek2305cdc2018-02-14 20:26:28162// This test is flaky. See http://crbug.com/759704.
163// TODO(zijiehe): Find out the root cause.
Zijie He729922fb2017-08-29 23:59:32164#if defined(OS_LINUX)
John Abd-El-Malek2305cdc2018-02-14 20:26:28165 return;
Zijie He729922fb2017-08-29 23:59:32166#endif
Hzj_jie24cdbc102017-08-11 20:02:24167 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectNotPrevented(true));
168}
Zijie He850df0e2017-08-18 23:24:24169
Hzj_jie24cdbc102017-08-11 20:02:24170#endif