Home | History | Annotate | Download | only in sockets
      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 EXTENSIONS_COMMON_API_SOCKETS_SOCKETS_MANIFEST_PERMISSION_H_
      6 #define EXTENSIONS_COMMON_API_SOCKETS_SOCKETS_MANIFEST_PERMISSION_H_
      7 
      8 #include <set>
      9 #include <vector>
     10 
     11 #include "extensions/common/install_warning.h"
     12 #include "extensions/common/permissions/manifest_permission.h"
     13 #include "extensions/common/permissions/socket_permission_entry.h"
     14 
     15 namespace content {
     16 struct SocketPermissionRequest;
     17 }
     18 
     19 namespace extensions {
     20 class Extension;
     21 }
     22 
     23 namespace extensions {
     24 
     25 class SocketsManifestPermission : public ManifestPermission {
     26  public:
     27   typedef std::set<SocketPermissionEntry> SocketPermissionEntrySet;
     28   SocketsManifestPermission();
     29   virtual ~SocketsManifestPermission();
     30 
     31   // Tries to construct the info based on |value|, as it would have appeared in
     32   // the manifest. Sets |error| and returns an empty scoped_ptr on failure.
     33   static scoped_ptr<SocketsManifestPermission> FromValue(
     34       const base::Value& value,
     35       base::string16* error);
     36 
     37   bool CheckRequest(const Extension* extension,
     38                     const content::SocketPermissionRequest& request) const;
     39 
     40   void AddPermission(const SocketPermissionEntry& entry);
     41 
     42   // extensions::ManifestPermission overrides.
     43   virtual std::string name() const OVERRIDE;
     44   virtual std::string id() const OVERRIDE;
     45   virtual bool HasMessages() const OVERRIDE;
     46   virtual PermissionMessages GetMessages() const OVERRIDE;
     47   virtual bool FromValue(const base::Value* value) OVERRIDE;
     48   virtual scoped_ptr<base::Value> ToValue() const OVERRIDE;
     49   virtual ManifestPermission* Clone() const OVERRIDE;
     50   virtual ManifestPermission* Diff(const ManifestPermission* rhs) const
     51       OVERRIDE;
     52   virtual ManifestPermission* Union(const ManifestPermission* rhs) const
     53       OVERRIDE;
     54   virtual ManifestPermission* Intersect(const ManifestPermission* rhs) const
     55       OVERRIDE;
     56   virtual bool Contains(const ManifestPermission* rhs) const OVERRIDE;
     57   virtual bool Equal(const ManifestPermission* rhs) const OVERRIDE;
     58   virtual void Write(IPC::Message* m) const OVERRIDE;
     59   virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE;
     60   virtual void Log(std::string* log) const OVERRIDE;
     61 
     62   const SocketPermissionEntrySet& entries() const { return permissions_; }
     63 
     64  private:
     65   bool AddAnyHostMessage(PermissionMessages& messages) const;
     66   void AddSubdomainHostMessage(PermissionMessages& messages) const;
     67   void AddSpecificHostMessage(PermissionMessages& messages) const;
     68   void AddNetworkListMessage(PermissionMessages& messages) const;
     69 
     70   SocketPermissionEntrySet permissions_;
     71 };
     72 
     73 }  // namespace extensions
     74 
     75 #endif  // EXTENSIONS_COMMON_API_SOCKETS_SOCKETS_MANIFEST_PERMISSION_H_
     76