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 3992b5f43cdf629dddcae3215d33a6d62e4956bc..3278955d0734f1ed0397680baefd6eef1ba9b8f2 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 |
@@ -240,3 +240,67 @@ IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Frameless) { |
CloseAppWindow(app_window); |
} |
+ |
+namespace { |
+ |
+// Test that resize and fullscreen controls are correctly enabled/disabled. |
+void TestControls(extensions::AppWindow* app_window) { |
+ NSWindow* ns_window = app_window->GetNativeWindow(); |
+ |
+ // The window is resizable. |
+ EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); |
+ if (base::mac::IsOSSnowLeopard()) |
+ EXPECT_TRUE([ns_window showsResizeIndicator]); |
+ |
+ // Due to this bug: http://crbug.com/362039, which manifests on the Cocoa |
+ // implementation but not the views one, frameless windows should have |
+ // fullscreen controls disabled. |
+ BOOL can_fullscreen = |
+ ![NSStringFromClass([ns_window class]) isEqualTo:@"AppFramelessNSWindow"]; |
+ // The window can fullscreen and maximize. |
+ if (base::mac::IsOSLionOrLater()) |
+ EXPECT_EQ(can_fullscreen, !!([ns_window collectionBehavior] & |
+ NSWindowCollectionBehaviorFullScreenPrimary)); |
+ EXPECT_EQ(can_fullscreen, |
+ [[ns_window standardWindowButton:NSWindowZoomButton] isEnabled]); |
+ |
+ // Set a maximum size. |
+ app_window->SetContentSizeConstraints(gfx::Size(), gfx::Size(200, 201)); |
+ EXPECT_EQ(200, [ns_window contentMaxSize].width); |
+ EXPECT_EQ(201, [ns_window contentMaxSize].height); |
+ NSView* web_contents = app_window->web_contents()->GetNativeView(); |
+ EXPECT_EQ(200, [web_contents frame].size.width); |
+ EXPECT_EQ(201, [web_contents frame].size.height); |
+ |
+ // Still resizable. |
+ EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); |
+ if (base::mac::IsOSSnowLeopard()) |
+ EXPECT_TRUE([ns_window showsResizeIndicator]); |
+ |
+ // Fullscreen and maximize are disabled. |
+ if (base::mac::IsOSLionOrLater()) |
+ EXPECT_FALSE([ns_window collectionBehavior] & |
+ NSWindowCollectionBehaviorFullScreenPrimary); |
+ EXPECT_FALSE([[ns_window standardWindowButton:NSWindowZoomButton] isEnabled]); |
+ |
+ // Set a minimum size equal to the maximum size. |
+ app_window->SetContentSizeConstraints(gfx::Size(200, 201), |
+ gfx::Size(200, 201)); |
+ EXPECT_EQ(200, [ns_window contentMinSize].width); |
+ EXPECT_EQ(201, [ns_window contentMinSize].height); |
+ |
+ // No longer resizable. |
+ EXPECT_FALSE([ns_window styleMask] & NSResizableWindowMask); |
+ if (base::mac::IsOSSnowLeopard()) |
+ EXPECT_FALSE([ns_window showsResizeIndicator]); |
+} |
+ |
+} // namespace |
+ |
+IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, Controls) { |
+ TestControls(CreateTestAppWindow("{}")); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(NativeAppWindowCocoaBrowserTest, ControlsFrameless) { |
+ TestControls(CreateTestAppWindow("{\"frame\": \"none\"}")); |
+} |