Index: ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc |
index 4286d1873a51805d09053f9c4e900e3213a46332..b911bc412bcefa3f1b1a7f652b9b53f250dd1254 100644 |
--- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc |
+++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "ui/views/test/views_test_base.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/run_loop.h" |
#include "base/strings/utf_string_conversions.h" |
#include "ui/aura/window.h" |
#include "ui/aura/window_tree_host.h" |
@@ -21,6 +22,7 @@ |
#include "ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.h" |
#include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h" |
#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" |
+#include "ui/views/widget/desktop_aura/x11_move_loop.h" |
#include "ui/views/widget/widget.h" |
#include <X11/Xlib.h> |
@@ -73,6 +75,34 @@ class ClientMessageEventCollector { |
DISALLOW_COPY_AND_ASSIGN(ClientMessageEventCollector); |
}; |
+// An implementation of X11MoveLoop where RunMoveLoop() always starts the move |
+// loop. |
+class TestMoveLoop : public X11MoveLoop { |
+ public: |
+ explicit TestMoveLoop(X11MoveLoopDelegate* delegate); |
+ virtual ~TestMoveLoop(); |
+ |
+ // Returns true if the move loop is running. |
+ bool IsRunning() const; |
+ |
+ // X11MoveLoop: |
+ virtual bool RunMoveLoop(aura::Window* window, |
+ gfx::NativeCursor cursor) OVERRIDE; |
+ virtual void UpdateCursor(gfx::NativeCursor cursor) OVERRIDE; |
+ virtual void EndMoveLoop() OVERRIDE; |
+ virtual void SetDragImage(const gfx::ImageSkia& image, |
+ const gfx::Vector2dF& offset) OVERRIDE; |
+ |
+ private: |
+ // Not owned. |
+ X11MoveLoopDelegate* delegate_; |
+ |
+ // Ends the move loop. |
+ base::Closure quit_closure_; |
+ |
+ bool is_running_; |
+}; |
+ |
// Implementation of DesktopDragDropClientAuraX11 which works with a fake |
// |DesktopDragDropClientAuraX11::source_current_window_|. |
class TestDragDropClient : public DesktopDragDropClientAuraX11 { |
@@ -122,18 +152,10 @@ class TestDragDropClient : public DesktopDragDropClientAuraX11 { |
// Returns true if the move loop is running. |
bool IsMoveLoopRunning(); |
- // DesktopDragDropClientAuraX11: |
- virtual int StartDragAndDrop( |
- const ui::OSExchangeData& data, |
- aura::Window* root_window, |
- aura::Window* source_window, |
- const gfx::Point& root_location, |
- int operation, |
- ui::DragDropTypes::DragEventSource source) OVERRIDE; |
- virtual void OnMoveLoopEnded() OVERRIDE; |
- |
private: |
// DesktopDragDropClientAuraX11: |
+ virtual scoped_ptr<X11MoveLoop> CreateMoveLoop( |
+ X11MoveLoopDelegate* delegate) OVERRIDE; |
virtual ::Window FindWindowFor(const gfx::Point& screen_point) OVERRIDE; |
virtual void SendXClientEvent(::Window xid, XEvent* event) OVERRIDE; |
@@ -144,8 +166,8 @@ class TestDragDropClient : public DesktopDragDropClientAuraX11 { |
// current mouse position. |
::Window target_xid_; |
- // Whether the move loop is running. |
- bool move_loop_running_; |
+ // The move loop. Not owned. |
+ TestMoveLoop* loop_; |
// Map of ::Windows to the collector which intercepts XClientMessageEvents |
// for that window. |
@@ -183,6 +205,46 @@ void ClientMessageEventCollector::RecordEvent( |
} |
/////////////////////////////////////////////////////////////////////////////// |
+// TestMoveLoop |
+ |
+TestMoveLoop::TestMoveLoop(X11MoveLoopDelegate* delegate) |
+ : delegate_(delegate), |
+ is_running_(false) { |
+} |
+ |
+TestMoveLoop::~TestMoveLoop() { |
+} |
+ |
+bool TestMoveLoop::IsRunning() const { |
+ return is_running_; |
+} |
+ |
+bool TestMoveLoop::RunMoveLoop( |
+ aura::Window* window, |
+ gfx::NativeCursor cursor) { |
+ is_running_ = true; |
+ base::RunLoop run_loop; |
+ quit_closure_ = run_loop.QuitClosure(); |
+ run_loop.Run(); |
+ return true; |
+} |
+ |
+void TestMoveLoop::UpdateCursor(gfx::NativeCursor cursor) { |
+} |
+ |
+void TestMoveLoop::EndMoveLoop() { |
+ if (is_running_) { |
+ delegate_->OnMoveLoopEnded(); |
+ is_running_ = false; |
+ quit_closure_.Run(); |
+ } |
+} |
+ |
+void TestMoveLoop::SetDragImage(const gfx::ImageSkia& image, |
+ const gfx::Vector2dF& offset) { |
+} |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
// TestDragDropClient |
// static |
@@ -200,7 +262,7 @@ TestDragDropClient::TestDragDropClient( |
window->GetHost()->GetAcceleratedWidget()), |
source_xid_(window->GetHost()->GetAcceleratedWidget()), |
target_xid_(None), |
- move_loop_running_(false), |
+ loop_(NULL), |
atom_cache_(gfx::GetXDisplay(), kAtomsToCache) { |
} |
@@ -266,24 +328,13 @@ void TestDragDropClient::SetTopmostXWindowAndMoveMouse(::Window xid) { |
} |
bool TestDragDropClient::IsMoveLoopRunning() { |
- return move_loop_running_; |
-} |
- |
-int TestDragDropClient::StartDragAndDrop( |
- const ui::OSExchangeData& data, |
- aura::Window* root_window, |
- aura::Window* source_window, |
- const gfx::Point& root_location, |
- int operation, |
- ui::DragDropTypes::DragEventSource source) { |
- move_loop_running_ = true; |
- return DesktopDragDropClientAuraX11::StartDragAndDrop(data, root_window, |
- source_window, root_location, operation, source); |
+ return loop_->IsRunning(); |
} |
-void TestDragDropClient::OnMoveLoopEnded() { |
- DesktopDragDropClientAuraX11::OnMoveLoopEnded(); |
- move_loop_running_ = false; |
+scoped_ptr<X11MoveLoop> TestDragDropClient::CreateMoveLoop( |
+ X11MoveLoopDelegate* delegate) { |
+ loop_ = new TestMoveLoop(delegate); |
+ return scoped_ptr<X11MoveLoop>(loop_); |
} |
::Window TestDragDropClient::FindWindowFor(const gfx::Point& screen_point) { |
@@ -338,6 +389,7 @@ class DesktopDragDropClientAuraX11Test : public ViewsTestBase { |
client_.reset(new TestDragDropClient(widget_->GetNativeWindow(), |
cursor_manager_.get())); |
+ client_->Init(); |
} |
virtual void TearDown() OVERRIDE { |