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_ACCESS_POLICY_H_
6#define MOJO_SERVICES_VIEW_MANAGER_ACCESS_POLICY_H_
7
8#include "mojo/services/public/interfaces/view_manager/view_manager_constants.mojom.h"
9#include "mojo/services/view_manager/ids.h"
10
11namespace mojo {
12namespace service {
13
14class ServerView;
15
16// AccessPolicy is used by ViewManagerServiceImpl to determine what a connection
17// is allowed to do.
18class AccessPolicy {
19 public:
20  virtual ~AccessPolicy() {}
21
22  // Unless otherwise mentioned all arguments have been validated. That is the
23  // |view| arguments are non-null unless otherwise stated (eg CanSetView() is
24  // allowed to take a NULL view).
25  virtual bool CanRemoveViewFromParent(const ServerView* view) const = 0;
26  virtual bool CanAddView(const ServerView* parent,
27                          const ServerView* child) const = 0;
28  virtual bool CanReorderView(const ServerView* view,
29                              const ServerView* relative_view,
30                              OrderDirection direction) const = 0;
31  virtual bool CanDeleteView(const ServerView* view) const = 0;
32  virtual bool CanGetViewTree(const ServerView* view) const = 0;
33  // Used when building a view tree (GetViewTree()) to decide if we should
34  // descend into |view|.
35  virtual bool CanDescendIntoViewForViewTree(const ServerView* view) const = 0;
36  virtual bool CanEmbed(const ServerView* view) const = 0;
37  virtual bool CanChangeViewVisibility(const ServerView* view) const = 0;
38  virtual bool CanSetViewSurfaceId(const ServerView* view) const = 0;
39  virtual bool CanSetViewBounds(const ServerView* view) const = 0;
40
41  // Returns whether the connection should notify on a hierarchy change.
42  // |new_parent| and |old_parent| are initially set to the new and old parents
43  // but may be altered so that the client only sees a certain set of views.
44  virtual bool ShouldNotifyOnHierarchyChange(
45      const ServerView* view,
46      const ServerView** new_parent,
47      const ServerView** old_parent) const = 0;
48};
49
50}  // namespace service
51}  // namespace mojo
52
53#endif  // MOJO_SERVICES_VIEW_MANAGER_ACCESS_POLICY_H_
54