accelerator_commands_browsertest.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 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 5#include "ash/accelerators/accelerator_commands.h" 6 7#include "apps/shell_window.h" 8#include "apps/ui/native_app_window.h" 9#include "ash/shell.h" 10#include "ash/wm/window_state.h" 11#include "base/command_line.h" 12#include "chrome/browser/apps/app_browsertest_util.h" 13#include "chrome/browser/ui/browser.h" 14#include "chrome/browser/ui/browser_commands.h" 15#include "chrome/browser/ui/browser_finder.h" 16#include "chrome/browser/ui/browser_window.h" 17#include "chrome/test/base/in_process_browser_test.h" 18#include "ui/aura/client/aura_constants.h" 19 20namespace { 21 22// Returns true if |window| is in immersive fullscreen. Infer whether |window| 23// is in immersive fullscreen based on whether the shelf is hidden when 24// |window| is fullscreen because DEPS does not allow the test to use 25// BrowserView. (This is not quite right because the shelf is hidden if a window 26// is in both immersive fullscreen and tab fullscreen.) 27bool IsInImmersiveFullscreen(BrowserWindow* browser_window) { 28 ash::wm::WindowState* window_state = ash::wm::GetWindowState( 29 browser_window->GetNativeWindow()); 30 return window_state->IsFullscreen() && 31 !window_state->hide_shelf_when_fullscreen(); 32} 33 34} // namespace 35 36typedef InProcessBrowserTest AcceleratorCommandsBrowserTest; 37 38// Confirm that toggling window miximized works properly 39IN_PROC_BROWSER_TEST_F(AcceleratorCommandsBrowserTest, ToggleMaximized) { 40 ASSERT_TRUE(ash::Shell::HasInstance()) << "No Instance"; 41 ash::wm::WindowState* window_state = ash::wm::GetActiveWindowState(); 42 ASSERT_TRUE(window_state); 43 44 // When not in fullscreen, accelerators::ToggleMaximized toggles Maximized. 45 EXPECT_FALSE(window_state->IsMaximized()); 46 ash::accelerators::ToggleMaximized(); 47 EXPECT_TRUE(window_state->IsMaximized()); 48 ash::accelerators::ToggleMaximized(); 49 EXPECT_FALSE(window_state->IsMaximized()); 50 51 // When in fullscreen accelerators::ToggleMaximized gets out of fullscreen. 52 EXPECT_FALSE(window_state->IsFullscreen()); 53 Browser* browser = chrome::FindBrowserWithWindow(window_state->window()); 54 ASSERT_TRUE(browser); 55 chrome::ToggleFullscreenMode(browser); 56 EXPECT_TRUE(window_state->IsFullscreen()); 57 ash::accelerators::ToggleMaximized(); 58 EXPECT_FALSE(window_state->IsFullscreen()); 59 EXPECT_FALSE(window_state->IsMaximized()); 60 ash::accelerators::ToggleMaximized(); 61 EXPECT_FALSE(window_state->IsFullscreen()); 62 EXPECT_TRUE(window_state->IsMaximized()); 63} 64 65// Confirm that toggling window fullscren works properly. 66IN_PROC_BROWSER_TEST_F(AcceleratorCommandsBrowserTest, ToggleFullscreen) { 67 ASSERT_TRUE(ash::Shell::HasInstance()) << "No Instance"; 68 // 1) ToggleFullscreen() should toggle whether a tabbed browser window is in 69 // immersive fullscreen. 70 ASSERT_TRUE(browser()->is_type_tabbed()); 71 BrowserWindow* browser_window = browser()->window(); 72 ASSERT_TRUE(browser_window->IsActive()); 73 EXPECT_FALSE(browser_window->IsMaximized()); 74 EXPECT_FALSE(browser_window->IsFullscreen()); 75 76 ash::accelerators::ToggleFullscreen(); 77 EXPECT_TRUE(browser_window->IsFullscreen()); 78 EXPECT_TRUE(IsInImmersiveFullscreen(browser_window)); 79 80 ash::accelerators::ToggleFullscreen(); 81 EXPECT_FALSE(browser_window->IsMaximized()); 82 EXPECT_FALSE(browser_window->IsFullscreen()); 83 84 // 2) ToggleFullscreen() should have no effect on windows which cannot be 85 // maximized. 86 browser_window->GetNativeWindow()->SetProperty(aura::client::kCanMaximizeKey, 87 false); 88 ash::accelerators::ToggleFullscreen(); 89 EXPECT_FALSE(browser_window->IsMaximized()); 90 EXPECT_FALSE(browser_window->IsFullscreen()); 91 92 // 3) ToggleFullscreen() should put v1 apps into non-immersive fullscreen. 93 Browser::CreateParams browser_create_params(Browser::TYPE_POPUP, 94 browser()->profile(), chrome::HOST_DESKTOP_TYPE_NATIVE); 95#if defined(OS_WIN) 96 browser_create_params.host_desktop_type = chrome::HOST_DESKTOP_TYPE_ASH; 97#endif // OS_WIN 98 browser_create_params.app_name = "Test"; 99 100 Browser* app_host_browser = new Browser(browser_create_params); 101 ASSERT_TRUE(app_host_browser->is_app()); 102 AddBlankTabAndShow(app_host_browser); 103 browser_window = app_host_browser->window(); 104 ASSERT_TRUE(browser_window->IsActive()); 105 EXPECT_FALSE(browser_window->IsMaximized()); 106 EXPECT_FALSE(browser_window->IsFullscreen()); 107 108 ash::accelerators::ToggleFullscreen(); 109 EXPECT_TRUE(browser_window->IsFullscreen()); 110 EXPECT_FALSE(IsInImmersiveFullscreen(browser_window)); 111 112 ash::accelerators::ToggleFullscreen(); 113 EXPECT_FALSE(browser_window->IsMaximized()); 114 EXPECT_FALSE(browser_window->IsFullscreen()); 115 116 // 4) ToggleFullscreen() should put popup browser windows into non-immersive 117 // fullscreen. 118 browser_create_params.app_name = ""; 119 Browser* popup_browser = new Browser(browser_create_params); 120 ASSERT_TRUE(popup_browser->is_type_popup()); 121 ASSERT_FALSE(popup_browser->is_app()); 122 AddBlankTabAndShow(popup_browser); 123 browser_window = popup_browser->window(); 124 ASSERT_TRUE(browser_window->IsActive()); 125 EXPECT_FALSE(browser_window->IsMaximized()); 126 EXPECT_FALSE(browser_window->IsFullscreen()); 127 128 ash::accelerators::ToggleFullscreen(); 129 EXPECT_TRUE(browser_window->IsFullscreen()); 130 EXPECT_FALSE(IsInImmersiveFullscreen(browser_window)); 131 132 ash::accelerators::ToggleFullscreen(); 133 EXPECT_FALSE(browser_window->IsMaximized()); 134 EXPECT_FALSE(browser_window->IsFullscreen()); 135} 136 137typedef extensions::PlatformAppBrowserTest 138 AcceleratorCommandsPlatformAppBrowserTest; 139 140// Test that ToggleFullscreen() toggles the platform app's fullscreen state. 141IN_PROC_BROWSER_TEST_F(AcceleratorCommandsPlatformAppBrowserTest, 142 ToggleFullscreenPlatformApp) { 143 ASSERT_TRUE(ash::Shell::HasInstance()) << "No Instance"; 144 const extensions::Extension* extension = LoadAndLaunchPlatformApp("minimal"); 145 apps::ShellWindow* shell_window = CreateShellWindow(extension); 146 apps::NativeAppWindow* app_window = shell_window->GetBaseWindow(); 147 ASSERT_TRUE(shell_window->GetBaseWindow()->IsActive()); 148 EXPECT_FALSE(app_window->IsMaximized()); 149 EXPECT_FALSE(app_window->IsFullscreen()); 150 151 ash::accelerators::ToggleFullscreen(); 152 EXPECT_TRUE(app_window->IsFullscreen()); 153 154 ash::accelerators::ToggleFullscreen(); 155 EXPECT_FALSE(app_window->IsMaximized()); 156 EXPECT_FALSE(app_window->IsFullscreen()); 157 158 CloseShellWindow(shell_window); 159} 160