| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "extensions/browser/app_window/native_app_window.h" | 5 #include "extensions/browser/app_window/native_app_window.h" |
| 6 | 6 |
| 7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 8 | 8 |
| 9 #import "base/mac/foundation_util.h" | 9 #import "base/mac/foundation_util.h" |
| 10 #import "base/mac/mac_util.h" | 10 #import "base/mac/mac_util.h" |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 EXPECT_TRUE([ns_window isMiniaturized]); | 305 EXPECT_TRUE([ns_window isMiniaturized]); |
| 306 | 306 |
| 307 [ns_window deminiaturize:nil]; | 307 [ns_window deminiaturize:nil]; |
| 308 EXPECT_NSEQ(initial_frame, [ns_window frame]); | 308 EXPECT_NSEQ(initial_frame, [ns_window frame]); |
| 309 EXPECT_FALSE(window->IsMinimized()); | 309 EXPECT_FALSE(window->IsMinimized()); |
| 310 EXPECT_FALSE([ns_window isMiniaturized]); | 310 EXPECT_FALSE([ns_window isMiniaturized]); |
| 311 } | 311 } |
| 312 | 312 |
| 313 // Test Maximize, Restore combinations with their native equivalents. | 313 // Test Maximize, Restore combinations with their native equivalents. |
| 314 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Maximize) { | 314 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, Maximize) { |
| 315 // This test is flaky on 10.6. Disable it until we're sure we need MacViews on | |
| 316 // 10.6. See http://crbug.com/503208 | |
| 317 if (GetParam() && base::mac::IsOSSnowLeopard()) | |
| 318 return; | |
| 319 | |
| 320 SetUpAppWithWindows(1); | 315 SetUpAppWithWindows(1); |
| 321 AppWindow* app_window = GetFirstAppWindow(); | 316 AppWindow* app_window = GetFirstAppWindow(); |
| 322 extensions::NativeAppWindow* window = app_window->GetBaseWindow(); | 317 extensions::NativeAppWindow* window = app_window->GetBaseWindow(); |
| 323 NSWindow* ns_window = app_window->GetNativeWindow(); | 318 NSWindow* ns_window = app_window->GetNativeWindow(); |
| 324 base::scoped_nsobject<WindowedNSNotificationObserver> watcher; | 319 base::scoped_nsobject<WindowedNSNotificationObserver> watcher; |
| 325 | 320 |
| 326 gfx::Rect initial_restored_bounds = window->GetRestoredBounds(); | 321 gfx::Rect initial_restored_bounds = window->GetRestoredBounds(); |
| 327 NSRect initial_frame = [ns_window frame]; | 322 NSRect initial_frame = [ns_window frame]; |
| 328 NSRect maximized_frame = [[ns_window screen] visibleFrame]; | 323 NSRect maximized_frame = [[ns_window screen] visibleFrame]; |
| 329 | 324 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 app_window->Maximize(); | 445 app_window->Maximize(); |
| 451 EXPECT_TRUE([ns_window isVisible]); | 446 EXPECT_TRUE([ns_window isVisible]); |
| 452 EXPECT_NSEQ(maximized_frame, [ns_window frame]); | 447 EXPECT_NSEQ(maximized_frame, [ns_window frame]); |
| 453 EXPECT_TRUE(window->IsMaximized()); | 448 EXPECT_TRUE(window->IsMaximized()); |
| 454 EXPECT_FALSE(window->IsMinimized()); | 449 EXPECT_FALSE(window->IsMinimized()); |
| 455 EXPECT_FALSE([ns_window isMiniaturized]); | 450 EXPECT_FALSE([ns_window isMiniaturized]); |
| 456 } | 451 } |
| 457 | 452 |
| 458 // Test Maximize, Fullscreen, Restore combinations. | 453 // Test Maximize, Fullscreen, Restore combinations. |
| 459 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, MaximizeFullscreen) { | 454 IN_PROC_BROWSER_TEST_P(NativeAppWindowCocoaBrowserTest, MaximizeFullscreen) { |
| 460 if (base::mac::IsOSSnowLeopard()) | |
| 461 return; | |
| 462 | |
| 463 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; | 455 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; |
| 464 | 456 |
| 465 SetUpAppWithWindows(1); | 457 SetUpAppWithWindows(1); |
| 466 AppWindow* app_window = GetFirstAppWindow(); | 458 AppWindow* app_window = GetFirstAppWindow(); |
| 467 extensions::NativeAppWindow* window = app_window->GetBaseWindow(); | 459 extensions::NativeAppWindow* window = app_window->GetBaseWindow(); |
| 468 NSWindow* ns_window = app_window->GetNativeWindow(); | 460 NSWindow* ns_window = app_window->GetNativeWindow(); |
| 469 base::scoped_nsobject<WindowedNSNotificationObserver> watcher; | 461 base::scoped_nsobject<WindowedNSNotificationObserver> watcher; |
| 470 base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter( | 462 base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter( |
| 471 [[NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); | 463 [[NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); |
| 472 | 464 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 } | 537 } |
| 546 | 538 |
| 547 namespace { | 539 namespace { |
| 548 | 540 |
| 549 // Test that resize and fullscreen controls are correctly enabled/disabled. | 541 // Test that resize and fullscreen controls are correctly enabled/disabled. |
| 550 void TestControls(AppWindow* app_window) { | 542 void TestControls(AppWindow* app_window) { |
| 551 NSWindow* ns_window = app_window->GetNativeWindow(); | 543 NSWindow* ns_window = app_window->GetNativeWindow(); |
| 552 | 544 |
| 553 // The window is resizable. | 545 // The window is resizable. |
| 554 EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); | 546 EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); |
| 555 if (base::mac::IsOSSnowLeopard()) | |
| 556 EXPECT_TRUE([ns_window showsResizeIndicator]); | |
| 557 | 547 |
| 558 // Due to this bug: http://crbug.com/362039, which manifests on the Cocoa | 548 // Due to this bug: http://crbug.com/362039, which manifests on the Cocoa |
| 559 // implementation but not the views one, frameless windows should have | 549 // implementation but not the views one, frameless windows should have |
| 560 // fullscreen controls disabled. | 550 // fullscreen controls disabled. |
| 561 BOOL can_fullscreen = | 551 BOOL can_fullscreen = |
| 562 ![NSStringFromClass([ns_window class]) isEqualTo:@"AppFramelessNSWindow"]; | 552 ![NSStringFromClass([ns_window class]) isEqualTo:@"AppFramelessNSWindow"]; |
| 563 // The window can fullscreen and maximize. | 553 // The window can fullscreen and maximize. |
| 564 if (base::mac::IsOSLionOrLater()) { | 554 if (base::mac::IsOSLionOrLater()) { |
| 565 EXPECT_EQ(can_fullscreen, !!([ns_window collectionBehavior] & | 555 EXPECT_EQ(can_fullscreen, !!([ns_window collectionBehavior] & |
| 566 NSWindowCollectionBehaviorFullScreenPrimary)); | 556 NSWindowCollectionBehaviorFullScreenPrimary)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 578 // Set a maximum size. | 568 // Set a maximum size. |
| 579 app_window->SetContentSizeConstraints(gfx::Size(), gfx::Size(200, 201)); | 569 app_window->SetContentSizeConstraints(gfx::Size(), gfx::Size(200, 201)); |
| 580 EXPECT_EQ(200, [ns_window contentMaxSize].width); | 570 EXPECT_EQ(200, [ns_window contentMaxSize].width); |
| 581 EXPECT_EQ(201, [ns_window contentMaxSize].height); | 571 EXPECT_EQ(201, [ns_window contentMaxSize].height); |
| 582 NSView* web_contents = app_window->web_contents()->GetNativeView(); | 572 NSView* web_contents = app_window->web_contents()->GetNativeView(); |
| 583 EXPECT_EQ(200, [web_contents frame].size.width); | 573 EXPECT_EQ(200, [web_contents frame].size.width); |
| 584 EXPECT_EQ(201, [web_contents frame].size.height); | 574 EXPECT_EQ(201, [web_contents frame].size.height); |
| 585 | 575 |
| 586 // Still resizable. | 576 // Still resizable. |
| 587 EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); | 577 EXPECT_TRUE([ns_window styleMask] & NSResizableWindowMask); |
| 588 if (base::mac::IsOSSnowLeopard()) | |
| 589 EXPECT_TRUE([ns_window showsResizeIndicator]); | |
| 590 | 578 |
| 591 // Fullscreen and maximize are disabled. | 579 // Fullscreen and maximize are disabled. |
| 592 if (base::mac::IsOSLionOrLater()) | 580 if (base::mac::IsOSLionOrLater()) |
| 593 EXPECT_FALSE([ns_window collectionBehavior] & | 581 EXPECT_FALSE([ns_window collectionBehavior] & |
| 594 NSWindowCollectionBehaviorFullScreenPrimary); | 582 NSWindowCollectionBehaviorFullScreenPrimary); |
| 595 EXPECT_FALSE([[ns_window standardWindowButton:NSWindowZoomButton] isEnabled]); | 583 EXPECT_FALSE([[ns_window standardWindowButton:NSWindowZoomButton] isEnabled]); |
| 596 | 584 |
| 597 // Set a minimum size equal to the maximum size. | 585 // Set a minimum size equal to the maximum size. |
| 598 app_window->SetContentSizeConstraints(gfx::Size(200, 201), | 586 app_window->SetContentSizeConstraints(gfx::Size(200, 201), |
| 599 gfx::Size(200, 201)); | 587 gfx::Size(200, 201)); |
| 600 EXPECT_EQ(200, [ns_window contentMinSize].width); | 588 EXPECT_EQ(200, [ns_window contentMinSize].width); |
| 601 EXPECT_EQ(201, [ns_window contentMinSize].height); | 589 EXPECT_EQ(201, [ns_window contentMinSize].height); |
| 602 | 590 |
| 603 // No longer resizable. | 591 // No longer resizable. |
| 604 EXPECT_FALSE([ns_window styleMask] & NSResizableWindowMask); | 592 EXPECT_FALSE([ns_window styleMask] & NSResizableWindowMask); |
| 605 if (base::mac::IsOSSnowLeopard()) | |
| 606 EXPECT_FALSE([ns_window showsResizeIndicator]); | |
| 607 | 593 |
| 608 // If a window is made fullscreen by the API, fullscreen should be enabled so | 594 // If a window is made fullscreen by the API, fullscreen should be enabled so |
| 609 // the user can exit fullscreen. | 595 // the user can exit fullscreen. |
| 610 if (base::mac::IsOSLionOrLater()) { | 596 if (base::mac::IsOSLionOrLater()) { |
| 611 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; | 597 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; |
| 612 base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter([ | 598 base::scoped_nsobject<NSWindowFullscreenNotificationWaiter> waiter([ |
| 613 [NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); | 599 [NSWindowFullscreenNotificationWaiter alloc] initWithWindow:ns_window]); |
| 614 app_window->SetFullscreen(AppWindow::FULLSCREEN_TYPE_WINDOW_API, true); | 600 app_window->SetFullscreen(AppWindow::FULLSCREEN_TYPE_WINDOW_API, true); |
| 615 [waiter waitForEnterCount:1 exitCount:0]; | 601 [waiter waitForEnterCount:1 exitCount:0]; |
| 616 EXPECT_TRUE([ns_window collectionBehavior] & | 602 EXPECT_TRUE([ns_window collectionBehavior] & |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 [expected_color getComponents:expected_components]; | 696 [expected_color getComponents:expected_components]; |
| 711 [color getComponents:color_components]; | 697 [color getComponents:color_components]; |
| 712 EXPECT_NEAR(expected_components[0], color_components[0], 0.01); | 698 EXPECT_NEAR(expected_components[0], color_components[0], 0.01); |
| 713 EXPECT_NEAR(expected_components[1], color_components[1], 0.01); | 699 EXPECT_NEAR(expected_components[1], color_components[1], 0.01); |
| 714 EXPECT_NEAR(expected_components[2], color_components[2], 0.01); | 700 EXPECT_NEAR(expected_components[2], color_components[2], 0.01); |
| 715 } | 701 } |
| 716 | 702 |
| 717 INSTANTIATE_TEST_CASE_P(NativeAppWindowCocoaBrowserTestInstance, | 703 INSTANTIATE_TEST_CASE_P(NativeAppWindowCocoaBrowserTestInstance, |
| 718 NativeAppWindowCocoaBrowserTest, | 704 NativeAppWindowCocoaBrowserTest, |
| 719 ::testing::Bool()); | 705 ::testing::Bool()); |
| OLD | NEW |