Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
| 6 | 6 |
| 7 #import "chrome/browser/app_controller_mac.h" | |
| 8 | |
| 9 #include "base/files/file_path.h" | |
| 7 #include "base/memory/scoped_nsobject.h" | 10 #include "base/memory/scoped_nsobject.h" |
| 8 #include "chrome/app/chrome_command_ids.h" | 11 #include "chrome/app/chrome_command_ids.h" |
| 9 #import "chrome/browser/app_controller_mac.h" | 12 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
| 13 #include "chrome/browser/profiles/profile_manager.h" | |
| 14 #include "chrome/common/chrome_constants.h" | |
| 15 #include "chrome/common/pref_names.h" | |
| 16 #include "chrome/test/base/testing_profile_manager.h" | |
| 17 #include "chrome/test/base/ui_test_utils.h" | |
| 10 #include "testing/platform_test.h" | 18 #include "testing/platform_test.h" |
| 11 | 19 |
| 12 class AppControllerTest : public PlatformTest { | 20 namespace { |
| 21 class ProfileRemovalObserver : public ProfileInfoCacheObserver { | |
|
sail
2013/06/12 21:16:49
new line above
| |
| 22 public: | |
| 23 ProfileRemovalObserver(ProfileManager* profile_manager, | |
| 24 AppController* app_controller, | |
| 25 base::FilePath& path) | |
| 26 : profile_manager_(profile_manager), | |
| 27 app_controller_(app_controller), | |
| 28 next_active_profile_path_(path) { | |
| 29 profile_manager_->GetProfileInfoCache().AddObserver(this); | |
| 30 } | |
| 31 | |
| 32 virtual ~ProfileRemovalObserver() { | |
| 33 profile_manager_->GetProfileInfoCache().RemoveObserver(this); | |
| 34 } | |
| 35 private: | |
|
sail
2013/06/12 21:16:49
new line above
| |
| 36 // ProfileInfoCacheObserver implementation: | |
| 37 virtual void OnProfileAdded(const base::FilePath& profile_path) OVERRIDE {} | |
| 38 virtual void OnProfileWasRemoved(const base::FilePath& profile_path, | |
| 39 const string16& profile_name) OVERRIDE { | |
| 40 base::FilePath lastProfilePath = [app_controller_ lastProfile]->GetPath(); | |
| 41 EXPECT_EQ(lastProfilePath, next_active_profile_path_); | |
| 42 } | |
| 43 virtual void OnProfileWillBeRemoved( | |
| 44 const base::FilePath& profile_path) OVERRIDE {} | |
| 45 virtual void OnProfileNameChanged(const base::FilePath& profile_path, | |
| 46 const string16& old_profile_name) | |
| 47 OVERRIDE {} | |
| 48 virtual void OnProfileAvatarChanged( | |
| 49 const base::FilePath& profile_path) OVERRIDE {} | |
| 50 | |
| 51 ProfileManager* profile_manager_; | |
| 52 AppController* app_controller_; // Weak; owns us. | |
| 53 base::FilePath& next_active_profile_path_; | |
| 54 DISALLOW_COPY_AND_ASSIGN(ProfileRemovalObserver); | |
| 55 }; | |
| 56 | |
| 57 } | |
| 58 | |
| 59 class AppControllerTest : public CocoaProfileTest { | |
| 13 }; | 60 }; |
| 14 | 61 |
| 15 TEST_F(AppControllerTest, DockMenu) { | 62 TEST_F(AppControllerTest, DockMenu) { |
| 16 scoped_nsobject<AppController> ac([[AppController alloc] init]); | 63 scoped_nsobject<AppController> ac([[AppController alloc] init]); |
| 17 NSMenu* menu = [ac applicationDockMenu:NSApp]; | 64 NSMenu* menu = [ac applicationDockMenu:NSApp]; |
| 18 NSMenuItem* item; | 65 NSMenuItem* item; |
| 19 | 66 |
| 20 EXPECT_TRUE(menu); | 67 EXPECT_TRUE(menu); |
| 21 EXPECT_NE(-1, [menu indexOfItemWithTag:IDC_NEW_WINDOW]); | 68 EXPECT_NE(-1, [menu indexOfItemWithTag:IDC_NEW_WINDOW]); |
| 22 EXPECT_NE(-1, [menu indexOfItemWithTag:IDC_NEW_INCOGNITO_WINDOW]); | 69 EXPECT_NE(-1, [menu indexOfItemWithTag:IDC_NEW_INCOGNITO_WINDOW]); |
| 23 for (item in [menu itemArray]) { | 70 for (item in [menu itemArray]) { |
| 24 EXPECT_EQ(ac.get(), [item target]); | 71 EXPECT_EQ(ac.get(), [item target]); |
| 25 EXPECT_EQ(@selector(commandFromDock:), [item action]); | 72 EXPECT_EQ(@selector(commandFromDock:), [item action]); |
| 26 } | 73 } |
| 27 } | 74 } |
| 75 | |
| 76 TEST_F(AppControllerTest, LastProfile) { | |
| 77 TestingProfileManager* manager = testing_profile_manager(); | |
| 78 | |
| 79 // Create two additional profiles. | |
| 80 // Since profiles are loaded alphabetically, prefix them with A to make sure | |
| 81 // that the default testing profile is not loaded instead. | |
| 82 base::FilePath dest_path1 = | |
| 83 manager->CreateTestingProfile("A New Profile 1")->GetPath(); | |
| 84 base::FilePath dest_path2 = | |
| 85 manager->CreateTestingProfile("A New Profile 2")->GetPath(); | |
| 86 ASSERT_EQ(3U, manager->profile_manager()->GetNumberOfProfiles()); | |
| 87 ASSERT_EQ(3U, manager->profile_manager()->GetLoadedProfiles().size()); | |
| 88 | |
| 89 PrefService* local_state = g_browser_process->local_state(); | |
| 90 local_state->SetString(prefs::kProfileLastUsed, | |
| 91 dest_path1.BaseName().MaybeAsASCII()); | |
| 92 | |
| 93 scoped_nsobject<AppController> ac([[AppController alloc] init]); | |
| 94 ProfileRemovalObserver observer(manager->profile_manager(), | |
|
sail
2013/06/12 21:16:49
do you need this observer? Could you just do a che
noms (inactive)
2013/06/13 20:56:25
Done.
| |
| 95 ac, | |
| 96 dest_path2); | |
| 97 | |
| 98 // Delete the active profile. The ProfileRemovalObserver will check the | |
| 99 // next active profile is set correctly. | |
| 100 manager->profile_manager()->ScheduleProfileForDeletion( | |
| 101 dest_path1, ProfileManager::CreateCallback()); | |
| 102 } | |
| OLD | NEW |