Index: chrome/browser/views/bookmark_bar_view_test.cc |
diff --git a/chrome/browser/views/bookmark_bar_view_test.cc b/chrome/browser/views/bookmark_bar_view_test.cc |
index 05c19c5299da876e8a679048cc347c3bfeef005f..2f895dcfaf27d5cb9a0030b244676fbf24eba123 100644 |
--- a/chrome/browser/views/bookmark_bar_view_test.cc |
+++ b/chrome/browser/views/bookmark_bar_view_test.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -22,6 +22,7 @@ |
#include "views/controls/menu/menu_controller.h" |
#include "views/controls/menu/menu_item_view.h" |
#include "views/controls/menu/submenu_view.h" |
+#include "views/views_delegate.h" |
#include "views/window/window.h" |
#if defined(OS_LINUX) |
@@ -45,6 +46,37 @@ |
namespace { |
+class ViewsDelegateImpl : public views::ViewsDelegate { |
+ public: |
+ ViewsDelegateImpl() {} |
+ virtual Clipboard* GetClipboard() const { return NULL; } |
+ virtual void SaveWindowPlacement(const std::wstring& window_name, |
+ const gfx::Rect& bounds, |
+ bool maximized) {} |
+ virtual bool GetSavedWindowBounds(const std::wstring& window_name, |
+ gfx::Rect* bounds) const { |
+ return false; |
+ } |
+ virtual bool GetSavedMaximizedState(const std::wstring& window_name, |
+ bool* maximized) const { |
+ return false; |
+ } |
+ |
+#if defined(OS_WIN) |
+ virtual HICON GetDefaultWindowIcon() const { return 0; } |
+#endif |
+ |
+ virtual void AddRef() { |
+ } |
+ |
+ virtual void ReleaseRef() { |
+ MessageLoopForUI::current()->Quit(); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ViewsDelegateImpl); |
+}; |
+ |
// PageNavigator implementation that records the URL. |
class TestingPageNavigator : public PageNavigator { |
public: |
@@ -148,9 +180,14 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase { |
views::MenuItemView::allow_task_nesting_during_run_ = false; |
ViewEventTestBase::TearDown(); |
BookmarkBarView::testing_ = false; |
+ views::ViewsDelegate::views_delegate = NULL; |
} |
protected: |
+ void InstallViewsDelegate() { |
+ views::ViewsDelegate::views_delegate = &views_delegate_; |
+ } |
+ |
virtual views::View* CreateContentsView() { |
return bb_view_; |
} |
@@ -200,6 +237,7 @@ class BookmarkBarViewEventTestBase : public ViewEventTestBase { |
scoped_ptr<TestingProfile> profile_; |
ChromeThread ui_thread_; |
ChromeThread file_thread_; |
+ ViewsDelegateImpl views_delegate_; |
}; |
// Clicks on first menu, makes sure button is depressed. Moves mouse to first |
@@ -369,7 +407,7 @@ class BookmarkBarViewTest3 : public BookmarkBarViewEventTestBase { |
EXPECT_EQ(GURL(), navigator_.url_); |
// Hide menu. |
- menu->GetMenuController()->Cancel(true); |
+ menu->GetMenuController()->CancelAll(); |
Done(); |
} |
@@ -784,7 +822,7 @@ class BookmarkBarViewTest9 : public BookmarkBarViewEventTestBase { |
ASSERT_NE(start_y_, menu_loc.y()); |
// Hide menu. |
- bb_view_->GetMenu()->GetMenuController()->Cancel(true); |
+ bb_view_->GetMenu()->GetMenuController()->CancelAll(); |
// On linux, Cancelling menu will call Quit on the message loop, |
// which can interfere with Done. We need to run Done in the |
@@ -1255,7 +1293,7 @@ class BookmarkBarViewTest15 : public BookmarkBarViewEventTestBase { |
// And the deleted_menu_id_ should have been removed. |
ASSERT_TRUE(menu->GetMenuItemByID(deleted_menu_id_) == NULL); |
- bb_view_->GetMenu()->GetMenuController()->Cancel(true); |
+ bb_view_->GetMenu()->GetMenuController()->CancelAll(); |
Done(); |
} |
@@ -1265,3 +1303,36 @@ class BookmarkBarViewTest15 : public BookmarkBarViewEventTestBase { |
}; |
VIEW_TEST(BookmarkBarViewTest15, MenuStaysVisibleAfterDelete) |
+ |
+// Tests that we don't crash or get stuck if the parent of a menu is closed. |
+class BookmarkBarViewTest16 : public BookmarkBarViewEventTestBase { |
+ protected: |
+ virtual void DoTestOnMessageLoop() { |
+ InstallViewsDelegate(); |
+ |
+ // Move the mouse to the first folder on the bookmark bar and press the |
+ // mouse. |
+ views::TextButton* button = bb_view_->GetBookmarkButton(0); |
+ ui_controls::MoveMouseToCenterAndPress(button, ui_controls::LEFT, |
+ ui_controls::DOWN | ui_controls::UP, |
+ CreateEventTask(this, &BookmarkBarViewTest16::Step2)); |
+ } |
+ |
+ private: |
+ void Step2() { |
+ // Menu should be showing. |
+ views::MenuItemView* menu = bb_view_->GetMenu(); |
+ ASSERT_TRUE(menu != NULL); |
+ ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); |
+ |
+ // Button should be depressed. |
+ views::TextButton* button = bb_view_->GetBookmarkButton(0); |
+ ASSERT_TRUE(button->state() == views::CustomButton::BS_PUSHED); |
+ |
+ // Close the window. |
+ window_->Close(); |
+ window_ = NULL; |
+ } |
+}; |
+ |
+VIEW_TEST(BookmarkBarViewTest16, DeleteMenu) |