| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_VIEW_MANAGER_VIEW_STATE_H_ | 5 #ifndef SERVICES_UI_VIEW_MANAGER_VIEW_STATE_H_ |
| 6 #define SERVICES_UI_VIEW_MANAGER_VIEW_STATE_H_ | 6 #define SERVICES_UI_VIEW_MANAGER_VIEW_STATE_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <unordered_map> | 11 #include <unordered_map> |
| 12 | 12 |
| 13 #include "base/callback.h" | |
| 14 #include "base/macros.h" | 13 #include "base/macros.h" |
| 15 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
| 15 #include "mojo/public/cpp/bindings/binding.h" |
| 16 #include "mojo/services/ui/views/cpp/formatting.h" | 16 #include "mojo/services/ui/views/cpp/formatting.h" |
| 17 #include "mojo/services/ui/views/interfaces/views.mojom.h" | 17 #include "mojo/services/ui/views/interfaces/views.mojom.h" |
| 18 #include "services/ui/view_manager/view_layout_request.h" | 18 #include "services/ui/view_manager/view_layout_request.h" |
| 19 | 19 |
| 20 namespace view_manager { | 20 namespace view_manager { |
| 21 | 21 |
| 22 class ViewTreeState; | 22 class ViewRegistry; |
| 23 class ViewHostImpl; |
| 24 class ViewStub; |
| 23 | 25 |
| 24 // Describes the state of a particular view. | 26 // Describes the state of a particular view. |
| 25 // This object is owned by the ViewRegistry that created it. | 27 // This object is owned by the ViewRegistry that created it. |
| 26 class ViewState { | 28 class ViewState { |
| 27 public: | 29 public: |
| 28 using ChildrenMap = std::unordered_map<uint32_t, ViewState*>; | 30 using ChildrenMap = std::unordered_map<uint32_t, std::unique_ptr<ViewStub>>; |
| 29 | 31 |
| 30 ViewState(mojo::ui::ViewPtr view, | 32 ViewState(ViewRegistry* registry, |
| 33 mojo::ui::ViewPtr view, |
| 31 mojo::ui::ViewTokenPtr view_token, | 34 mojo::ui::ViewTokenPtr view_token, |
| 35 mojo::InterfaceRequest<mojo::ui::ViewHost> view_host_request, |
| 32 const std::string& label); | 36 const std::string& label); |
| 33 ~ViewState(); | 37 ~ViewState(); |
| 34 | 38 |
| 35 base::WeakPtr<ViewState> GetWeakPtr() { return weak_factory_.GetWeakPtr(); } | 39 base::WeakPtr<ViewState> GetWeakPtr() { return weak_factory_.GetWeakPtr(); } |
| 36 | 40 |
| 37 // Gets the view interface, never null. | 41 // Gets the view interface, never null. |
| 38 // Caller does not obtain ownership of the view. | 42 // Caller does not obtain ownership of the view. |
| 39 mojo::ui::View* view() const { return view_.get(); } | 43 mojo::ui::View* view() const { return view_.get(); } |
| 40 | 44 |
| 41 // Gets the token used to refer to this view globally. | 45 // Gets the token used to refer to this view globally. |
| 42 // Caller does not obtain ownership of the token. | 46 // Caller does not obtain ownership of the token. |
| 43 mojo::ui::ViewToken* view_token() const { return view_token_.get(); } | 47 mojo::ui::ViewToken* view_token() const { return view_token_.get(); } |
| 44 | 48 |
| 45 // Sets the associated host implementation and takes ownership of it. | 49 // Gets or sets the view stub which links this view into the |
| 46 void set_view_host(mojo::ui::ViewHost* host) { view_host_.reset(host); } | 50 // view hierarchy, or null if the view isn't linked anywhere. |
| 47 | 51 ViewStub* view_stub() const { return view_stub_; } |
| 48 // Sets the connection error handler for the view. | 52 void set_view_stub(ViewStub* view_stub) { view_stub_ = view_stub; } |
| 49 void set_view_connection_error_handler(const base::Closure& handler) { | |
| 50 view_.set_connection_error_handler(handler); | |
| 51 } | |
| 52 | |
| 53 // Gets the view tree to which this view belongs, or null if none. | |
| 54 ViewTreeState* tree() const { return tree_; } | |
| 55 | |
| 56 // Gets the parent view state, or null if none. | |
| 57 ViewState* parent() const { return parent_; } | |
| 58 | |
| 59 // Gets the key that this child has in its container, or 0 if none. | |
| 60 uint32_t key() const { return key_; } | |
| 61 | |
| 62 // Recursively sets the view tree to which this view and all of its | |
| 63 // descendents belongs. Must not be null. This method must only be called | |
| 64 // on root views. | |
| 65 void SetTree(ViewTreeState* tree, uint32_t key); | |
| 66 | |
| 67 // Sets the parent view state pointer, the child's key in its parent, | |
| 68 // and set its view tree to that of its parent. Must not be null. | |
| 69 void SetParent(ViewState* parent, uint32_t key); | |
| 70 | |
| 71 // Resets the parent view state and tree pointers to null. | |
| 72 void ResetContainer(); | |
| 73 | 53 |
| 74 // The map of children, indexed by child key. | 54 // The map of children, indexed by child key. |
| 75 // Child view state may be null if the child with the given key has | 55 // The view stub pointers are never null but some view stubs may |
| 76 // become unavailable but not yet removed. | 56 // have been marked unavailable. |
| 77 ChildrenMap& children() { return children_; } | 57 const ChildrenMap& children() const { return children_; } |
| 58 |
| 59 // Links a child into the view tree. |
| 60 void LinkChild(uint32_t key, std::unique_ptr<ViewStub> child); |
| 61 |
| 62 // Unlinks a child of the view tree. |
| 63 std::unique_ptr<ViewStub> UnlinkChild(uint32_t key); |
| 64 |
| 65 // Unlinks all children as a single operation. |
| 66 std::vector<std::unique_ptr<ViewStub>> UnlinkAllChildren(); |
| 78 | 67 |
| 79 // The set of children needing layout. | 68 // The set of children needing layout. |
| 80 // This set must never contain non-existent or unavailable children. | 69 // This set must never contain non-existent or unavailable children. |
| 81 std::set<uint32_t>& children_needing_layout() { | 70 std::set<uint32_t>& children_needing_layout() { |
| 82 return children_needing_layout_; | 71 return children_needing_layout_; |
| 83 } | 72 } |
| 84 | 73 |
| 85 // The list of pending layout requests. | 74 // The list of pending layout requests. |
| 86 std::vector<std::unique_ptr<ViewLayoutRequest>>& pending_layout_requests() { | 75 std::vector<std::unique_ptr<ViewLayoutRequest>>& pending_layout_requests() { |
| 87 return pending_layout_requests_; | 76 return pending_layout_requests_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 116 return scene_changed_since_last_report_; | 105 return scene_changed_since_last_report_; |
| 117 } | 106 } |
| 118 void set_scene_changed_since_last_report(bool value) { | 107 void set_scene_changed_since_last_report(bool value) { |
| 119 scene_changed_since_last_report_ = value; | 108 scene_changed_since_last_report_ = value; |
| 120 } | 109 } |
| 121 | 110 |
| 122 // Creates layout information to return to the parent or tree. | 111 // Creates layout information to return to the parent or tree. |
| 123 // Returns null if unavailable. | 112 // Returns null if unavailable. |
| 124 mojo::ui::ViewLayoutInfoPtr CreateLayoutInfo(); | 113 mojo::ui::ViewLayoutInfoPtr CreateLayoutInfo(); |
| 125 | 114 |
| 126 const std::string& label() { return label_; } | 115 // Binds the |ViewOwner| interface to the view which has the effect of |
| 127 const std::string& FormattedLabel(); | 116 // tying the view's lifetime to that of the owner's pipe. |
| 117 void BindOwner( |
| 118 mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request); |
| 119 |
| 120 // Unbinds the view from its owner. |
| 121 void ReleaseOwner(); |
| 122 |
| 123 const std::string& label() const { return label_; } |
| 124 const std::string& FormattedLabel() const; |
| 128 | 125 |
| 129 private: | 126 private: |
| 130 void SetTreeUnchecked(ViewTreeState* tree); | |
| 131 | |
| 132 mojo::ui::ViewPtr view_; | 127 mojo::ui::ViewPtr view_; |
| 133 mojo::ui::ViewTokenPtr view_token_; | 128 mojo::ui::ViewTokenPtr view_token_; |
| 129 |
| 134 const std::string label_; | 130 const std::string label_; |
| 135 std::string formatted_label_cache_; | 131 mutable std::string formatted_label_cache_; |
| 136 | 132 |
| 137 std::unique_ptr<mojo::ui::ViewHost> view_host_; | 133 std::unique_ptr<ViewHostImpl> impl_; |
| 138 ViewTreeState* tree_ = nullptr; | 134 mojo::Binding<mojo::ui::ViewHost> host_binding_; |
| 139 ViewState* parent_ = nullptr; | 135 mojo::Binding<mojo::ui::ViewOwner> owner_binding_; |
| 140 uint32_t key_ = 0u; | 136 |
| 137 ViewStub* view_stub_ = nullptr; |
| 138 |
| 141 ChildrenMap children_; | 139 ChildrenMap children_; |
| 142 std::set<uint32_t> children_needing_layout_; | 140 std::set<uint32_t> children_needing_layout_; |
| 143 std::vector<std::unique_ptr<ViewLayoutRequest>> pending_layout_requests_; | 141 std::vector<std::unique_ptr<ViewLayoutRequest>> pending_layout_requests_; |
| 144 mojo::ui::ViewLayoutParamsPtr layout_params_; | 142 mojo::ui::ViewLayoutParamsPtr layout_params_; |
| 145 mojo::ui::ViewLayoutResultPtr layout_result_; | 143 mojo::ui::ViewLayoutResultPtr layout_result_; |
| 146 mojo::gfx::composition::SceneTokenPtr scene_token_; | 144 mojo::gfx::composition::SceneTokenPtr scene_token_; |
| 147 bool scene_changed_since_last_report_ = false; | 145 bool scene_changed_since_last_report_ = false; |
| 148 | 146 |
| 149 base::WeakPtrFactory<ViewState> weak_factory_; // must be last | 147 base::WeakPtrFactory<ViewState> weak_factory_; // must be last |
| 150 | 148 |
| 151 DISALLOW_COPY_AND_ASSIGN(ViewState); | 149 DISALLOW_COPY_AND_ASSIGN(ViewState); |
| 152 }; | 150 }; |
| 153 | 151 |
| 154 std::ostream& operator<<(std::ostream& os, ViewState* view_state); | 152 std::ostream& operator<<(std::ostream& os, ViewState* view_state); |
| 155 | 153 |
| 156 } // namespace view_manager | 154 } // namespace view_manager |
| 157 | 155 |
| 158 #endif // SERVICES_UI_VIEW_MANAGER_VIEW_STATE_H_ | 156 #endif // SERVICES_UI_VIEW_MANAGER_VIEW_STATE_H_ |
| OLD | NEW |