Atomic: Notify Watcher to observe device fd
[chromium-blink-merge.git] / extensions / common / permissions / socket_permission_data.h
blobf227f8d4c286843187d9bc162f76c00e0cbb44ba
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 #ifndef EXTENSIONS_COMMON_PERMISSIONS_SOCKET_PERMISSION_DATA_H_
5 #define EXTENSIONS_COMMON_PERMISSIONS_SOCKET_PERMISSION_DATA_H_
7 #include <string>
9 #include "extensions/common/permissions/api_permission.h"
10 #include "extensions/common/permissions/socket_permission_entry.h"
11 #include "ipc/ipc_param_traits.h"
13 namespace ipc_fuzzer {
14 template <class T>
15 struct FuzzTraits;
16 template <class T>
17 struct GenerateTraits;
18 } // namespace ipc_fuzzer
20 namespace extensions {
22 // A pattern that can be used to match socket permission.
23 // <socket-permission-pattern>
24 // := <op> |
25 // <op> ':' <host> |
26 // <op> ':' ':' <port> |
27 // <op> ':' <host> ':' <port> |
28 // 'udp-multicast-membership'
29 // <op> := 'tcp-connect' |
30 // 'tcp-listen' |
31 // 'udp-bind' |
32 // 'udp-send-to' |
33 // 'udp-multicast-membership' |
34 // 'resolve-host' |
35 // 'resolve-proxy' |
36 // 'network-state'
37 // <host> := '*' |
38 // '*.' <anychar except '/' and '*'>+ |
39 // <anychar except '/' and '*'>+
40 // <port> := '*' |
41 // <port number between 0 and 65535>)
42 // The multicast membership permission implies a permission to any address.
43 class SocketPermissionData {
44 public:
45 SocketPermissionData();
46 ~SocketPermissionData();
48 // operators <, == are needed by container std::set and algorithms
49 // std::set_includes and std::set_differences.
50 bool operator<(const SocketPermissionData& rhs) const;
51 bool operator==(const SocketPermissionData& rhs) const;
53 // Check if |param| (which must be a SocketPermissionData::CheckParam)
54 // matches the spec of |this|.
55 bool Check(const APIPermission::CheckParam* param) const;
57 // Convert |this| into a base::Value.
58 scoped_ptr<base::Value> ToValue() const;
60 // Populate |this| from a base::Value.
61 bool FromValue(const base::Value* value);
63 // TODO(bryeung): SocketPermissionData should be encoded as a base::Value
64 // instead of a string. Until that is done, expose these methods for
65 // testing.
66 bool ParseForTest(const std::string& permission) { return Parse(permission); }
67 const std::string& GetAsStringForTest() const { return GetAsString(); }
69 const SocketPermissionEntry& entry() const { return entry_; }
71 private:
72 // Friend so ParamTraits can serialize us.
73 friend struct IPC::ParamTraits<SocketPermissionData>;
74 friend struct ipc_fuzzer::FuzzTraits<SocketPermissionData>;
75 friend struct ipc_fuzzer::GenerateTraits<SocketPermissionData>;
77 SocketPermissionEntry& entry();
79 bool Parse(const std::string& permission);
80 const std::string& GetAsString() const;
81 void Reset();
83 SocketPermissionEntry entry_;
84 mutable std::string spec_;
87 } // namespace extensions
89 #endif // EXTENSIONS_COMMON_PERMISSIONS_SOCKET_PERMISSION_DATA_H_