Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5296)

Unified Diff: chrome/browser/ui/ash/chrome_shell_delegate_browsertest.cc

Issue 17515005: Do not put v1 app windows or popup windows into immersive fullscreen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+}

Powered by Google App Engine
This is Rietveld 408576698