| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef SERVICES_UI_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_ | 5 #ifndef UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
| 6 #define SERVICES_UI_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_ | 6 #define UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <set> | 12 #include <set> |
| 13 #include <string> | 13 #include <string> |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "base/atomicops.h" | 16 #include "base/atomicops.h" |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
| 19 #include "base/observer_list.h" | 19 #include "base/observer_list.h" |
| 20 #include "mojo/public/cpp/bindings/associated_binding.h" | 20 #include "mojo/public/cpp/bindings/associated_binding.h" |
| 21 #include "mojo/public/cpp/bindings/strong_binding.h" | 21 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 22 #include "services/ui/common/types.h" | |
| 23 #include "services/ui/public/cpp/window.h" | |
| 24 #include "services/ui/public/cpp/window_manager_delegate.h" | |
| 25 #include "services/ui/public/interfaces/window_tree.mojom.h" | 22 #include "services/ui/public/interfaces/window_tree.mojom.h" |
| 23 #include "ui/aura/aura_export.h" |
| 24 #include "ui/aura/client/capture_client_observer.h" |
| 25 #include "ui/aura/client/focus_change_observer.h" |
| 26 #include "ui/aura/mus/mus_types.h" |
| 27 #include "ui/aura/mus/window_manager_delegate.h" |
| 26 | 28 |
| 27 namespace display { | 29 namespace display { |
| 28 class Display; | 30 class Display; |
| 29 } | 31 } |
| 30 | 32 |
| 31 namespace gfx { | 33 namespace gfx { |
| 32 class Insets; | 34 class Insets; |
| 33 class Size; | |
| 34 } | 35 } |
| 35 | 36 |
| 36 namespace service_manager { | 37 namespace service_manager { |
| 37 class Connector; | 38 class Connector; |
| 38 } | 39 } |
| 39 | 40 |
| 40 namespace ui { | 41 namespace aura { |
| 42 class InFlightCaptureChange; |
| 41 class InFlightChange; | 43 class InFlightChange; |
| 44 class InFlightFocusChange; |
| 45 class InFlightPropertyChange; |
| 46 class WindowMus; |
| 47 class WindowPortMus; |
| 48 struct WindowPortInitData; |
| 49 struct WindowPortPropertyData; |
| 42 class WindowTreeClientDelegate; | 50 class WindowTreeClientDelegate; |
| 43 class WindowTreeClientPrivate; | 51 class WindowTreeClientPrivate; |
| 44 class WindowTreeClientObserver; | 52 class WindowTreeClientObserver; |
| 45 enum class ChangeType; | 53 class WindowTreeHost; |
| 54 |
| 55 namespace client { |
| 56 class FocusClient; |
| 57 } |
| 58 |
| 59 using EventResultCallback = base::Callback<void(ui::mojom::EventResult)>; |
| 46 | 60 |
| 47 // Manages the connection with mus. | 61 // Manages the connection with mus. |
| 48 // | 62 // |
| 49 // WindowTreeClient is owned by the creator. Generally when the delegate gets | 63 // WindowTreeClient is owned by the creator. Generally when the delegate gets |
| 50 // one of OnEmbedRootDestroyed() or OnLostConnection() it should delete the | 64 // one of OnEmbedRootDestroyed() or OnLostConnection() it should delete the |
| 51 // WindowTreeClient. | 65 // WindowTreeClient. |
| 52 // | 66 // |
| 53 // When WindowTreeClient is deleted all windows are deleted (and observers | 67 // When WindowTreeClient is deleted all windows are deleted (and observers |
| 54 // notified). | 68 // notified). |
| 55 class WindowTreeClient : public mojom::WindowTreeClient, | 69 class AURA_EXPORT WindowTreeClient : public ui::mojom::WindowTreeClient, |
| 56 public mojom::WindowManager, | 70 public ui::mojom::WindowManager, |
| 57 public WindowManagerClient { | 71 public WindowManagerClient, |
| 72 public client::CaptureClientObserver, |
| 73 public client::FocusChangeObserver { |
| 58 public: | 74 public: |
| 59 explicit WindowTreeClient( | 75 explicit WindowTreeClient( |
| 60 WindowTreeClientDelegate* delegate, | 76 WindowTreeClientDelegate* delegate, |
| 61 WindowManagerDelegate* window_manager_delegate = nullptr, | 77 WindowManagerDelegate* window_manager_delegate = nullptr, |
| 62 mojom::WindowTreeClientRequest request = nullptr); | 78 ui::mojom::WindowTreeClientRequest request = nullptr); |
| 63 ~WindowTreeClient() override; | 79 ~WindowTreeClient() override; |
| 64 | 80 |
| 65 // Establishes the connection by way of the WindowTreeFactory. | 81 // Establishes the connection by way of the WindowTreeFactory. |
| 66 void ConnectViaWindowTreeFactory(service_manager::Connector* connector); | 82 void ConnectViaWindowTreeFactory(service_manager::Connector* connector); |
| 67 | 83 |
| 68 // Establishes the connection by way of WindowManagerWindowTreeFactory. | 84 // Establishes the connection by way of WindowManagerWindowTreeFactory. |
| 69 void ConnectAsWindowManager(service_manager::Connector* connector); | 85 void ConnectAsWindowManager(service_manager::Connector* connector); |
| 70 | 86 |
| 71 // Wait for OnEmbed(), returning when done. | 87 // Wait for OnEmbed(), returning when done. |
| 72 void WaitForEmbed(); | 88 void WaitForEmbed(); |
| 73 | 89 |
| 74 bool connected() const { return tree_ != nullptr; } | 90 bool connected() const { return tree_ != nullptr; } |
| 75 ClientSpecificId client_id() const { return client_id_; } | 91 ClientSpecificId client_id() const { return client_id_; } |
| 76 | 92 |
| 77 // API exposed to the window implementations that pushes local changes to the | 93 void SetClientArea(Window* window, |
| 78 // service. | |
| 79 void DestroyWindow(Window* window); | |
| 80 | |
| 81 // These methods take TransportIds. For windows owned by the current client, | |
| 82 // the client id high word can be zero. In all cases, the TransportId 0x1 | |
| 83 // refers to the root window. | |
| 84 void AddChild(Window* parent, Id child_id); | |
| 85 void RemoveChild(Window* parent, Id child_id); | |
| 86 | |
| 87 void AddTransientWindow(Window* window, Id transient_window_id); | |
| 88 void RemoveTransientWindowFromParent(Window* window); | |
| 89 | |
| 90 void SetModal(Window* window); | |
| 91 | |
| 92 void Reorder(Window* window, | |
| 93 Id relative_window_id, | |
| 94 mojom::OrderDirection direction); | |
| 95 | |
| 96 // Returns true if the specified window was created by this client. | |
| 97 bool WasCreatedByThisClient(const Window* window) const; | |
| 98 | |
| 99 void SetBounds(Window* window, | |
| 100 const gfx::Rect& old_bounds, | |
| 101 const gfx::Rect& bounds); | |
| 102 void SetCapture(Window* window); | |
| 103 void ReleaseCapture(Window* window); | |
| 104 void SetClientArea(Id window_id, | |
| 105 const gfx::Insets& client_area, | 94 const gfx::Insets& client_area, |
| 106 const std::vector<gfx::Rect>& additional_client_areas); | 95 const std::vector<gfx::Rect>& additional_client_areas); |
| 107 void SetHitTestMask(Id window_id, const gfx::Rect& mask); | 96 void SetHitTestMask(Window* window, const gfx::Rect& mask); |
| 108 void ClearHitTestMask(Id window_id); | 97 void ClearHitTestMask(Window* window); |
| 109 void SetFocus(Window* window); | 98 void SetCanFocus(Window* window, bool can_focus); |
| 110 void SetCanFocus(Id window_id, bool can_focus); | |
| 111 void SetCanAcceptDrops(Id window_id, bool can_accept_drops); | 99 void SetCanAcceptDrops(Id window_id, bool can_accept_drops); |
| 112 void SetCanAcceptEvents(Id window_id, bool can_accept_events); | 100 void SetCanAcceptEvents(Id window_id, bool can_accept_events); |
| 113 void SetPredefinedCursor(Id window_id, ui::mojom::Cursor cursor_id); | 101 void SetPredefinedCursor(WindowMus* window, |
| 114 void SetVisible(Window* window, bool visible); | 102 ui::mojom::Cursor old_cursor, |
| 115 void SetOpacity(Window* window, float opacity); | 103 ui::mojom::Cursor new_cursor); |
| 116 void SetProperty(Window* window, | 104 void SetWindowTextInputState(WindowMus* window, |
| 117 const std::string& name, | 105 mojo::TextInputStatePtr state); |
| 118 mojo::Array<uint8_t> data); | 106 void SetImeVisibility(WindowMus* window, |
| 119 void SetWindowTextInputState(Id window_id, mojo::TextInputStatePtr state); | |
| 120 void SetImeVisibility(Id window_id, | |
| 121 bool visible, | 107 bool visible, |
| 122 mojo::TextInputStatePtr state); | 108 mojo::TextInputStatePtr state); |
| 123 | 109 |
| 110 // TODO: this should take a window, not an id. |
| 124 void Embed(Id window_id, | 111 void Embed(Id window_id, |
| 125 mojom::WindowTreeClientPtr client, | 112 ui::mojom::WindowTreeClientPtr client, |
| 126 uint32_t flags, | 113 uint32_t flags, |
| 127 const mojom::WindowTree::EmbedCallback& callback); | 114 const ui::mojom::WindowTree::EmbedCallback& callback); |
| 128 | 115 |
| 116 // TODO: this should move to WindowManager. |
| 129 void RequestClose(Window* window); | 117 void RequestClose(Window* window); |
| 130 | 118 |
| 131 void AttachCompositorFrameSink( | 119 void AttachCompositorFrameSink( |
| 132 Id window_id, | 120 Id window_id, |
| 133 mojom::CompositorFrameSinkType type, | 121 ui::mojom::CompositorFrameSinkType type, |
| 134 cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink, | 122 cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink, |
| 135 cc::mojom::MojoCompositorFrameSinkClientPtr client); | 123 cc::mojom::MojoCompositorFrameSinkClientPtr client); |
| 136 | 124 |
| 137 void OnWindowSurfaceDetached(Id window_id, | 125 bool IsRoot(WindowMus* window) const { return roots_.count(window) > 0; } |
| 138 const cc::SurfaceSequence& sequence); | |
| 139 | |
| 140 // Sets the input capture to |window| without notifying the server. | |
| 141 void LocalSetCapture(Window* window); | |
| 142 // Sets focus to |window| without notifying the server. | |
| 143 void LocalSetFocus(Window* window); | |
| 144 | |
| 145 // Start/stop tracking windows. While tracked, they can be retrieved via | |
| 146 // WindowTreeClient::GetWindowById. | |
| 147 void AddWindow(Window* window); | |
| 148 | |
| 149 bool IsRoot(Window* window) const { return roots_.count(window) > 0; } | |
| 150 | |
| 151 void OnWindowDestroying(Window* window); | |
| 152 | |
| 153 // Called after the window's observers have been notified of destruction (as | |
| 154 // the last step of ~Window). | |
| 155 void OnWindowDestroyed(Window* window); | |
| 156 | |
| 157 Window* GetWindowByServerId(Id id); | |
| 158 | 126 |
| 159 // Returns the root of this connection. | 127 // Returns the root of this connection. |
| 160 const std::set<Window*>& GetRoots(); | 128 std::set<Window*> GetRoots(); |
| 161 | 129 |
| 162 // Returns the Window with input capture; null if no window has requested | 130 // Returns the Window with input capture; null if no window has requested |
| 163 // input capture, or if another app has capture. | 131 // input capture, or if another app has capture. |
| 164 Window* GetCaptureWindow(); | 132 Window* GetCaptureWindow(); |
| 165 | 133 |
| 166 // Returns the focused window; null if focus is not yet known or another app | 134 // Returns the focused window; null if focus is not yet known or another app |
| 167 // is focused. | 135 // is focused. |
| 168 Window* GetFocusedWindow(); | 136 Window* GetFocusedWindow(); |
| 169 | 137 |
| 170 // Sets focus to null. This does nothing if focus is currently null. | |
| 171 void ClearFocus(); | |
| 172 | |
| 173 // Returns the current location of the mouse on screen. Note: this method may | 138 // Returns the current location of the mouse on screen. Note: this method may |
| 174 // race the asynchronous initialization; but in that case we return (0, 0). | 139 // race the asynchronous initialization; but in that case we return (0, 0). |
| 175 gfx::Point GetCursorScreenPoint(); | 140 gfx::Point GetCursorScreenPoint(); |
| 176 | 141 |
| 177 // See description in window_tree.mojom. When an existing pointer watcher is | 142 // See description in window_tree.mojom. When an existing pointer watcher is |
| 178 // updated or cleared then any future events from the server for that watcher | 143 // updated or cleared then any future events from the server for that watcher |
| 179 // will be ignored. | 144 // will be ignored. |
| 180 void StartPointerWatcher(bool want_moves); | 145 void StartPointerWatcher(bool want_moves); |
| 181 void StopPointerWatcher(); | 146 void StopPointerWatcher(); |
| 182 | 147 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 196 // whether the move loop completed successfully. | 161 // whether the move loop completed successfully. |
| 197 void PerformWindowMove(Window* window, | 162 void PerformWindowMove(Window* window, |
| 198 ui::mojom::MoveLoopSource source, | 163 ui::mojom::MoveLoopSource source, |
| 199 const gfx::Point& cursor_location, | 164 const gfx::Point& cursor_location, |
| 200 const base::Callback<void(bool)>& callback); | 165 const base::Callback<void(bool)>& callback); |
| 201 | 166 |
| 202 // Cancels a in progress window move. (If no window is currently being moved, | 167 // Cancels a in progress window move. (If no window is currently being moved, |
| 203 // does nothing.) | 168 // does nothing.) |
| 204 void CancelWindowMove(Window* window); | 169 void CancelWindowMove(Window* window); |
| 205 | 170 |
| 206 // Creates and returns a new Window (which is owned by the window server). | |
| 207 // Windows are initially hidden, use SetVisible(true) to show. | |
| 208 Window* NewWindow() { return NewWindow(nullptr); } | |
| 209 Window* NewWindow( | |
| 210 const std::map<std::string, std::vector<uint8_t>>* properties); | |
| 211 Window* NewTopLevelWindow( | |
| 212 const std::map<std::string, std::vector<uint8_t>>* properties); | |
| 213 | |
| 214 void AddObserver(WindowTreeClientObserver* observer); | 171 void AddObserver(WindowTreeClientObserver* observer); |
| 215 void RemoveObserver(WindowTreeClientObserver* observer); | 172 void RemoveObserver(WindowTreeClientObserver* observer); |
| 216 | 173 |
| 217 #if !defined(NDEBUG) | 174 private: |
| 218 std::string GetDebugWindowHierarchy() const; | 175 friend class InFlightCaptureChange; |
| 219 void BuildDebugInfo(const std::string& depth, | 176 friend class InFlightFocusChange; |
| 220 Window* window, | 177 friend class InFlightPropertyChange; |
| 221 std::string* result) const; | 178 friend class WindowPortMus; |
| 222 #endif | 179 friend class WindowTreeClientPrivate; |
| 223 | 180 |
| 224 private: | 181 enum class WindowTreeHostType { EMBED, TOP_LEVEL, DISPLAY }; |
| 225 friend class WindowTreeClientPrivate; | |
| 226 | 182 |
| 227 struct CurrentDragState; | 183 struct CurrentDragState; |
| 228 | 184 |
| 229 enum class NewWindowType { | 185 using IdToWindowMap = std::map<Id, WindowMus*>; |
| 230 CHILD, | |
| 231 TOP_LEVEL, | |
| 232 }; | |
| 233 | |
| 234 using IdToWindowMap = std::map<Id, Window*>; | |
| 235 | 186 |
| 236 // TODO(sky): this assumes change_ids never wrap, which is a bad assumption. | 187 // TODO(sky): this assumes change_ids never wrap, which is a bad assumption. |
| 237 using InFlightMap = std::map<uint32_t, std::unique_ptr<InFlightChange>>; | 188 using InFlightMap = std::map<uint32_t, std::unique_ptr<InFlightChange>>; |
| 238 | 189 |
| 190 void RegisterWindowMus(WindowMus* window); |
| 191 |
| 192 WindowMus* GetWindowByServerId(Id id); |
| 193 |
| 194 // Returns true if the specified window was created by this client. |
| 195 bool WasCreatedByThisClient(const WindowMus* window) const; |
| 196 |
| 197 void SetFocusFromServer(WindowMus* window); |
| 198 void SetFocusFromServerImpl(client::FocusClient* focus_client, |
| 199 WindowMus* window); |
| 200 |
| 201 void SetCaptureFromServer(WindowMus* window); |
| 202 |
| 239 // Returns the oldest InFlightChange that matches |change|. | 203 // Returns the oldest InFlightChange that matches |change|. |
| 240 InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change); | 204 InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change); |
| 241 | 205 |
| 242 // See InFlightChange for details on how InFlightChanges are used. | 206 // See InFlightChange for details on how InFlightChanges are used. |
| 243 uint32_t ScheduleInFlightChange(std::unique_ptr<InFlightChange> change); | 207 uint32_t ScheduleInFlightChange(std::unique_ptr<InFlightChange> change); |
| 244 | 208 |
| 245 // Returns true if there is an InFlightChange that matches |change|. If there | 209 // Returns true if there is an InFlightChange that matches |change|. If there |
| 246 // is an existing change SetRevertValueFrom() is invoked on it. Returns false | 210 // is an existing change SetRevertValueFrom() is invoked on it. Returns false |
| 247 // if there is no InFlightChange matching |change|. | 211 // if there is no InFlightChange matching |change|. |
| 248 // See InFlightChange for details on how InFlightChanges are used. | 212 // See InFlightChange for details on how InFlightChanges are used. |
| 249 bool ApplyServerChangeToExistingInFlightChange(const InFlightChange& change); | 213 bool ApplyServerChangeToExistingInFlightChange(const InFlightChange& change); |
| 250 | 214 |
| 251 static Id server_id(const Window* window) { return window->server_id(); } | 215 void BuildWindowTree(const mojo::Array<ui::mojom::WindowDataPtr>& windows, |
| 216 WindowMus* initial_parent); |
| 252 | 217 |
| 253 Window* BuildWindowTree(const mojo::Array<mojom::WindowDataPtr>& windows, | 218 // Creates a WindowPortMus from the server side data. |
| 254 Window* initial_parent); | 219 // NOTE: this *must* be followed by SetLocalPropertiesFromServerProperties() |
| 220 std::unique_ptr<WindowPortMus> CreateWindowPortMus( |
| 221 const ui::mojom::WindowDataPtr& window_data); |
| 255 | 222 |
| 256 Window* NewWindowImpl(NewWindowType type, | 223 // Sets local properties on the associated Window from the server properties. |
| 257 const Window::SharedProperties* properties); | 224 void SetLocalPropertiesFromServerProperties( |
| 225 WindowMus* window, |
| 226 const ui::mojom::WindowDataPtr& window_data); |
| 258 | 227 |
| 259 // Sets the mojom::WindowTree implementation. | 228 // Creates a WindowTreeHostMus and returns the window associated with it. |
| 260 void SetWindowTree(mojom::WindowTreePtr window_tree_ptr); | 229 // The returned window is either the content window of the WindowTreeHostMus |
| 230 // or the window created by WindowTreeHost. See WindowTreeHostMus for |
| 231 // details. |
| 232 // TODO(sky): it would be nice to always have a single window and not the |
| 233 // two different. That requires ownership changes to WindowTreeHost though. |
| 234 Window* CreateWindowTreeHost(WindowTreeHostType type, |
| 235 const ui::mojom::WindowDataPtr& window_data, |
| 236 Window* content_window); |
| 261 | 237 |
| 262 // Called when the mojom::WindowTree connection is lost, deletes this. | 238 WindowMus* NewWindowFromWindowData( |
| 239 WindowMus* parent, |
| 240 const ui::mojom::WindowDataPtr& window_data); |
| 241 |
| 242 // Sets the ui::mojom::WindowTree implementation. |
| 243 void SetWindowTree(ui::mojom::WindowTreePtr window_tree_ptr); |
| 244 |
| 245 // Called when the ui::mojom::WindowTree connection is lost, deletes this. |
| 263 void OnConnectionLost(); | 246 void OnConnectionLost(); |
| 264 | 247 |
| 265 // OnEmbed() calls into this. Exposed as a separate function for testing. | 248 // OnEmbed() calls into this. Exposed as a separate function for testing. |
| 266 void OnEmbedImpl(mojom::WindowTree* window_tree, | 249 void OnEmbedImpl(ui::mojom::WindowTree* window_tree, |
| 267 ClientSpecificId client_id, | 250 ClientSpecificId client_id, |
| 268 mojom::WindowDataPtr root_data, | 251 ui::mojom::WindowDataPtr root_data, |
| 269 int64_t display_id, | 252 int64_t display_id, |
| 270 Id focused_window_id, | 253 Id focused_window_id, |
| 271 bool drawn); | 254 bool drawn); |
| 272 | 255 |
| 273 // Called by WmNewDisplayAdded(). | 256 // Called by WmNewDisplayAdded(). |
| 274 void WmNewDisplayAddedImpl(const display::Display& display, | 257 WindowTreeHost* WmNewDisplayAddedImpl(const display::Display& display, |
| 275 mojom::WindowDataPtr root_data, | 258 ui::mojom::WindowDataPtr root_data, |
| 276 bool parent_drawn); | 259 bool parent_drawn); |
| 260 |
| 261 std::unique_ptr<EventResultCallback> CreateEventResultCallback( |
| 262 int32_t event_id); |
| 277 | 263 |
| 278 void OnReceivedCursorLocationMemory(mojo::ScopedSharedBufferHandle handle); | 264 void OnReceivedCursorLocationMemory(mojo::ScopedSharedBufferHandle handle); |
| 279 | 265 |
| 266 // Following are called from WindowMus. |
| 267 std::unique_ptr<WindowPortInitData> OnWindowMusCreated(WindowMus* window); |
| 268 void OnWindowMusInitDone(WindowMus* window, |
| 269 std::unique_ptr<WindowPortInitData> init_data); |
| 270 void OnWindowMusDestroyed(WindowMus* window); |
| 271 void OnWindowMusBoundsChanged(WindowMus* window, |
| 272 const gfx::Rect& old_bounds, |
| 273 const gfx::Rect& new_bounds); |
| 274 void OnWindowMusAddChild(WindowMus* parent, WindowMus* child); |
| 275 void OnWindowMusRemoveChild(WindowMus* parent, WindowMus* child); |
| 276 void OnWindowMusMoveChild(WindowMus* parent, |
| 277 size_t current_index, |
| 278 size_t dest_index); |
| 279 void OnWindowMusSetVisible(WindowMus* window, bool visible); |
| 280 std::unique_ptr<WindowPortPropertyData> OnWindowMusWillChangeProperty( |
| 281 WindowMus* window, |
| 282 const void* key); |
| 283 void OnWindowMusPropertyChanged(WindowMus* window, |
| 284 const void* key, |
| 285 std::unique_ptr<WindowPortPropertyData> data); |
| 286 void OnWindowMusSurfaceDetached(WindowMus* window, |
| 287 const cc::SurfaceSequence& sequence); |
| 288 |
| 280 // Callback passed from WmPerformMoveLoop(). | 289 // Callback passed from WmPerformMoveLoop(). |
| 281 void OnWmMoveLoopCompleted(uint32_t change_id, bool completed); | 290 void OnWmMoveLoopCompleted(uint32_t change_id, bool completed); |
| 282 | 291 |
| 283 // Overridden from WindowTreeClient: | 292 // Overridden from WindowTreeClient: |
| 284 void OnEmbed(ClientSpecificId client_id, | 293 void OnEmbed(ClientSpecificId client_id, |
| 285 mojom::WindowDataPtr root, | 294 ui::mojom::WindowDataPtr root, |
| 286 mojom::WindowTreePtr tree, | 295 ui::mojom::WindowTreePtr tree, |
| 287 int64_t display_id, | 296 int64_t display_id, |
| 288 Id focused_window_id, | 297 Id focused_window_id, |
| 289 bool drawn) override; | 298 bool drawn) override; |
| 290 void OnEmbeddedAppDisconnected(Id window_id) override; | 299 void OnEmbeddedAppDisconnected(Id window_id) override; |
| 291 void OnUnembed(Id window_id) override; | 300 void OnUnembed(Id window_id) override; |
| 292 void OnCaptureChanged(Id new_capture_window_id, | 301 void OnCaptureChanged(Id new_capture_window_id, |
| 293 Id old_capture_window_id) override; | 302 Id old_capture_window_id) override; |
| 294 void OnTopLevelCreated(uint32_t change_id, | 303 void OnTopLevelCreated(uint32_t change_id, |
| 295 mojom::WindowDataPtr data, | 304 ui::mojom::WindowDataPtr data, |
| 296 int64_t display_id, | 305 int64_t display_id, |
| 297 bool drawn) override; | 306 bool drawn) override; |
| 298 void OnWindowBoundsChanged(Id window_id, | 307 void OnWindowBoundsChanged(Id window_id, |
| 299 const gfx::Rect& old_bounds, | 308 const gfx::Rect& old_bounds, |
| 300 const gfx::Rect& new_bounds) override; | 309 const gfx::Rect& new_bounds) override; |
| 301 void OnClientAreaChanged( | 310 void OnClientAreaChanged( |
| 302 uint32_t window_id, | 311 uint32_t window_id, |
| 303 const gfx::Insets& new_client_area, | 312 const gfx::Insets& new_client_area, |
| 304 mojo::Array<gfx::Rect> new_additional_client_areas) override; | 313 mojo::Array<gfx::Rect> new_additional_client_areas) override; |
| 305 void OnTransientWindowAdded(uint32_t window_id, | 314 void OnTransientWindowAdded(uint32_t window_id, |
| 306 uint32_t transient_window_id) override; | 315 uint32_t transient_window_id) override; |
| 307 void OnTransientWindowRemoved(uint32_t window_id, | 316 void OnTransientWindowRemoved(uint32_t window_id, |
| 308 uint32_t transient_window_id) override; | 317 uint32_t transient_window_id) override; |
| 309 void OnWindowHierarchyChanged( | 318 void OnWindowHierarchyChanged( |
| 310 Id window_id, | 319 Id window_id, |
| 311 Id old_parent_id, | 320 Id old_parent_id, |
| 312 Id new_parent_id, | 321 Id new_parent_id, |
| 313 mojo::Array<mojom::WindowDataPtr> windows) override; | 322 mojo::Array<ui::mojom::WindowDataPtr> windows) override; |
| 314 void OnWindowReordered(Id window_id, | 323 void OnWindowReordered(Id window_id, |
| 315 Id relative_window_id, | 324 Id relative_window_id, |
| 316 mojom::OrderDirection direction) override; | 325 ui::mojom::OrderDirection direction) override; |
| 317 void OnWindowDeleted(Id window_id) override; | 326 void OnWindowDeleted(Id window_id) override; |
| 318 void OnWindowVisibilityChanged(Id window_id, bool visible) override; | 327 void OnWindowVisibilityChanged(Id window_id, bool visible) override; |
| 319 void OnWindowOpacityChanged(Id window_id, | 328 void OnWindowOpacityChanged(Id window_id, |
| 320 float old_opacity, | 329 float old_opacity, |
| 321 float new_opacity) override; | 330 float new_opacity) override; |
| 322 void OnWindowParentDrawnStateChanged(Id window_id, bool drawn) override; | 331 void OnWindowParentDrawnStateChanged(Id window_id, bool drawn) override; |
| 323 void OnWindowSharedPropertyChanged(Id window_id, | 332 void OnWindowSharedPropertyChanged( |
| 324 const mojo::String& name, | 333 Id window_id, |
| 325 mojo::Array<uint8_t> new_data) override; | 334 const mojo::String& name, |
| 335 mojo::Array<uint8_t> transport_data) override; |
| 326 void OnWindowInputEvent(uint32_t event_id, | 336 void OnWindowInputEvent(uint32_t event_id, |
| 327 Id window_id, | 337 Id window_id, |
| 328 std::unique_ptr<ui::Event> event, | 338 std::unique_ptr<ui::Event> event, |
| 329 bool matches_pointer_watcher) override; | 339 bool matches_pointer_watcher) override; |
| 330 void OnPointerEventObserved(std::unique_ptr<ui::Event> event, | 340 void OnPointerEventObserved(std::unique_ptr<ui::Event> event, |
| 331 uint32_t window_id) override; | 341 uint32_t window_id) override; |
| 332 void OnWindowFocused(Id focused_window_id) override; | 342 void OnWindowFocused(Id focused_window_id) override; |
| 333 void OnWindowPredefinedCursorChanged(Id window_id, | 343 void OnWindowPredefinedCursorChanged(Id window_id, |
| 334 mojom::Cursor cursor) override; | 344 ui::mojom::Cursor cursor) override; |
| 335 void OnWindowSurfaceChanged(Id window_id, | 345 void OnWindowSurfaceChanged(Id window_id, |
| 336 const cc::SurfaceId& surface_id, | 346 const cc::SurfaceId& surface_id, |
| 337 const cc::SurfaceSequence& surface_sequence, | 347 const cc::SurfaceSequence& surface_sequence, |
| 338 const gfx::Size& frame_size, | 348 const gfx::Size& frame_size, |
| 339 float device_scale_factor) override; | 349 float device_scale_factor) override; |
| 340 void OnDragDropStart( | 350 void OnDragDropStart( |
| 341 mojo::Map<mojo::String, mojo::Array<uint8_t>> mime_data) override; | 351 mojo::Map<mojo::String, mojo::Array<uint8_t>> mime_data) override; |
| 342 void OnDragEnter(Id window_id, | 352 void OnDragEnter(Id window_id, |
| 343 uint32_t event_flags, | 353 uint32_t event_flags, |
| 344 const gfx::Point& position, | 354 const gfx::Point& position, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 360 uint32_t action_taken) override; | 370 uint32_t action_taken) override; |
| 361 void OnDragDropDone() override; | 371 void OnDragDropDone() override; |
| 362 void OnChangeCompleted(uint32_t change_id, bool success) override; | 372 void OnChangeCompleted(uint32_t change_id, bool success) override; |
| 363 void RequestClose(uint32_t window_id) override; | 373 void RequestClose(uint32_t window_id) override; |
| 364 void GetWindowManager( | 374 void GetWindowManager( |
| 365 mojo::AssociatedInterfaceRequest<WindowManager> internal) override; | 375 mojo::AssociatedInterfaceRequest<WindowManager> internal) override; |
| 366 | 376 |
| 367 // Overridden from WindowManager: | 377 // Overridden from WindowManager: |
| 368 void OnConnect(ClientSpecificId client_id) override; | 378 void OnConnect(ClientSpecificId client_id) override; |
| 369 void WmNewDisplayAdded(const display::Display& display, | 379 void WmNewDisplayAdded(const display::Display& display, |
| 370 mojom::WindowDataPtr root_data, | 380 ui::mojom::WindowDataPtr root_data, |
| 371 bool parent_drawn) override; | 381 bool parent_drawn) override; |
| 372 void WmDisplayRemoved(int64_t display_id) override; | 382 void WmDisplayRemoved(int64_t display_id) override; |
| 373 void WmDisplayModified(const display::Display& display) override; | 383 void WmDisplayModified(const display::Display& display) override; |
| 374 void WmSetBounds(uint32_t change_id, | 384 void WmSetBounds(uint32_t change_id, |
| 375 Id window_id, | 385 Id window_id, |
| 376 const gfx::Rect& transit_bounds) override; | 386 const gfx::Rect& transit_bounds) override; |
| 377 void WmSetProperty(uint32_t change_id, | 387 void WmSetProperty(uint32_t change_id, |
| 378 Id window_id, | 388 Id window_id, |
| 379 const mojo::String& name, | 389 const mojo::String& name, |
| 380 mojo::Array<uint8_t> transit_data) override; | 390 mojo::Array<uint8_t> transit_data) override; |
| 381 void WmCreateTopLevelWindow(uint32_t change_id, | 391 void WmCreateTopLevelWindow(uint32_t change_id, |
| 382 ClientSpecificId requesting_client_id, | 392 ClientSpecificId requesting_client_id, |
| 383 mojo::Map<mojo::String, mojo::Array<uint8_t>> | 393 mojo::Map<mojo::String, mojo::Array<uint8_t>> |
| 384 transport_properties) override; | 394 transport_properties) override; |
| 385 void WmClientJankinessChanged(ClientSpecificId client_id, | 395 void WmClientJankinessChanged(ClientSpecificId client_id, |
| 386 bool janky) override; | 396 bool janky) override; |
| 387 void WmPerformMoveLoop(uint32_t change_id, | 397 void WmPerformMoveLoop(uint32_t change_id, |
| 388 Id window_id, | 398 Id window_id, |
| 389 mojom::MoveLoopSource source, | 399 ui::mojom::MoveLoopSource source, |
| 390 const gfx::Point& cursor_location) override; | 400 const gfx::Point& cursor_location) override; |
| 391 void WmCancelMoveLoop(uint32_t window_id) override; | 401 void WmCancelMoveLoop(uint32_t window_id) override; |
| 392 void OnAccelerator(uint32_t ack_id, | 402 void OnAccelerator(uint32_t ack_id, |
| 393 uint32_t accelerator_id, | 403 uint32_t accelerator_id, |
| 394 std::unique_ptr<ui::Event> event) override; | 404 std::unique_ptr<ui::Event> event) override; |
| 395 | 405 |
| 396 // Overridden from WindowManagerClient: | 406 // Overridden from WindowManagerClient: |
| 397 void SetFrameDecorationValues( | 407 void SetFrameDecorationValues( |
| 398 mojom::FrameDecorationValuesPtr values) override; | 408 ui::mojom::FrameDecorationValuesPtr values) override; |
| 399 void SetNonClientCursor(Window* window, ui::mojom::Cursor cursor_id) override; | 409 void SetNonClientCursor(Window* window, ui::mojom::Cursor cursor_id) override; |
| 400 void AddAccelerator(uint32_t id, | 410 void AddAccelerator(uint32_t id, |
| 401 mojom::EventMatcherPtr event_matcher, | 411 ui::mojom::EventMatcherPtr event_matcher, |
| 402 const base::Callback<void(bool)>& callback) override; | 412 const base::Callback<void(bool)>& callback) override; |
| 403 void RemoveAccelerator(uint32_t id) override; | 413 void RemoveAccelerator(uint32_t id) override; |
| 404 void AddActivationParent(Window* window) override; | 414 void AddActivationParent(Window* window) override; |
| 405 void RemoveActivationParent(Window* window) override; | 415 void RemoveActivationParent(Window* window) override; |
| 406 void ActivateNextWindow() override; | 416 void ActivateNextWindow() override; |
| 407 void SetUnderlaySurfaceOffsetAndExtendedHitArea( | 417 void SetUnderlaySurfaceOffsetAndExtendedHitArea( |
| 408 Window* window, | 418 Window* window, |
| 409 const gfx::Vector2d& offset, | 419 const gfx::Vector2d& offset, |
| 410 const gfx::Insets& hit_area) override; | 420 const gfx::Insets& hit_area) override; |
| 411 | 421 |
| 422 // Overriden from client::FocusChangeObserver: |
| 423 void OnWindowFocused(Window* gained_focus, Window* lost_focus) override; |
| 424 |
| 425 // Overriden from client::CaptureClientObserver: |
| 426 void OnCaptureChanged(Window* lost_capture, Window* gained_capture) override; |
| 427 |
| 412 // The one int in |cursor_location_mapping_|. When we read from this | 428 // The one int in |cursor_location_mapping_|. When we read from this |
| 413 // location, we must always read from it atomically. | 429 // location, we must always read from it atomically. |
| 414 base::subtle::Atomic32* cursor_location_memory() { | 430 base::subtle::Atomic32* cursor_location_memory() { |
| 415 return reinterpret_cast<base::subtle::Atomic32*>( | 431 return reinterpret_cast<base::subtle::Atomic32*>( |
| 416 cursor_location_mapping_.get()); | 432 cursor_location_mapping_.get()); |
| 417 } | 433 } |
| 418 | 434 |
| 419 // This is set once and only once when we get OnEmbed(). It gives the unique | 435 // This is set once and only once when we get OnEmbed(). It gives the unique |
| 420 // id for this client. | 436 // id for this client. |
| 421 ClientSpecificId client_id_; | 437 ClientSpecificId client_id_; |
| 422 | 438 |
| 423 // Id assigned to the next window created. | 439 // Id assigned to the next window created. |
| 424 ClientSpecificId next_window_id_; | 440 ClientSpecificId next_window_id_; |
| 425 | 441 |
| 426 // Id used for the next change id supplied to the server. | 442 // Id used for the next change id supplied to the server. |
| 427 uint32_t next_change_id_; | 443 uint32_t next_change_id_; |
| 428 InFlightMap in_flight_map_; | 444 InFlightMap in_flight_map_; |
| 429 | 445 |
| 430 WindowTreeClientDelegate* delegate_; | 446 WindowTreeClientDelegate* delegate_; |
| 431 | 447 |
| 432 WindowManagerDelegate* window_manager_delegate_; | 448 WindowManagerDelegate* window_manager_delegate_; |
| 433 | 449 |
| 434 std::set<Window*> roots_; | 450 std::set<WindowMus*> roots_; |
| 435 | 451 |
| 436 IdToWindowMap windows_; | 452 IdToWindowMap windows_; |
| 437 std::map<ClientSpecificId, std::set<Window*>> embedded_windows_; | 453 std::map<ClientSpecificId, std::set<Window*>> embedded_windows_; |
| 438 | 454 |
| 439 Window* capture_window_; | 455 bool setting_capture_ = false; |
| 456 WindowMus* window_setting_capture_to_ = nullptr; |
| 457 WindowMus* capture_window_ = nullptr; |
| 440 | 458 |
| 441 Window* focused_window_; | 459 bool setting_focus_ = false; |
| 460 WindowMus* window_setting_focus_to_ = nullptr; |
| 461 WindowMus* focused_window_ = nullptr; |
| 442 | 462 |
| 443 mojo::Binding<mojom::WindowTreeClient> binding_; | 463 mojo::Binding<ui::mojom::WindowTreeClient> binding_; |
| 444 mojom::WindowTreePtr tree_ptr_; | 464 ui::mojom::WindowTreePtr tree_ptr_; |
| 445 // Typically this is the value contained in |tree_ptr_|, but tests may | 465 // Typically this is the value contained in |tree_ptr_|, but tests may |
| 446 // directly set this. | 466 // directly set this. |
| 447 mojom::WindowTree* tree_; | 467 ui::mojom::WindowTree* tree_; |
| 448 | 468 |
| 449 // Set to true if OnEmbed() was received. | 469 // Set to true if OnEmbed() was received. |
| 450 bool is_from_embed_ = false; | 470 bool is_from_embed_ = false; |
| 451 | 471 |
| 452 bool in_destructor_; | 472 bool in_destructor_; |
| 453 | 473 |
| 454 // A mapping to shared memory that is one 32 bit integer long. The window | 474 // A mapping to shared memory that is one 32 bit integer long. The window |
| 455 // server uses this to let us synchronously read the cursor location. | 475 // server uses this to let us synchronously read the cursor location. |
| 456 mojo::ScopedSharedBufferMapping cursor_location_mapping_; | 476 mojo::ScopedSharedBufferMapping cursor_location_mapping_; |
| 457 | 477 |
| 458 base::ObserverList<WindowTreeClientObserver> observers_; | 478 base::ObserverList<WindowTreeClientObserver> observers_; |
| 459 | 479 |
| 460 std::unique_ptr<mojo::AssociatedBinding<mojom::WindowManager>> | 480 std::unique_ptr<mojo::AssociatedBinding<ui::mojom::WindowManager>> |
| 461 window_manager_internal_; | 481 window_manager_internal_; |
| 462 mojom::WindowManagerClientAssociatedPtr window_manager_internal_client_; | 482 ui::mojom::WindowManagerClientAssociatedPtr window_manager_internal_client_; |
| 463 | 483 |
| 464 bool has_pointer_watcher_ = false; | 484 bool has_pointer_watcher_ = false; |
| 465 | 485 |
| 466 // The current change id for the client. | 486 // The current change id for the client. |
| 467 uint32_t current_move_loop_change_ = 0u; | 487 uint32_t current_move_loop_change_ = 0u; |
| 468 | 488 |
| 469 // Callback executed when a move loop initiated by PerformWindowMove() is | 489 // Callback executed when a move loop initiated by PerformWindowMove() is |
| 470 // completed. | 490 // completed. |
| 471 base::Callback<void(bool)> on_current_move_finished_; | 491 base::Callback<void(bool)> on_current_move_finished_; |
| 472 | 492 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 485 // A set of window ids for windows that we received an OnDragEnter() message | 505 // A set of window ids for windows that we received an OnDragEnter() message |
| 486 // for. We maintain this set so we know who to send OnDragFinish() messages | 506 // for. We maintain this set so we know who to send OnDragFinish() messages |
| 487 // at the end of the drag. | 507 // at the end of the drag. |
| 488 std::set<Id> drag_entered_windows_; | 508 std::set<Id> drag_entered_windows_; |
| 489 | 509 |
| 490 base::WeakPtrFactory<WindowTreeClient> weak_factory_; | 510 base::WeakPtrFactory<WindowTreeClient> weak_factory_; |
| 491 | 511 |
| 492 DISALLOW_COPY_AND_ASSIGN(WindowTreeClient); | 512 DISALLOW_COPY_AND_ASSIGN(WindowTreeClient); |
| 493 }; | 513 }; |
| 494 | 514 |
| 495 } // namespace ui | 515 } // namespace aura |
| 496 | 516 |
| 497 #endif // SERVICES_UI_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_ | 517 #endif // UI_AURA_MUS_WINDOW_TREE_CLIENT_H_ |
| OLD | NEW |