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

Unified Diff: components/mus/ws/window_tree.h

Issue 2119963002: Move mus to //services/ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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 | « components/mus/ws/window_server_test_impl.cc ('k') | components/mus/ws/window_tree.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/window_tree.h
diff --git a/components/mus/ws/window_tree.h b/components/mus/ws/window_tree.h
deleted file mode 100644
index 0e804f355a116e70aeecc3cb1e81222f50cb526b..0000000000000000000000000000000000000000
--- a/components/mus/ws/window_tree.h
+++ /dev/null
@@ -1,497 +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 COMPONENTS_MUS_WS_WINDOW_TREE_H_
-#define COMPONENTS_MUS_WS_WINDOW_TREE_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <queue>
-#include <set>
-#include <string>
-#include <vector>
-
-#include "base/callback.h"
-#include "base/containers/hash_tables.h"
-#include "base/macros.h"
-#include "cc/ipc/surface_id.mojom.h"
-#include "components/mus/public/interfaces/window_tree.mojom.h"
-#include "components/mus/ws/access_policy_delegate.h"
-#include "components/mus/ws/ids.h"
-#include "components/mus/ws/user_id.h"
-#include "components/mus/ws/window_tree_binding.h"
-#include "mojo/public/cpp/bindings/associated_binding.h"
-
-namespace gfx {
-class Insets;
-class Rect;
-}
-
-namespace ui {
-class Event;
-}
-
-namespace mus {
-namespace ws {
-
-class AccessPolicy;
-class DisplayManager;
-class Display;
-class EventMatcher;
-class ServerWindow;
-class TargetedEvent;
-class WindowManagerDisplayRoot;
-class WindowManagerState;
-class WindowServer;
-class WindowTreeTest;
-
-namespace test {
-class WindowTreeTestApi;
-}
-
-// WindowTree represents a view onto portions of the window tree. The parts of
-// the tree exposed to the client start at the root windows. A WindowTree may
-// have any number of roots (including none). A WindowTree may not have
-// visibility of all the descendants of its roots.
-//
-// WindowTree notifies its client as changes happen to windows exposed to the
-// the client.
-//
-// See ids.h for details on how WindowTree handles identity of windows.
-class WindowTree : public mojom::WindowTree,
- public AccessPolicyDelegate,
- public mojom::WindowManagerClient {
- public:
- WindowTree(WindowServer* window_server,
- const UserId& user_id,
- ServerWindow* root,
- std::unique_ptr<AccessPolicy> access_policy);
- ~WindowTree() override;
-
- void Init(std::unique_ptr<WindowTreeBinding> binding,
- mojom::WindowTreePtr tree);
-
- // Called if this WindowTree hosts a WindowManager.
- void ConfigureWindowManager();
-
- ClientSpecificId id() const { return id_; }
-
- void set_embedder_intercepts_events() { embedder_intercepts_events_ = true; }
- bool embedder_intercepts_events() const {
- return embedder_intercepts_events_;
- }
-
- const UserId& user_id() const { return user_id_; }
-
- mojom::WindowTreeClient* client() { return binding_->client(); }
-
- // Returns the Window with the specified id.
- ServerWindow* GetWindow(const WindowId& id) {
- return const_cast<ServerWindow*>(
- const_cast<const WindowTree*>(this)->GetWindow(id));
- }
- const ServerWindow* GetWindow(const WindowId& id) const;
-
- // Returns the Window with the specified client id *only* if known to this
- // client, returns null if not known.
- ServerWindow* GetWindowByClientId(const ClientWindowId& id) {
- return const_cast<ServerWindow*>(
- const_cast<const WindowTree*>(this)->GetWindowByClientId(id));
- }
- const ServerWindow* GetWindowByClientId(const ClientWindowId& id) const;
-
- bool IsWindowKnown(const ServerWindow* window) const {
- return IsWindowKnown(window, nullptr);
- }
- // Returns whether |window| is known to this tree. If |window| is known and
- // |client_window_id| is non-null |client_window_id| is set to the
- // ClientWindowId of the window.
- bool IsWindowKnown(const ServerWindow* window,
- ClientWindowId* client_window_id) const;
-
- // Returns true if |window| is one of this trees roots.
- bool HasRoot(const ServerWindow* window) const;
-
- std::set<const ServerWindow*> roots() { return roots_; }
-
- void set_name(const std::string& name) { name_ = name; }
- const std::string& name() const { return name_; }
-
- bool janky() const { return janky_; }
-
- const Display* GetDisplay(const ServerWindow* window) const;
- Display* GetDisplay(const ServerWindow* window) {
- return const_cast<Display*>(
- const_cast<const WindowTree*>(this)->GetDisplay(window));
- }
-
- const WindowManagerDisplayRoot* GetWindowManagerDisplayRoot(
- const ServerWindow* window) const;
- WindowManagerDisplayRoot* GetWindowManagerDisplayRoot(
- const ServerWindow* window) {
- return const_cast<WindowManagerDisplayRoot*>(
- const_cast<const WindowTree*>(this)->GetWindowManagerDisplayRoot(
- window));
- }
- WindowManagerState* window_manager_state() {
- return window_manager_state_.get();
- }
-
- DisplayManager* display_manager();
- const DisplayManager* display_manager() const;
-
- WindowServer* window_server() { return window_server_; }
- const WindowServer* window_server() const { return window_server_; }
-
- // Adds a new root to this tree. This is only valid for window managers.
- void AddRootForWindowManager(const ServerWindow* root);
-
- // Invoked when a tree is about to be destroyed.
- void OnWindowDestroyingTreeImpl(WindowTree* tree);
-
- // These functions are synchronous variants of those defined in the mojom. The
- // WindowTree implementations all call into these. See the mojom for details.
- bool SetCapture(const ClientWindowId& client_window_id);
- bool NewWindow(const ClientWindowId& client_window_id,
- const std::map<std::string, std::vector<uint8_t>>& properties);
- bool AddWindow(const ClientWindowId& parent_id,
- const ClientWindowId& child_id);
- bool AddTransientWindow(const ClientWindowId& window_id,
- const ClientWindowId& transient_window_id);
- bool SetModal(const ClientWindowId& window_id);
- std::vector<const ServerWindow*> GetWindowTree(
- const ClientWindowId& window_id) const;
- bool SetWindowVisibility(const ClientWindowId& window_id, bool visible);
- bool SetWindowOpacity(const ClientWindowId& window_id, float opacity);
- bool SetFocus(const ClientWindowId& window_id);
- bool Embed(const ClientWindowId& window_id,
- mojom::WindowTreeClientPtr client,
- uint32_t flags);
- void DispatchInputEvent(ServerWindow* target, const ui::Event& event);
-
- bool IsWaitingForNewTopLevelWindow(uint32_t wm_change_id);
- void OnWindowManagerCreatedTopLevelWindow(uint32_t wm_change_id,
- uint32_t client_change_id,
- const ServerWindow* window);
- void AddActivationParent(const ClientWindowId& window_id);
-
- // Calls through to the client.
- void OnChangeCompleted(uint32_t change_id, bool success);
- void OnAccelerator(uint32_t accelerator_id, const ui::Event& event);
-
- // Called when |tree|'s jankiness changes (see janky_ for definition).
- // Notifies the window manager client so it can update UI for the affected
- // window(s).
- void ClientJankinessChanged(WindowTree* tree);
-
- // The following methods are invoked after the corresponding change has been
- // processed. They do the appropriate bookkeeping and update the client as
- // necessary.
- void ProcessWindowBoundsChanged(const ServerWindow* window,
- const gfx::Rect& old_bounds,
- const gfx::Rect& new_bounds,
- bool originated_change);
- void ProcessClientAreaChanged(
- const ServerWindow* window,
- const gfx::Insets& new_client_area,
- const std::vector<gfx::Rect>& new_additional_client_areas,
- bool originated_change);
- void ProcessWillChangeWindowHierarchy(const ServerWindow* window,
- const ServerWindow* new_parent,
- const ServerWindow* old_parent,
- bool originated_change);
- void ProcessWindowPropertyChanged(const ServerWindow* window,
- const std::string& name,
- const std::vector<uint8_t>* new_data,
- bool originated_change);
- void ProcessWindowHierarchyChanged(const ServerWindow* window,
- const ServerWindow* new_parent,
- const ServerWindow* old_parent,
- bool originated_change);
- void ProcessWindowReorder(const ServerWindow* window,
- const ServerWindow* relative_window,
- mojom::OrderDirection direction,
- bool originated_change);
- void ProcessWindowDeleted(const ServerWindow* window, bool originated_change);
- void ProcessWillChangeWindowVisibility(const ServerWindow* window,
- bool originated_change);
- void ProcessWindowOpacityChanged(const ServerWindow* window,
- float old_opacity,
- float new_opacity,
- bool originated_change);
- void ProcessCursorChanged(const ServerWindow* window,
- int32_t cursor_id,
- bool originated_change);
- void ProcessFocusChanged(const ServerWindow* old_focused_window,
- const ServerWindow* new_focused_window);
- void ProcessLostCapture(const ServerWindow* old_lost_capture,
- bool originated_change);
- void ProcessTransientWindowAdded(const ServerWindow* window,
- const ServerWindow* transient_window,
- bool originated_change);
- void ProcessTransientWindowRemoved(const ServerWindow* window,
- const ServerWindow* transient_window,
- bool originated_change);
-
- // Sends this event to the client if it matches an active event observer.
- void SendToEventObserver(const ui::Event& event);
-
- private:
- friend class test::WindowTreeTestApi;
-
- struct WaitingForTopLevelWindowInfo {
- WaitingForTopLevelWindowInfo(const ClientWindowId& client_window_id,
- uint32_t wm_change_id)
- : client_window_id(client_window_id), wm_change_id(wm_change_id) {}
- ~WaitingForTopLevelWindowInfo() {}
-
- // Id supplied from the client.
- ClientWindowId client_window_id;
-
- // Change id we created for the window manager.
- uint32_t wm_change_id;
- };
-
- enum class RemoveRootReason {
- // The window is being removed.
- DELETED,
-
- // Another client is being embedded in the window.
- EMBED,
- };
-
- bool ShouldRouteToWindowManager(const ServerWindow* window) const;
-
- ClientWindowId ClientWindowIdForWindow(const ServerWindow* window) const;
-
- // Returns true if |id| is a valid WindowId for a new window.
- bool IsValidIdForNewWindow(const ClientWindowId& id) const;
-
- WindowId GenerateNewWindowId();
-
- // These functions return true if the corresponding mojom function is allowed
- // for this tree.
- bool CanReorderWindow(const ServerWindow* window,
- const ServerWindow* relative_window,
- mojom::OrderDirection direction) const;
-
- // Deletes a window owned by this tree. Returns true on success. |source| is
- // the tree that originated the change.
- bool DeleteWindowImpl(WindowTree* source, ServerWindow* window);
-
- // If |window| is known does nothing. Otherwise adds |window| to |windows|,
- // marks |window| as known and recurses.
- void GetUnknownWindowsFrom(const ServerWindow* window,
- std::vector<const ServerWindow*>* windows);
-
- // Removes |window| from the appropriate maps. If |window| is known to this
- // client true is returned.
- bool RemoveFromMaps(const ServerWindow* window);
-
- // Removes |window| and all its descendants from the necessary maps. This
- // does not recurse through windows that were created by this tree. All
- // windows owned by this tree are added to |local_windows|.
- void RemoveFromKnown(const ServerWindow* window,
- std::vector<ServerWindow*>* local_windows);
-
- // Removes a root from set of roots of this tree. This does not remove
- // the window from the window tree, only from the set of roots.
- void RemoveRoot(const ServerWindow* window, RemoveRootReason reason);
-
- // Converts Window(s) to WindowData(s) for transport. This assumes all the
- // windows are valid for the client. The parent of windows the client is not
- // allowed to see are set to NULL (in the returned WindowData(s)).
- mojo::Array<mojom::WindowDataPtr> WindowsToWindowDatas(
- const std::vector<const ServerWindow*>& windows);
- mojom::WindowDataPtr WindowToWindowData(const ServerWindow* window);
-
- // Implementation of GetWindowTree(). Adds |window| to |windows| and recurses
- // if CanDescendIntoWindowForWindowTree() returns true.
- void GetWindowTreeImpl(const ServerWindow* window,
- std::vector<const ServerWindow*>* windows) const;
-
- // Notify the client if the drawn state of any of the roots changes.
- // |window| is the window that is changing to the drawn state
- // |new_drawn_value|.
- void NotifyDrawnStateChanged(const ServerWindow* window,
- bool new_drawn_value);
-
- // Deletes all Windows we own.
- void DestroyWindows();
-
- bool CanEmbed(const ClientWindowId& window_id) const;
- void PrepareForEmbed(ServerWindow* window);
- void RemoveChildrenAsPartOfEmbed(ServerWindow* window);
-
- void DispatchInputEventImpl(ServerWindow* target, const ui::Event& event);
-
- // Calls OnChangeCompleted() on the client.
- void NotifyChangeCompleted(uint32_t change_id,
- mojom::WindowManagerErrorCode error_code);
-
- // WindowTree:
- void NewWindow(uint32_t change_id,
- Id transport_window_id,
- mojo::Map<mojo::String, mojo::Array<uint8_t>>
- transport_properties) override;
- void NewTopLevelWindow(uint32_t change_id,
- Id transport_window_id,
- mojo::Map<mojo::String, mojo::Array<uint8_t>>
- transport_properties) override;
- void DeleteWindow(uint32_t change_id, Id transport_window_id) override;
- void AddWindow(uint32_t change_id, Id parent_id, Id child_id) override;
- void RemoveWindowFromParent(uint32_t change_id, Id window_id) override;
- void AddTransientWindow(uint32_t change_id,
- Id window,
- Id transient_window) override;
- void RemoveTransientWindowFromParent(uint32_t change_id,
- Id transient_window_id) override;
- void SetModal(uint32_t change_id, Id window_id) override;
- void ReorderWindow(uint32_t change_Id,
- Id window_id,
- Id relative_window_id,
- mojom::OrderDirection direction) override;
- void GetWindowTree(
- Id window_id,
- const base::Callback<void(mojo::Array<mojom::WindowDataPtr>)>& callback)
- override;
- void SetCapture(uint32_t change_id, Id window_id) override;
- void ReleaseCapture(uint32_t change_id, Id window_id) override;
- void SetEventObserver(mojom::EventMatcherPtr matcher,
- uint32_t observer_id) override;
- void SetWindowBounds(uint32_t change_id,
- Id window_id,
- const gfx::Rect& bounds) override;
- void SetWindowVisibility(uint32_t change_id,
- Id window_id,
- bool visible) override;
- void SetWindowProperty(uint32_t change_id,
- Id transport_window_id,
- const mojo::String& name,
- mojo::Array<uint8_t> value) override;
- void SetWindowOpacity(uint32_t change_id,
- Id window_id,
- float opacity) override;
- void AttachSurface(Id transport_window_id,
- mojom::SurfaceType type,
- mojo::InterfaceRequest<mojom::Surface> surface,
- mojom::SurfaceClientPtr client) override;
- void Embed(Id transport_window_id,
- mojom::WindowTreeClientPtr client,
- uint32_t flags,
- const EmbedCallback& callback) override;
- void SetFocus(uint32_t change_id, Id transport_window_id) override;
- void SetCanFocus(Id transport_window_id, bool can_focus) override;
- void SetPredefinedCursor(uint32_t change_id,
- Id transport_window_id,
- mus::mojom::Cursor cursor_id) override;
- void SetWindowTextInputState(Id transport_window_id,
- mojo::TextInputStatePtr state) override;
- void SetImeVisibility(Id transport_window_id,
- bool visible,
- mojo::TextInputStatePtr state) override;
- void OnWindowInputEventAck(uint32_t event_id,
- mojom::EventResult result) override;
- void SetClientArea(
- Id transport_window_id,
- const gfx::Insets& insets,
- mojo::Array<gfx::Rect> transport_additional_client_areas) override;
- void SetHitTestMask(Id transport_window_id, const gfx::Rect& mask) override;
- void GetWindowManagerClient(
- mojo::AssociatedInterfaceRequest<mojom::WindowManagerClient> internal)
- override;
- void GetCursorLocationMemory(const GetCursorLocationMemoryCallback& callback)
- override;
-
- // mojom::WindowManagerClient:
- void AddAccelerator(uint32_t id,
- mojom::EventMatcherPtr event_matcher,
- const AddAcceleratorCallback& callback) override;
- void RemoveAccelerator(uint32_t id) override;
- void AddActivationParent(Id transport_window_id) override;
- void RemoveActivationParent(Id transport_window_id) override;
- void ActivateNextWindow() override;
- void SetUnderlaySurfaceOffsetAndExtendedHitArea(
- Id window_id,
- int32_t x_offset,
- int32_t y_offset,
- const gfx::Insets& hit_area) override;
- void WmResponse(uint32_t change_id, bool response) override;
- void WmRequestClose(Id transport_window_id) override;
- void WmSetFrameDecorationValues(
- mojom::FrameDecorationValuesPtr values) override;
- void WmSetNonClientCursor(uint32_t window_id,
- mojom::Cursor cursor_id) override;
- void OnWmCreatedTopLevelWindow(uint32_t change_id,
- Id transport_window_id) override;
-
- // AccessPolicyDelegate:
- bool HasRootForAccessPolicy(const ServerWindow* window) const override;
- bool IsWindowKnownForAccessPolicy(const ServerWindow* window) const override;
- bool IsWindowRootOfAnotherTreeForAccessPolicy(
- const ServerWindow* window) const override;
-
- WindowServer* window_server_;
-
- UserId user_id_;
-
- // Id of this tree as assigned by WindowServer.
- const ClientSpecificId id_;
- std::string name_;
-
- ClientSpecificId next_window_id_;
-
- std::unique_ptr<WindowTreeBinding> binding_;
-
- std::unique_ptr<mus::ws::AccessPolicy> access_policy_;
-
- // The roots, or embed points, of this tree. A WindowTree may have any
- // number of roots, including 0.
- std::set<const ServerWindow*> roots_;
-
- // The windows created by this tree. This tree owns these objects.
- base::hash_map<WindowId, ServerWindow*> created_window_map_;
-
- // The client is allowed to assign ids. These two maps providing the mapping
- // from the ids native to the server (WindowId) to those understood by the
- // client (ClientWindowId).
- base::hash_map<ClientWindowId, WindowId> client_id_to_window_id_map_;
- base::hash_map<WindowId, ClientWindowId> window_id_to_client_id_map_;
-
- uint32_t event_ack_id_;
-
- // A client is considered janky if it hasn't ACK'ed input events within a
- // reasonable timeframe.
- bool janky_ = false;
-
- // Set when the client is using SetEventObserver() to observe events,
- // otherwise null.
- std::unique_ptr<EventMatcher> event_observer_matcher_;
-
- // The ID supplied by the client for the current event observer.
- uint32_t event_observer_id_ = 0;
-
- // WindowManager the current event came from.
- WindowManagerState* event_source_wms_ = nullptr;
-
- std::queue<std::unique_ptr<TargetedEvent>> event_queue_;
-
- std::unique_ptr<mojo::AssociatedBinding<mojom::WindowManagerClient>>
- window_manager_internal_client_binding_;
- mojom::WindowManager* window_manager_internal_;
- std::unique_ptr<WindowManagerState> window_manager_state_;
-
- std::unique_ptr<WaitingForTopLevelWindowInfo>
- waiting_for_top_level_window_info_;
- bool embedder_intercepts_events_ = false;
-
- DISALLOW_COPY_AND_ASSIGN(WindowTree);
-};
-
-} // namespace ws
-} // namespace mus
-
-#endif // COMPONENTS_MUS_WS_WINDOW_TREE_H_
« no previous file with comments | « components/mus/ws/window_server_test_impl.cc ('k') | components/mus/ws/window_tree.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698