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

Unified Diff: services/ui/view_manager/view_state.h

Issue 1679023006: Reify view ownership as a message pipe. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 10 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/view_manager/view_registry.cc ('k') | services/ui/view_manager/view_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/view_manager/view_state.h
diff --git a/services/ui/view_manager/view_state.h b/services/ui/view_manager/view_state.h
index 2919f91334bf52d3687f29a759ace05baa322f1e..9b733f60500d95891bbc9ad21299aaedbbd132e3 100644
--- a/services/ui/view_manager/view_state.h
+++ b/services/ui/view_manager/view_state.h
@@ -10,25 +10,29 @@
#include <string>
#include <unordered_map>
-#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
+#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/services/ui/views/cpp/formatting.h"
#include "mojo/services/ui/views/interfaces/views.mojom.h"
#include "services/ui/view_manager/view_layout_request.h"
namespace view_manager {
-class ViewTreeState;
+class ViewRegistry;
+class ViewHostImpl;
+class ViewStub;
// Describes the state of a particular view.
// This object is owned by the ViewRegistry that created it.
class ViewState {
public:
- using ChildrenMap = std::unordered_map<uint32_t, ViewState*>;
+ using ChildrenMap = std::unordered_map<uint32_t, std::unique_ptr<ViewStub>>;
- ViewState(mojo::ui::ViewPtr view,
+ ViewState(ViewRegistry* registry,
+ mojo::ui::ViewPtr view,
mojo::ui::ViewTokenPtr view_token,
+ mojo::InterfaceRequest<mojo::ui::ViewHost> view_host_request,
const std::string& label);
~ViewState();
@@ -42,39 +46,24 @@ class ViewState {
// Caller does not obtain ownership of the token.
mojo::ui::ViewToken* view_token() const { return view_token_.get(); }
- // Sets the associated host implementation and takes ownership of it.
- void set_view_host(mojo::ui::ViewHost* host) { view_host_.reset(host); }
+ // Gets or sets the view stub which links this view into the
+ // view hierarchy, or null if the view isn't linked anywhere.
+ ViewStub* view_stub() const { return view_stub_; }
+ void set_view_stub(ViewStub* view_stub) { view_stub_ = view_stub; }
- // Sets the connection error handler for the view.
- void set_view_connection_error_handler(const base::Closure& handler) {
- view_.set_connection_error_handler(handler);
- }
-
- // Gets the view tree to which this view belongs, or null if none.
- ViewTreeState* tree() const { return tree_; }
-
- // Gets the parent view state, or null if none.
- ViewState* parent() const { return parent_; }
-
- // Gets the key that this child has in its container, or 0 if none.
- uint32_t key() const { return key_; }
-
- // Recursively sets the view tree to which this view and all of its
- // descendents belongs. Must not be null. This method must only be called
- // on root views.
- void SetTree(ViewTreeState* tree, uint32_t key);
+ // The map of children, indexed by child key.
+ // The view stub pointers are never null but some view stubs may
+ // have been marked unavailable.
+ const ChildrenMap& children() const { return children_; }
- // Sets the parent view state pointer, the child's key in its parent,
- // and set its view tree to that of its parent. Must not be null.
- void SetParent(ViewState* parent, uint32_t key);
+ // Links a child into the view tree.
+ void LinkChild(uint32_t key, std::unique_ptr<ViewStub> child);
- // Resets the parent view state and tree pointers to null.
- void ResetContainer();
+ // Unlinks a child of the view tree.
+ std::unique_ptr<ViewStub> UnlinkChild(uint32_t key);
- // The map of children, indexed by child key.
- // Child view state may be null if the child with the given key has
- // become unavailable but not yet removed.
- ChildrenMap& children() { return children_; }
+ // Unlinks all children as a single operation.
+ std::vector<std::unique_ptr<ViewStub>> UnlinkAllChildren();
// The set of children needing layout.
// This set must never contain non-existent or unavailable children.
@@ -123,21 +112,30 @@ class ViewState {
// Returns null if unavailable.
mojo::ui::ViewLayoutInfoPtr CreateLayoutInfo();
- const std::string& label() { return label_; }
- const std::string& FormattedLabel();
+ // Binds the |ViewOwner| interface to the view which has the effect of
+ // tying the view's lifetime to that of the owner's pipe.
+ void BindOwner(
+ mojo::InterfaceRequest<mojo::ui::ViewOwner> view_owner_request);
- private:
- void SetTreeUnchecked(ViewTreeState* tree);
+ // Unbinds the view from its owner.
+ void ReleaseOwner();
+
+ const std::string& label() const { return label_; }
+ const std::string& FormattedLabel() const;
+ private:
mojo::ui::ViewPtr view_;
mojo::ui::ViewTokenPtr view_token_;
+
const std::string label_;
- std::string formatted_label_cache_;
+ mutable std::string formatted_label_cache_;
+
+ std::unique_ptr<ViewHostImpl> impl_;
+ mojo::Binding<mojo::ui::ViewHost> host_binding_;
+ mojo::Binding<mojo::ui::ViewOwner> owner_binding_;
+
+ ViewStub* view_stub_ = nullptr;
- std::unique_ptr<mojo::ui::ViewHost> view_host_;
- ViewTreeState* tree_ = nullptr;
- ViewState* parent_ = nullptr;
- uint32_t key_ = 0u;
ChildrenMap children_;
std::set<uint32_t> children_needing_layout_;
std::vector<std::unique_ptr<ViewLayoutRequest>> pending_layout_requests_;
« no previous file with comments | « services/ui/view_manager/view_registry.cc ('k') | services/ui/view_manager/view_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698