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#ifndef MOJO_SERVICES_VIEW_MANAGER_DEFAULT_ACCESS_POLICY_H_
6#define MOJO_SERVICES_VIEW_MANAGER_DEFAULT_ACCESS_POLICY_H_
7
8#include "base/basictypes.h"
9#include "mojo/services/view_manager/access_policy.h"
10
11namespace mojo {
12namespace service {
13
14class AccessPolicyDelegate;
15
16// AccessPolicy for all connections, except the window manager.
17class DefaultAccessPolicy : public AccessPolicy {
18 public:
19  DefaultAccessPolicy(ConnectionSpecificId connection_id,
20                      AccessPolicyDelegate* delegate);
21  virtual ~DefaultAccessPolicy();
22
23  // AccessPolicy:
24  virtual bool CanRemoveViewFromParent(const ServerView* view) const OVERRIDE;
25  virtual bool CanAddView(const ServerView* parent,
26                          const ServerView* child) const OVERRIDE;
27  virtual bool CanReorderView(const ServerView* view,
28                              const ServerView* relative_view,
29                              OrderDirection direction) const OVERRIDE;
30  virtual bool CanDeleteView(const ServerView* view) const OVERRIDE;
31  virtual bool CanGetViewTree(const ServerView* view) const OVERRIDE;
32  virtual bool CanDescendIntoViewForViewTree(
33      const ServerView* view) const OVERRIDE;
34  virtual bool CanEmbed(const ServerView* view) const OVERRIDE;
35  virtual bool CanChangeViewVisibility(const ServerView* view) const OVERRIDE;
36  virtual bool CanSetViewSurfaceId(const ServerView* view) const OVERRIDE;
37  virtual bool CanSetViewBounds(const ServerView* view) const OVERRIDE;
38  virtual bool ShouldNotifyOnHierarchyChange(
39      const ServerView* view,
40      const ServerView** new_parent,
41      const ServerView** old_parent) const OVERRIDE;
42
43 private:
44  bool IsViewInRoots(const ServerView* view) const;
45
46  template <typename T>
47  bool WasCreatedByThisConnection(const T* t) const {
48    return t->id().connection_id == connection_id_;
49  }
50
51  const ConnectionSpecificId connection_id_;
52  AccessPolicyDelegate* delegate_;
53
54  DISALLOW_COPY_AND_ASSIGN(DefaultAccessPolicy);
55};
56
57}  // namespace service
58}  // namespace mojo
59
60#endif  // MOJO_SERVICES_VIEW_MANAGER_DEFAULT_ACCESS_POLICY_H_
61