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); |
+} |