| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "services/view_manager/window_manager_access_policy.h" | |
| 6 | |
| 7 #include "services/view_manager/access_policy_delegate.h" | |
| 8 #include "services/view_manager/server_view.h" | |
| 9 | |
| 10 namespace view_manager { | |
| 11 | |
| 12 // TODO(sky): document why this differs from default for each case. Maybe want | |
| 13 // to subclass DefaultAccessPolicy. | |
| 14 | |
| 15 WindowManagerAccessPolicy::WindowManagerAccessPolicy( | |
| 16 mojo::ConnectionSpecificId connection_id, | |
| 17 AccessPolicyDelegate* delegate) | |
| 18 : connection_id_(connection_id), delegate_(delegate) { | |
| 19 } | |
| 20 | |
| 21 WindowManagerAccessPolicy::~WindowManagerAccessPolicy() { | |
| 22 } | |
| 23 | |
| 24 bool WindowManagerAccessPolicy::CanRemoveViewFromParent( | |
| 25 const ServerView* view) const { | |
| 26 return true; | |
| 27 } | |
| 28 | |
| 29 bool WindowManagerAccessPolicy::CanAddView(const ServerView* parent, | |
| 30 const ServerView* child) const { | |
| 31 return true; | |
| 32 } | |
| 33 | |
| 34 bool WindowManagerAccessPolicy::CanReorderView( | |
| 35 const ServerView* view, | |
| 36 const ServerView* relative_view, | |
| 37 mojo::OrderDirection direction) const { | |
| 38 return true; | |
| 39 } | |
| 40 | |
| 41 bool WindowManagerAccessPolicy::CanDeleteView(const ServerView* view) const { | |
| 42 return view->id().connection_id == connection_id_; | |
| 43 } | |
| 44 | |
| 45 bool WindowManagerAccessPolicy::CanGetViewTree(const ServerView* view) const { | |
| 46 return view->id() != ClonedViewId(); | |
| 47 } | |
| 48 | |
| 49 bool WindowManagerAccessPolicy::CanDescendIntoViewForViewTree( | |
| 50 const ServerView* view) const { | |
| 51 return view->id() != ClonedViewId(); | |
| 52 } | |
| 53 | |
| 54 bool WindowManagerAccessPolicy::CanEmbed(const ServerView* view) const { | |
| 55 return view->id().connection_id == connection_id_; | |
| 56 } | |
| 57 | |
| 58 bool WindowManagerAccessPolicy::CanChangeViewVisibility( | |
| 59 const ServerView* view) const { | |
| 60 return view->id().connection_id == connection_id_; | |
| 61 } | |
| 62 | |
| 63 bool WindowManagerAccessPolicy::CanSetViewSurfaceId( | |
| 64 const ServerView* view) const { | |
| 65 if (delegate_->IsViewRootOfAnotherConnectionForAccessPolicy(view)) | |
| 66 return false; | |
| 67 return view->id().connection_id == connection_id_ || | |
| 68 (delegate_->IsRootForAccessPolicy(view->id())); | |
| 69 } | |
| 70 | |
| 71 bool WindowManagerAccessPolicy::CanSetViewBounds(const ServerView* view) const { | |
| 72 return view->id().connection_id == connection_id_; | |
| 73 } | |
| 74 | |
| 75 bool WindowManagerAccessPolicy::CanSetViewProperties( | |
| 76 const ServerView* view) const { | |
| 77 return view->id().connection_id == connection_id_; | |
| 78 } | |
| 79 | |
| 80 bool WindowManagerAccessPolicy::ShouldNotifyOnHierarchyChange( | |
| 81 const ServerView* view, | |
| 82 const ServerView** new_parent, | |
| 83 const ServerView** old_parent) const { | |
| 84 if (view->id() == ClonedViewId()) | |
| 85 return false; | |
| 86 | |
| 87 // Notify if we've already told the window manager about the view, or if we've | |
| 88 // already told the window manager about the parent. The later handles the | |
| 89 // case of a view that wasn't parented to the root getting added to the root. | |
| 90 return IsViewKnown(view) || (*new_parent && IsViewKnown(*new_parent)); | |
| 91 } | |
| 92 | |
| 93 bool WindowManagerAccessPolicy::IsViewKnown(const ServerView* view) const { | |
| 94 return delegate_->IsViewKnownForAccessPolicy(view); | |
| 95 } | |
| 96 | |
| 97 } // namespace view_manager | |
| OLD | NEW |