#include "build/build_config.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/fullscreen/fullscreen_controller_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/url_constants.h"
#if defined(OS_MACOSX)
#include "base/mac/mac_util.h"
#endif
using content::WebContents;
namespace {
const FilePath::CharType* kSimpleFile = FILE_PATH_LITERAL("simple.html");
}
class FullscreenControllerInteractiveTest
: public FullscreenControllerTest {
protected:
void ToggleTabFullscreen(bool enter_fullscreen);
void ToggleTabFullscreenNoRetries(bool enter_fullscreen);
void ToggleBrowserFullscreen(bool enter_fullscreen);
bool IsMouseLocked() {
EXPECT_TRUE(browser()->IsMouseLocked() ==
chrome::GetActiveWebContents(browser())->
GetRenderViewHost()->GetView()->IsMouseLocked());
return browser()->IsMouseLocked();
}
void TestFullscreenMouseLockContentSettings();
private:
void ToggleTabFullscreen_Internal(bool enter_fullscreen,
bool retry_until_success);
};
void FullscreenControllerInteractiveTest::ToggleTabFullscreen(
bool enter_fullscreen) {
ToggleTabFullscreen_Internal(enter_fullscreen, true);
}
void FullscreenControllerInteractiveTest::ToggleTabFullscreenNoRetries(
bool enter_fullscreen) {
ToggleTabFullscreen_Internal(enter_fullscreen, false);
}
void FullscreenControllerInteractiveTest::ToggleBrowserFullscreen(
bool enter_fullscreen) {
ASSERT_EQ(browser()->window()->IsFullscreen(), !enter_fullscreen);
FullscreenNotificationObserver fullscreen_observer;
chrome::ToggleFullscreenMode(browser());
fullscreen_observer.Wait();
ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
ASSERT_EQ(IsFullscreenForBrowser(), enter_fullscreen);
}
void
FullscreenControllerInteractiveTest::TestFullscreenMouseLockContentSettings() {
GURL url = test_server()->GetURL("simple.html");
AddTabAtIndexAndWait(0, url, content::PAGE_TRANSITION_TYPED);
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(false));
HostContentSettingsMap* settings_map =
browser()->profile()->GetHostContentSettingsMap();
ContentSettingsPattern pattern =
ContentSettingsPattern::FromURL(url);
settings_map->SetContentSetting(
pattern, ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_FULLSCREEN, std::string(),
CONTENT_SETTING_ALLOW);
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
RequestToLockMouse(true, false);
ASSERT_TRUE(IsMouseLockPermissionRequested());
LostMouseLock();
settings_map->SetContentSetting(
pattern, ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_MOUSELOCK, std::string(),
CONTENT_SETTING_ALLOW);
ASSERT_FALSE(IsMouseLockPermissionRequested());
RequestToLockMouse(true, false);
ASSERT_FALSE(IsMouseLockPermissionRequested());
LostMouseLock();
settings_map->SetContentSetting(
pattern, ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_MOUSELOCK, std::string(),
CONTENT_SETTING_BLOCK);
ASSERT_FALSE(IsMouseLockPermissionRequested());
RequestToLockMouse(true, false);
ASSERT_FALSE(IsMouseLockPermissionRequested());
}
void FullscreenControllerInteractiveTest::ToggleTabFullscreen_Internal(
bool enter_fullscreen, bool retry_until_success) {
WebContents* tab = chrome::GetActiveWebContents(browser());
if (IsFullscreenForBrowser()) {
browser()->ToggleFullscreenModeForTab(tab, enter_fullscreen);
} else {
ASSERT_NE(browser()->window()->IsFullscreen(), enter_fullscreen);
do {
FullscreenNotificationObserver fullscreen_observer;
browser()->ToggleFullscreenModeForTab(tab, enter_fullscreen);
fullscreen_observer.Wait();
} while (retry_until_success &&
browser()->window()->IsFullscreen() != enter_fullscreen);
ASSERT_EQ(browser()->window()->IsFullscreen(), enter_fullscreen);
}
}
#if defined(OS_MACOSX)
#define MAYBE_TestNewTabExitsFullscreen DISABLED_TestNewTabExitsFullscreen
#elif defined(OS_LINUX)
#define MAYBE_TestNewTabExitsFullscreen DISABLED_TestNewTabExitsFullscreen
#else
#define MAYBE_TestNewTabExitsFullscreen TestNewTabExitsFullscreen
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestNewTabExitsFullscreen) {
ASSERT_TRUE(test_server()->Start());
AddTabAtIndexAndWait(
0, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
{
FullscreenNotificationObserver fullscreen_observer;
AddTabAtIndexAndWait(
1, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
fullscreen_observer.Wait();
ASSERT_FALSE(browser()->window()->IsFullscreen());
}
}
#if defined(OS_MACOSX)
#define MAYBE_TestTabExitsItselfFromFullscreen \
FAILS_TestTabExitsItselfFromFullscreen
#elif defined(OS_LINUX)
#define MAYBE_TestTabExitsItselfFromFullscreen \
DISABLED_TestTabExitsItselfFromFullscreen
#else
#define MAYBE_TestTabExitsItselfFromFullscreen TestTabExitsItselfFromFullscreen
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestTabExitsItselfFromFullscreen) {
ASSERT_TRUE(test_server()->Start());
AddTabAtIndexAndWait(
0, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(false));
}
#if defined(OS_LINUX)
#define MAYBE_TestFullscreenBubbleMouseLockState \
DISABLED_TestFullscreenBubbleMouseLockState
#else
#define MAYBE_TestFullscreenBubbleMouseLockState \
TestFullscreenBubbleMouseLockState
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestFullscreenBubbleMouseLockState) {
ASSERT_TRUE(test_server()->Start());
AddTabAtIndexAndWait(0, GURL(chrome::kAboutBlankURL),
content::PAGE_TRANSITION_TYPED);
AddTabAtIndexAndWait(1, GURL(chrome::kAboutBlankURL),
content::PAGE_TRANSITION_TYPED);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
RequestToLockMouse(true, false);
ASSERT_TRUE(IsMouseLockPermissionRequested());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
}
#if defined(OS_MACOSX)
#define MAYBE_FullscreenMouseLockContentSettings \
FLAKY_FullscreenMouseLockContentSettings
#elif defined(OS_LINUX)
#define MAYBE_FullscreenMouseLockContentSettings \
DISABLED_FullscreenMouseLockContentSettings
#else
#define MAYBE_FullscreenMouseLockContentSettings \
FullscreenMouseLockContentSettings
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_FullscreenMouseLockContentSettings) {
TestFullscreenMouseLockContentSettings();
}
#if defined(OS_MACOSX) || defined(OS_LINUX)
#define MAYBE_BrowserFullscreenMouseLockContentSettings \
DISABLED_BrowserFullscreenMouseLockContentSettings
#else
#define MAYBE_BrowserFullscreenMouseLockContentSettings \
BrowserFullscreenMouseLockContentSettings
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_BrowserFullscreenMouseLockContentSettings) {
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
TestFullscreenMouseLockContentSettings();
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(false));
}
#if defined(OS_MACOSX)
#define MAYBE_BrowserFullscreenExit DISABLED_BrowserFullscreenExit
#else
#define MAYBE_BrowserFullscreenExit BrowserFullscreenExit
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_BrowserFullscreenExit) {
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
AddTabAtIndexAndWait(0, GURL(chrome::kAboutBlankURL),
content::PAGE_TRANSITION_TYPED);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(false));
ASSERT_FALSE(browser()->window()->IsFullscreen());
}
#if defined(OS_MACOSX)
#define MAYBE_BrowserFullscreenAfterTabFSExit \
DISABLED_BrowserFullscreenAfterTabFSExit
#elif defined(OS_LINUX)
#define MAYBE_BrowserFullscreenAfterTabFSExit \
DISABLED_BrowserFullscreenAfterTabFSExit
#else
#define MAYBE_BrowserFullscreenAfterTabFSExit BrowserFullscreenAfterTabFSExit
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_BrowserFullscreenAfterTabFSExit) {
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
AddTabAtIndexAndWait(0, GURL(chrome::kAboutBlankURL),
content::PAGE_TRANSITION_TYPED);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(false));
ASSERT_TRUE(IsFullscreenForBrowser());
}
#if defined(OS_LINUX)
#define MAYBE_FullscreenFileURL DISABLED_FullscreenFileURL
#else
#define MAYBE_FullscreenFileURL FullscreenFileURL
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_FullscreenFileURL) {
ui_test_utils::NavigateToURL(browser(),
ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
FilePath(kSimpleFile)));
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(false));
}
#if defined(OS_MACOSX)
#define MAYBE_TestTabExitsFullscreenOnNavigation \
DISABLED_TestTabExitsFullscreenOnNavigation
#else
#define MAYBE_TestTabExitsFullscreenOnNavigation \
TestTabExitsFullscreenOnNavigation
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestTabExitsFullscreenOnNavigation) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab"));
ASSERT_FALSE(browser()->window()->IsFullscreen());
}
#if defined(OS_MACOSX)
#define MAYBE_TestTabExitsFullscreenOnGoBack \
DISABLED_TestTabExitsFullscreenOnGoBack
#elif defined(OS_LINUX)
#define MAYBE_TestTabExitsFullscreenOnGoBack \
DISABLED_TestTabExitsFullscreenOnGoBack
#else
#define MAYBE_TestTabExitsFullscreenOnGoBack TestTabExitsFullscreenOnGoBack
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestTabExitsFullscreenOnGoBack) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab"));
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
GoBack();
ASSERT_FALSE(browser()->window()->IsFullscreen());
}
#if defined(OS_LINUX)
#define MAYBE_TestTabDoesntExitFullscreenOnSubFrameNavigation \
DISABLED_TestTabDoesntExitFullscreenOnSubFrameNavigation
#else
#define MAYBE_TestTabDoesntExitFullscreenOnSubFrameNavigation \
TestTabDoesntExitFullscreenOnSubFrameNavigation
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestTabDoesntExitFullscreenOnSubFrameNavigation) {
ASSERT_TRUE(test_server()->Start());
GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory),
FilePath(kSimpleFile)));
GURL url_with_fragment(url.spec() + "#fragment");
ui_test_utils::NavigateToURL(browser(), url);
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ui_test_utils::NavigateToURL(browser(), url_with_fragment);
ASSERT_TRUE(IsFullscreenForTabOrPending());
}
#if defined(OS_MACOSX)
#define MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks \
DISABLED_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks
#elif defined(OS_LINUX)
#define MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks \
DISABLED_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks
#else
#define MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks \
TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_TestFullscreenFromTabWhenAlreadyInBrowserFullscreenWorks) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab"));
ASSERT_NO_FATAL_FAILURE(ToggleBrowserFullscreen(true));
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
GoBack();
ASSERT_TRUE(IsFullscreenForBrowser());
ASSERT_FALSE(IsFullscreenForTabOrPending());
}
#if defined(OS_MACOSX)
IN_PROC_BROWSER_TEST_F(
FullscreenControllerTest, FAILS_TabEntersPresentationModeFromWindowed) {
ASSERT_TRUE(test_server()->Start());
AddTabAtIndexAndWait(
0, GURL(chrome::kAboutBlankURL), content::PAGE_TRANSITION_TYPED);
WebContents* tab = chrome::GetActiveWebContents(browser());
{
FullscreenNotificationObserver fullscreen_observer;
EXPECT_FALSE(browser()->window()->IsFullscreen());
EXPECT_FALSE(browser()->window()->InPresentationMode());
browser()->ToggleFullscreenModeForTab(tab, true);
fullscreen_observer.Wait();
ASSERT_TRUE(browser()->window()->IsFullscreen());
ASSERT_TRUE(browser()->window()->InPresentationMode());
}
{
FullscreenNotificationObserver fullscreen_observer;
browser()->TogglePresentationMode();
fullscreen_observer.Wait();
ASSERT_FALSE(browser()->window()->IsFullscreen());
ASSERT_FALSE(browser()->window()->InPresentationMode());
}
if (base::mac::IsOSLionOrLater()) {
FullscreenNotificationObserver fullscreen_observer;
chrome::ToggleFullscreenMode(browser());
fullscreen_observer.Wait();
ASSERT_TRUE(browser()->window()->IsFullscreen());
ASSERT_FALSE(browser()->window()->InPresentationMode());
}
}
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest, EscapingMouseLock) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
{
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
}
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
SendEscapeToFullscreenController();
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
{
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
}
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
SendEscapeToFullscreenController();
ASSERT_FALSE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
}
#if defined(OS_LINUX) || defined(OS_MACOSX)
#define MAYBE_EscapingMouseLockAndFullscreen \
DISABLED_EscapingMouseLockAndFullscreen
#else
#define MAYBE_EscapingMouseLockAndFullscreen EscapingMouseLockAndFullscreen
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_EscapingMouseLockAndFullscreen) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
{
FullscreenNotificationObserver fullscreen_observer;
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_B, false, true, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
fullscreen_observer.Wait();
}
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
{
FullscreenNotificationObserver fullscreen_observer;
SendEscapeToFullscreenController();
fullscreen_observer.Wait();
}
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
{
FullscreenNotificationObserver fullscreen_observer;
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_B, false, true, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
fullscreen_observer.Wait();
}
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
{
FullscreenNotificationObserver fullscreen_observer;
SendEscapeToFullscreenController();
fullscreen_observer.Wait();
}
ASSERT_FALSE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
}
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MouseLockThenFullscreen) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_D, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreen(true));
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_FALSE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenBubbleDisplayingButtons());
}
#if defined(OS_LINUX) || defined(OS_MACOSX)
#define MAYBE_MouseLockAndFullscreen DISABLED_MouseLockAndFullscreen
#else
#define MAYBE_MouseLockAndFullscreen MouseLockAndFullscreen
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_MouseLockAndFullscreen) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
{
FullscreenNotificationObserver fullscreen_observer;
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_B, false, true, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
fullscreen_observer.Wait();
}
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenForTabOrPending());
{
FullscreenNotificationObserver fullscreen_observer;
DenyCurrentFullscreenOrMouseLockRequest();
fullscreen_observer.Wait();
}
ASSERT_FALSE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
{
FullscreenNotificationObserver fullscreen_observer;
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_B, false, true, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
fullscreen_observer.Wait();
}
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenForTabOrPending());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenForTabOrPending());
ASSERT_FALSE(IsFullscreenPermissionRequested());
}
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MouseLockSilentAfterTargetUnlock) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_U, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_FALSE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_U, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_D, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_ESCAPE, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_FALSE(IsMouseLocked());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsMouseLocked());
}
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
TestTabExitsMouseLockOnNavigation) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab"));
ASSERT_FALSE(IsMouseLocked());
}
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
TestTabExitsMouseLockOnGoBack) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
GoBack();
ASSERT_FALSE(IsMouseLocked());
}
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
TestTabDoesntExitMouseLockOnSubFrameNavigation) {
ASSERT_TRUE(test_server()->Start());
GURL url(test_server()->GetURL(kFullscreenMouseLockHTML));
GURL url_with_fragment(url.spec() + "#fragment");
ui_test_utils::NavigateToURL(browser(), url);
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
ASSERT_TRUE(IsMouseLockPermissionRequested());
ASSERT_FALSE(IsMouseLocked());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ui_test_utils::NavigateToURL(browser(), url_with_fragment);
ASSERT_TRUE(IsMouseLocked());
}
#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
#define ReloadExitsMouseLockAndFullscreen DISABLED_ReloadExitsMouseLockAndFullscreen
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
ReloadExitsMouseLockAndFullscreen) {
ASSERT_TRUE(test_server()->Start());
ui_test_utils::NavigateToURL(browser(),
test_server()->GetURL(kFullscreenMouseLockHTML));
ASSERT_FALSE(IsMouseLockPermissionRequested());
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsMouseLockPermissionRequested());
{
MouseLockNotificationObserver mouselock_observer;
Reload();
mouselock_observer.Wait();
ASSERT_FALSE(IsMouseLockPermissionRequested());
}
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_1, false, false, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
ASSERT_TRUE(IsMouseLockPermissionRequested());
AcceptCurrentFullscreenOrMouseLockRequest();
ASSERT_TRUE(IsMouseLocked());
ASSERT_TRUE(IsFullscreenBubbleDisplayed());
{
MouseLockNotificationObserver mouselock_observer;
Reload();
mouselock_observer.Wait();
ASSERT_FALSE(IsMouseLocked());
}
{
FullscreenNotificationObserver fullscreen_observer;
ASSERT_TRUE(ui_test_utils::SendKeyPressAndWait(
browser(), ui::VKEY_B, false, true, false, false,
chrome::NOTIFICATION_MOUSE_LOCK_CHANGED,
content::NotificationService::AllSources()));
fullscreen_observer.Wait();
}
ASSERT_TRUE(IsFullscreenForTabOrPending());
{
FullscreenNotificationObserver fullscreen_observer;
Reload();
fullscreen_observer.Wait();
ASSERT_FALSE(IsMouseLocked());
ASSERT_FALSE(IsFullscreenForTabOrPending());
}
}
#if defined(OS_LINUX)
#define MAYBE_ToggleFullscreenModeForTab FLAKY_ToggleFullscreenModeForTab
#else
#define MAYBE_ToggleFullscreenModeForTab ToggleFullscreenModeForTab
#endif
IN_PROC_BROWSER_TEST_F(FullscreenControllerInteractiveTest,
MAYBE_ToggleFullscreenModeForTab) {
GURL url = test_server()->GetURL("simple.html");
AddTabAtIndexAndWait(0, url, content::PAGE_TRANSITION_TYPED);
ASSERT_FALSE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreenNoRetries(true));
ASSERT_TRUE(IsFullscreenPermissionRequested());
ASSERT_NO_FATAL_FAILURE(ToggleTabFullscreenNoRetries(false));
}