| Index: chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc
|
| diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc b/chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc
|
| index a7afc4194b910b72af2d0f01ae9e20f5c764552f..4375812baeae0a409e2b96b4e13adb7b282e3ecf 100644
|
| --- a/chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc
|
| +++ b/chrome/browser/ui/views/toolbar/toolbar_action_view_unittest.cc
|
| @@ -15,6 +15,7 @@
|
| #include "content/public/test/test_web_contents_factory.h"
|
| #include "ui/accessibility/ax_view_state.h"
|
| #include "ui/events/test/event_generator.h"
|
| +#include "ui/views/animation/test/test_ink_drop_delegate.h"
|
| #include "ui/views/test/views_test_base.h"
|
|
|
| namespace {
|
| @@ -129,12 +130,70 @@ class ToolbarActionViewUnitTest : public views::ViewsTestBase {
|
| DISALLOW_COPY_AND_ASSIGN(ToolbarActionViewUnitTest);
|
| };
|
|
|
| +// A MenuButton subclass that provides access to some MenuButton internals.
|
| +class TestToolbarActionView : public ToolbarActionView {
|
| + public:
|
| + TestToolbarActionView(ToolbarActionViewController* view_controller,
|
| + Delegate* delegate)
|
| + : ToolbarActionView(view_controller, delegate) {}
|
| +
|
| + ~TestToolbarActionView() override {}
|
| +
|
| + // Accessors to protected ToolbarActionView methods.
|
| + void set_ink_drop_delegate(views::InkDropDelegate* ink_drop_delegate) {
|
| + ToolbarActionView::set_ink_drop_delegate(ink_drop_delegate);
|
| + }
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(TestToolbarActionView);
|
| +};
|
| +
|
| +// Verifies there is no crash when a ToolbarActionView with an InkDropDelegate
|
| +// is destroyed while holding a |pressed_lock_|.
|
| +TEST_F(ToolbarActionViewUnitTest,
|
| + NoCrashWhenDestroyingToolbarActionViewThatHasAPressedLock) {
|
| + TestToolbarActionViewController controller("fake controller");
|
| + TestToolbarActionViewDelegate action_view_delegate;
|
| +
|
| + // Create a new toolbar action view.
|
| + scoped_ptr<ToolbarActionView> view(
|
| + new ToolbarActionView(&controller, &action_view_delegate));
|
| + view->set_owned_by_client();
|
| + view->SetBoundsRect(gfx::Rect(0, 0, 200, 20));
|
| + widget()->SetContentsView(view.get());
|
| + widget()->Show();
|
| +
|
| + controller.ShowPopup(true);
|
| +
|
| + view.reset();
|
| +}
|
| +
|
| +// Verifies the InkDropAnimation used by the ToolbarActionView doesn't fail a
|
| +// DCHECK for an unsupported transition from ACTIVATED to ACTION_PENDING.
|
| +TEST_F(ToolbarActionViewUnitTest,
|
| + NoCrashWhenPressingMouseOnToolbarActionViewThatHasAPressedLock) {
|
| + TestToolbarActionViewController controller("fake controller");
|
| + TestToolbarActionViewDelegate action_view_delegate;
|
| +
|
| + // Create a new toolbar action view.
|
| + ToolbarActionView view(&controller, &action_view_delegate);
|
| + view.set_owned_by_client();
|
| + view.SetBoundsRect(gfx::Rect(0, 0, 200, 20));
|
| + widget()->SetContentsView(&view);
|
| + widget()->Show();
|
| +
|
| + ui::test::EventGenerator generator(GetContext(), widget()->GetNativeWindow());
|
| +
|
| + controller.ShowPopup(true);
|
| + generator.PressLeftButton();
|
| +}
|
| +
|
| // Test the basic ui of a ToolbarActionView and that it responds correctly to
|
| // a controller's state.
|
| TEST_F(ToolbarActionViewUnitTest, BasicToolbarActionViewTest) {
|
| TestingProfile profile;
|
|
|
| - // ViewsTestBase initializees the aura environment, so the factory shouldn't.
|
| + // ViewsTestBase initializes the aura environment, so the factory shouldn't.
|
| content::TestWebContentsFactory web_contents_factory;
|
|
|
| TestToolbarActionViewController controller("fake controller");
|
|
|