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

Unified Diff: services/ui/public/cpp/window_tree_client.h

Issue 2651593002: mus: Remove the old client lib. (Closed)
Patch Set: restore test Created 3 years, 11 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
« no previous file with comments | « services/ui/public/cpp/window_tracker.h ('k') | services/ui/public/cpp/window_tree_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/public/cpp/window_tree_client.h
diff --git a/services/ui/public/cpp/window_tree_client.h b/services/ui/public/cpp/window_tree_client.h
deleted file mode 100644
index 1b5f99afee7388228a700c4b4093d2bbf117a6a0..0000000000000000000000000000000000000000
--- a/services/ui/public/cpp/window_tree_client.h
+++ /dev/null
@@ -1,494 +0,0 @@
-// Copyright 2014 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_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_
-#define SERVICES_UI_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/atomicops.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "mojo/public/cpp/bindings/associated_binding.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "services/ui/common/types.h"
-#include "services/ui/public/cpp/window.h"
-#include "services/ui/public/cpp/window_manager_delegate.h"
-#include "services/ui/public/interfaces/window_tree.mojom.h"
-
-namespace display {
-class Display;
-}
-
-namespace gfx {
-class Insets;
-}
-
-namespace service_manager {
-class Connector;
-}
-
-namespace ui {
-class InFlightChange;
-class WindowTreeClientDelegate;
-class WindowTreeClientPrivate;
-class WindowTreeClientObserver;
-enum class ChangeType;
-
-// Manages the connection with mus.
-//
-// WindowTreeClient is owned by the creator. Generally when the delegate gets
-// one of OnEmbedRootDestroyed() or OnLostConnection() it should delete the
-// WindowTreeClient.
-//
-// When WindowTreeClient is deleted all windows are deleted (and observers
-// notified).
-class WindowTreeClient : public mojom::WindowTreeClient,
- public mojom::WindowManager,
- public WindowManagerClient {
- public:
- explicit WindowTreeClient(
- WindowTreeClientDelegate* delegate,
- WindowManagerDelegate* window_manager_delegate = nullptr,
- mojom::WindowTreeClientRequest request = nullptr);
- ~WindowTreeClient() override;
-
- // Establishes the connection by way of the WindowTreeFactory.
- void ConnectViaWindowTreeFactory(service_manager::Connector* connector);
-
- // Establishes the connection by way of WindowManagerWindowTreeFactory.
- void ConnectAsWindowManager(service_manager::Connector* connector);
-
- // Wait for OnEmbed(), returning when done.
- void WaitForEmbed();
-
- bool connected() const { return tree_ != nullptr; }
- ClientSpecificId client_id() const { return client_id_; }
-
- // API exposed to the window implementations that pushes local changes to the
- // service.
- void DestroyWindow(Window* window);
-
- // These methods take TransportIds. For windows owned by the current client,
- // the client id high word can be zero. In all cases, the TransportId 0x1
- // refers to the root window.
- void AddChild(Window* parent, Id child_id);
- void RemoveChild(Window* parent, Id child_id);
-
- void AddTransientWindow(Window* window, Id transient_window_id);
- void RemoveTransientWindowFromParent(Window* window);
-
- void SetModal(Window* window);
-
- void Reorder(Window* window,
- Id relative_window_id,
- mojom::OrderDirection direction);
-
- // Returns true if the specified window was created by this client.
- bool WasCreatedByThisClient(const Window* window) const;
-
- void SetBounds(Window* window,
- const gfx::Rect& old_bounds,
- const gfx::Rect& bounds);
- void SetCapture(Window* window);
- void ReleaseCapture(Window* window);
- void SetClientArea(Id window_id,
- const gfx::Insets& client_area,
- const std::vector<gfx::Rect>& additional_client_areas);
- void SetHitTestMask(Id window_id, const gfx::Rect& mask);
- void ClearHitTestMask(Id window_id);
- void SetFocus(Window* window);
- void SetCanFocus(Id window_id, bool can_focus);
- void SetCanAcceptDrops(Id window_id, bool can_accept_drops);
- void SetCanAcceptEvents(Id window_id, bool can_accept_events);
- void SetPredefinedCursor(Id window_id, ui::mojom::Cursor cursor_id);
- void SetVisible(Window* window, bool visible);
- void SetOpacity(Window* window, float opacity);
- void SetProperty(Window* window,
- const std::string& name,
- const base::Optional<std::vector<uint8_t>>& data);
- void SetWindowTextInputState(Id window_id, mojo::TextInputStatePtr state);
- void SetImeVisibility(Id window_id,
- bool visible,
- mojo::TextInputStatePtr state);
-
- void Embed(Id window_id,
- mojom::WindowTreeClientPtr client,
- uint32_t flags,
- const mojom::WindowTree::EmbedCallback& callback);
-
- void RequestClose(Window* window);
-
- void AttachCompositorFrameSink(
- Id window_id,
- cc::mojom::MojoCompositorFrameSinkRequest compositor_frame_sink,
- cc::mojom::MojoCompositorFrameSinkClientPtr client);
-
- // Sets the input capture to |window| without notifying the server.
- void LocalSetCapture(Window* window);
- // Sets focus to |window| without notifying the server.
- void LocalSetFocus(Window* window);
-
- // Start/stop tracking windows. While tracked, they can be retrieved via
- // WindowTreeClient::GetWindowById.
- void AddWindow(Window* window);
-
- bool IsRoot(Window* window) const { return roots_.count(window) > 0; }
-
- void OnWindowDestroying(Window* window);
-
- // Called after the window's observers have been notified of destruction (as
- // the last step of ~Window).
- void OnWindowDestroyed(Window* window);
-
- Window* GetWindowByServerId(Id id);
-
- // Returns the root of this connection.
- const std::set<Window*>& GetRoots();
-
- // Returns the Window with input capture; null if no window has requested
- // input capture, or if another app has capture.
- Window* GetCaptureWindow();
-
- // Returns the focused window; null if focus is not yet known or another app
- // is focused.
- Window* GetFocusedWindow();
-
- // Sets focus to null. This does nothing if focus is currently null.
- void ClearFocus();
-
- // Returns the current location of the mouse on screen. Note: this method may
- // race the asynchronous initialization; but in that case we return (0, 0).
- gfx::Point GetCursorScreenPoint();
-
- // See description in window_tree.mojom. When an existing pointer watcher is
- // updated or cleared then any future events from the server for that watcher
- // will be ignored.
- void StartPointerWatcher(bool want_moves);
- void StopPointerWatcher();
-
- void PerformDragDrop(
- Window* window,
- const std::map<std::string, std::vector<uint8_t>>& drag_data,
- int drag_operation,
- const gfx::Point& cursor_location,
- const SkBitmap& bitmap,
- const base::Callback<void(bool, uint32_t)>& callback);
-
- // Cancels a in progress drag drop. (If no drag is in progress, does
- // nothing.)
- void CancelDragDrop(Window* window);
-
- // Performs a window move. |callback| will be asynchronously called with the
- // whether the move loop completed successfully.
- void PerformWindowMove(Window* window,
- ui::mojom::MoveLoopSource source,
- const gfx::Point& cursor_location,
- const base::Callback<void(bool)>& callback);
-
- // Cancels a in progress window move. (If no window is currently being moved,
- // does nothing.)
- void CancelWindowMove(Window* window);
-
- // Creates and returns a new Window (which is owned by the window server).
- // Windows are initially hidden, use SetVisible(true) to show.
- Window* NewWindow() { return NewWindow(nullptr); }
- Window* NewWindow(
- const std::map<std::string, std::vector<uint8_t>>* properties);
- Window* NewTopLevelWindow(
- const std::map<std::string, std::vector<uint8_t>>* properties);
-
- void AddObserver(WindowTreeClientObserver* observer);
- void RemoveObserver(WindowTreeClientObserver* observer);
-
-#if !defined(NDEBUG)
- std::string GetDebugWindowHierarchy() const;
- void BuildDebugInfo(const std::string& depth,
- Window* window,
- std::string* result) const;
-#endif
-
- private:
- friend class WindowTreeClientPrivate;
-
- struct CurrentDragState;
-
- enum class NewWindowType {
- CHILD,
- TOP_LEVEL,
- };
-
- using IdToWindowMap = std::map<Id, Window*>;
-
- // TODO(sky): this assumes change_ids never wrap, which is a bad assumption.
- using InFlightMap = std::map<uint32_t, std::unique_ptr<InFlightChange>>;
-
- // Returns the oldest InFlightChange that matches |change|.
- InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change);
-
- // See InFlightChange for details on how InFlightChanges are used.
- uint32_t ScheduleInFlightChange(std::unique_ptr<InFlightChange> change);
-
- // Returns true if there is an InFlightChange that matches |change|. If there
- // is an existing change SetRevertValueFrom() is invoked on it. Returns false
- // if there is no InFlightChange matching |change|.
- // See InFlightChange for details on how InFlightChanges are used.
- bool ApplyServerChangeToExistingInFlightChange(const InFlightChange& change);
-
- static Id server_id(const Window* window) { return window->server_id(); }
-
- void BuildWindowTree(const std::vector<mojom::WindowDataPtr>& windows,
- Window* initial_parent);
-
- Window* NewWindowImpl(NewWindowType type,
- const Window::SharedProperties* properties);
-
- // Sets the mojom::WindowTree implementation.
- void SetWindowTree(mojom::WindowTreePtr window_tree_ptr);
-
- // Called when the mojom::WindowTree connection is lost, deletes this.
- void OnConnectionLost();
-
- // OnEmbed() calls into this. Exposed as a separate function for testing.
- void OnEmbedImpl(mojom::WindowTree* window_tree,
- ClientSpecificId client_id,
- mojom::WindowDataPtr root_data,
- int64_t display_id,
- Id focused_window_id,
- bool drawn);
-
- // Called by WmNewDisplayAdded().
- void WmNewDisplayAddedImpl(const display::Display& display,
- mojom::WindowDataPtr root_data,
- bool parent_drawn);
-
- void OnReceivedCursorLocationMemory(mojo::ScopedSharedBufferHandle handle);
-
- // Callback passed from WmPerformMoveLoop().
- void OnWmMoveLoopCompleted(uint32_t change_id, bool completed);
-
- // Overridden from WindowTreeClient:
- void OnEmbed(ClientSpecificId client_id,
- mojom::WindowDataPtr root,
- mojom::WindowTreePtr tree,
- int64_t display_id,
- Id focused_window_id,
- bool drawn) override;
- void OnEmbeddedAppDisconnected(Id window_id) override;
- void OnUnembed(Id window_id) override;
- void OnCaptureChanged(Id new_capture_window_id,
- Id old_capture_window_id) override;
- void OnTopLevelCreated(uint32_t change_id,
- mojom::WindowDataPtr data,
- int64_t display_id,
- bool drawn) override;
- void OnWindowBoundsChanged(Id window_id,
- const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds) override;
- void OnClientAreaChanged(
- uint32_t window_id,
- const gfx::Insets& new_client_area,
- const std::vector<gfx::Rect>& new_additional_client_areas) override;
- void OnTransientWindowAdded(uint32_t window_id,
- uint32_t transient_window_id) override;
- void OnTransientWindowRemoved(uint32_t window_id,
- uint32_t transient_window_id) override;
- void OnWindowHierarchyChanged(
- Id window_id,
- Id old_parent_id,
- Id new_parent_id,
- std::vector<mojom::WindowDataPtr> windows) override;
- void OnWindowReordered(Id window_id,
- Id relative_window_id,
- mojom::OrderDirection direction) override;
- void OnWindowDeleted(Id window_id) override;
- void OnWindowVisibilityChanged(Id window_id, bool visible) override;
- void OnWindowOpacityChanged(Id window_id,
- float old_opacity,
- float new_opacity) override;
- void OnWindowParentDrawnStateChanged(Id window_id, bool drawn) override;
- void OnWindowSharedPropertyChanged(
- Id window_id,
- const std::string& name,
- const base::Optional<std::vector<uint8_t>>& new_data) override;
- void OnWindowInputEvent(uint32_t event_id,
- Id window_id,
- std::unique_ptr<ui::Event> event,
- bool matches_pointer_watcher) override;
- void OnPointerEventObserved(std::unique_ptr<ui::Event> event,
- uint32_t window_id) override;
- void OnWindowFocused(Id focused_window_id) override;
- void OnWindowPredefinedCursorChanged(Id window_id,
- mojom::Cursor cursor) override;
- void OnWindowSurfaceChanged(Id window_id,
- const cc::SurfaceInfo& surface_info) override;
- void OnDragDropStart(
- const std::unordered_map<std::string, std::vector<uint8_t>>& mime_data)
- override;
- void OnDragEnter(Id window_id,
- uint32_t event_flags,
- const gfx::Point& position,
- uint32_t effect_bitmask,
- const OnDragEnterCallback& callback) override;
- void OnDragOver(Id window_id,
- uint32_t event_flags,
- const gfx::Point& position,
- uint32_t effect_bitmask,
- const OnDragOverCallback& callback) override;
- void OnDragLeave(Id window_id) override;
- void OnCompleteDrop(Id window_id,
- uint32_t event_flags,
- const gfx::Point& position,
- uint32_t effect_bitmask,
- const OnCompleteDropCallback& callback) override;
- void OnPerformDragDropCompleted(uint32_t window,
- bool success,
- uint32_t action_taken) override;
- void OnDragDropDone() override;
- void OnChangeCompleted(uint32_t change_id, bool success) override;
- void RequestClose(uint32_t window_id) override;
- void GetWindowManager(
- mojo::AssociatedInterfaceRequest<WindowManager> internal) override;
-
- // Overridden from WindowManager:
- void OnConnect(ClientSpecificId client_id) override;
- void WmNewDisplayAdded(const display::Display& display,
- mojom::WindowDataPtr root_data,
- bool parent_drawn) override;
- void WmDisplayRemoved(int64_t display_id) override;
- void WmDisplayModified(const display::Display& display) override;
- void WmSetBounds(uint32_t change_id,
- Id window_id,
- const gfx::Rect& transit_bounds) override;
- void WmSetProperty(
- uint32_t change_id,
- Id window_id,
- const std::string& name,
- const base::Optional<std::vector<uint8_t>>& transit_data) override;
- void WmCreateTopLevelWindow(
- uint32_t change_id,
- ClientSpecificId requesting_client_id,
- const std::unordered_map<std::string, std::vector<uint8_t>>&
- transport_properties) override;
- void WmClientJankinessChanged(ClientSpecificId client_id,
- bool janky) override;
- void WmPerformMoveLoop(uint32_t change_id,
- Id window_id,
- mojom::MoveLoopSource source,
- const gfx::Point& cursor_location) override;
- void WmCancelMoveLoop(uint32_t window_id) override;
- void WmDeactivateWindow(uint32_t window_id) override;
- void OnAccelerator(uint32_t ack_id,
- uint32_t accelerator_id,
- std::unique_ptr<ui::Event> event) override;
-
- // Overridden from WindowManagerClient:
- void SetFrameDecorationValues(
- mojom::FrameDecorationValuesPtr values) override;
- void SetNonClientCursor(Window* window, ui::mojom::Cursor cursor_id) override;
- void AddAccelerators(std::vector<mojom::AcceleratorPtr> accelerators,
- const base::Callback<void(bool)>& callback) override;
- void RemoveAccelerator(uint32_t id) override;
- void AddActivationParent(Window* window) override;
- void RemoveActivationParent(Window* window) override;
- void ActivateNextWindow() override;
- void SetUnderlaySurfaceOffsetAndExtendedHitArea(
- Window* window,
- const gfx::Vector2d& offset,
- const gfx::Insets& hit_area) override;
-
- // The one int in |cursor_location_mapping_|. When we read from this
- // location, we must always read from it atomically.
- base::subtle::Atomic32* cursor_location_memory() {
- return reinterpret_cast<base::subtle::Atomic32*>(
- cursor_location_mapping_.get());
- }
-
- // This is set once and only once when we get OnEmbed(). It gives the unique
- // id for this client.
- ClientSpecificId client_id_;
-
- // Id assigned to the next window created.
- ClientSpecificId next_window_id_;
-
- // Id used for the next change id supplied to the server.
- uint32_t next_change_id_;
- InFlightMap in_flight_map_;
-
- WindowTreeClientDelegate* delegate_;
-
- WindowManagerDelegate* window_manager_delegate_;
-
- std::set<Window*> roots_;
-
- IdToWindowMap windows_;
- std::map<ClientSpecificId, std::set<Window*>> embedded_windows_;
-
- Window* capture_window_;
-
- Window* focused_window_;
-
- mojo::Binding<mojom::WindowTreeClient> binding_;
- mojom::WindowTreePtr tree_ptr_;
- // Typically this is the value contained in |tree_ptr_|, but tests may
- // directly set this.
- mojom::WindowTree* tree_;
-
- // Set to true if OnEmbed() was received.
- bool is_from_embed_ = false;
-
- bool in_destructor_;
-
- // A mapping to shared memory that is one 32 bit integer long. The window
- // server uses this to let us synchronously read the cursor location.
- mojo::ScopedSharedBufferMapping cursor_location_mapping_;
-
- base::ObserverList<WindowTreeClientObserver> observers_;
-
- std::unique_ptr<mojo::AssociatedBinding<mojom::WindowManager>>
- window_manager_internal_;
- mojom::WindowManagerClientAssociatedPtr window_manager_internal_client_;
-
- bool has_pointer_watcher_ = false;
-
- // The current change id for the client.
- uint32_t current_move_loop_change_ = 0u;
-
- // Callback executed when a move loop initiated by PerformWindowMove() is
- // completed.
- base::Callback<void(bool)> on_current_move_finished_;
-
- // The current change id for the window manager.gg
- uint32_t current_wm_move_loop_change_ = 0u;
- Id current_wm_move_loop_window_id_ = 0u;
-
- // State related to being the initiator of a drag started with
- // PerformDragDrop().
- std::unique_ptr<CurrentDragState> current_drag_state_;
-
- // The mus server sends the mime drag data once per connection; we cache this
- // and are responsible for sending it to all of our windows.
-
- std::map<std::string, std::vector<uint8_t>> mime_drag_data_;
-
- // A set of window ids for windows that we received an OnDragEnter() message
- // for. We maintain this set so we know who to send OnDragFinish() messages
- // at the end of the drag.
- std::set<Id> drag_entered_windows_;
-
- base::WeakPtrFactory<WindowTreeClient> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(WindowTreeClient);
-};
-
-} // namespace ui
-
-#endif // SERVICES_UI_PUBLIC_CPP_WINDOW_TREE_CLIENT_H_
« no previous file with comments | « services/ui/public/cpp/window_tracker.h ('k') | services/ui/public/cpp/window_tree_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698