| Index: mojo/services/view_manager/view_manager_service_impl.h
|
| diff --git a/mojo/services/view_manager/view_manager_service_impl.h b/mojo/services/view_manager/view_manager_service_impl.h
|
| index 4f1f4182c7db4f2df6eabe1f881ffa06412e4872..cf0c22915edf7dd7729623d074cb38c851de558d 100644
|
| --- a/mojo/services/view_manager/view_manager_service_impl.h
|
| +++ b/mojo/services/view_manager/view_manager_service_impl.h
|
| @@ -12,7 +12,9 @@
|
| #include "base/basictypes.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/containers/hash_tables.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "mojo/services/public/interfaces/view_manager/view_manager.mojom.h"
|
| +#include "mojo/services/view_manager/access_policy_delegate.h"
|
| #include "mojo/services/view_manager/ids.h"
|
| #include "mojo/services/view_manager/view_manager_export.h"
|
|
|
| @@ -23,6 +25,7 @@ class Rect;
|
| namespace mojo {
|
| namespace service {
|
|
|
| +class AccessPolicy;
|
| class Node;
|
| class RootNodeManager;
|
| class View;
|
| @@ -36,7 +39,8 @@ class View;
|
|
|
| // Manages a connection from the client.
|
| class MOJO_VIEW_MANAGER_EXPORT ViewManagerServiceImpl
|
| - : public InterfaceImpl<ViewManagerService> {
|
| + : public InterfaceImpl<ViewManagerService>,
|
| + public AccessPolicyDelegate {
|
| public:
|
| ViewManagerServiceImpl(RootNodeManager* root_node_manager,
|
| ConnectionSpecificId creator_id,
|
| @@ -108,43 +112,29 @@ class MOJO_VIEW_MANAGER_EXPORT ViewManagerServiceImpl
|
| typedef std::map<ConnectionSpecificId, View*> ViewMap;
|
| typedef base::hash_set<Id> NodeIdSet;
|
|
|
| + bool IsNodeKnown(const Node* node) const;
|
| +
|
| // These functions return true if the corresponding mojom function is allowed
|
| // for this connection.
|
| - bool CanRemoveNodeFromParent(const Node* node) const;
|
| - bool CanAddNode(const Node* parent, const Node* child) const;
|
| bool CanReorderNode(const Node* node,
|
| const Node* relative_node,
|
| OrderDirection direction) const;
|
| - bool CanDeleteNode(const NodeId& node_id) const;
|
| - bool CanDeleteView(const ViewId& view_id) const;
|
| - bool CanSetView(const Node* node, const ViewId& view_id) const;
|
| - bool CanSetFocus(const Node* node) const;
|
| - bool CanGetNodeTree(const Node* node) const;
|
| - bool CanEmbed(Id transport_node_id) const;
|
| - bool CanSetNodeVisibility(const Node* node, bool visible) const;
|
| - // Used during GetNodeTreeImpl() to decide if we should descend into |node|
|
| - // when building the results of GetNodeTree().
|
| - bool CanDescendIntoNodeForNodeTree(const Node* node) const;
|
|
|
| // Deletes a node owned by this connection. Returns true on success. |source|
|
| // is the connection that originated the change.
|
| - bool DeleteNodeImpl(ViewManagerServiceImpl* source, const NodeId& node_id);
|
| + bool DeleteNodeImpl(ViewManagerServiceImpl* source, Node* node);
|
|
|
| // Deletes a view owned by this connection. Returns true on success. |source|
|
| // is the connection that originated the change.
|
| - bool DeleteViewImpl(ViewManagerServiceImpl* source, const ViewId& view_id);
|
| + bool DeleteViewImpl(ViewManagerServiceImpl* source, View* view);
|
|
|
| // Sets the view associated with a node.
|
| - bool SetViewImpl(Node* node, const ViewId& view_id);
|
| + bool SetViewImpl(Node* node, View* view);
|
|
|
| // If |node| is known (in |known_nodes_|) does nothing. Otherwise adds |node|
|
| // to |nodes|, marks |node| as known and recurses.
|
| void GetUnknownNodesFrom(const Node* node, std::vector<const Node*>* nodes);
|
|
|
| - // Returns true if node (or one of its ancestors) is embedded in another
|
| - // connection.
|
| - bool IsNodeEmbeddedInAnotherConnection(const Node* node) const;
|
| -
|
| // Removes |node| and all its descendants from |known_nodes_|. This does not
|
| // recurse through nodes that were created by this connection. All nodes owned
|
| // by this connection are added to |local_nodes|.
|
| @@ -159,18 +149,6 @@ class MOJO_VIEW_MANAGER_EXPORT ViewManagerServiceImpl
|
|
|
| void RemoveChildrenAsPartOfEmbed(const NodeId& node_id);
|
|
|
| - // Returns true if |node| is a non-null and a descendant of |roots_| (or
|
| - // |roots_| is empty).
|
| - bool IsNodeDescendantOfRoots(const Node* node) const;
|
| -
|
| - // Returns true if notification should be sent of a hierarchy change. If true
|
| - // is returned, any nodes that need to be sent to the client are added to
|
| - // |to_send|.
|
| - bool ShouldNotifyOnHierarchyChange(const Node* node,
|
| - const Node** new_parent,
|
| - const Node** old_parent,
|
| - std::vector<const Node*>* to_send);
|
| -
|
| // Converts an array of Nodes to NodeDatas. This assumes all the nodes are
|
| // valid for the client. The parent of nodes the client is not allowed to see
|
| // are set to NULL (in the returned NodeDatas).
|
| @@ -223,9 +201,15 @@ class MOJO_VIEW_MANAGER_EXPORT ViewManagerServiceImpl
|
| virtual void DispatchOnViewInputEvent(Id transport_view_id,
|
| EventPtr event) OVERRIDE;
|
|
|
| - // InterfaceImp overrides:
|
| + // InterfaceImpl:
|
| virtual void OnConnectionEstablished() MOJO_OVERRIDE;
|
|
|
| + // AccessPolicyDelegate:
|
| + virtual const base::hash_set<Id>& GetRootsForAccessPolicy() const OVERRIDE;
|
| + virtual bool IsNodeKnownForAccessPolicy(const Node* node) const OVERRIDE;
|
| + virtual bool IsNodeRootOfAnotherConnectionForAccessPolicy(
|
| + const Node* node) const OVERRIDE;
|
| +
|
| RootNodeManager* root_node_manager_;
|
|
|
| // Id of this connection as assigned by RootNodeManager.
|
| @@ -241,6 +225,8 @@ class MOJO_VIEW_MANAGER_EXPORT ViewManagerServiceImpl
|
| // The URL of the app that embedded the app this connection was created for.
|
| const std::string creator_url_;
|
|
|
| + scoped_ptr<AccessPolicy> access_policy_;
|
| +
|
| // The nodes and views created by this connection. This connection owns these
|
| // objects.
|
| NodeMap node_map_;
|
|
|