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

Unified Diff: ui/views/widget/widget_unittest.cc

Issue 23533030: rAc: Enforce a 3 second grace period for generated card bubble. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: exclude test on !views Created 7 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 side-by-side diff with in-line comments
Download patch
« chrome/chrome_tests.gypi ('K') | « ui/views/widget/widget_interactive_uitest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/widget_unittest.cc
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index d21d64f0561abb292d08882b9cb7e2931a7e9aa7..a41c7ae8767e83600c230c762a818ee13dc43a26 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -18,7 +18,7 @@
#include "ui/views/bubble/bubble_delegate.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/test/test_views_delegate.h"
-#include "ui/views/test/views_test_base.h"
+#include "ui/views/test/widget_test.h"
#include "ui/views/views_delegate.h"
#include "ui/views/widget/native_widget_delegate.h"
#include "ui/views/widget/root_view.h"
@@ -26,7 +26,6 @@
#if defined(USE_AURA)
#include "ui/aura/client/aura_constants.h"
-#include "ui/aura/env.h"
#include "ui/aura/root_window.h"
#include "ui/aura/test/test_cursor_client.h"
#include "ui/aura/test/test_window_delegate.h"
@@ -42,99 +41,6 @@
namespace views {
namespace test {
-// A generic typedef to pick up relevant NativeWidget implementations.
-#if defined(USE_AURA)
-typedef NativeWidgetAura NativeWidgetPlatform;
-#elif defined(OS_WIN)
-typedef NativeWidgetWin NativeWidgetPlatform;
-#endif
-
-// A widget that assumes mouse capture always works. It won't on Aura in
-// testing, so we mock it.
-#if defined(USE_AURA)
-class NativeWidgetCapture : public NativeWidgetPlatform {
- public:
- explicit NativeWidgetCapture(internal::NativeWidgetDelegate* delegate)
- : NativeWidgetPlatform(delegate),
- mouse_capture_(false) {}
- virtual ~NativeWidgetCapture() {}
-
- virtual void SetCapture() OVERRIDE {
- mouse_capture_ = true;
- }
- virtual void ReleaseCapture() OVERRIDE {
- if (mouse_capture_)
- delegate()->OnMouseCaptureLost();
- mouse_capture_ = false;
- }
- virtual bool HasCapture() const OVERRIDE {
- return mouse_capture_;
- }
-
- private:
- bool mouse_capture_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeWidgetCapture);
-};
-#endif
-
-// A typedef that inserts our mock-capture NativeWidget implementation for
-// relevant platforms.
-#if defined(USE_AURA)
-typedef NativeWidgetCapture NativeWidgetPlatformForTest;
-#elif defined(OS_WIN)
-typedef NativeWidgetWin NativeWidgetPlatformForTest;
-#endif
-
-// A view that always processes all mouse events.
-class MouseView : public View {
- public:
- MouseView()
- : View(),
- entered_(0),
- exited_(0),
- pressed_(0) {
- }
- virtual ~MouseView() {}
-
- virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE {
- pressed_++;
- return true;
- }
-
- virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
- entered_++;
- }
-
- virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
- exited_++;
- }
-
- // Return the number of OnMouseEntered calls and reset the counter.
- int EnteredCalls() {
- int i = entered_;
- entered_ = 0;
- return i;
- }
-
- // Return the number of OnMouseExited calls and reset the counter.
- int ExitedCalls() {
- int i = exited_;
- exited_ = 0;
- return i;
- }
-
- int pressed() const { return pressed_; }
-
- private:
- int entered_;
- int exited_;
-
- int pressed_;
-
- DISALLOW_COPY_AND_ASSIGN(MouseView);
-};
-
// A view that keeps track of the events it receives, but consumes no events.
class EventCountView : public View {
public:
@@ -203,24 +109,6 @@ class ScrollableEventCountView : public EventCountView {
DISALLOW_COPY_AND_ASSIGN(ScrollableEventCountView);
};
-// A view that does a capture on gesture-begin events.
-class GestureCaptureView : public View {
- public:
- GestureCaptureView() {}
- virtual ~GestureCaptureView() {}
-
- private:
- // Overridden from View:
- virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE {
- if (event->type() == ui::ET_GESTURE_BEGIN) {
- GetWidget()->SetCapture(this);
- event->StopPropagation();
- }
- }
-
- DISALLOW_COPY_AND_ASSIGN(GestureCaptureView);
-};
-
// A view that implements GetMinimumSize.
class MinimumSizeFrameView : public NativeFrameView {
public:
@@ -268,147 +156,6 @@ class EventCountHandler : public ui::EventHandler {
DISALLOW_COPY_AND_ASSIGN(EventCountHandler);
};
-// A View that shows a different widget, sets capture on that widget, and
-// initiates a nested message-loop when it receives a mouse-press event.
-class NestedLoopCaptureView : public View {
- public:
- explicit NestedLoopCaptureView(Widget* widget) : widget_(widget) {}
- virtual ~NestedLoopCaptureView() {}
-
- private:
- // Overridden from View:
- virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE {
- // Start a nested loop.
- widget_->Show();
- widget_->SetCapture(widget_->GetContentsView());
- EXPECT_TRUE(widget_->HasCapture());
-
- base::MessageLoopForUI* loop = base::MessageLoopForUI::current();
- base::MessageLoop::ScopedNestableTaskAllower allow(loop);
-
- base::RunLoop run_loop;
-#if defined(USE_AURA)
- run_loop.set_dispatcher(aura::Env::GetInstance()->GetDispatcher());
-#endif
- run_loop.Run();
- return true;
- }
-
- Widget* widget_;
-
- DISALLOW_COPY_AND_ASSIGN(NestedLoopCaptureView);
-};
-
-// A View that closes the Widget and exits the current message-loop when it
-// receives a mouse-release event.
-class ExitLoopOnRelease : public View {
- public:
- ExitLoopOnRelease() {}
- virtual ~ExitLoopOnRelease() {}
-
- private:
- // Overridden from View:
- virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE {
- GetWidget()->Close();
- base::MessageLoop::current()->QuitNow();
- }
-
- DISALLOW_COPY_AND_ASSIGN(ExitLoopOnRelease);
-};
-
-class WidgetTest : public ViewsTestBase {
- public:
- WidgetTest() {}
- virtual ~WidgetTest() {}
-
- NativeWidget* CreatePlatformNativeWidget(
- internal::NativeWidgetDelegate* delegate) {
- return new NativeWidgetPlatformForTest(delegate);
- }
-
- Widget* CreateTopLevelPlatformWidget() {
- Widget* toplevel = new Widget;
- Widget::InitParams toplevel_params =
- CreateParams(Widget::InitParams::TYPE_WINDOW);
- toplevel_params.native_widget = CreatePlatformNativeWidget(toplevel);
- toplevel->Init(toplevel_params);
- return toplevel;
- }
-
- Widget* CreateTopLevelFramelessPlatformWidget() {
- Widget* toplevel = new Widget;
- Widget::InitParams toplevel_params =
- CreateParams(Widget::InitParams::TYPE_WINDOW_FRAMELESS);
- toplevel_params.native_widget = CreatePlatformNativeWidget(toplevel);
- toplevel->Init(toplevel_params);
- return toplevel;
- }
-
- Widget* CreateChildPlatformWidget(gfx::NativeView parent_native_view) {
- Widget* child = new Widget;
- Widget::InitParams child_params =
- CreateParams(Widget::InitParams::TYPE_CONTROL);
- child_params.native_widget = CreatePlatformNativeWidget(child);
- child_params.parent = parent_native_view;
- child->Init(child_params);
- child->SetContentsView(new View);
- return child;
- }
-
-#if defined(OS_WIN) && !defined(USE_AURA)
- // On Windows, it is possible for us to have a child window that is
- // TYPE_POPUP.
- Widget* CreateChildPopupPlatformWidget(gfx::NativeView parent_native_view) {
- Widget* child = new Widget;
- Widget::InitParams child_params =
- CreateParams(Widget::InitParams::TYPE_POPUP);
- child_params.child = true;
- child_params.native_widget = CreatePlatformNativeWidget(child);
- child_params.parent = parent_native_view;
- child->Init(child_params);
- child->SetContentsView(new View);
- return child;
- }
-#endif
-
- Widget* CreateTopLevelNativeWidget() {
- Widget* toplevel = new Widget;
- Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
- toplevel->Init(params);
- return toplevel;
- }
-
- Widget* CreateChildNativeWidgetWithParent(Widget* parent) {
- Widget* child = new Widget;
- Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_CONTROL);
- params.parent = parent->GetNativeView();
- child->Init(params);
- child->SetContentsView(new View);
- return child;
- }
-
- Widget* CreateChildNativeWidget() {
- return CreateChildNativeWidgetWithParent(NULL);
- }
-
- View* GetMousePressedHandler(internal::RootView* root_view) {
- return root_view->mouse_pressed_handler_;
- }
-
- View* GetMouseMoveHandler(internal::RootView* root_view) {
- return root_view->mouse_move_handler_;
- }
-
- View* GetGestureHandler(internal::RootView* root_view) {
- return root_view->gesture_handler_;
- }
-};
-
-bool WidgetHasMouseCapture(const Widget* widget) {
- return static_cast<const internal::NativeWidgetPrivate*>(widget->
- native_widget())->HasCapture();
-}
-
ui::WindowShowState GetWidgetShowState(const Widget* widget) {
// Use IsMaximized/IsMinimized/IsFullScreen instead of GetWindowPlacement
// because the former is implemented on all platforms but the latter is not.
@@ -455,112 +202,6 @@ TEST_F(WidgetTest, GetTopLevelWidget_Native) {
// |child| should be automatically destroyed with |toplevel|.
}
-// Tests some grab/ungrab events.
-TEST_F(WidgetTest, DISABLED_GrabUngrab) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
- Widget* child1 = CreateChildNativeWidgetWithParent(toplevel);
- Widget* child2 = CreateChildNativeWidgetWithParent(toplevel);
-
- toplevel->SetBounds(gfx::Rect(0, 0, 500, 500));
-
- child1->SetBounds(gfx::Rect(10, 10, 300, 300));
- View* view = new MouseView();
- view->SetBounds(0, 0, 300, 300);
- child1->GetRootView()->AddChildView(view);
-
- child2->SetBounds(gfx::Rect(200, 10, 200, 200));
- view = new MouseView();
- view->SetBounds(0, 0, 200, 200);
- child2->GetRootView()->AddChildView(view);
-
- toplevel->Show();
- RunPendingMessages();
-
- // Click on child1
- gfx::Point p1(45, 45);
- ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, p1, p1,
- ui::EF_LEFT_MOUSE_BUTTON);
- toplevel->OnMouseEvent(&pressed);
-
- EXPECT_TRUE(WidgetHasMouseCapture(toplevel));
- EXPECT_TRUE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- ui::MouseEvent released(ui::ET_MOUSE_RELEASED, p1, p1,
- ui::EF_LEFT_MOUSE_BUTTON);
- toplevel->OnMouseEvent(&released);
-
- EXPECT_FALSE(WidgetHasMouseCapture(toplevel));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- RunPendingMessages();
-
- // Click on child2
- gfx::Point p2(315, 45);
- ui::MouseEvent pressed2(ui::ET_MOUSE_PRESSED, p2, p2,
- ui::EF_LEFT_MOUSE_BUTTON);
- toplevel->OnMouseEvent(&pressed2);
- EXPECT_TRUE(pressed2.handled());
- EXPECT_TRUE(WidgetHasMouseCapture(toplevel));
- EXPECT_TRUE(WidgetHasMouseCapture(child2));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
-
- ui::MouseEvent released2(ui::ET_MOUSE_RELEASED, p2, p2,
- ui::EF_LEFT_MOUSE_BUTTON);
- toplevel->OnMouseEvent(&released2);
- EXPECT_FALSE(WidgetHasMouseCapture(toplevel));
- EXPECT_FALSE(WidgetHasMouseCapture(child1));
- EXPECT_FALSE(WidgetHasMouseCapture(child2));
-
- toplevel->CloseNow();
-}
-
-// Tests mouse move outside of the window into the "resize controller" and back
-// will still generate an OnMouseEntered and OnMouseExited event..
-TEST_F(WidgetTest, CheckResizeControllerEvents) {
- Widget* toplevel = CreateTopLevelPlatformWidget();
-
- toplevel->SetBounds(gfx::Rect(0, 0, 100, 100));
-
- MouseView* view = new MouseView();
- view->SetBounds(90, 90, 10, 10);
- toplevel->GetRootView()->AddChildView(view);
-
- toplevel->Show();
- RunPendingMessages();
-
- // Move to an outside position.
- gfx::Point p1(200, 200);
- ui::MouseEvent moved_out(ui::ET_MOUSE_MOVED, p1, p1, ui::EF_NONE);
- toplevel->OnMouseEvent(&moved_out);
- EXPECT_EQ(0, view->EnteredCalls());
- EXPECT_EQ(0, view->ExitedCalls());
-
- // Move onto the active view.
- gfx::Point p2(95, 95);
- ui::MouseEvent moved_over(ui::ET_MOUSE_MOVED, p2, p2, ui::EF_NONE);
- toplevel->OnMouseEvent(&moved_over);
- EXPECT_EQ(1, view->EnteredCalls());
- EXPECT_EQ(0, view->ExitedCalls());
-
- // Move onto the outer resizing border.
- gfx::Point p3(102, 95);
- ui::MouseEvent moved_resizer(ui::ET_MOUSE_MOVED, p3, p3, ui::EF_NONE);
- toplevel->OnMouseEvent(&moved_resizer);
- EXPECT_EQ(0, view->EnteredCalls());
- EXPECT_EQ(1, view->ExitedCalls());
-
- // Move onto the view again.
- toplevel->OnMouseEvent(&moved_over);
- EXPECT_EQ(1, view->EnteredCalls());
- EXPECT_EQ(0, view->ExitedCalls());
-
- RunPendingMessages();
-
- toplevel->CloseNow();
-}
-
// Test if a focus manager and an inputmethod work without CHECK failure
// when window activation changes.
TEST_F(WidgetTest, ChangeActivation) {
@@ -1274,102 +915,6 @@ TEST_F(WidgetTest, ExitFullscreenRestoreState) {
RunPendingMessages();
}
-// Checks that if a mouse-press triggers a capture on a different widget (which
-// consumes the mouse-release event), then the target of the press does not have
-// capture.
-// Fails on chromium.webkit Windows bot, see crbug.com/264872.
-#if defined(OS_WIN)
-#define MAYBE_DisableCaptureWidgetFromMousePress\
- DISABLED_CaptureWidgetFromMousePress
-#else
-#define MAYBE_DisableCaptureWidgetFromMousePress\
- CaptureWidgetFromMousePress
-#endif
-TEST_F(WidgetTest, MAYBE_DisableCaptureWidgetFromMousePress) {
- // The test creates two widgets: |first| and |second|.
- // The View in |first| makes |second| visible, sets capture on it, and starts
- // a nested loop (like a menu does). The View in |second| terminates the
- // nested loop and closes the widget.
- // The test sends a mouse-press event to |first|, and posts a task to send a
- // release event to |second|, to make sure that the release event is
- // dispatched after the nested loop starts.
-
- Widget* first = CreateTopLevelFramelessPlatformWidget();
- Widget* second = CreateTopLevelFramelessPlatformWidget();
-
- View* container = new NestedLoopCaptureView(second);
- first->SetContentsView(container);
-
- second->SetContentsView(new ExitLoopOnRelease());
-
- first->SetSize(gfx::Size(100, 100));
- first->Show();
-
- gfx::Point location(20, 20);
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(&Widget::OnMouseEvent,
- base::Unretained(second),
- base::Owned(new ui::MouseEvent(ui::ET_MOUSE_RELEASED,
- location,
- location,
- ui::EF_LEFT_MOUSE_BUTTON))));
- ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location,
- ui::EF_LEFT_MOUSE_BUTTON);
- first->OnMouseEvent(&press);
- EXPECT_FALSE(first->HasCapture());
- first->Close();
- RunPendingMessages();
-}
-
-TEST_F(WidgetTest, ResetCaptureOnGestureEnd) {
- Widget* toplevel = CreateTopLevelFramelessPlatformWidget();
- View* container = new View;
- toplevel->SetContentsView(container);
-
- View* gesture = new GestureCaptureView;
- gesture->SetBounds(0, 0, 30, 30);
- container->AddChildView(gesture);
-
- MouseView* mouse = new MouseView;
- mouse->SetBounds(30, 0, 30, 30);
- container->AddChildView(mouse);
-
- toplevel->SetSize(gfx::Size(100, 100));
- toplevel->Show();
-
- // Start a gesture on |gesture|.
- ui::GestureEvent begin(ui::ET_GESTURE_BEGIN,
- 15, 15, 0, base::TimeDelta(),
- ui::GestureEventDetails(ui::ET_GESTURE_BEGIN, 0, 0), 1);
- ui::GestureEvent end(ui::ET_GESTURE_END,
- 15, 15, 0, base::TimeDelta(),
- ui::GestureEventDetails(ui::ET_GESTURE_END, 0, 0), 1);
- toplevel->OnGestureEvent(&begin);
-
- // Now try to click on |mouse|. Since |gesture| will have capture, |mouse|
- // will not receive the event.
- gfx::Point click_location(45, 15);
-
- ui::MouseEvent press(ui::ET_MOUSE_PRESSED, click_location, click_location,
- ui::EF_LEFT_MOUSE_BUTTON);
- ui::MouseEvent release(ui::ET_MOUSE_RELEASED, click_location, click_location,
- ui::EF_LEFT_MOUSE_BUTTON);
-
- toplevel->OnMouseEvent(&press);
- toplevel->OnMouseEvent(&release);
- EXPECT_EQ(0, mouse->pressed());
-
- // The end of the gesture should release the capture, and pressing on |mouse|
- // should now reach |mouse|.
- toplevel->OnGestureEvent(&end);
- toplevel->OnMouseEvent(&press);
- toplevel->OnMouseEvent(&release);
- EXPECT_EQ(1, mouse->pressed());
-
- toplevel->Close();
- RunPendingMessages();
-}
-
#if defined(USE_AURA)
// The key-event propagation from Widget happens differently on aura and
// non-aura systems because of the difference in IME. So this test works only on
« chrome/chrome_tests.gypi ('K') | « ui/views/widget/widget_interactive_uitest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698