| Index: components/mus/ws/window_tree_impl.h
|
| diff --git a/components/mus/ws/window_tree_impl.h b/components/mus/ws/window_tree_impl.h
|
| index 676cced0db0263beef33e1efb2dba5800c8aa544..4b70dde37ddf49154cb3f652829e9e98b4c500ea 100644
|
| --- a/components/mus/ws/window_tree_impl.h
|
| +++ b/components/mus/ws/window_tree_impl.h
|
| @@ -7,7 +7,9 @@
|
|
|
| #include <stdint.h>
|
|
|
| +#include <map>
|
| #include <queue>
|
| +#include <set>
|
| #include <string>
|
| #include <vector>
|
|
|
| @@ -34,6 +36,7 @@ class ConnectionManager;
|
| class ServerWindow;
|
| class TargetedEvent;
|
| class WindowTreeHostImpl;
|
| +class WindowTreeTest;
|
|
|
| // An instance of WindowTreeImpl is created for every WindowTree request.
|
| // WindowTreeImpl tracks all the state and windows created by a client.
|
| @@ -77,6 +80,8 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| // Invoked when a connection is about to be destroyed.
|
| void OnWillDestroyWindowTreeImpl(WindowTreeImpl* connection);
|
|
|
| + void OnWillDestroyWindowTreeHost(WindowTreeHostImpl* tree_host);
|
| +
|
| // These functions are synchronous variants of those defined in the mojom. The
|
| // WindowTree implementations all call into these. See the mojom for details.
|
| bool NewWindow(const WindowId& window_id,
|
| @@ -93,6 +98,11 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| ConnectionSpecificId* connection_id);
|
| void DispatchInputEvent(ServerWindow* target, mojom::EventPtr event);
|
|
|
| + bool IsWaitingForNewTopLevelWindow(uint32_t wm_change_id);
|
| + void OnWindowManagerCreatedTopLevelWindow(uint32_t wm_change_id,
|
| + uint32_t client_change_id,
|
| + const WindowId& window_id);
|
| +
|
| // Maps the window id from the client to the server. Normally the ids are the
|
| // same, but there may be a different id at the embed point.
|
| WindowId MapWindowIdFromClient(Id transport_window_id) const {
|
| @@ -157,6 +167,19 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| private:
|
| using WindowIdSet = base::hash_set<Id>;
|
| using WindowMap = std::map<ConnectionSpecificId, ServerWindow*>;
|
| + friend class WindowTreeTest;
|
| +
|
| + struct WaitingForTopLevelWindowInfo {
|
| + WaitingForTopLevelWindowInfo(WindowId window_id, uint32_t wm_change_id)
|
| + : window_id(window_id), wm_change_id(wm_change_id) {}
|
| + ~WaitingForTopLevelWindowInfo() {}
|
| +
|
| + // Id supplied from the client.
|
| + WindowId window_id;
|
| +
|
| + // Change id we created for the window manager.
|
| + uint32_t wm_change_id;
|
| + };
|
|
|
| enum class RemoveRootReason {
|
| // The window is being removed.
|
| @@ -236,6 +259,10 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| 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;
|
| @@ -292,6 +319,8 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| // mojom::WindowManagerInternalClient:
|
| void WmResponse(uint32_t change_id, bool response) override;
|
| void WmRequestClose(Id transport_window_id) override;
|
| + void OnWmCreatedTopLevelWindow(uint32_t change_id,
|
| + Id transport_window_id) override;
|
|
|
| // AccessPolicyDelegate:
|
| bool HasRootForAccessPolicy(const ServerWindow* window) const override;
|
| @@ -322,9 +351,6 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| uint32_t event_ack_id_;
|
|
|
| // WindowTreeHostImpl the current event came from.
|
| - // TODO(sky): in the case of multiple roots we may outlive
|
| - // |event_source_host_|. Make sure we null out event_source_host_ if the
|
| - // WindowTreeHostImpl is destroyed before us.
|
| WindowTreeHostImpl* event_source_host_;
|
|
|
| bool is_embed_root_;
|
| @@ -335,6 +361,10 @@ class WindowTreeImpl : public mojom::WindowTree,
|
| window_manager_internal_client_binding_;
|
| mojom::WindowManagerInternal* window_manager_internal_;
|
|
|
| + std::map<WindowId, WindowId> embed_to_real_id_map_;
|
| +
|
| + scoped_ptr<WaitingForTopLevelWindowInfo> waiting_for_top_level_window_info_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(WindowTreeImpl);
|
| };
|
|
|
|
|