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 #include "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "base/string_number_conversions.h" | 6 #include "base/string_number_conversions.h" |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/app/chrome_command_ids.h" | 8 #include "chrome/app/chrome_command_ids.h" |
9 #include "chrome/browser/automation/ui_controls.h" | 9 #include "chrome/browser/automation/ui_controls.h" |
10 #include "chrome/browser/bookmarks/bookmark_model.h" | 10 #include "chrome/browser/bookmarks/bookmark_model.h" |
11 #include "chrome/browser/bookmarks/bookmark_utils.h" | 11 #include "chrome/browser/bookmarks/bookmark_utils.h" |
12 #include "chrome/browser/prefs/pref_service.h" | 12 #include "chrome/browser/prefs/pref_service.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/ui/browser.h" | |
14 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" | 15 #include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" |
15 #include "chrome/common/chrome_notification_types.h" | 16 #include "chrome/common/chrome_notification_types.h" |
16 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
17 #include "chrome/test/base/ui_test_utils.h" | 18 #include "chrome/test/base/ui_test_utils.h" |
18 #include "chrome/test/base/testing_profile.h" | 19 #include "chrome/test/base/testing_profile.h" |
19 #include "chrome/test/base/view_event_test_base.h" | 20 #include "chrome/test/base/view_event_test_base.h" |
21 #include "chrome/test/testing_browser_process.h" | |
20 #include "content/browser/tab_contents/page_navigator.h" | 22 #include "content/browser/tab_contents/page_navigator.h" |
21 #include "content/common/notification_service.h" | 23 #include "content/common/notification_service.h" |
22 #include "grit/generated_resources.h" | 24 #include "grit/generated_resources.h" |
23 #include "ui/base/accessibility/accessibility_types.h" | 25 #include "ui/base/accessibility/accessibility_types.h" |
24 #include "ui/base/clipboard/clipboard.h" | 26 #include "ui/base/clipboard/clipboard.h" |
25 #include "ui/base/keycodes/keyboard_codes.h" | 27 #include "ui/base/keycodes/keyboard_codes.h" |
26 #include "views/controls/button/menu_button.h" | 28 #include "views/controls/button/menu_button.h" |
27 #include "views/controls/button/text_button.h" | 29 #include "views/controls/button/text_button.h" |
28 #include "views/controls/menu/menu_controller.h" | 30 #include "views/controls/menu/menu_controller.h" |
29 #include "views/controls/menu/menu_item_view.h" | 31 #include "views/controls/menu/menu_item_view.h" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
173 } | 175 } |
174 | 176 |
175 virtual void SetUp() { | 177 virtual void SetUp() { |
176 BookmarkBarView::testing_ = true; | 178 BookmarkBarView::testing_ = true; |
177 | 179 |
178 profile_.reset(new TestingProfile()); | 180 profile_.reset(new TestingProfile()); |
179 profile_->CreateBookmarkModel(true); | 181 profile_->CreateBookmarkModel(true); |
180 profile_->BlockUntilBookmarkModelLoaded(); | 182 profile_->BlockUntilBookmarkModelLoaded(); |
181 profile_->GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); | 183 profile_->GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); |
182 | 184 |
185 browser_.reset(new Browser(Browser::TYPE_TABBED, profile_.get())); | |
186 | |
183 model_ = profile_->GetBookmarkModel(); | 187 model_ = profile_->GetBookmarkModel(); |
184 model_->ClearStore(); | 188 model_->ClearStore(); |
185 | 189 |
186 bb_view_ = new BookmarkBarView(profile_.get(), NULL); | 190 bb_view_.reset(new BookmarkBarView(browser_.get())); |
187 bb_view_->SetPageNavigator(&navigator_); | 191 bb_view_->SetPageNavigator(&navigator_); |
188 | 192 |
189 AddTestData(CreateBigMenu()); | 193 AddTestData(CreateBigMenu()); |
190 | 194 |
191 // Calculate the preferred size so that one button doesn't fit, which | 195 // Calculate the preferred size so that one button doesn't fit, which |
192 // triggers the overflow button to appear. | 196 // triggers the overflow button to appear. |
193 // | 197 // |
194 // BookmarkBarView::Layout does nothing if the parent is NULL and | 198 // BookmarkBarView::Layout does nothing if the parent is NULL and |
195 // GetPreferredSize hard codes a width of 1. For that reason we add the | 199 // GetPreferredSize hard codes a width of 1. For that reason we add the |
196 // BookmarkBarView to a dumby view as the parent. | 200 // BookmarkBarView to a dumby view as the parent. |
197 // | 201 // |
198 // This code looks a bit hacky, but I've written it so that it shouldn't | 202 // This code looks a bit hacky, but I've written it so that it shouldn't |
199 // be dependant upon any of the layout code in BookmarkBarView. Instead | 203 // be dependant upon any of the layout code in BookmarkBarView. Instead |
200 // we brute force search for a size that triggers the overflow button. | 204 // we brute force search for a size that triggers the overflow button. |
201 views::View tmp_parent; | 205 views::View tmp_parent; |
202 | 206 |
203 tmp_parent.AddChildView(bb_view_); | 207 tmp_parent.AddChildView(bb_view_.get()); |
204 | 208 |
205 bb_view_pref_ = bb_view_->GetPreferredSize(); | 209 bb_view_pref_ = bb_view_->GetPreferredSize(); |
206 bb_view_pref_.set_width(1000); | 210 bb_view_pref_.set_width(1000); |
207 views::TextButton* button = GetBookmarkButton(4); | 211 views::TextButton* button = GetBookmarkButton(4); |
208 while (button->IsVisible()) { | 212 while (button->IsVisible()) { |
209 bb_view_pref_.set_width(bb_view_pref_.width() - 25); | 213 bb_view_pref_.set_width(bb_view_pref_.width() - 25); |
210 bb_view_->SetBounds(0, 0, bb_view_pref_.width(), bb_view_pref_.height()); | 214 bb_view_->SetBounds(0, 0, bb_view_pref_.width(), bb_view_pref_.height()); |
211 bb_view_->Layout(); | 215 bb_view_->Layout(); |
212 } | 216 } |
213 | 217 |
214 tmp_parent.RemoveChildView(bb_view_); | 218 tmp_parent.RemoveChildView(bb_view_.get()); |
215 | 219 |
216 ViewEventTestBase::SetUp(); | 220 ViewEventTestBase::SetUp(); |
217 } | 221 } |
218 | 222 |
219 virtual void TearDown() { | 223 virtual void TearDown() { |
224 browser_->CloseAllTabs(); | |
225 bb_view_.reset(); | |
226 browser_.reset(); | |
227 profile_.reset(); | |
228 MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask); | |
sky
2011/08/08 16:02:29
Please add a comment as to why you need to do quit
Peter Kasting
2011/08/08 17:52:07
Sure.
| |
229 MessageLoop::current()->Run(); | |
220 ViewEventTestBase::TearDown(); | 230 ViewEventTestBase::TearDown(); |
221 BookmarkBarView::testing_ = false; | 231 BookmarkBarView::testing_ = false; |
222 views::ViewsDelegate::views_delegate = NULL; | 232 views::ViewsDelegate::views_delegate = NULL; |
223 } | 233 } |
224 | 234 |
225 protected: | 235 protected: |
226 void InstallViewsDelegate() { | 236 void InstallViewsDelegate() { |
227 views::ViewsDelegate::views_delegate = &views_delegate_; | 237 views::ViewsDelegate::views_delegate = &views_delegate_; |
228 } | 238 } |
229 | 239 |
230 virtual views::View* CreateContentsView() { | 240 virtual views::View* CreateContentsView() { |
231 return bb_view_; | 241 return bb_view_.get(); |
232 } | 242 } |
233 | 243 |
234 virtual gfx::Size GetPreferredSize() { return bb_view_pref_; } | 244 virtual gfx::Size GetPreferredSize() { return bb_view_pref_; } |
235 | 245 |
236 views::TextButton* GetBookmarkButton(int view_index) { | 246 views::TextButton* GetBookmarkButton(int view_index) { |
237 return bb_view_->GetBookmarkButton(view_index); | 247 return bb_view_->GetBookmarkButton(view_index); |
238 } | 248 } |
239 | 249 |
240 // See comment above class description for what this does. | 250 // See comment above class description for what this does. |
241 virtual bool CreateBigMenu() { return false; } | 251 virtual bool CreateBigMenu() { return false; } |
242 | 252 |
243 BookmarkModel* model_; | 253 BookmarkModel* model_; |
244 BookmarkBarView* bb_view_; | 254 scoped_ptr<BookmarkBarView> bb_view_; |
245 TestingPageNavigator navigator_; | 255 TestingPageNavigator navigator_; |
246 | 256 |
247 private: | 257 private: |
248 void AddTestData(bool big_menu) { | 258 void AddTestData(bool big_menu) { |
249 const BookmarkNode* bb_node = model_->bookmark_bar_node(); | 259 const BookmarkNode* bb_node = model_->bookmark_bar_node(); |
250 std::string test_base = "file:///c:/tmp/"; | 260 std::string test_base = "file:///c:/tmp/"; |
251 const BookmarkNode* f1 = model_->AddFolder(bb_node, 0, ASCIIToUTF16("F1")); | 261 const BookmarkNode* f1 = model_->AddFolder(bb_node, 0, ASCIIToUTF16("F1")); |
252 model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); | 262 model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); |
253 const BookmarkNode* f11 = model_->AddFolder(f1, 1, ASCIIToUTF16("F11")); | 263 const BookmarkNode* f11 = model_->AddFolder(f1, 1, ASCIIToUTF16("F11")); |
254 model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); | 264 model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); |
(...skipping 13 matching lines...) Expand all Loading... | |
268 ASCIIToUTF16("OF")); | 278 ASCIIToUTF16("OF")); |
269 model_->AddURL(of, 0, ASCIIToUTF16("ofa"), GURL(test_base + "ofa")); | 279 model_->AddURL(of, 0, ASCIIToUTF16("ofa"), GURL(test_base + "ofa")); |
270 model_->AddURL(of, 1, ASCIIToUTF16("ofb"), GURL(test_base + "ofb")); | 280 model_->AddURL(of, 1, ASCIIToUTF16("ofb"), GURL(test_base + "ofb")); |
271 const BookmarkNode* of2 = model_->AddFolder(model_->other_node(), 2, | 281 const BookmarkNode* of2 = model_->AddFolder(model_->other_node(), 2, |
272 ASCIIToUTF16("OF2")); | 282 ASCIIToUTF16("OF2")); |
273 model_->AddURL(of2, 0, ASCIIToUTF16("of2a"), GURL(test_base + "of2a")); | 283 model_->AddURL(of2, 0, ASCIIToUTF16("of2a"), GURL(test_base + "of2a")); |
274 model_->AddURL(of2, 1, ASCIIToUTF16("of2b"), GURL(test_base + "of2b")); | 284 model_->AddURL(of2, 1, ASCIIToUTF16("of2b"), GURL(test_base + "of2b")); |
275 } | 285 } |
276 | 286 |
277 gfx::Size bb_view_pref_; | 287 gfx::Size bb_view_pref_; |
288 ScopedTestingBrowserProcess testing_browser_process_; | |
278 scoped_ptr<TestingProfile> profile_; | 289 scoped_ptr<TestingProfile> profile_; |
290 scoped_ptr<Browser> browser_; | |
279 BrowserThread ui_thread_; | 291 BrowserThread ui_thread_; |
280 BrowserThread file_thread_; | 292 BrowserThread file_thread_; |
281 ViewsDelegateImpl views_delegate_; | 293 ViewsDelegateImpl views_delegate_; |
282 }; | 294 }; |
283 | 295 |
284 // Clicks on first menu, makes sure button is depressed. Moves mouse to first | 296 // Clicks on first menu, makes sure button is depressed. Moves mouse to first |
285 // child, clicks it and makes sure a navigation occurs. | 297 // child, clicks it and makes sure a navigation occurs. |
286 class BookmarkBarViewTest1 : public BookmarkBarViewEventTestBase { | 298 class BookmarkBarViewTest1 : public BookmarkBarViewEventTestBase { |
287 protected: | 299 protected: |
288 virtual void DoTestOnMessageLoop() { | 300 virtual void DoTestOnMessageLoop() { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
351 void Step2() { | 363 void Step2() { |
352 // Menu should be showing. | 364 // Menu should be showing. |
353 views::MenuItemView* menu = bb_view_->GetMenu(); | 365 views::MenuItemView* menu = bb_view_->GetMenu(); |
354 ASSERT_TRUE(menu != NULL && menu->GetSubmenu()->IsShowing()); | 366 ASSERT_TRUE(menu != NULL && menu->GetSubmenu()->IsShowing()); |
355 | 367 |
356 // Click on 0x0, which should trigger closing menu. | 368 // Click on 0x0, which should trigger closing menu. |
357 // NOTE: this code assume there is a left margin, which is currently | 369 // NOTE: this code assume there is a left margin, which is currently |
358 // true. If that changes, this code will need to find another empty space | 370 // true. If that changes, this code will need to find another empty space |
359 // to press the mouse on. | 371 // to press the mouse on. |
360 gfx::Point mouse_loc; | 372 gfx::Point mouse_loc; |
361 views::View::ConvertPointToScreen(bb_view_, &mouse_loc); | 373 views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); |
362 ui_controls::SendMouseMove(0, 0); | 374 ui_controls::SendMouseMove(0, 0); |
363 ui_controls::SendMouseEventsNotifyWhenDone( | 375 ui_controls::SendMouseEventsNotifyWhenDone( |
364 ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, | 376 ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, |
365 CreateEventTask(this, &BookmarkBarViewTest2::Step3)); | 377 CreateEventTask(this, &BookmarkBarViewTest2::Step3)); |
366 } | 378 } |
367 | 379 |
368 void Step3() { | 380 void Step3() { |
369 // The menu shouldn't be showing. | 381 // The menu shouldn't be showing. |
370 views::MenuItemView* menu = bb_view_->GetMenu(); | 382 views::MenuItemView* menu = bb_view_->GetMenu(); |
371 ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); | 383 ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1036 views::MenuItemView* menu = bb_view_->GetContextMenu(); | 1048 views::MenuItemView* menu = bb_view_->GetContextMenu(); |
1037 ASSERT_TRUE(!menu || !menu->GetSubmenu() || | 1049 ASSERT_TRUE(!menu || !menu->GetSubmenu() || |
1038 !menu->GetSubmenu()->IsShowing()); | 1050 !menu->GetSubmenu()->IsShowing()); |
1039 | 1051 |
1040 // But the menu should be showing. | 1052 // But the menu should be showing. |
1041 menu = bb_view_->GetMenu(); | 1053 menu = bb_view_->GetMenu(); |
1042 ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); | 1054 ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); |
1043 | 1055 |
1044 // Now click on empty space. | 1056 // Now click on empty space. |
1045 gfx::Point mouse_loc; | 1057 gfx::Point mouse_loc; |
1046 views::View::ConvertPointToScreen(bb_view_, &mouse_loc); | 1058 views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); |
1047 ui_controls::SendMouseMove(mouse_loc.x(), mouse_loc.y()); | 1059 ui_controls::SendMouseMove(mouse_loc.x(), mouse_loc.y()); |
1048 ui_controls::SendMouseEventsNotifyWhenDone( | 1060 ui_controls::SendMouseEventsNotifyWhenDone( |
1049 ui_controls::LEFT, ui_controls::UP | ui_controls::DOWN, | 1061 ui_controls::LEFT, ui_controls::UP | ui_controls::DOWN, |
1050 CreateEventTask(this, &BookmarkBarViewTest11::Step5)); | 1062 CreateEventTask(this, &BookmarkBarViewTest11::Step5)); |
1051 } | 1063 } |
1052 | 1064 |
1053 void Step5() { | 1065 void Step5() { |
1054 // Make sure the menu is not showing. | 1066 // Make sure the menu is not showing. |
1055 views::MenuItemView* menu = bb_view_->GetMenu(); | 1067 views::MenuItemView* menu = bb_view_->GetMenu(); |
1056 ASSERT_TRUE(!menu || !menu->GetSubmenu() || | 1068 ASSERT_TRUE(!menu || !menu->GetSubmenu() || |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1561 ASSERT_TRUE(menu != NULL); | 1573 ASSERT_TRUE(menu != NULL); |
1562 ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); | 1574 ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); |
1563 | 1575 |
1564 menu->GetMenuController()->CancelAll(); | 1576 menu->GetMenuController()->CancelAll(); |
1565 | 1577 |
1566 Done(); | 1578 Done(); |
1567 } | 1579 } |
1568 }; | 1580 }; |
1569 | 1581 |
1570 VIEW_TEST(BookmarkBarViewTest19, SiblingMenu) | 1582 VIEW_TEST(BookmarkBarViewTest19, SiblingMenu) |
OLD | NEW |