OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "components/view_manager/view_tree_impl.h" | 5 #include "components/mus/view_tree_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "components/view_manager/connection_manager.h" | 9 #include "components/mus/connection_manager.h" |
10 #include "components/view_manager/default_access_policy.h" | 10 #include "components/mus/default_access_policy.h" |
11 #include "components/view_manager/display_manager.h" | 11 #include "components/mus/display_manager.h" |
12 #include "components/view_manager/server_view.h" | 12 #include "components/mus/server_view.h" |
13 #include "components/view_manager/view_tree_host_impl.h" | 13 #include "components/mus/view_tree_host_impl.h" |
14 #include "components/view_manager/window_manager_access_policy.h" | 14 #include "components/mus/window_manager_access_policy.h" |
15 #include "mojo/converters/geometry/geometry_type_converters.h" | 15 #include "mojo/converters/geometry/geometry_type_converters.h" |
16 #include "mojo/converters/ime/ime_type_converters.h" | 16 #include "mojo/converters/ime/ime_type_converters.h" |
17 #include "mojo/converters/input_events/input_events_type_converters.h" | 17 #include "mojo/converters/input_events/input_events_type_converters.h" |
18 #include "mojo/converters/surfaces/surfaces_type_converters.h" | 18 #include "mojo/converters/surfaces/surfaces_type_converters.h" |
19 #include "ui/platform_window/text_input_state.h" | 19 #include "ui/platform_window/text_input_state.h" |
20 | 20 |
21 using mojo::Array; | 21 using mojo::Array; |
22 using mojo::Callback; | 22 using mojo::Callback; |
23 using mojo::Id; | 23 using mojo::Id; |
24 using mojo::InterfaceRequest; | 24 using mojo::InterfaceRequest; |
25 using mojo::OrderDirection; | 25 using mojo::OrderDirection; |
26 using mojo::Rect; | 26 using mojo::Rect; |
27 using mojo::ServiceProvider; | 27 using mojo::ServiceProvider; |
28 using mojo::ServiceProviderPtr; | 28 using mojo::ServiceProviderPtr; |
29 using mojo::String; | 29 using mojo::String; |
30 using mojo::ViewDataPtr; | 30 using mojo::ViewDataPtr; |
31 | 31 |
32 namespace view_manager { | 32 namespace view_manager { |
33 | 33 |
34 ViewTreeImpl::ViewTreeImpl( | 34 ViewTreeImpl::ViewTreeImpl(ConnectionManager* connection_manager, |
35 ConnectionManager* connection_manager, | 35 mojo::ConnectionSpecificId creator_id, |
36 mojo::ConnectionSpecificId creator_id, | 36 const ViewId& root_id) |
37 const ViewId& root_id) | |
38 : connection_manager_(connection_manager), | 37 : connection_manager_(connection_manager), |
39 id_(connection_manager_->GetAndAdvanceNextConnectionId()), | 38 id_(connection_manager_->GetAndAdvanceNextConnectionId()), |
40 creator_id_(creator_id), | 39 creator_id_(creator_id), |
41 client_(nullptr), | 40 client_(nullptr), |
42 is_embed_root_(false) { | 41 is_embed_root_(false) { |
43 ServerView* view = GetView(root_id); | 42 ServerView* view = GetView(root_id); |
44 CHECK(view); | 43 CHECK(view); |
45 root_.reset(new ViewId(root_id)); | 44 root_.reset(new ViewId(root_id)); |
46 if (view->GetRoot() == view) { | 45 if (view->GetRoot() == view) { |
47 access_policy_.reset(new WindowManagerAccessPolicy(id_, this)); | 46 access_policy_.reset(new WindowManagerAccessPolicy(id_, this)); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 return i == view_map_.end() ? NULL : i->second; | 83 return i == view_map_.end() ? NULL : i->second; |
85 } | 84 } |
86 return connection_manager_->GetView(id); | 85 return connection_manager_->GetView(id); |
87 } | 86 } |
88 | 87 |
89 bool ViewTreeImpl::IsRoot(const ViewId& id) const { | 88 bool ViewTreeImpl::IsRoot(const ViewId& id) const { |
90 return root_.get() && *root_ == id; | 89 return root_.get() && *root_ == id; |
91 } | 90 } |
92 | 91 |
93 ViewTreeHostImpl* ViewTreeImpl::GetHost() { | 92 ViewTreeHostImpl* ViewTreeImpl::GetHost() { |
94 return root_.get() ? | 93 return root_.get() |
95 connection_manager_->GetViewTreeHostByView(GetView(*root_)) : nullptr; | 94 ? connection_manager_->GetViewTreeHostByView(GetView(*root_)) |
| 95 : nullptr; |
96 } | 96 } |
97 | 97 |
98 void ViewTreeImpl::OnWillDestroyViewTreeImpl( | 98 void ViewTreeImpl::OnWillDestroyViewTreeImpl(ViewTreeImpl* connection) { |
99 ViewTreeImpl* connection) { | |
100 if (creator_id_ == connection->id()) | 99 if (creator_id_ == connection->id()) |
101 creator_id_ = kInvalidConnectionId; | 100 creator_id_ = kInvalidConnectionId; |
102 const ServerView* connection_root = | 101 const ServerView* connection_root = |
103 connection->root_ ? connection->GetView(*connection->root_) : nullptr; | 102 connection->root_ ? connection->GetView(*connection->root_) : nullptr; |
104 if (connection_root && | 103 if (connection_root && |
105 ((connection_root->id().connection_id == id_ && | 104 ((connection_root->id().connection_id == id_ && |
106 view_map_.count(connection_root->id().view_id) > 0) || | 105 view_map_.count(connection_root->id().view_id) > 0) || |
107 (is_embed_root_ && IsViewKnown(connection_root)))) { | 106 (is_embed_root_ && IsViewKnown(connection_root)))) { |
108 client()->OnEmbeddedAppDisconnected( | 107 client()->OnEmbeddedAppDisconnected( |
109 ViewIdToTransportId(*connection->root_)); | 108 ViewIdToTransportId(*connection->root_)); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 return true; | 167 return true; |
169 } | 168 } |
170 | 169 |
171 void ViewTreeImpl::Embed(const ViewId& view_id, mojo::URLRequestPtr request) { | 170 void ViewTreeImpl::Embed(const ViewId& view_id, mojo::URLRequestPtr request) { |
172 if (!CanEmbed(view_id)) | 171 if (!CanEmbed(view_id)) |
173 return; | 172 return; |
174 PrepareForEmbed(view_id); | 173 PrepareForEmbed(view_id); |
175 connection_manager_->EmbedAtView(id_, view_id, request.Pass()); | 174 connection_manager_->EmbedAtView(id_, view_id, request.Pass()); |
176 } | 175 } |
177 | 176 |
178 void ViewTreeImpl::ProcessViewBoundsChanged( | 177 void ViewTreeImpl::ProcessViewBoundsChanged(const ServerView* view, |
179 const ServerView* view, | 178 const gfx::Rect& old_bounds, |
180 const gfx::Rect& old_bounds, | 179 const gfx::Rect& new_bounds, |
181 const gfx::Rect& new_bounds, | 180 bool originated_change) { |
182 bool originated_change) { | |
183 if (originated_change || !IsViewKnown(view)) | 181 if (originated_change || !IsViewKnown(view)) |
184 return; | 182 return; |
185 client()->OnViewBoundsChanged(ViewIdToTransportId(view->id()), | 183 client()->OnViewBoundsChanged(ViewIdToTransportId(view->id()), |
186 Rect::From(old_bounds), | 184 Rect::From(old_bounds), Rect::From(new_bounds)); |
187 Rect::From(new_bounds)); | |
188 } | 185 } |
189 | 186 |
190 void ViewTreeImpl::ProcessViewportMetricsChanged( | 187 void ViewTreeImpl::ProcessViewportMetricsChanged( |
191 const mojo::ViewportMetrics& old_metrics, | 188 const mojo::ViewportMetrics& old_metrics, |
192 const mojo::ViewportMetrics& new_metrics, | 189 const mojo::ViewportMetrics& new_metrics, |
193 bool originated_change) { | 190 bool originated_change) { |
194 client()->OnViewViewportMetricsChanged(old_metrics.Clone(), | 191 client()->OnViewViewportMetricsChanged(old_metrics.Clone(), |
195 new_metrics.Clone()); | 192 new_metrics.Clone()); |
196 } | 193 } |
197 | 194 |
198 void ViewTreeImpl::ProcessWillChangeViewHierarchy( | 195 void ViewTreeImpl::ProcessWillChangeViewHierarchy(const ServerView* view, |
199 const ServerView* view, | 196 const ServerView* new_parent, |
200 const ServerView* new_parent, | 197 const ServerView* old_parent, |
201 const ServerView* old_parent, | 198 bool originated_change) { |
202 bool originated_change) { | |
203 if (originated_change) | 199 if (originated_change) |
204 return; | 200 return; |
205 | 201 |
206 const bool old_drawn = view->IsDrawn(); | 202 const bool old_drawn = view->IsDrawn(); |
207 const bool new_drawn = view->visible() && new_parent && new_parent->IsDrawn(); | 203 const bool new_drawn = view->visible() && new_parent && new_parent->IsDrawn(); |
208 if (old_drawn == new_drawn) | 204 if (old_drawn == new_drawn) |
209 return; | 205 return; |
210 | 206 |
211 NotifyDrawnStateChanged(view, new_drawn); | 207 NotifyDrawnStateChanged(view, new_drawn); |
212 } | 208 } |
213 | 209 |
214 void ViewTreeImpl::ProcessViewPropertyChanged( | 210 void ViewTreeImpl::ProcessViewPropertyChanged( |
215 const ServerView* view, | 211 const ServerView* view, |
216 const std::string& name, | 212 const std::string& name, |
217 const std::vector<uint8_t>* new_data, | 213 const std::vector<uint8_t>* new_data, |
218 bool originated_change) { | 214 bool originated_change) { |
219 if (originated_change) | 215 if (originated_change) |
220 return; | 216 return; |
221 | 217 |
222 Array<uint8_t> data; | 218 Array<uint8_t> data; |
223 if (new_data) | 219 if (new_data) |
224 data = Array<uint8_t>::From(*new_data); | 220 data = Array<uint8_t>::From(*new_data); |
225 | 221 |
226 client()->OnViewSharedPropertyChanged(ViewIdToTransportId(view->id()), | 222 client()->OnViewSharedPropertyChanged(ViewIdToTransportId(view->id()), |
227 String(name), data.Pass()); | 223 String(name), data.Pass()); |
228 } | 224 } |
229 | 225 |
230 void ViewTreeImpl::ProcessViewHierarchyChanged( | 226 void ViewTreeImpl::ProcessViewHierarchyChanged(const ServerView* view, |
231 const ServerView* view, | 227 const ServerView* new_parent, |
232 const ServerView* new_parent, | 228 const ServerView* old_parent, |
233 const ServerView* old_parent, | 229 bool originated_change) { |
234 bool originated_change) { | |
235 if (originated_change && !IsViewKnown(view) && new_parent && | 230 if (originated_change && !IsViewKnown(view) && new_parent && |
236 IsViewKnown(new_parent)) { | 231 IsViewKnown(new_parent)) { |
237 std::vector<const ServerView*> unused; | 232 std::vector<const ServerView*> unused; |
238 GetUnknownViewsFrom(view, &unused); | 233 GetUnknownViewsFrom(view, &unused); |
239 } | 234 } |
240 if (originated_change || connection_manager_->is_processing_delete_view() || | 235 if (originated_change || connection_manager_->is_processing_delete_view() || |
241 connection_manager_->DidConnectionMessageClient(id_)) { | 236 connection_manager_->DidConnectionMessageClient(id_)) { |
242 return; | 237 return; |
243 } | 238 } |
244 | 239 |
245 if (!access_policy_->ShouldNotifyOnHierarchyChange( | 240 if (!access_policy_->ShouldNotifyOnHierarchyChange(view, &new_parent, |
246 view, &new_parent, &old_parent)) { | 241 &old_parent)) { |
247 return; | 242 return; |
248 } | 243 } |
249 // Inform the client of any new views and update the set of views we know | 244 // Inform the client of any new views and update the set of views we know |
250 // about. | 245 // about. |
251 std::vector<const ServerView*> to_send; | 246 std::vector<const ServerView*> to_send; |
252 if (!IsViewKnown(view)) | 247 if (!IsViewKnown(view)) |
253 GetUnknownViewsFrom(view, &to_send); | 248 GetUnknownViewsFrom(view, &to_send); |
254 const ViewId new_parent_id(new_parent ? new_parent->id() : ViewId()); | 249 const ViewId new_parent_id(new_parent ? new_parent->id() : ViewId()); |
255 const ViewId old_parent_id(old_parent ? old_parent->id() : ViewId()); | 250 const ViewId old_parent_id(old_parent ? old_parent->id() : ViewId()); |
256 client()->OnViewHierarchyChanged(ViewIdToTransportId(view->id()), | 251 client()->OnViewHierarchyChanged( |
257 ViewIdToTransportId(new_parent_id), | 252 ViewIdToTransportId(view->id()), ViewIdToTransportId(new_parent_id), |
258 ViewIdToTransportId(old_parent_id), | 253 ViewIdToTransportId(old_parent_id), ViewsToViewDatas(to_send)); |
259 ViewsToViewDatas(to_send)); | |
260 connection_manager_->OnConnectionMessagedClient(id_); | 254 connection_manager_->OnConnectionMessagedClient(id_); |
261 } | 255 } |
262 | 256 |
263 void ViewTreeImpl::ProcessViewReorder(const ServerView* view, | 257 void ViewTreeImpl::ProcessViewReorder(const ServerView* view, |
264 const ServerView* relative_view, | 258 const ServerView* relative_view, |
265 OrderDirection direction, | 259 OrderDirection direction, |
266 bool originated_change) { | 260 bool originated_change) { |
267 if (originated_change || !IsViewKnown(view) || !IsViewKnown(relative_view)) | 261 if (originated_change || !IsViewKnown(view) || !IsViewKnown(relative_view)) |
268 return; | 262 return; |
269 | 263 |
(...skipping 14 matching lines...) Expand all Loading... |
284 | 278 |
285 if (originated_change) | 279 if (originated_change) |
286 return; | 280 return; |
287 | 281 |
288 if (in_known) { | 282 if (in_known) { |
289 client()->OnViewDeleted(ViewIdToTransportId(view)); | 283 client()->OnViewDeleted(ViewIdToTransportId(view)); |
290 connection_manager_->OnConnectionMessagedClient(id_); | 284 connection_manager_->OnConnectionMessagedClient(id_); |
291 } | 285 } |
292 } | 286 } |
293 | 287 |
294 void ViewTreeImpl::ProcessWillChangeViewVisibility( | 288 void ViewTreeImpl::ProcessWillChangeViewVisibility(const ServerView* view, |
295 const ServerView* view, | 289 bool originated_change) { |
296 bool originated_change) { | |
297 if (originated_change) | 290 if (originated_change) |
298 return; | 291 return; |
299 | 292 |
300 if (IsViewKnown(view)) { | 293 if (IsViewKnown(view)) { |
301 client()->OnViewVisibilityChanged(ViewIdToTransportId(view->id()), | 294 client()->OnViewVisibilityChanged(ViewIdToTransportId(view->id()), |
302 !view->visible()); | 295 !view->visible()); |
303 return; | 296 return; |
304 } | 297 } |
305 | 298 |
306 bool view_target_drawn_state; | 299 bool view_target_drawn_state; |
307 if (view->visible()) { | 300 if (view->visible()) { |
308 // View is being hidden, won't be drawn. | 301 // View is being hidden, won't be drawn. |
309 view_target_drawn_state = false; | 302 view_target_drawn_state = false; |
310 } else { | 303 } else { |
311 // View is being shown. View will be drawn if its parent is drawn. | 304 // View is being shown. View will be drawn if its parent is drawn. |
312 view_target_drawn_state = view->parent() && view->parent()->IsDrawn(); | 305 view_target_drawn_state = view->parent() && view->parent()->IsDrawn(); |
313 } | 306 } |
314 | 307 |
315 NotifyDrawnStateChanged(view, view_target_drawn_state); | 308 NotifyDrawnStateChanged(view, view_target_drawn_state); |
316 } | 309 } |
317 | 310 |
318 void ViewTreeImpl::ProcessFocusChanged( | 311 void ViewTreeImpl::ProcessFocusChanged(const ServerView* old_focused_view, |
319 const ServerView* old_focused_view, | 312 const ServerView* new_focused_view) { |
320 const ServerView* new_focused_view) { | |
321 const ServerView* view = | 313 const ServerView* view = |
322 new_focused_view ? access_policy_->GetViewForFocusChange(new_focused_view) | 314 new_focused_view ? access_policy_->GetViewForFocusChange(new_focused_view) |
323 : nullptr; | 315 : nullptr; |
324 client()->OnViewFocused(view ? ViewIdToTransportId(view->id()) | 316 client()->OnViewFocused(view ? ViewIdToTransportId(view->id()) |
325 : ViewIdToTransportId(ViewId())); | 317 : ViewIdToTransportId(ViewId())); |
326 } | 318 } |
327 | 319 |
328 bool ViewTreeImpl::IsViewKnown(const ServerView* view) const { | 320 bool ViewTreeImpl::IsViewKnown(const ServerView* view) const { |
329 return known_views_.count(ViewIdToTransportId(view->id())) > 0; | 321 return known_views_.count(ViewIdToTransportId(view->id())) > 0; |
330 } | 322 } |
(...skipping 25 matching lines...) Expand all Loading... |
356 } | 348 } |
357 | 349 |
358 bool ViewTreeImpl::DeleteViewImpl(ViewTreeImpl* source, ServerView* view) { | 350 bool ViewTreeImpl::DeleteViewImpl(ViewTreeImpl* source, ServerView* view) { |
359 DCHECK(view); | 351 DCHECK(view); |
360 DCHECK_EQ(view->id().connection_id, id_); | 352 DCHECK_EQ(view->id().connection_id, id_); |
361 ConnectionManager::ScopedChange change(source, connection_manager_, true); | 353 ConnectionManager::ScopedChange change(source, connection_manager_, true); |
362 delete view; | 354 delete view; |
363 return true; | 355 return true; |
364 } | 356 } |
365 | 357 |
366 void ViewTreeImpl::GetUnknownViewsFrom( | 358 void ViewTreeImpl::GetUnknownViewsFrom(const ServerView* view, |
367 const ServerView* view, | 359 std::vector<const ServerView*>* views) { |
368 std::vector<const ServerView*>* views) { | |
369 if (IsViewKnown(view) || !access_policy_->CanGetViewTree(view)) | 360 if (IsViewKnown(view) || !access_policy_->CanGetViewTree(view)) |
370 return; | 361 return; |
371 views->push_back(view); | 362 views->push_back(view); |
372 known_views_.insert(ViewIdToTransportId(view->id())); | 363 known_views_.insert(ViewIdToTransportId(view->id())); |
373 if (!access_policy_->CanDescendIntoViewForViewTree(view)) | 364 if (!access_policy_->CanDescendIntoViewForViewTree(view)) |
374 return; | 365 return; |
375 std::vector<const ServerView*> children(view->GetChildren()); | 366 std::vector<const ServerView*> children(view->GetChildren()); |
376 for (size_t i = 0 ; i < children.size(); ++i) | 367 for (size_t i = 0; i < children.size(); ++i) |
377 GetUnknownViewsFrom(children[i], views); | 368 GetUnknownViewsFrom(children[i], views); |
378 } | 369 } |
379 | 370 |
380 void ViewTreeImpl::RemoveFromKnown( | 371 void ViewTreeImpl::RemoveFromKnown(const ServerView* view, |
381 const ServerView* view, | 372 std::vector<ServerView*>* local_views) { |
382 std::vector<ServerView*>* local_views) { | |
383 if (view->id().connection_id == id_) { | 373 if (view->id().connection_id == id_) { |
384 if (local_views) | 374 if (local_views) |
385 local_views->push_back(GetView(view->id())); | 375 local_views->push_back(GetView(view->id())); |
386 return; | 376 return; |
387 } | 377 } |
388 known_views_.erase(ViewIdToTransportId(view->id())); | 378 known_views_.erase(ViewIdToTransportId(view->id())); |
389 std::vector<const ServerView*> children = view->GetChildren(); | 379 std::vector<const ServerView*> children = view->GetChildren(); |
390 for (size_t i = 0; i < children.size(); ++i) | 380 for (size_t i = 0; i < children.size(); ++i) |
391 RemoveFromKnown(children[i], local_views); | 381 RemoveFromKnown(children[i], local_views); |
392 } | 382 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 | 436 |
447 if (!access_policy_->CanGetViewTree(view)) | 437 if (!access_policy_->CanGetViewTree(view)) |
448 return; | 438 return; |
449 | 439 |
450 views->push_back(view); | 440 views->push_back(view); |
451 | 441 |
452 if (!access_policy_->CanDescendIntoViewForViewTree(view)) | 442 if (!access_policy_->CanDescendIntoViewForViewTree(view)) |
453 return; | 443 return; |
454 | 444 |
455 std::vector<const ServerView*> children(view->GetChildren()); | 445 std::vector<const ServerView*> children(view->GetChildren()); |
456 for (size_t i = 0 ; i < children.size(); ++i) | 446 for (size_t i = 0; i < children.size(); ++i) |
457 GetViewTreeImpl(children[i], views); | 447 GetViewTreeImpl(children[i], views); |
458 } | 448 } |
459 | 449 |
460 void ViewTreeImpl::NotifyDrawnStateChanged(const ServerView* view, | 450 void ViewTreeImpl::NotifyDrawnStateChanged(const ServerView* view, |
461 bool new_drawn_value) { | 451 bool new_drawn_value) { |
462 // Even though we don't know about view, it may be an ancestor of our root, in | 452 // Even though we don't know about view, it may be an ancestor of our root, in |
463 // which case the change may effect our roots drawn state. | 453 // which case the change may effect our roots drawn state. |
464 if (!root_.get()) | 454 if (!root_.get()) |
465 return; | 455 return; |
466 | 456 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 | 498 |
509 void ViewTreeImpl::RemoveChildrenAsPartOfEmbed(const ViewId& view_id) { | 499 void ViewTreeImpl::RemoveChildrenAsPartOfEmbed(const ViewId& view_id) { |
510 ServerView* view = GetView(view_id); | 500 ServerView* view = GetView(view_id); |
511 CHECK(view); | 501 CHECK(view); |
512 CHECK(view->id().connection_id == view_id.connection_id); | 502 CHECK(view->id().connection_id == view_id.connection_id); |
513 std::vector<ServerView*> children = view->GetChildren(); | 503 std::vector<ServerView*> children = view->GetChildren(); |
514 for (size_t i = 0; i < children.size(); ++i) | 504 for (size_t i = 0; i < children.size(); ++i) |
515 view->Remove(children[i]); | 505 view->Remove(children[i]); |
516 } | 506 } |
517 | 507 |
518 void ViewTreeImpl::CreateView( | 508 void ViewTreeImpl::CreateView(Id transport_view_id, |
519 Id transport_view_id, | 509 const Callback<void(mojo::ErrorCode)>& callback) { |
520 const Callback<void(mojo::ErrorCode)>& callback) { | |
521 callback.Run(CreateView(ViewIdFromTransportId(transport_view_id))); | 510 callback.Run(CreateView(ViewIdFromTransportId(transport_view_id))); |
522 } | 511 } |
523 | 512 |
524 void ViewTreeImpl::DeleteView( | 513 void ViewTreeImpl::DeleteView(Id transport_view_id, |
525 Id transport_view_id, | 514 const Callback<void(bool)>& callback) { |
526 const Callback<void(bool)>& callback) { | |
527 ServerView* view = GetView(ViewIdFromTransportId(transport_view_id)); | 515 ServerView* view = GetView(ViewIdFromTransportId(transport_view_id)); |
528 bool success = false; | 516 bool success = false; |
529 if (view && access_policy_->CanDeleteView(view)) { | 517 if (view && access_policy_->CanDeleteView(view)) { |
530 ViewTreeImpl* connection = | 518 ViewTreeImpl* connection = |
531 connection_manager_->GetConnection(view->id().connection_id); | 519 connection_manager_->GetConnection(view->id().connection_id); |
532 success = connection && connection->DeleteViewImpl(this, view); | 520 success = connection && connection->DeleteViewImpl(this, view); |
533 } | 521 } |
534 callback.Run(success); | 522 callback.Run(success); |
535 } | 523 } |
536 | 524 |
537 void ViewTreeImpl::AddView( | 525 void ViewTreeImpl::AddView(Id parent_id, |
538 Id parent_id, | 526 Id child_id, |
539 Id child_id, | 527 const Callback<void(bool)>& callback) { |
540 const Callback<void(bool)>& callback) { | |
541 callback.Run(AddView(ViewIdFromTransportId(parent_id), | 528 callback.Run(AddView(ViewIdFromTransportId(parent_id), |
542 ViewIdFromTransportId(child_id))); | 529 ViewIdFromTransportId(child_id))); |
543 } | 530 } |
544 | 531 |
545 void ViewTreeImpl::RemoveViewFromParent( | 532 void ViewTreeImpl::RemoveViewFromParent(Id view_id, |
546 Id view_id, | 533 const Callback<void(bool)>& callback) { |
547 const Callback<void(bool)>& callback) { | |
548 bool success = false; | 534 bool success = false; |
549 ServerView* view = GetView(ViewIdFromTransportId(view_id)); | 535 ServerView* view = GetView(ViewIdFromTransportId(view_id)); |
550 if (view && view->parent() && access_policy_->CanRemoveViewFromParent(view)) { | 536 if (view && view->parent() && access_policy_->CanRemoveViewFromParent(view)) { |
551 success = true; | 537 success = true; |
552 ConnectionManager::ScopedChange change(this, connection_manager_, false); | 538 ConnectionManager::ScopedChange change(this, connection_manager_, false); |
553 view->parent()->Remove(view); | 539 view->parent()->Remove(view); |
554 } | 540 } |
555 callback.Run(success); | 541 callback.Run(success); |
556 } | 542 } |
557 | 543 |
(...skipping 14 matching lines...) Expand all Loading... |
572 } | 558 } |
573 | 559 |
574 void ViewTreeImpl::GetViewTree( | 560 void ViewTreeImpl::GetViewTree( |
575 Id view_id, | 561 Id view_id, |
576 const Callback<void(Array<ViewDataPtr>)>& callback) { | 562 const Callback<void(Array<ViewDataPtr>)>& callback) { |
577 std::vector<const ServerView*> views( | 563 std::vector<const ServerView*> views( |
578 GetViewTree(ViewIdFromTransportId(view_id))); | 564 GetViewTree(ViewIdFromTransportId(view_id))); |
579 callback.Run(ViewsToViewDatas(views)); | 565 callback.Run(ViewsToViewDatas(views)); |
580 } | 566 } |
581 | 567 |
582 void ViewTreeImpl::SetViewBounds( | 568 void ViewTreeImpl::SetViewBounds(Id view_id, |
583 Id view_id, | 569 mojo::RectPtr bounds, |
584 mojo::RectPtr bounds, | 570 const Callback<void(bool)>& callback) { |
585 const Callback<void(bool)>& callback) { | |
586 ServerView* view = GetView(ViewIdFromTransportId(view_id)); | 571 ServerView* view = GetView(ViewIdFromTransportId(view_id)); |
587 const bool success = view && access_policy_->CanSetViewBounds(view); | 572 const bool success = view && access_policy_->CanSetViewBounds(view); |
588 if (success) { | 573 if (success) { |
589 ConnectionManager::ScopedChange change(this, connection_manager_, false); | 574 ConnectionManager::ScopedChange change(this, connection_manager_, false); |
590 view->SetBounds(bounds.To<gfx::Rect>()); | 575 view->SetBounds(bounds.To<gfx::Rect>()); |
591 } | 576 } |
592 callback.Run(success); | 577 callback.Run(success); |
593 } | 578 } |
594 | 579 |
595 void ViewTreeImpl::SetViewVisibility( | 580 void ViewTreeImpl::SetViewVisibility(Id transport_view_id, |
596 Id transport_view_id, | 581 bool visible, |
597 bool visible, | 582 const Callback<void(bool)>& callback) { |
598 const Callback<void(bool)>& callback) { | |
599 callback.Run( | 583 callback.Run( |
600 SetViewVisibility(ViewIdFromTransportId(transport_view_id), visible)); | 584 SetViewVisibility(ViewIdFromTransportId(transport_view_id), visible)); |
601 } | 585 } |
602 | 586 |
603 void ViewTreeImpl::SetViewProperty( | 587 void ViewTreeImpl::SetViewProperty(uint32_t view_id, |
604 uint32_t view_id, | 588 const mojo::String& name, |
605 const mojo::String& name, | 589 mojo::Array<uint8_t> value, |
606 mojo::Array<uint8_t> value, | 590 const mojo::Callback<void(bool)>& callback) { |
607 const mojo::Callback<void(bool)>& callback) { | |
608 ServerView* view = GetView(ViewIdFromTransportId(view_id)); | 591 ServerView* view = GetView(ViewIdFromTransportId(view_id)); |
609 const bool success = view && access_policy_->CanSetViewProperties(view); | 592 const bool success = view && access_policy_->CanSetViewProperties(view); |
610 if (success) { | 593 if (success) { |
611 ConnectionManager::ScopedChange change(this, connection_manager_, false); | 594 ConnectionManager::ScopedChange change(this, connection_manager_, false); |
612 | 595 |
613 if (value.is_null()) { | 596 if (value.is_null()) { |
614 view->SetProperty(name, nullptr); | 597 view->SetProperty(name, nullptr); |
615 } else { | 598 } else { |
616 std::vector<uint8_t> data = value.To<std::vector<uint8_t>>(); | 599 std::vector<uint8_t> data = value.To<std::vector<uint8_t>>(); |
617 view->SetProperty(name, &data); | 600 view->SetProperty(name, &data); |
618 } | 601 } |
619 } | 602 } |
620 callback.Run(success); | 603 callback.Run(success); |
621 } | 604 } |
622 | 605 |
623 void ViewTreeImpl::RequestSurface( | 606 void ViewTreeImpl::RequestSurface(mojo::Id view_id, |
624 mojo::Id view_id, | 607 mojo::InterfaceRequest<mojo::Surface> surface, |
625 mojo::InterfaceRequest<mojo::Surface> surface, | 608 mojo::SurfaceClientPtr client) { |
626 mojo::SurfaceClientPtr client) { | |
627 ServerView* view = GetView(ViewIdFromTransportId(view_id)); | 609 ServerView* view = GetView(ViewIdFromTransportId(view_id)); |
628 const bool success = view && access_policy_->CanSetViewSurfaceId(view); | 610 const bool success = view && access_policy_->CanSetViewSurfaceId(view); |
629 if (!success) | 611 if (!success) |
630 return; | 612 return; |
631 view->Bind(surface.Pass(), client.Pass()); | 613 view->Bind(surface.Pass(), client.Pass()); |
632 } | 614 } |
633 | 615 |
634 void ViewTreeImpl::SetViewTextInputState( | 616 void ViewTreeImpl::SetViewTextInputState(uint32_t view_id, |
635 uint32_t view_id, | 617 mojo::TextInputStatePtr state) { |
636 mojo::TextInputStatePtr state) { | |
637 ServerView* view = GetView(ViewIdFromTransportId(view_id)); | 618 ServerView* view = GetView(ViewIdFromTransportId(view_id)); |
638 bool success = view && access_policy_->CanSetViewTextInputState(view); | 619 bool success = view && access_policy_->CanSetViewTextInputState(view); |
639 if (success) | 620 if (success) |
640 view->SetTextInputState(state.To<ui::TextInputState>()); | 621 view->SetTextInputState(state.To<ui::TextInputState>()); |
641 } | 622 } |
642 | 623 |
643 void ViewTreeImpl::SetImeVisibility(Id transport_view_id, | 624 void ViewTreeImpl::SetImeVisibility(Id transport_view_id, |
644 bool visible, | 625 bool visible, |
645 mojo::TextInputStatePtr state) { | 626 mojo::TextInputStatePtr state) { |
646 ServerView* view = GetView(ViewIdFromTransportId(transport_view_id)); | 627 ServerView* view = GetView(ViewIdFromTransportId(transport_view_id)); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 ViewTreeImpl* connection = | 686 ViewTreeImpl* connection = |
706 connection_manager_->GetConnectionWithRoot(view->id()); | 687 connection_manager_->GetConnectionWithRoot(view->id()); |
707 return connection && connection != this; | 688 return connection && connection != this; |
708 } | 689 } |
709 | 690 |
710 bool ViewTreeImpl::IsDescendantOfEmbedRoot(const ServerView* view) { | 691 bool ViewTreeImpl::IsDescendantOfEmbedRoot(const ServerView* view) { |
711 return is_embed_root_ && root_ && GetView(*root_)->Contains(view); | 692 return is_embed_root_ && root_ && GetView(*root_)->Contains(view); |
712 } | 693 } |
713 | 694 |
714 } // namespace view_manager | 695 } // namespace view_manager |
OLD | NEW |