15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef MOJO_SERVICES_VIEW_MANAGER_ACCESS_POLICY_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define MOJO_SERVICES_VIEW_MANAGER_ACCESS_POLICY_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/public/interfaces/view_manager/view_manager_constants.mojom.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/view_manager/ids.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace mojo {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace service {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ServerView;
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// AccessPolicy is used by ViewManagerServiceImpl to determine what a connection
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// is allowed to do.
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AccessPolicy {
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~AccessPolicy() {}
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Unless otherwise mentioned all arguments have been validated. That is the
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |view| arguments are non-null unless otherwise stated (eg CanSetView() is
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // allowed to take a NULL view).
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanRemoveViewFromParent(const ServerView* view) const = 0;
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanAddView(const ServerView* parent,
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          const ServerView* child) const = 0;
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanReorderView(const ServerView* view,
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              const ServerView* relative_view,
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              OrderDirection direction) const = 0;
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanDeleteView(const ServerView* view) const = 0;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanGetViewTree(const ServerView* view) const = 0;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Used when building a view tree (GetViewTree()) to decide if we should
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // descend into |view|.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanDescendIntoViewForViewTree(const ServerView* view) const = 0;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanEmbed(const ServerView* view) const = 0;
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanChangeViewVisibility(const ServerView* view) const = 0;
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanSetViewSurfaceId(const ServerView* view) const = 0;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CanSetViewBounds(const ServerView* view) const = 0;
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Returns whether the connection should notify on a hierarchy change.
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // |new_parent| and |old_parent| are initially set to the new and old parents
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // but may be altered so that the client only sees a certain set of views.
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool ShouldNotifyOnHierarchyChange(
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServerView* view,
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServerView** new_parent,
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServerView** old_parent) const = 0;
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace service
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace mojo
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // MOJO_SERVICES_VIEW_MANAGER_ACCESS_POLICY_H_
54