OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 5 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
6 | 6 |
7 #import "base/mac/mac_util.h" | 7 #import "base/mac/mac_util.h" |
8 #include "base/mac/sdk_forward_declarations.h" | 8 #include "base/mac/sdk_forward_declarations.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" | 33 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" |
34 #include "chrome/browser/ui/extensions/application_launch.h" | 34 #include "chrome/browser/ui/extensions/application_launch.h" |
35 #include "chrome/browser/ui/find_bar/find_bar.h" | 35 #include "chrome/browser/ui/find_bar/find_bar.h" |
36 #include "chrome/browser/ui/find_bar/find_bar_controller.h" | 36 #include "chrome/browser/ui/find_bar/find_bar_controller.h" |
37 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 37 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
38 #include "chrome/test/base/in_process_browser_test.h" | 38 #include "chrome/test/base/in_process_browser_test.h" |
39 #include "chrome/test/base/testing_profile.h" | 39 #include "chrome/test/base/testing_profile.h" |
40 #include "content/public/browser/web_contents.h" | 40 #include "content/public/browser/web_contents.h" |
41 #include "content/public/test/test_utils.h" | 41 #include "content/public/test/test_utils.h" |
42 #import "testing/gtest_mac.h" | 42 #import "testing/gtest_mac.h" |
| 43 #import "third_party/ocmock/OCMock/OCMock.h" |
43 #import "ui/base/cocoa/nsview_additions.h" | 44 #import "ui/base/cocoa/nsview_additions.h" |
44 #include "ui/gfx/animation/slide_animation.h" | 45 #include "ui/gfx/animation/slide_animation.h" |
45 | 46 |
46 namespace { | 47 namespace { |
47 | 48 |
| 49 // Creates a mock of an NSWindow that has the given |frame|. |
| 50 id MockWindowWithFrame(NSRect frame) { |
| 51 id window = [OCMockObject mockForClass:[NSWindow class]]; |
| 52 NSValue* window_frame = |
| 53 [NSValue valueWithBytes:&frame objCType:@encode(NSRect)]; |
| 54 [[[window stub] andReturnValue:window_frame] frame]; |
| 55 return window; |
| 56 } |
| 57 |
48 void CreateProfileCallback(const base::Closure& quit_closure, | 58 void CreateProfileCallback(const base::Closure& quit_closure, |
49 Profile* profile, | 59 Profile* profile, |
50 Profile::CreateStatus status) { | 60 Profile::CreateStatus status) { |
51 EXPECT_TRUE(profile); | 61 EXPECT_TRUE(profile); |
52 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); | 62 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); |
53 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); | 63 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); |
54 // This will be called multiple times. Wait until the profile is initialized | 64 // This will be called multiple times. Wait until the profile is initialized |
55 // fully to quit the loop. | 65 // fully to quit the loop. |
56 if (status == Profile::CREATE_STATUS_INITIALIZED) | 66 if (status == Profile::CREATE_STATUS_INITIALIZED) |
57 quit_closure.Run(); | 67 quit_closure.Run(); |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 | 485 |
476 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, SheetPosition) { | 486 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, SheetPosition) { |
477 ASSERT_TRUE([controller() isKindOfClass:[BrowserWindowController class]]); | 487 ASSERT_TRUE([controller() isKindOfClass:[BrowserWindowController class]]); |
478 EXPECT_TRUE([controller() isTabbedWindow]); | 488 EXPECT_TRUE([controller() isTabbedWindow]); |
479 EXPECT_TRUE([controller() hasTabStrip]); | 489 EXPECT_TRUE([controller() hasTabStrip]); |
480 EXPECT_FALSE([controller() hasTitleBar]); | 490 EXPECT_FALSE([controller() hasTitleBar]); |
481 EXPECT_TRUE([controller() hasToolbar]); | 491 EXPECT_TRUE([controller() hasToolbar]); |
482 EXPECT_FALSE([controller() isBookmarkBarVisible]); | 492 EXPECT_FALSE([controller() isBookmarkBarVisible]); |
483 | 493 |
484 NSRect defaultAlertFrame = NSMakeRect(0, 0, 300, 200); | 494 NSRect defaultAlertFrame = NSMakeRect(0, 0, 300, 200); |
| 495 id sheet = MockWindowWithFrame(defaultAlertFrame); |
485 NSWindow* window = browser()->window()->GetNativeWindow(); | 496 NSWindow* window = browser()->window()->GetNativeWindow(); |
486 NSRect alertFrame = [controller() window:window | 497 NSRect alertFrame = [controller() window:window |
487 willPositionSheet:nil | 498 willPositionSheet:nil |
488 usingRect:defaultAlertFrame]; | 499 usingRect:defaultAlertFrame]; |
489 NSRect toolbarFrame = [[[controller() toolbarController] view] frame]; | 500 NSRect toolbarFrame = [[[controller() toolbarController] view] frame]; |
490 EXPECT_EQ(NSMinY(alertFrame), NSMinY(toolbarFrame)); | 501 EXPECT_EQ(NSMinY(alertFrame), NSMinY(toolbarFrame)); |
491 | 502 |
492 // Open sheet with normal browser window, persistent bookmark bar. | 503 // Open sheet with normal browser window, persistent bookmark bar. |
493 chrome::ToggleBookmarkBarWhenVisible(browser()->profile()); | 504 chrome::ToggleBookmarkBarWhenVisible(browser()->profile()); |
494 EXPECT_TRUE([controller() isBookmarkBarVisible]); | 505 EXPECT_TRUE([controller() isBookmarkBarVisible]); |
495 alertFrame = [controller() window:window | 506 alertFrame = [controller() window:window |
496 willPositionSheet:nil | 507 willPositionSheet:sheet |
497 usingRect:defaultAlertFrame]; | 508 usingRect:defaultAlertFrame]; |
498 NSRect bookmarkBarFrame = [[[controller() bookmarkBarController] view] frame]; | 509 NSRect bookmarkBarFrame = [[[controller() bookmarkBarController] view] frame]; |
499 EXPECT_EQ(NSMinY(alertFrame), NSMinY(bookmarkBarFrame)); | 510 EXPECT_EQ(NSMinY(alertFrame), NSMinY(bookmarkBarFrame)); |
500 | 511 |
| 512 // If the sheet is too large, it should be positioned at the top of the |
| 513 // window. |
| 514 defaultAlertFrame = NSMakeRect(0, 0, 300, 2000); |
| 515 sheet = MockWindowWithFrame(defaultAlertFrame); |
| 516 alertFrame = [controller() window:window |
| 517 willPositionSheet:sheet |
| 518 usingRect:defaultAlertFrame]; |
| 519 EXPECT_EQ(NSMinY(alertFrame), NSHeight([window frame])); |
| 520 |
| 521 // Reset the sheet's size. |
| 522 defaultAlertFrame = NSMakeRect(0, 0, 300, 200); |
| 523 sheet = MockWindowWithFrame(defaultAlertFrame); |
| 524 |
501 // Make sure the profile does not have the bookmark visible so that | 525 // Make sure the profile does not have the bookmark visible so that |
502 // we'll create the shortcut window without the bookmark bar. | 526 // we'll create the shortcut window without the bookmark bar. |
503 chrome::ToggleBookmarkBarWhenVisible(browser()->profile()); | 527 chrome::ToggleBookmarkBarWhenVisible(browser()->profile()); |
504 // Open application mode window. | 528 // Open application mode window. |
505 OpenAppShortcutWindow(browser()->profile(), GURL("about:blank")); | 529 OpenAppShortcutWindow(browser()->profile(), GURL("about:blank")); |
506 Browser* popup_browser = BrowserList::GetInstance( | 530 Browser* popup_browser = BrowserList::GetInstance( |
507 chrome::GetActiveDesktop())->GetLastActive(); | 531 chrome::GetActiveDesktop())->GetLastActive(); |
508 NSWindow* popupWindow = popup_browser->window()->GetNativeWindow(); | 532 NSWindow* popupWindow = popup_browser->window()->GetNativeWindow(); |
509 BrowserWindowController* popupController = | 533 BrowserWindowController* popupController = |
510 [BrowserWindowController browserWindowControllerForWindow:popupWindow]; | 534 [BrowserWindowController browserWindowControllerForWindow:popupWindow]; |
511 ASSERT_TRUE([popupController isKindOfClass:[BrowserWindowController class]]); | 535 ASSERT_TRUE([popupController isKindOfClass:[BrowserWindowController class]]); |
512 EXPECT_FALSE([popupController isTabbedWindow]); | 536 EXPECT_FALSE([popupController isTabbedWindow]); |
513 EXPECT_FALSE([popupController hasTabStrip]); | 537 EXPECT_FALSE([popupController hasTabStrip]); |
514 EXPECT_TRUE([popupController hasTitleBar]); | 538 EXPECT_TRUE([popupController hasTitleBar]); |
515 EXPECT_FALSE([popupController isBookmarkBarVisible]); | 539 EXPECT_FALSE([popupController isBookmarkBarVisible]); |
516 EXPECT_FALSE([popupController hasToolbar]); | 540 EXPECT_FALSE([popupController hasToolbar]); |
517 | 541 |
518 // Open sheet in an application window. | 542 // Open sheet in an application window. |
519 [popupController showWindow:nil]; | 543 [popupController showWindow:nil]; |
520 alertFrame = [popupController window:popupWindow | 544 alertFrame = [popupController window:popupWindow |
521 willPositionSheet:nil | 545 willPositionSheet:sheet |
522 usingRect:defaultAlertFrame]; | 546 usingRect:defaultAlertFrame]; |
523 EXPECT_EQ(NSMinY(alertFrame), | 547 EXPECT_EQ(NSMinY(alertFrame), |
524 NSHeight([[popupWindow contentView] frame]) - | 548 NSHeight([[popupWindow contentView] frame]) - |
525 defaultAlertFrame.size.height); | 549 defaultAlertFrame.size.height); |
526 | 550 |
527 // Close the application window. | 551 // Close the application window. |
528 popup_browser->tab_strip_model()->CloseSelectedTabs(); | 552 popup_browser->tab_strip_model()->CloseSelectedTabs(); |
529 [popupController close]; | 553 [popupController close]; |
530 } | 554 } |
531 | 555 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 VerifyWindowControlsZOrder(); | 628 VerifyWindowControlsZOrder(); |
605 [controller() removeOverlay]; | 629 [controller() removeOverlay]; |
606 VerifyWindowControlsZOrder(); | 630 VerifyWindowControlsZOrder(); |
607 | 631 |
608 // Toggle immersive fullscreen, then verify z order. In immersive fullscreen, | 632 // Toggle immersive fullscreen, then verify z order. In immersive fullscreen, |
609 // there are no window controls. | 633 // there are no window controls. |
610 [controller() enterImmersiveFullscreen]; | 634 [controller() enterImmersiveFullscreen]; |
611 [controller() exitImmersiveFullscreen]; | 635 [controller() exitImmersiveFullscreen]; |
612 VerifyWindowControlsZOrder(); | 636 VerifyWindowControlsZOrder(); |
613 } | 637 } |
OLD | NEW |