Index: services/ui/ws/drag_target_connection.h |
diff --git a/services/ui/ws/drag_target_connection.h b/services/ui/ws/drag_target_connection.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d3c22ce3a8b8a692a680a85cd94caed1b5d18a3e |
--- /dev/null |
+++ b/services/ui/ws/drag_target_connection.h |
@@ -0,0 +1,90 @@ |
+// Copyright 2016 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. |
+ |
+#ifndef SERVICES_UI_WS_DRAG_TARGET_CONNECTION_H_ |
+#define SERVICES_UI_WS_DRAG_TARGET_CONNECTION_H_ |
+ |
+#include "base/bind.h" |
+#include "mojo/public/cpp/bindings/array.h" |
+#include "mojo/public/cpp/bindings/map.h" |
+#include "mojo/public/cpp/bindings/string.h" |
+#include "ui/gfx/geometry/point.h" |
+ |
+namespace ui { |
+namespace ws { |
+ |
+class ServerWindow; |
+ |
+// An abstract connection which can respond to drag/drop target requests. |
+// |
+// The methods in this class send drag and drop messages to the client and |
+// return their results through the passed in callback. From the point of view |
+// of the client, the lifecycle of receiving messages are in the following |
+// order: |
+class DragTargetConnection { |
+ public: |
+ virtual ~DragTargetConnection() {} |
+ |
+ // On the first time that the pointer enters a window offered by this |
+ // connection, we send this start message with the |mime_data| of the |
+ // drag so that we only send this data over the connection once. We send the |
+ // mime data first because clients may read the payload at any time, |
+ // including during the enter message. |
+ // |
+ // (As an optimization, on the server side, we don't send this message to the |
+ // source window of the drag; the client library has already done the |
+ // equivalent in ui::WindowDropTarget to minimize the load of inter-process |
+ // communication.) |
+ virtual void PerformOnDragDropStart( |
+ mojo::Map<mojo::String, mojo::Array<uint8_t>> mime_data) = 0; |
+ |
+ // Next, on each time that the mouse cursor moves from one |window| to |
+ // another, we send a DragEnter message. The value returned by |callback| is |
+ // a bitmask of drop operations that can be performed at this location, in |
+ // terms of the ui::mojom::kDropEffect{None,Move,Copy,Link} constants. |
+ virtual void PerformOnDragEnter( |
+ const ServerWindow* window, |
+ uint32_t key_state, |
+ const gfx::Point& cursor_offset, |
+ uint32_t effect_bitmask, |
+ const base::Callback<void(uint32_t)>& callback) = 0; |
+ |
+ // For each mouse move after the initial DragEnter message, we call DragOver |
+ // to change the mouse location and to update what drop operations can be |
+ // performed. |
+ virtual void PerformOnDragOver( |
+ const ServerWindow* window, |
+ uint32_t key_state, |
+ const gfx::Point& cursor_offset, |
+ uint32_t effect_bitmask, |
+ const base::Callback<void(uint32_t)>& callback) = 0; |
+ |
+ // If the mouse cursor leaves |window|, send an DragLeave message. |
+ virtual void PerformOnDragLeave(const ServerWindow* window) = 0; |
+ |
+ // If the user releases the pointer over a window, send a DragDrop message, |
+ // which signals that the client should complete the drag. The return value |
+ // is which operation was performed; a non-zero callback value means the drag |
+ // was accepted and completed. |
+ virtual void PerformOnCompleteDrop( |
+ const ServerWindow* window, |
+ uint32_t key_state, |
+ const gfx::Point& cursor_offset, |
+ uint32_t effect_bitmask, |
+ const base::Callback<void(uint32_t)>& callback) = 0; |
+ |
+ // Finally, regardless of which window accepted (or rejected) the drop, we |
+ // send a done message to each connection that we sent a start message |
+ // to. This message is used to clear cached data from the drag. |
+ // |
+ // (Again, we don't send this message to the source window as we didn't send |
+ // a DragStart message; the client library handles the equivalent at its |
+ // layer.) |
+ virtual void PerformOnDragDropDone() = 0; |
+}; |
+ |
+} // namespace ws |
+} // namespace ui |
+ |
+#endif // SERVICES_UI_WS_DRAG_TARGET_CONNECTION_H_ |