blob: eae6f846909f960ab7b2adf991b5cafdba2ba879 [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2017 The Chromium Authors
zijiehebb317b92017-07-15 00:01:402// 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 "build/build_config.h"
Yuta Hijikata40b891d2020-11-27 09:05:016#include "build/chromeos_buildflags.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
Xiaohan Wange9439fd2022-01-18 21:00:3113#if BUILDFLAG(IS_MAC)
zijiehebb317b92017-07-15 00:01:4014#include "base/mac/mac_util.h"
15#endif
16
Joe Downinga7235f92018-05-30 22:40:5217using BrowserCommandControllerInteractiveTest =
18 FullscreenKeyboardBrowserTestBase;
Xiaohan Wange9439fd2022-01-18 21:00:3119#if BUILDFLAG(IS_MAC)
Tatiana Gornake8c2d5112018-06-13 13:32:5120// 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
Xiaohan Wange9439fd2022-01-18 21:00:3154#if BUILDFLAG(IS_MAC)
zijiehebb317b92017-07-15 00:01:4055// 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
Xiaohan Wange9439fd2022-01-18 21:00:3182#if BUILDFLAG(IS_MAC)
Elly Fong-Jonesef8284d2019-11-04 18:50:4483// 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
Xiaohan Wange9439fd2022-01-18 21:00:31103#if BUILDFLAG(IS_MAC)
Robert Liao31d07982018-03-22 12:50:40104// 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
Rune Lillesveend8aa35d2022-01-28 11:54:21127#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
Hzj_jie24cdbc102017-08-11 20:02:24128// TODO(zijiehe): Figure out why this test crashes on Mac OSX. The suspicious
129// command is "SendFullscreenShortcutAndWait()". See, http://crbug.com/738949.
Rune Lillesveend8aa35d2022-01-28 11:54:21130// Flaky on multiple Linxu bots: https://crbug.com/1120315
Hzj_jie24cdbc102017-08-11 20:02:24131#define MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43132 DISABLED_ShortcutsShouldTakeEffectInBrowserFullscreen
Hzj_jie24cdbc102017-08-11 20:02:24133#else
134#define MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43135 ShortcutsShouldTakeEffectInBrowserFullscreen
Hzj_jie24cdbc102017-08-11 20:02:24136#endif
137IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
138 MAYBE_ShortcutsShouldTakeEffectInBrowserFullscreen) {
Hzj_jie24cdbc102017-08-11 20:02:24139 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectNotPrevented(false));
140}
141
Xiaohan Wange9439fd2022-01-18 21:00:31142#if !BUILDFLAG(IS_MAC)
Hzj_jie24cdbc102017-08-11 20:02:24143// HTML fullscreen is automatically exited after some commands are executed,
144// such as Ctrl + T (new tab). But some commands won't have this effect, such as
145// Ctrl + N (new window).
146// On Mac OSX, AppKit implementation is used for HTML fullscreen mode. Entering
147// and exiting AppKit fullscreen mode triggers an animation. A
148// FullscreenChangeObserver is needed to ensure the animation is finished. But
149// the FullscreenChangeObserver won't finish if the command actually won't cause
150// the page to exit fullscreen mode. So we need to maintain a list of exiting /
151// non-exiting commands, which is not the goal of this test.
Zijie He19852bf52017-08-19 06:56:10152
Yuta Hijikata40b891d2020-11-27 09:05:01153#if BUILDFLAG(IS_CHROMEOS_ASH)
Zijie He729922fb2017-08-29 23:59:32154// This test is flaky on ChromeOS, see http://crbug.com/754878.
Zijie He19852bf52017-08-19 06:56:10155#define MAYBE_ShortcutsShouldTakeEffectInJsFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43156 DISABLED_ShortcutsShouldTakeEffectInJsFullscreen
Zijie He19852bf52017-08-19 06:56:10157#else
158#define MAYBE_ShortcutsShouldTakeEffectInJsFullscreen \
Aran Gilmand217b5b2019-04-11 17:45:43159 ShortcutsShouldTakeEffectInJsFullscreen
Zijie He19852bf52017-08-19 06:56:10160#endif
Hzj_jie24cdbc102017-08-11 20:02:24161IN_PROC_BROWSER_TEST_F(BrowserCommandControllerInteractiveTest,
Zijie He19852bf52017-08-19 06:56:10162 MAYBE_ShortcutsShouldTakeEffectInJsFullscreen) {
John Abd-El-Malek2305cdc2018-02-14 20:26:28163// This test is flaky. See http://crbug.com/759704.
164// TODO(zijiehe): Find out the root cause.
Xiaohan Wange9439fd2022-01-18 21:00:31165#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
John Abd-El-Malek2305cdc2018-02-14 20:26:28166 return;
Zijie He729922fb2017-08-29 23:59:32167#endif
Hzj_jie24cdbc102017-08-11 20:02:24168 ASSERT_NO_FATAL_FAILURE(SendShortcutsAndExpectNotPrevented(true));
169}
Zijie He850df0e2017-08-18 23:24:24170
Hzj_jie24cdbc102017-08-11 20:02:24171#endif