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)#include "mojo/services/view_manager/window_manager_access_policy.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/services/view_manager/access_policy_delegate.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/view_manager/server_view.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace mojo {
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace service {
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// TODO(sky): document why this differs from default for each case. Maybe want
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// to subclass DefaultAccessPolicy.
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)WindowManagerAccessPolicy::WindowManagerAccessPolicy(
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ConnectionSpecificId connection_id,
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    AccessPolicyDelegate* delegate)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : connection_id_(connection_id),
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      delegate_(delegate) {
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)WindowManagerAccessPolicy::~WindowManagerAccessPolicy() {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanRemoveViewFromParent(
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView* view) const {
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanAddView(const ServerView* parent,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                           const ServerView* child) const {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanReorderView(const ServerView* view,
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                               const ServerView* relative_view,
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                               OrderDirection direction) const {
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanDeleteView(const ServerView* view) const {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return view->id().connection_id == connection_id_;
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanGetViewTree(const ServerView* view) const {
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanDescendIntoViewForViewTree(
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView* view) const {
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return true;
535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanEmbed(const ServerView* view) const {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return view->id().connection_id == connection_id_;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanChangeViewVisibility(
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView* view) const {
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return view->id().connection_id == connection_id_;
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanSetViewSurfaceId(
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView* view) const {
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (delegate_->IsViewRootOfAnotherConnectionForAccessPolicy(view))
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return false;
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return view->id().connection_id == connection_id_ ||
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci         (delegate_->GetRootsForAccessPolicy().count(
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              ViewIdToTransportId(view->id())) > 0);
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::CanSetViewBounds(const ServerView* view) const {
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return view->id().connection_id == connection_id_;
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool WindowManagerAccessPolicy::ShouldNotifyOnHierarchyChange(
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView* view,
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView** new_parent,
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const ServerView** old_parent) const {
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Notify if we've already told the window manager about the view, or if we've
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // already told the window manager about the parent. The later handles the
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // case of a view that wasn't parented to the root getting added to the root.
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return IsViewKnown(view) || (*new_parent && IsViewKnown(*new_parent));
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool WindowManagerAccessPolicy::IsViewKnown(const ServerView* view) const {
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return delegate_->IsViewKnownForAccessPolicy(view);
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace service
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace mojo
93