Index: chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm |
diff --git a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm |
index 3278955d0734f1ed0397680baefd6eef1ba9b8f2..e465628b6967187d687093233b0a15aa3b18b69c 100644 |
--- a/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm |
+++ b/chrome/browser/ui/cocoa/apps/native_app_window_cocoa_browsertest.mm |
@@ -19,7 +19,9 @@ |
#include "content/public/test/test_utils.h" |
#include "extensions/browser/app_window/app_window_registry.h" |
#include "extensions/common/constants.h" |
+#import "ui/base/test/nswindow_fullscreen_notification_waiter.h" |
+using extensions::AppWindow; |
using extensions::PlatformAppBrowserTest; |
namespace { |
@@ -58,11 +60,11 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, HideShowWithApp) { |
extensions::AppWindowRegistry::AppWindowList windows = |
extensions::AppWindowRegistry::Get(profile())->app_windows(); |
- extensions::AppWindow* app_window = windows.front(); |
+ AppWindow* app_window = windows.front(); |
extensions::NativeAppWindow* native_window = app_window->GetBaseWindow(); |
NSWindow* ns_window = native_window->GetNativeWindow(); |
- extensions::AppWindow* other_app_window = windows.back(); |
+ AppWindow* other_app_window = windows.back(); |
extensions::NativeAppWindow* other_native_window = |
other_app_window->GetBaseWindow(); |
NSWindow* other_ns_window = other_native_window->GetNativeWindow(); |
@@ -70,7 +72,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, HideShowWithApp) { |
// Normal Hide/Show. |
app_window->Hide(); |
EXPECT_FALSE([ns_window isVisible]); |
- app_window->Show(extensions::AppWindow::SHOW_ACTIVE); |
+ app_window->Show(AppWindow::SHOW_ACTIVE); |
EXPECT_TRUE([ns_window isVisible]); |
// Normal Hide/ShowWithApp. |
@@ -91,7 +93,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, HideShowWithApp) { |
EXPECT_FALSE([ns_window isVisible]); |
// Return to shown state. |
- app_window->Show(extensions::AppWindow::SHOW_ACTIVE); |
+ app_window->Show(AppWindow::SHOW_ACTIVE); |
EXPECT_TRUE([ns_window isVisible]); |
// HideWithApp the other window. |
@@ -102,7 +104,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, HideShowWithApp) { |
// HideWithApp, Show shows all windows for this app. |
native_window->HideWithApp(); |
EXPECT_FALSE([ns_window isVisible]); |
- app_window->Show(extensions::AppWindow::SHOW_ACTIVE); |
+ app_window->Show(AppWindow::SHOW_ACTIVE); |
EXPECT_TRUE([ns_window isVisible]); |
EXPECT_TRUE([other_ns_window isVisible]); |
@@ -161,12 +163,12 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
return; |
SetUpAppWithWindows(1); |
- extensions::AppWindow* app_window = GetFirstAppWindow(); |
+ AppWindow* app_window = GetFirstAppWindow(); |
extensions::NativeAppWindow* window = app_window->GetBaseWindow(); |
NSWindow* ns_window = app_window->GetNativeWindow(); |
base::scoped_nsobject<ScopedNotificationWatcher> watcher; |
- EXPECT_EQ(extensions::AppWindow::FULLSCREEN_TYPE_NONE, |
+ EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, |
app_window->fullscreen_types_for_test()); |
EXPECT_FALSE(window->IsFullscreen()); |
EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); |
@@ -177,7 +179,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
[ns_window toggleFullScreen:nil]; |
[watcher waitForNotification]; |
EXPECT_TRUE(app_window->fullscreen_types_for_test() & |
- extensions::AppWindow::FULLSCREEN_TYPE_OS); |
+ AppWindow::FULLSCREEN_TYPE_OS); |
EXPECT_TRUE(window->IsFullscreen()); |
EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); |
@@ -187,7 +189,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
app_window->Restore(); |
EXPECT_FALSE(window->IsFullscreenOrPending()); |
[watcher waitForNotification]; |
- EXPECT_EQ(extensions::AppWindow::FULLSCREEN_TYPE_NONE, |
+ EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, |
app_window->fullscreen_types_for_test()); |
EXPECT_FALSE(window->IsFullscreen()); |
EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); |
@@ -199,7 +201,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
EXPECT_TRUE(window->IsFullscreenOrPending()); |
[watcher waitForNotification]; |
EXPECT_TRUE(app_window->fullscreen_types_for_test() & |
- extensions::AppWindow::FULLSCREEN_TYPE_WINDOW_API); |
+ AppWindow::FULLSCREEN_TYPE_WINDOW_API); |
EXPECT_TRUE(window->IsFullscreen()); |
EXPECT_TRUE([ns_window styleMask] & NSFullScreenWindowMask); |
@@ -208,7 +210,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
andObject:ns_window]); |
[ns_window toggleFullScreen:nil]; |
[watcher waitForNotification]; |
- EXPECT_EQ(extensions::AppWindow::FULLSCREEN_TYPE_NONE, |
+ EXPECT_EQ(AppWindow::FULLSCREEN_TYPE_NONE, |
app_window->fullscreen_types_for_test()); |
EXPECT_FALSE(window->IsFullscreen()); |
EXPECT_FALSE([ns_window styleMask] & NSFullScreenWindowMask); |
@@ -217,8 +219,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Fullscreen) { |
// Test that, in frameless windows, the web contents has the same size as the |
// window. |
IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Frameless) { |
- extensions::AppWindow* app_window = |
- CreateTestAppWindow("{\"frame\": \"none\"}"); |
+ AppWindow* app_window = CreateTestAppWindow("{\"frame\": \"none\"}"); |
NSWindow* ns_window = app_window->GetNativeWindow(); |
NSView* web_contents = app_window->web_contents()->GetNativeView(); |
EXPECT_TRUE(NSEqualSizes(NSMakeSize(512, 384), [web_contents frame].size)); |
@@ -244,7 +245,7 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Frameless) { |
namespace { |
// Test that resize and fullscreen controls are correctly enabled/disabled. |
-void TestControls(extensions::AppWindow* app_window) { |
+void TestControls(AppWindow* app_window) { |
NSWindow* ns_window = app_window->GetNativeWindow(); |
// The window is resizable. |
@@ -293,6 +294,24 @@ void TestControls(extensions::AppWindow* app_window) { |
EXPECT_FALSE([ns_window styleMask] & NSResizableWindowMask); |
if (base::mac::IsOSSnowLeopard()) |
EXPECT_FALSE([ns_window showsResizeIndicator]); |
+ |
+ // If a window is made fullscreen by the API, fullscreen should be enabled so |
+ // the user can exit fullscreen. |
+ if (base::mac::IsOSLionOrLater()) { |
+ base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter([ |
+ [NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); |
+ app_window->SetFullscreen(AppWindow::FULLSCREEN_TYPE_WINDOW_API, true); |
+ [waiter waitForEnterCount:1 exitCount:0]; |
+ EXPECT_TRUE([ns_window collectionBehavior] & |
+ NSWindowCollectionBehaviorFullScreenPrimary); |
+ EXPECT_EQ(NSWidth([[ns_window contentView] frame]), |
+ NSWidth([ns_window frame])); |
+ // Once it leaves fullscreen, it is disabled again. |
+ app_window->SetFullscreen(AppWindow::FULLSCREEN_TYPE_WINDOW_API, false); |
+ [waiter waitForEnterCount:1 exitCount:1]; |
+ EXPECT_FALSE([ns_window collectionBehavior] & |
+ NSWindowCollectionBehaviorFullScreenPrimary); |
+ } |
} |
} // namespace |