Index: chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm |
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7024ec03697e4a3d2f71e262ed12437f67f17795 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm |
@@ -0,0 +1,100 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "chrome/browser/ui/cocoa/browser_window_controller.h" |
+ |
+#import "base/mac/mac_util.h" |
+#include "base/run_loop.h" |
+#include "base/utf_string_conversions.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/cocoa/browser_window_cocoa.h" |
+#import "chrome/browser/ui/cocoa/browser/avatar_button_controller.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+ |
+#if !defined(MAC_OS_X_VERSION_10_7) || \ |
+ MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 |
+enum { |
+ NSWindowDocumentVersionsButton = 6, |
+ NSWindowFullScreenButton |
+}; |
+#endif // MAC_OS_X_VERSION_10_7 |
+ |
+typedef InProcessBrowserTest BrowserWindowControllerTest; |
+ |
+void CreateProfileCallback(const base::Closure& quit_closure, |
+ Profile* profile, |
+ Profile::CreateStatus status) { |
+ EXPECT_TRUE(profile); |
+ EXPECT_NE(Profile::CREATE_STATUS_FAIL, status); |
+ // This will be called multiple times. Wait until the profile is initialized |
+ // fully to quit the loop. |
+ if (status == Profile::CREATE_STATUS_INITIALIZED) |
+ quit_closure.Run(); |
+} |
+ |
+// Tests that adding the first profile moves the Lion fullscreen button over |
+// correctly. |
+IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, |
+ ProfileAvatarFullscreenButton) { |
+ if (base::mac::IsOSSnowLeopardOrEarlier()) |
+ return; |
+ |
+ // Initialize the locals. |
+ ProfileManager* profile_manager = g_browser_process->profile_manager(); |
+ ASSERT_TRUE(profile_manager); |
+ |
+ NSWindow* window = browser()->window()->GetNativeWindow(); |
+ ASSERT_TRUE(window); |
+ |
+ BrowserWindowController* controller = |
+ static_cast<BrowserWindowCocoa*>(browser()->window())->cocoa_controller(); |
+ |
+ // With only one profile, the fullscreen button should be visible, but the |
+ // avatar button should not. |
+ EXPECT_EQ(1u, profile_manager->GetNumberOfProfiles()); |
+ |
+ NSButton* fullscreen_button = |
+ [window standardWindowButton:NSWindowFullScreenButton]; |
+ EXPECT_TRUE(fullscreen_button); |
+ EXPECT_FALSE([fullscreen_button isHidden]); |
+ |
+ AvatarButtonController* avatar_controller = |
+ [controller avatarButtonController]; |
+ NSView* avatar = [avatar_controller view]; |
+ EXPECT_TRUE(avatar); |
+ EXPECT_TRUE([avatar isHidden]); |
+ |
+ // Create a profile asynchronously and run the loop until its creation |
+ // is complete. |
+ base::RunLoop run_loop; |
+ |
+ ProfileManager::CreateCallback create_callback = |
+ base::Bind(&CreateProfileCallback, run_loop.QuitClosure()); |
+ profile_manager->CreateProfileAsync( |
+ profile_manager->user_data_dir().Append("test"), |
+ create_callback, |
+ ASCIIToUTF16("avatar_test"), |
+ string16()); |
+ |
+ run_loop.Run(); |
+ |
+ // There should now be two profiles, and the avatar button and fullscreen |
+ // button are both visible. |
+ EXPECT_EQ(2u, profile_manager->GetNumberOfProfiles()); |
+ EXPECT_FALSE([avatar isHidden]); |
+ EXPECT_FALSE([fullscreen_button isHidden]); |
+ EXPECT_EQ([avatar window], [fullscreen_button window]); |
+ |
+ // Make sure the visual order of the buttons is correct and that they don't |
+ // overlap. |
+ NSRect avatar_frame = [avatar frame]; |
+ NSRect fullscreen_frame = [fullscreen_button frame]; |
+ |
+ EXPECT_LT(NSMinX(fullscreen_frame), NSMinX(avatar_frame)); |
+ EXPECT_LT(NSMaxX(fullscreen_frame), NSMinX(avatar_frame)); |
+} |