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

Side by Side Diff: mojo/services/ui/views/interfaces/views.mojom

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 unified diff | Download patch
« no previous file with comments | « mojo/services/ui/views/interfaces/view_trees.mojom ('k') | mojo/ui/base_view.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 [DartPackage="mojo_services"] 5 [DartPackage="mojo_services"]
6 module mojo.ui; 6 module mojo.ui;
7 7
8 import "mojo/public/interfaces/application/service_provider.mojom"; 8 import "mojo/public/interfaces/application/service_provider.mojom";
9 import "mojo/services/gfx/composition/interfaces/scenes.mojom"; 9 import "mojo/services/gfx/composition/interfaces/scenes.mojom";
10 import "mojo/services/ui/views/interfaces/layouts.mojom"; 10 import "mojo/services/ui/views/interfaces/layouts.mojom";
11 11
12 // A view token is an opaque transferable reference to a view. 12 // A view token is an opaque transferable reference to a view.
13 // 13 //
14 // The ViewManager provides each view with a unique view token when 14 // The ViewManager provides each view with a unique view token when
15 // it is registered. The token can subsequently be passed to other 15 // it is registered. The token can subsequently be passed to other
16 // applications and may be used to add the view as a child of some 16 // applications and may be used to add the view as a child of some
17 // other view or to set it as the root of a view tree. 17 // other view or to set it as the root of a view tree.
18 // 18 //
19 // View tokens should be kept secret and should only be shared with 19 // View tokens should be kept secret and should only be shared with
20 // the view's intended container. 20 // the view's intended container.
21 // 21 //
22 // TODO(jeffbrown): This implementation is a temporary placeholder until 22 // TODO(jeffbrown): This implementation is a temporary placeholder until
23 // we extend Mojo to provide a way to create tokens which cannot be forged. 23 // we extend Mojo to provide a way to create tokens which cannot be forged.
24 struct ViewToken { 24 struct ViewToken {
25 uint32 value; 25 uint32 value;
26 }; 26 };
27 27
28 // A view owner provides access to the view's token and keeps the
29 // view alive. When the view owner is closed, the view will be
30 // unregistered from the view manager.
31 //
32 // This interface is only intended to be implemented by the view manager
33 // to obtain the desired ownership semantics.
34 interface ViewOwner {
35 // Gets the |ViewToken| associated with the view.
36 GetToken() => (ViewToken token);
37 };
38
28 // A view is a graphical user interface component which is responsible 39 // A view is a graphical user interface component which is responsible
29 // for drawing and supporting user interactions in the area of the screen 40 // for drawing and supporting user interactions in the area of the screen
30 // that it occupies. 41 // that it occupies.
31 // 42 //
32 // A view may also act as a container for other views (known as the 43 // A view may also act as a container for other views (known as the
33 // view's children) which it may freely layout and position anywhere 44 // view's children) which it may freely layout and position anywhere
34 // within its bounds to form a composite user interface. The hierarchy 45 // within its bounds to form a composite user interface. The hierarchy
35 // of views thus formed is called a view tree. 46 // of views thus formed is called a view tree.
36 // 47 //
37 // A view must registered with the view manager before it can be shown. 48 // A view must registered with the view manager before it can be shown.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 OnChildUnavailable(uint32 child_key) => (); 104 OnChildUnavailable(uint32 child_key) => ();
94 }; 105 };
95 106
96 // The view host provides an interface for a view to configure itself and 107 // The view host provides an interface for a view to configure itself and
97 // interact with its local environment, such as adding and removing 108 // interact with its local environment, such as adding and removing
98 // children and specifying layout constraints. 109 // children and specifying layout constraints.
99 // 110 //
100 // Each view obtains its own view host when registered with the ViewManager. 111 // Each view obtains its own view host when registered with the ViewManager.
101 // To unregister the view, close its view host message pipe. 112 // To unregister the view, close its view host message pipe.
102 interface ViewHost { 113 interface ViewHost {
114 // Gets the view's token.
115 GetToken() => (ViewToken token);
116
103 // Gets a service provider to access services which are associated with 117 // Gets a service provider to access services which are associated with
104 // the view such as input, accessibility and editing capabilities. 118 // the view such as input, accessibility and editing capabilities.
105 // The view service provider is private to the view and should not be 119 // The view service provider is private to the view and should not be
106 // shared with anyone else. 120 // shared with anyone else.
107 // 121 //
108 // See |mojo.ui.InputConnection|. 122 // See |mojo.ui.InputConnection|.
109 GetServiceProvider(mojo.ServiceProvider& service_provider); 123 GetServiceProvider(mojo.ServiceProvider& service_provider);
110 124
111 // Creates the view's scene, replacing any previous scene the view 125 // Creates the view's scene, replacing any previous scene the view
112 // might have had. 126 // might have had.
113 // 127 //
114 // The |scene| is used to supply content for the scene. The scene pipe 128 // The |scene| is used to supply content for the scene. The scene pipe
115 // is private to the scene and should not be shared with anyone else. 129 // is private to the scene and should not be shared with anyone else.
116 // 130 //
117 // To destroy the scene, simply close the |scene| message pipe. 131 // To destroy the scene, simply close the |scene| message pipe.
118 // 132 //
119 // See also: |mojo.gfx.composition.Compositor.CreateScene()|. 133 // See also: |mojo.gfx.composition.Compositor.CreateScene()|.
120 CreateScene(mojo.gfx.composition.Scene& scene); 134 CreateScene(mojo.gfx.composition.Scene& scene);
121 135
122 // Requests that the view's OnLayout() method be called to compute a 136 // Requests that the view's OnLayout() method be called to compute a
123 // new layout due to a change in the view's layout information. 137 // new layout due to a change in the view's layout information.
124 RequestLayout(); 138 RequestLayout();
125 139
126 // Adds the view referenced by |child_view_token| as a child and assigns 140 // Adds the view referenced by |child_view_owner| as a child and assigns
127 // it the provided |child_key| to identify it among its children. 141 // it the provided |child_key| to identify it among its children.
128 // The parent may remove the child later by passing the same |child_key| 142 // The parent may remove the child later by passing the same |child_key|
129 // to RemoveChild(). 143 // to RemoveChild().
130 // 144 //
145 // This method takes ownership of the view.
146 //
131 // It is important for the parent to choose locally unique values for 147 // It is important for the parent to choose locally unique values for
132 // |child_key| to ensure that each child can be distinguished even as 148 // |child_key| to ensure that each child can be distinguished even as
133 // more children are added or removed. We recommend using a simple 149 // more children are added or removed. We recommend using a simple
134 // counter which is incremented on each (re-)addition. 150 // counter which is incremented on each (re-)addition.
135 // 151 //
136 // If the child becomes unavailable at any time prior to being removed 152 // If the child becomes unavailable at any time prior to being removed
137 // then an OnChildUnavailable() message will be sent. 153 // then an OnChildUnavailable() message will be sent.
138 // 154 //
139 // If |child_view_token| refers to a view which is already unavailable or 155 // If |child_view_owner| refers to a view which is already unavailable or
140 // if adding the view would create a cycle in the view tree then the 156 // if adding the view would create a cycle in the view tree then the
141 // call proceeds as if it succeeded but an OnChildUnavailable() message 157 // call proceeds as if it succeeded but an OnChildUnavailable() message
142 // will be sent. 158 // will be sent.
143 // 159 //
144 // If |child_view_token| refers to a view which already has a parent or is 160 // If |child_view_owner| refers to a view which already has a parent or is
145 // the root of a view tree then an OnChildUnavailable() or OnRootUnavailable() 161 // the root of a view tree then an OnChildUnavailable() or OnRootUnavailable()
146 // message will be sent to its old parent or root and the the view will be 162 // message will be sent to its old parent or root and the the view will be
147 // (re-)added to its new parent as usual. This special case also applies 163 // (re-)added to its new parent as usual. This special case also applies
148 // when the specified view is already a child of this view, in which 164 // when the specified view is already a child of this view, in which
149 // case the behavior is similar to the view having been transferred to 165 // case the behavior is similar to the view having been transferred to
150 // some other parent and then back again. 166 // some other parent and then back again.
151 // 167 //
152 // Note that an unavailable child will remain in its parent's list of 168 // Note that an unavailable child will remain in its parent's list of
153 // children until its parent explicitly calls RemoveChild() to remove 169 // children until its parent explicitly calls RemoveChild() to remove
154 // it. 170 // it.
155 // 171 //
156 // It is an error to add a view whose |child_key| already appears 172 // It is an error to add a view whose |child_key| already appears
157 // in the view's list of children; the connection will be closed. 173 // in the view's list of children; the connection will be closed.
158 AddChild(uint32 child_key, mojo.ui.ViewToken child_view_token); 174 AddChild(uint32 child_key, mojo.ui.ViewOwner child_view_owner);
159 175
160 // Removes the view referenced by |child_key| from the view's 176 // Removes the view referenced by |child_key| from the view's
161 // list of children. 177 // list of children.
162 // 178 //
179 // If |transferred_view_owner| is not null, associates it with the
180 // previously added child to allow it to be transferred elsewhere or
181 // closes the |transferred_view_owner| message pipe if there was none.
182 //
163 // It is an error to remove a view whose |child_key| does not appear 183 // It is an error to remove a view whose |child_key| does not appear
164 // in the parent's list of children; the connection will be closed. 184 // in the parent's list of children; the connection will be closed.
165 RemoveChild(uint32 child_key); 185 RemoveChild(uint32 child_key, mojo.ui.ViewOwner&? transferred_view_owner);
166 186
167 // Sets the layout parameters of the child view referenced by |child_key| 187 // Sets the layout parameters of the child view referenced by |child_key|
168 // and retrieves its layout information. 188 // and retrieves its layout information.
169 // 189 //
170 // The returned |info| is null if this layout request was canceled either 190 // The returned |info| is null if this layout request was canceled either
171 // because it has been superceded by a subsequently issued layout request 191 // because it has been superceded by a subsequently issued layout request
172 // or because the child has become unavailable. 192 // or because the child has become unavailable.
173 // 193 //
174 // It is an error to specify a |child_key| that does not appear in 194 // It is an error to specify a |child_key| that does not appear in
175 // the parent's list of children; the connection will be closed. 195 // the parent's list of children; the connection will be closed.
176 // 196 //
177 // It is an error to specify malformed |child_layout_params| such 197 // It is an error to specify malformed |child_layout_params| such
178 // as invalid size constraints; the connection will be closed. 198 // as invalid size constraints; the connection will be closed.
179 LayoutChild(uint32 child_key, mojo.ui.ViewLayoutParams child_layout_params) 199 LayoutChild(uint32 child_key, mojo.ui.ViewLayoutParams child_layout_params)
180 => (mojo.ui.ViewLayoutInfo? info); 200 => (mojo.ui.ViewLayoutInfo? info);
181 }; 201 };
OLDNEW
« no previous file with comments | « mojo/services/ui/views/interfaces/view_trees.mojom ('k') | mojo/ui/base_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698