Chromium Code Reviews| Index: chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc |
| diff --git a/chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc b/chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc |
| index 938d3f5c1abd3afe0df15ca4bb9a533a97ca246c..8615e800b805c1087d8a3841830efe5c7b452417 100644 |
| --- a/chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc |
| +++ b/chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc |
| @@ -7,13 +7,34 @@ |
| #include "ash/ash_switches.h" |
| #include "ash/shell.h" |
| #include "ash/shell_delegate.h" |
| +#include "ash/wm/window_properties.h" |
| #include "ash/wm/window_util.h" |
| #include "base/command_line.h" |
| +#include "chrome/browser/extensions/platform_app_browsertest_util.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_finder.h" |
| +#include "chrome/browser/ui/browser_window.h" |
| +#include "chrome/browser/ui/extensions/native_app_window.h" |
| #include "chrome/browser/ui/immersive_fullscreen_configuration.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| +#include "ui/aura/client/aura_constants.h" |
| + |
| +namespace { |
| + |
| +// Returns true if |window| is in immersive fullscreen. Infer whether |window| |
| +// is in immersive fullscreen based on whether kFullscreenUsesMinimalChromeKey |
| +// is set for |window| because DEPS does not allow the test to use BrowserView. |
| +// (This is not quite right because if a window is in both immersive browser |
| +// fullscreen and in tab fullscreen, kFullScreenUsesMinimalChromeKey will |
| +// not be set). |
| +bool IsInImmersiveFullscreen(BrowserWindow* browser_window) { |
| + return browser_window->IsFullscreen() && |
| + browser_window->GetNativeWindow()->GetProperty( |
| + ash::internal::kFullscreenUsesMinimalChromeKey); |
| +} |
| + |
| +} // namespace |
| typedef InProcessBrowserTest ChromeShellDelegateBrowserTest; |
| @@ -24,17 +45,6 @@ IN_PROC_BROWSER_TEST_F(ChromeShellDelegateBrowserTest, ToggleMaximized) { |
| aura::Window* window = ash::wm::GetActiveWindow(); |
| ASSERT_TRUE(window); |
| - if (ImmersiveFullscreenConfiguration::UseImmersiveFullscreen()) { |
| - // "ToggleMaximized" toggles immersive fullscreen. |
| - EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); |
| - EXPECT_FALSE(ash::wm::IsWindowFullscreen(window)); |
| - shell_delegate->ToggleMaximized(); |
| - EXPECT_TRUE(ash::wm::IsWindowFullscreen(window)); |
| - shell_delegate->ToggleMaximized(); |
| - EXPECT_FALSE(ash::wm::IsWindowFullscreen(window)); |
| - return; |
| - } |
| - |
| // When not in fullscreen, ShellDelegate::ToggleMaximized toggles Maximized. |
| EXPECT_FALSE(ash::wm::IsWindowMaximized(window)); |
| shell_delegate->ToggleMaximized(); |
| @@ -55,3 +65,138 @@ IN_PROC_BROWSER_TEST_F(ChromeShellDelegateBrowserTest, ToggleMaximized) { |
| EXPECT_FALSE(ash::wm::IsWindowFullscreen(window)); |
| EXPECT_TRUE(ash::wm::IsWindowMaximized(window)); |
| } |
| + |
| +// Confirm that toggling window fullscren works properly. |
| +IN_PROC_BROWSER_TEST_F(ChromeShellDelegateBrowserTest, ToggleFullscreen) { |
| + ash::ShellDelegate* shell_delegate = ash::Shell::GetInstance()->delegate(); |
| + ASSERT_TRUE(shell_delegate); |
| + |
| + // 1) ToggleFullscreen() should toggle whether a tabbed browser window is in |
| + // immersive fullscreen. |
| + ASSERT_TRUE(browser()->is_type_tabbed()); |
| + BrowserWindow* browser_window = browser()->window(); |
| + ASSERT_TRUE(browser_window->IsActive()); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(browser_window->IsFullscreen()); |
| + EXPECT_EQ(IsInImmersiveFullscreen(browser_window), |
| + ImmersiveFullscreenConfiguration::UseImmersiveFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + // 2) ToggleFullscreen() should have no effect on windows which cannot be |
| + // maximized. |
| + browser_window->GetNativeWindow()->SetProperty(aura::client::kCanMaximizeKey, |
| + false); |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + // 3) ToggleFullscreen() should maximize windows which do not belong to an |
| + // app or to a browser. |
| +// TODO(linux aura) http://crbug.com/163931 |
|
James Cook
2013/06/21 00:50:29
nit: indent
|
| + chrome::OpenTaskManager(browser(), false); |
| + aura::Window* task_manager_window = ash::wm::GetActiveWindow(); |
| + ASSERT_TRUE(task_manager_window); |
| + EXPECT_FALSE(ash::wm::IsWindowMaximized(task_manager_window)); |
| + EXPECT_FALSE(ash::wm::IsWindowFullscreen(task_manager_window)); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(ash::wm::IsWindowMaximized(task_manager_window)); |
| + |
| + // 4) ToggleFullscreen() should maximize v1 app browser windows which use |
| + // AppNonClientFrameViewAsh. |
| + // TODO(pkotwicz): Figure out if we actually want this behavior. |
| + Browser::CreateParams browser_create_params(Browser::TYPE_POPUP, |
| + browser()->profile(), chrome::HOST_DESKTOP_TYPE_NATIVE); |
| +#if defined(OS_WIN) |
| + browser_create_params.host_desktop_type = chrome::HOST_DESKTOP_TYPE_ASH; |
| +#endif // OS_WIN |
| + browser_create_params.app_name = "Test"; |
| + browser_create_params.app_type = Browser::APP_TYPE_HOST; |
| + |
| + Browser* app_host_browser = new Browser(browser_create_params); |
| + ASSERT_TRUE(app_host_browser->is_app()); |
| + AddBlankTabAndShow(app_host_browser); |
| + browser_window = app_host_browser->window(); |
| + ASSERT_TRUE(browser_window->IsActive()); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(browser_window->IsMaximized()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + // 5) ToggleFullscreen() should put child windows of v1 apps into |
| + // non-immersive fullscreen. |
| + browser_create_params.host_desktop_type = chrome::HOST_DESKTOP_TYPE_NATIVE; |
| + browser_create_params.app_type = Browser::APP_TYPE_CHILD; |
| + Browser* app_child_browser = new Browser(browser_create_params); |
| + ASSERT_TRUE(app_child_browser->is_app()); |
| + AddBlankTabAndShow(app_child_browser); |
| + browser_window = app_child_browser->window(); |
| + ASSERT_TRUE(browser_window->IsActive()); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(browser_window->IsFullscreen()); |
| + EXPECT_FALSE(IsInImmersiveFullscreen(browser_window)); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + // 6) ToggleFullscreen() should put popup browser windows into non-immersive |
| + // fullscreen. |
| + browser_create_params.app_name = ""; |
| + Browser* popup_browser = new Browser(browser_create_params); |
| + ASSERT_TRUE(popup_browser->is_type_popup()); |
| + ASSERT_FALSE(popup_browser->is_app()); |
| + AddBlankTabAndShow(popup_browser); |
| + browser_window = popup_browser->window(); |
| + ASSERT_TRUE(browser_window->IsActive()); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(browser_window->IsFullscreen()); |
| + EXPECT_FALSE(IsInImmersiveFullscreen(browser_window)); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(browser_window->IsMaximized()); |
| + EXPECT_FALSE(browser_window->IsFullscreen()); |
| +} |
| + |
| +typedef extensions::PlatformAppBrowserTest |
| + ChromeShellDelegatePlatformAppBrowserTest; |
| + |
| +// Test that ToggleFullscreen() toggles the platform app's fullscreen state. |
| +IN_PROC_BROWSER_TEST_F(ChromeShellDelegatePlatformAppBrowserTest, |
| + ToggleFullscreenPlatformApp) { |
| + ash::ShellDelegate* shell_delegate = ash::Shell::GetInstance()->delegate(); |
| + ASSERT_TRUE(shell_delegate); |
| + |
| + const extensions::Extension* extension = LoadAndLaunchPlatformApp("minimal"); |
| + ShellWindow* shell_window = CreateShellWindow(extension); |
| + NativeAppWindow* app_window = shell_window->GetBaseWindow(); |
| + ASSERT_TRUE(shell_window->GetBaseWindow()->IsActive()); |
| + EXPECT_FALSE(app_window->IsMaximized()); |
| + EXPECT_FALSE(app_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_TRUE(app_window->IsFullscreen()); |
| + |
| + shell_delegate->ToggleFullscreen(); |
| + EXPECT_FALSE(app_window->IsMaximized()); |
| + EXPECT_FALSE(app_window->IsFullscreen()); |
| + |
| + CloseShellWindow(shell_window); |
| +} |