OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/profiles/avatar_icon_controller.h" | 5 #import "chrome/browser/ui/cocoa/profiles/avatar_icon_controller.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/mac/scoped_nsobject.h" | 8 #include "base/mac/scoped_nsobject.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" | 10 #include "chrome/browser/autocomplete/autocomplete_classifier_factory.h" |
11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 11 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
12 #include "chrome/browser/search_engines/template_url_service_factory.h" | 12 #include "chrome/browser/search_engines/template_url_service_factory.h" |
13 #include "chrome/browser/supervised_user/supervised_user_service.h" | 13 #include "chrome/browser/supervised_user/supervised_user_service.h" |
14 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | 14 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
15 #include "chrome/browser/ui/browser.h" | 15 #include "chrome/browser/ui/browser.h" |
16 #include "chrome/browser/ui/browser_commands.h" | 16 #include "chrome/browser/ui/browser_commands.h" |
17 #include "chrome/browser/ui/browser_window.h" | 17 #include "chrome/browser/ui/browser_window.h" |
18 #import "chrome/browser/ui/cocoa/base_bubble_controller.h" | 18 #import "chrome/browser/ui/cocoa/base_bubble_controller.h" |
19 #import "chrome/browser/ui/cocoa/browser_window_cocoa.h" | |
20 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | |
19 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 21 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
20 #include "chrome/browser/ui/cocoa/info_bubble_window.h" | 22 #include "chrome/browser/ui/cocoa/info_bubble_window.h" |
23 #import "chrome/browser/ui/cocoa/profiles/avatar_button_controller.h" | |
21 #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h" | 24 #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h" |
22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 25 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
23 #include "chrome/test/base/testing_profile.h" | 26 #include "chrome/test/base/testing_profile.h" |
24 #include "components/bookmarks/test/bookmark_test_helpers.h" | 27 #include "components/bookmarks/test/bookmark_test_helpers.h" |
25 #include "components/signin/core/common/profile_management_switches.h" | 28 #include "components/signin/core/common/profile_management_switches.h" |
26 #include "components/syncable_prefs/pref_service_syncable.h" | 29 #include "components/syncable_prefs/pref_service_syncable.h" |
27 | 30 |
28 class AvatarIconControllerTest : public CocoaProfileTest { | 31 class AvatarIconControllerTest : public CocoaProfileTest { |
29 public: | 32 public: |
33 // Incognito, which is the only way to show the icon | |
Robert Sesek
2015/09/30 21:25:08
Is this comment still relevant?
anthonyvd
2015/10/01 14:16:54
Done.
| |
34 AvatarIconControllerTest() {} | |
35 | |
30 void SetUp() override { | 36 void SetUp() override { |
31 switches::DisableNewAvatarMenuForTesting( | |
32 base::CommandLine::ForCurrentProcess()); | |
33 CocoaProfileTest::SetUp(); | 37 CocoaProfileTest::SetUp(); |
34 ASSERT_TRUE(browser()); | 38 ASSERT_TRUE(browser()); |
35 | |
36 controller_.reset( | |
37 [[AvatarIconController alloc] initWithBrowser:browser()]); | |
38 [[controller_ view] setHidden:YES]; | |
39 } | 39 } |
40 | 40 |
41 void TearDown() override { | 41 void TearDown() override { |
42 browser()->window()->Close(); | 42 browser()->window()->Close(); |
43 CocoaProfileTest::TearDown(); | 43 CocoaProfileTest::TearDown(); |
44 } | 44 } |
45 | 45 |
46 NSButton* button() { return [controller_ buttonView]; } | 46 AvatarBaseController* icon_controller() { |
47 | 47 BrowserWindowCocoa* window = (BrowserWindowCocoa*)browser()->window(); |
Robert Sesek
2015/09/30 21:25:08
nit: C-style casts are banned. static_cast<> inste
anthonyvd
2015/10/01 14:16:54
Done.
| |
48 NSView* view() { return [controller_ view]; } | 48 return [window->cocoa_controller() avatarButtonController]; |
49 | 49 } |
50 AvatarIconController* controller() { return controller_.get(); } | |
51 | |
52 private: | |
53 base::scoped_nsobject<AvatarIconController> controller_; | |
54 }; | 50 }; |
55 | 51 |
56 TEST_F(AvatarIconControllerTest, AddRemoveProfiles) { | 52 TEST_F(AvatarIconControllerTest, ShowingAvatarIconInIncognito) { |
57 EXPECT_TRUE([view() isHidden]); | |
58 | |
59 testing_profile_manager()->CreateTestingProfile("one"); | |
60 | |
61 EXPECT_FALSE([view() isHidden]); | |
62 | |
63 testing_profile_manager()->CreateTestingProfile("two"); | |
64 EXPECT_FALSE([view() isHidden]); | |
65 | |
66 testing_profile_manager()->DeleteTestingProfile("one"); | |
67 EXPECT_FALSE([view() isHidden]); | |
68 | |
69 testing_profile_manager()->DeleteTestingProfile("two"); | |
70 EXPECT_TRUE([view() isHidden]); | |
71 } | |
72 | |
73 TEST_F(AvatarIconControllerTest, DoubleOpen) { | |
74 // Create a second profile to enable the avatar menu. | |
75 testing_profile_manager()->CreateTestingProfile("p2"); | |
76 | |
77 EXPECT_FALSE([controller() menuController]); | |
78 | |
79 [button() performClick:button()]; | |
80 | |
81 BaseBubbleController* menu = [controller() menuController]; | |
82 EXPECT_TRUE([menu isKindOfClass:[AvatarMenuBubbleController class]]); | |
83 | |
84 EXPECT_TRUE(menu); | |
85 | |
86 [button() performClick:button()]; | |
87 EXPECT_EQ(menu, [controller() menuController]); | |
88 | |
89 // Do not animate out because that is hard to test around. | |
90 static_cast<InfoBubbleWindow*>(menu.window).allowedAnimations = | |
91 info_bubble::kAnimateNone; | |
92 [menu close]; | |
93 EXPECT_FALSE([controller() menuController]); | |
94 | |
95 testing_profile_manager()->DeleteTestingProfile("p2"); | |
96 } | |
97 | |
98 TEST_F(AvatarIconControllerTest, SupervisedUserLabel) { | |
99 DCHECK(!profile()->IsSupervised()); | |
100 EXPECT_FALSE([controller() labelButtonView]); | |
101 | |
102 // Create a second, supervised profile to enable the avatar menu. | |
103 std::string name = "p2"; | |
104 TestingProfile* profile = testing_profile_manager()->CreateTestingProfile( | |
105 name, scoped_ptr<syncable_prefs::PrefServiceSyncable>(), | |
106 base::ASCIIToUTF16(name), 0, "asdf", TestingProfile::TestingFactories()); | |
107 EXPECT_TRUE(profile->IsSupervised()); | |
108 | |
109 // http://crbug.com/39725 | |
110 TemplateURLServiceFactory::GetInstance()->SetTestingFactoryAndUse( | |
111 profile, &TemplateURLServiceFactory::BuildInstanceFor); | |
112 AutocompleteClassifierFactory::GetInstance()->SetTestingFactoryAndUse( | |
113 profile, &AutocompleteClassifierFactory::BuildInstanceFor); | |
114 profile->CreateBookmarkModel(true); | |
115 bookmarks::test::WaitForBookmarkModelToLoad( | |
116 BookmarkModelFactory::GetForProfile(profile)); | |
117 | |
118 Browser* browser = | 53 Browser* browser = |
119 new Browser(Browser::CreateParams(profile, chrome::GetActiveDesktop())); | 54 new Browser(Browser::CreateParams(profile()->GetOffTheRecordProfile(), |
120 // Build a new controller to check if it is initialized correctly for a | 55 chrome::GetActiveDesktop())); |
121 // supervised user profile. | 56 BrowserWindowCocoa* window = (BrowserWindowCocoa*)browser->window(); |
Robert Sesek
2015/09/30 21:25:08
No C-style casts.
anthonyvd
2015/10/01 14:16:54
Done.
| |
122 base::scoped_nsobject<AvatarIconController> controller( | 57 AvatarBaseController* icon_controller = |
123 [[AvatarIconController alloc] initWithBrowser:browser]); | 58 [window->cocoa_controller() avatarButtonController]; |
124 | 59 // In incognito, we should be using the AvatarIconController to show the |
125 EXPECT_TRUE([controller labelButtonView]); | 60 // incognito guy. |
61 EXPECT_TRUE([icon_controller isKindOfClass:[AvatarIconController class]]); | |
126 | 62 |
127 browser->window()->Close(); | 63 browser->window()->Close(); |
128 } | 64 } |
65 | |
66 TEST_F(AvatarIconControllerTest, ShowingAvatarButtonInRegularSession) { | |
67 // In a regular session, we should be using the AvatarButtonController to show | |
68 // the profile name. | |
69 EXPECT_TRUE([icon_controller() isKindOfClass:[AvatarButtonController class]]); | |
70 } | |
OLD | NEW |