Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller_browsertest.mm

Issue 435863002: Fix some infobar problems. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add 4 spaces indent Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/browser_window_controller_private.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
11 #include "chrome/app/chrome_command_ids.h"
11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/devtools/devtools_window_testing.h" 13 #include "chrome/browser/devtools/devtools_window_testing.h"
13 #include "chrome/browser/infobars/infobar_service.h" 14 #include "chrome/browser/infobars/infobar_service.h"
14 #include "chrome/browser/infobars/simple_alert_infobar_delegate.h" 15 #include "chrome/browser/infobars/simple_alert_infobar_delegate.h"
15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_manager.h" 17 #include "chrome/browser/profiles/profile_manager.h"
17 #include "chrome/browser/ui/bookmarks/bookmark_utils.h" 18 #include "chrome/browser/ui/bookmarks/bookmark_utils.h"
18 #include "chrome/browser/ui/browser.h" 19 #include "chrome/browser/ui/browser.h"
19 #include "chrome/browser/ui/browser_commands.h" 20 #include "chrome/browser/ui/browser_commands.h"
20 #include "chrome/browser/ui/browser_list.h" 21 #include "chrome/browser/ui/browser_list.h"
21 #include "chrome/browser/ui/browser_window.h" 22 #include "chrome/browser/ui/browser_window.h"
22 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h" 23 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h"
23 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" 24 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
24 #import "chrome/browser/ui/cocoa/fast_resize_view.h" 25 #import "chrome/browser/ui/cocoa/fast_resize_view.h"
25 #import "chrome/browser/ui/cocoa/history_overlay_controller.h" 26 #import "chrome/browser/ui/cocoa/history_overlay_controller.h"
26 #import "chrome/browser/ui/cocoa/infobars/infobar_cocoa.h" 27 #import "chrome/browser/ui/cocoa/infobars/infobar_cocoa.h"
27 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h" 28 #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
29 #import "chrome/browser/ui/cocoa/infobars/infobar_controller.h"
30 #import "chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.h"
28 #import "chrome/browser/ui/cocoa/nsview_additions.h" 31 #import "chrome/browser/ui/cocoa/nsview_additions.h"
29 #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h" 32 #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h"
30 #import "chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.h" 33 #import "chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.h"
31 #include "chrome/browser/ui/extensions/application_launch.h" 34 #include "chrome/browser/ui/extensions/application_launch.h"
32 #include "chrome/browser/ui/find_bar/find_bar_controller.h" 35 #include "chrome/browser/ui/find_bar/find_bar_controller.h"
33 #include "chrome/browser/ui/find_bar/find_bar.h" 36 #include "chrome/browser/ui/find_bar/find_bar.h"
34 #include "chrome/browser/ui/tabs/tab_strip_model.h" 37 #include "chrome/browser/ui/tabs/tab_strip_model.h"
35 #include "chrome/test/base/in_process_browser_test.h" 38 #include "chrome/test/base/in_process_browser_test.h"
36 #include "chrome/test/base/testing_profile.h" 39 #include "chrome/test/base/testing_profile.h"
37 #include "content/public/browser/web_contents.h" 40 #include "content/public/browser/web_contents.h"
41 #include "content/public/test/test_utils.h"
38 #import "testing/gtest_mac.h" 42 #import "testing/gtest_mac.h"
43 #include "ui/gfx/animation/slide_animation.h"
39 44
40 namespace { 45 namespace {
41 46
42 void CreateProfileCallback(const base::Closure& quit_closure, 47 void CreateProfileCallback(const base::Closure& quit_closure,
43 Profile* profile, 48 Profile* profile,
44 Profile::CreateStatus status) { 49 Profile::CreateStatus status) {
45 EXPECT_TRUE(profile); 50 EXPECT_TRUE(profile);
46 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status); 51 EXPECT_NE(Profile::CREATE_STATUS_LOCAL_FAIL, status);
47 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status); 52 EXPECT_NE(Profile::CREATE_STATUS_REMOTE_FAIL, status);
48 // This will be called multiple times. Wait until the profile is initialized 53 // This will be called multiple times. Wait until the profile is initialized
49 // fully to quit the loop. 54 // fully to quit the loop.
50 if (status == Profile::CREATE_STATUS_INITIALIZED) 55 if (status == Profile::CREATE_STATUS_INITIALIZED)
51 quit_closure.Run(); 56 quit_closure.Run();
52 } 57 }
53 58
54 enum ViewID { 59 enum ViewID {
55 VIEW_ID_TOOLBAR, 60 VIEW_ID_TOOLBAR,
56 VIEW_ID_BOOKMARK_BAR, 61 VIEW_ID_BOOKMARK_BAR,
57 VIEW_ID_INFO_BAR, 62 VIEW_ID_INFO_BAR,
58 VIEW_ID_FIND_BAR, 63 VIEW_ID_FIND_BAR,
59 VIEW_ID_DOWNLOAD_SHELF, 64 VIEW_ID_DOWNLOAD_SHELF,
60 VIEW_ID_TAB_CONTENT_AREA, 65 VIEW_ID_TAB_CONTENT_AREA,
61 VIEW_ID_FULLSCREEN_FLOATING_BAR, 66 VIEW_ID_FULLSCREEN_FLOATING_BAR,
62 VIEW_ID_COUNT, 67 VIEW_ID_COUNT,
63 }; 68 };
64 69
65 } // namespace 70 } // namespace
66 71
72 @interface InfoBarContainerController(TestingAPI)
73 - (BOOL)isTopInfoBarAnimationRunning;
74 @end
75
76 @implementation InfoBarContainerController(TestingAPI)
77 - (BOOL)isTopInfoBarAnimationRunning {
78 InfoBarController* infoBarController = [infobarControllers_ objectAtIndex:0];
79 if (infoBarController) {
80 const gfx::SlideAnimation& infobarAnimation =
81 static_cast<const InfoBarCocoa*>(
82 infoBarController.infobar)->animation();
83 return infobarAnimation.is_animating();
84 }
85 return NO;
86 }
87 @end
88
67 class BrowserWindowControllerTest : public InProcessBrowserTest { 89 class BrowserWindowControllerTest : public InProcessBrowserTest {
68 public: 90 public:
69 BrowserWindowControllerTest() : InProcessBrowserTest() { 91 BrowserWindowControllerTest() : InProcessBrowserTest() {
70 } 92 }
71 93
72 virtual void SetUpOnMainThread() OVERRIDE { 94 virtual void SetUpOnMainThread() OVERRIDE {
73 [[controller() bookmarkBarController] setStateAnimationsEnabled:NO]; 95 [[controller() bookmarkBarController] setStateAnimationsEnabled:NO];
74 [[controller() bookmarkBarController] setInnerContentAnimationsEnabled:NO]; 96 [[controller() bookmarkBarController] setInnerContentAnimationsEnabled:NO];
75 } 97 }
76 98
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 149
128 CGFloat GetViewHeight(ViewID viewID) const { 150 CGFloat GetViewHeight(ViewID viewID) const {
129 CGFloat height = NSHeight([GetViewWithID(viewID) frame]); 151 CGFloat height = NSHeight([GetViewWithID(viewID) frame]);
130 if (viewID == VIEW_ID_INFO_BAR) { 152 if (viewID == VIEW_ID_INFO_BAR) {
131 height -= [[controller() infoBarContainerController] 153 height -= [[controller() infoBarContainerController]
132 overlappingTipHeight]; 154 overlappingTipHeight];
133 } 155 }
134 return height; 156 return height;
135 } 157 }
136 158
159 static void CheckTopInfoBarAnimation(
160 InfoBarContainerController* info_bar_container_controller,
161 const base::Closure& quit_task) {
162 if (![info_bar_container_controller isTopInfoBarAnimationRunning])
163 quit_task.Run();
164 }
165
166 static void CheckBookmarkBarAnimation(
167 BookmarkBarController* bookmark_bar_controller,
168 const base::Closure& quit_task) {
169 if (![bookmark_bar_controller isAnimationRunning])
170 quit_task.Run();
171 }
172
173 void WaitForTopInfoBarAnimationToFinish() {
174 scoped_refptr<content::MessageLoopRunner> runner =
175 new content::MessageLoopRunner;
176
177 base::Timer timer(false, true);
178 timer.Start(
179 FROM_HERE,
180 base::TimeDelta::FromMilliseconds(15),
181 base::Bind(&CheckTopInfoBarAnimation,
182 [controller() infoBarContainerController],
183 runner->QuitClosure()));
184 runner->Run();
185 }
186
187 void WaitForBookmarkBarAnimationToFinish() {
188 scoped_refptr<content::MessageLoopRunner> runner =
189 new content::MessageLoopRunner;
190
191 base::Timer timer(false, true);
192 timer.Start(
193 FROM_HERE,
194 base::TimeDelta::FromMilliseconds(15),
195 base::Bind(&CheckBookmarkBarAnimation,
196 [controller() bookmarkBarController],
197 runner->QuitClosure()));
198 runner->Run();
199 }
200
201 NSInteger GetExpectedTopInfoBarTipHeight() {
202 InfoBarContainerController* info_bar_container_controller =
203 [controller() infoBarContainerController];
204 CGFloat overlapping_tip_height =
205 [info_bar_container_controller overlappingTipHeight];
206 LocationBarViewMac* location_bar_view = [controller() locationBarBridge];
207 NSPoint icon_bottom = location_bar_view->GetPageInfoBubblePoint();
208
209 NSPoint info_bar_top = NSMakePoint(0,
210 NSHeight([info_bar_container_controller view].frame) -
211 overlapping_tip_height);
212 info_bar_top = [[info_bar_container_controller view]
213 convertPoint:info_bar_top toView:nil];
214 return icon_bottom.y - info_bar_top.y;
215 }
216
137 private: 217 private:
138 DISALLOW_COPY_AND_ASSIGN(BrowserWindowControllerTest); 218 DISALLOW_COPY_AND_ASSIGN(BrowserWindowControllerTest);
139 }; 219 };
140 220
141 // Tests that adding the first profile moves the Lion fullscreen button over 221 // Tests that adding the first profile moves the Lion fullscreen button over
142 // correctly. 222 // correctly.
143 // DISABLED_ because it regularly times out: http://crbug.com/159002. 223 // DISABLED_ because it regularly times out: http://crbug.com/159002.
144 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest, 224 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest,
145 DISABLED_ProfileAvatarFullscreenButton) { 225 DISABLED_ProfileAvatarFullscreenButton) {
146 if (base::mac::IsOSSnowLeopard()) 226 if (base::mac::IsOSSnowLeopard())
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 DevToolsWindow* devtools_window = 427 DevToolsWindow* devtools_window =
348 DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true); 428 DevToolsWindowTesting::OpenDevToolsWindowSync(browser(), true);
349 DevToolsWindowTesting::Get(devtools_window)->SetInspectedPageBounds( 429 DevToolsWindowTesting::Get(devtools_window)->SetInspectedPageBounds(
350 gfx::Rect(10, 10, 100, 100)); 430 gfx::Rect(10, 10, 100, 100));
351 431
352 NSPoint originWithDevTools = [controller() statusBubbleBaseFrame].origin; 432 NSPoint originWithDevTools = [controller() statusBubbleBaseFrame].origin;
353 EXPECT_FALSE(NSEqualPoints(origin, originWithDevTools)); 433 EXPECT_FALSE(NSEqualPoints(origin, originWithDevTools));
354 434
355 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window); 435 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools_window);
356 } 436 }
437
438 // Tests that top infobar tip is streched when bookmark bar becomes SHOWN/HIDDEN
439 IN_PROC_BROWSER_TEST_F(BrowserWindowControllerTest,
440 InfoBarTipStrechedWhenBookmarkBarStatusChanged) {
441 EXPECT_FALSE([controller() isBookmarkBarVisible]);
442 ShowInfoBar(browser());
443 // The infobar tip is animated during the infobar is being added, wait until
444 // it completes.
445 WaitForTopInfoBarAnimationToFinish();
446
447 EXPECT_FALSE([[controller() infoBarContainerController]
448 shouldSuppressTopInfoBarTip]);
449
450 NSInteger max_tip_height = infobars::InfoBar::kMaximumArrowTargetHeight +
451 infobars::InfoBar::kSeparatorLineHeight;
452
453 chrome::ExecuteCommand(browser(), IDC_SHOW_BOOKMARK_BAR);
454 WaitForBookmarkBarAnimationToFinish();
455 EXPECT_TRUE([controller() isBookmarkBarVisible]);
456 EXPECT_EQ(std::min(GetExpectedTopInfoBarTipHeight(), max_tip_height),
457 [[controller() infoBarContainerController] overlappingTipHeight]);
458
459 chrome::ExecuteCommand(browser(), IDC_SHOW_BOOKMARK_BAR);
460 WaitForBookmarkBarAnimationToFinish();
461 EXPECT_FALSE([controller() isBookmarkBarVisible]);
462 EXPECT_EQ(std::min(GetExpectedTopInfoBarTipHeight(), max_tip_height),
463 [[controller() infoBarContainerController] overlappingTipHeight]);
464 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/browser_window_controller_private.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698