OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/ui/views/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
6 | 6 |
7 #include "chrome/app/chrome_command_ids.h" | 7 #include "chrome/app/chrome_command_ids.h" |
8 #include "chrome/browser/ui/browser_commands.h" | 8 #include "chrome/browser/ui/browser_commands.h" |
9 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" | 9 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
10 #include "chrome/browser/ui/views/frame/browser_view_layout.h" | 10 #include "chrome/browser/ui/views/frame/browser_view_layout.h" |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 header_offset.y(); | 205 header_offset.y(); |
206 | 206 |
207 // The web contents should be flush with the bottom of the header. | 207 // The web contents should be flush with the bottom of the header. |
208 EXPECT_EQ(bottom_of_header, contents_container->y()); | 208 EXPECT_EQ(bottom_of_header, contents_container->y()); |
209 | 209 |
210 // The find bar should overlap the 1px header/web-contents separator at the | 210 // The find bar should overlap the 1px header/web-contents separator at the |
211 // bottom of the header. | 211 // bottom of the header. |
212 EXPECT_EQ(browser_view()->frame()->GetTopInset() - 1, | 212 EXPECT_EQ(browser_view()->frame()->GetTopInset() - 1, |
213 browser_view()->GetFindBarBoundingBox().y()); | 213 browser_view()->GetFindBarBoundingBox().y()); |
214 } | 214 } |
215 | |
216 #if defined(OS_WIN) | |
217 | |
218 // This class provides functionality to test the incognito window/normal window | |
219 // switcher button which is added to Windows 8 metro Chrome. | |
220 // We create the BrowserView ourselves in the | |
221 // BrowserWithTestWindowTest::CreateBrowserWindow function override and add the | |
222 // switcher button to the view. We also provide an incognito profile to ensure | |
223 // that the switcher button is visible. | |
224 class BrowserViewIncognitoSwitcherTest : public TestWithBrowserView { | |
225 public: | |
226 // Subclass of BrowserView, which overrides the GetRestoreBounds/IsMaximized | |
227 // functions to return dummy values. This is needed because we create the | |
228 // BrowserView instance ourselves and initialize it with the created Browser | |
229 // instance. These functions get called before the underlying Widget is | |
230 // initialized which causes a crash while dereferencing a null native_widget_ | |
231 // pointer in the Widget class. | |
232 class TestBrowserView : public BrowserView { | |
233 public: | |
234 virtual ~TestBrowserView() {} | |
235 | |
236 virtual gfx::Rect GetRestoredBounds() const OVERRIDE { | |
237 return gfx::Rect(); | |
238 } | |
239 virtual bool IsMaximized() const OVERRIDE { | |
240 return false; | |
241 } | |
242 }; | |
243 | |
244 BrowserViewIncognitoSwitcherTest() | |
245 : browser_view_(NULL) {} | |
246 | |
247 virtual void SetUp() OVERRIDE { | |
248 TestWithBrowserView::SetUp(); | |
249 browser_view_->Init(browser()); | |
250 (new BrowserFrame(browser_view_))->InitBrowserFrame(); | |
251 browser_view_->SetBounds(gfx::Rect(10, 10, 500, 500)); | |
252 browser_view_->Show(); | |
253 } | |
254 | |
255 virtual void TearDown() OVERRIDE { | |
256 // ok to release the window_ pointer because BrowserViewTest::TearDown | |
257 // deletes the BrowserView instance created. | |
258 release_browser_window(); | |
259 BrowserViewTest::TearDown(); | |
260 browser_view_ = NULL; | |
261 } | |
262 | |
263 virtual BrowserWindow* CreateBrowserWindow() OVERRIDE { | |
264 // We need an incognito profile for the window switcher button to be | |
265 // visible. | |
266 // This profile instance is owned by the TestingProfile instance within the | |
267 // BrowserWithTestWindowTest class. | |
268 TestingProfile::Builder builder; | |
269 builder.SetIncognito(); | |
270 GetProfile()->SetOffTheRecordProfile(builder.Build()); | |
271 | |
272 browser_view_ = new TestBrowserView(); | |
273 | |
274 views::ImageButton* switcher_button = new views::ImageButton(NULL); | |
275 // The button in the incognito window has the hot-cold images inverted | |
276 // with respect to the regular browser window. | |
277 switcher_button->SetImage( | |
278 views::ImageButton::STATE_NORMAL, | |
279 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
280 IDR_INCOGNITO_SWITCH_OFF)); | |
281 switcher_button->SetImage( | |
282 views::ImageButton::STATE_HOVERED, | |
283 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | |
284 IDR_INCOGNITO_SWITCH_ON)); | |
285 switcher_button->SetImageAlignment(views::ImageButton::ALIGN_CENTER, | |
286 views::ImageButton::ALIGN_MIDDLE); | |
287 | |
288 browser_view_->SetWindowSwitcherButton(switcher_button); | |
289 return browser_view_; | |
290 } | |
291 | |
292 private: | |
293 BrowserView* browser_view_; | |
294 | |
295 DISALLOW_COPY_AND_ASSIGN(BrowserViewIncognitoSwitcherTest); | |
296 }; | |
297 | |
298 // Test whether the windows incognito/normal browser window switcher button | |
299 // is the event handler for a point within its bounds. The event handler for | |
300 // a point in the View class is dependent on the order in which children are | |
301 // added to it. This test ensures that we don't regress in the window switcher | |
302 // functionality when additional children are added to the BrowserView class. | |
303 TEST_F(BrowserViewIncognitoSwitcherTest, | |
304 BrowserViewIncognitoSwitcherEventHandlerTest) { | |
305 // |browser_view_| owns the Browser, not the test class. | |
306 EXPECT_TRUE(browser_view()->browser()); | |
307 // Test initial state. | |
308 EXPECT_TRUE(browser_view()->IsTabStripVisible()); | |
309 // Validate whether the window switcher button is the target for the position | |
310 // passed in. | |
311 gfx::Point switcher_point(browser_view()->window_switcher_button()->x() + 2, | |
312 browser_view()->window_switcher_button()->y()); | |
313 EXPECT_EQ(browser_view()->GetEventHandlerForPoint(switcher_point), | |
314 browser_view()->window_switcher_button()); | |
315 } | |
316 #endif | |
OLD | NEW |