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 |