OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef SANDBOX_SRC_BROKER_SERVICES_H__ | 5 #ifndef SANDBOX_SRC_BROKER_SERVICES_H__ |
6 #define SANDBOX_SRC_BROKER_SERVICES_H__ | 6 #define SANDBOX_SRC_BROKER_SERVICES_H__ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <set> | |
10 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
11 #include "sandbox/src/crosscall_server.h" | 10 #include "sandbox/src/crosscall_server.h" |
12 #include "sandbox/src/job.h" | 11 #include "sandbox/src/job.h" |
13 #include "sandbox/src/sandbox.h" | 12 #include "sandbox/src/sandbox.h" |
14 #include "sandbox/src/sharedmem_ipc_server.h" | 13 #include "sandbox/src/sharedmem_ipc_server.h" |
15 #include "sandbox/src/win2k_threadpool.h" | 14 #include "sandbox/src/win2k_threadpool.h" |
16 #include "sandbox/src/win_utils.h" | 15 #include "sandbox/src/win_utils.h" |
17 | 16 |
18 namespace sandbox { | 17 namespace sandbox { |
19 | 18 |
20 class PolicyBase; | 19 class PolicyBase; |
21 | 20 |
22 // BrokerServicesBase --------------------------------------------------------- | 21 // BrokerServicesBase --------------------------------------------------------- |
23 // Broker implementation version 0 | 22 // Broker implementation version 0 |
24 // | 23 // |
25 // This is an implementation of the interface BrokerServices and | 24 // This is an implementation of the interface BrokerServices and |
26 // of the associated TargetProcess interface. In this implementation | 25 // of the associated TargetProcess interface. In this implementation |
27 // TargetProcess is a friend of BrokerServices where the later manages a | 26 // TargetProcess is a friend of BrokerServices where the later manages a |
28 // collection of the former. | 27 // collection of the former. |
29 class BrokerServicesBase : public BrokerServices, | 28 class BrokerServicesBase : public BrokerServices, |
30 public SingletonBase<BrokerServicesBase> { | 29 public SingletonBase<BrokerServicesBase> { |
31 public: | 30 public: |
32 BrokerServicesBase(); | 31 BrokerServicesBase(); |
33 | 32 |
34 ~BrokerServicesBase(); | 33 ~BrokerServicesBase(); |
35 | 34 |
36 // The next five methods are the BrokerServices interface | 35 // The next four methods are the BrokerServices interface |
37 virtual ResultCode Init(); | 36 virtual ResultCode Init(); |
38 | 37 |
39 virtual TargetPolicy* CreatePolicy(); | 38 virtual TargetPolicy* CreatePolicy(); |
40 | 39 |
41 virtual ResultCode SpawnTarget(const wchar_t* exe_path, | 40 virtual ResultCode SpawnTarget(const wchar_t* exe_path, |
42 const wchar_t* command_line, | 41 const wchar_t* command_line, |
43 TargetPolicy* policy, | 42 TargetPolicy* policy, |
44 PROCESS_INFORMATION* target); | 43 PROCESS_INFORMATION* target); |
45 | 44 |
46 virtual ResultCode WaitForAllTargets(); | 45 virtual ResultCode WaitForAllTargets(); |
47 | 46 |
48 // Checks if the supplied process ID matches one of the broker's active | |
49 // target processes | |
50 // Returns: | |
51 // true if there is an active target process for this ID, otherwise false. | |
52 bool IsActiveTarget(DWORD process_id); | |
53 | |
54 private: | 47 private: |
55 // Helper structure that allows the Broker to associate a job notification | 48 // Helper structure that allows the Broker to associate a job notification |
56 // with a job object and with a policy. | 49 // with a job object and with a policy. |
57 struct JobTracker { | 50 struct JobTracker { |
58 HANDLE job; | 51 HANDLE job; |
59 PolicyBase* policy; | 52 PolicyBase* policy; |
60 JobTracker(HANDLE cjob, PolicyBase* cpolicy) | 53 JobTracker(HANDLE cjob, PolicyBase* cpolicy) |
61 : job(cjob), policy(cpolicy) { | 54 : job(cjob), policy(cpolicy) { |
62 } | 55 } |
63 }; | 56 }; |
(...skipping 21 matching lines...) Expand all Loading... |
85 // threads at the same time. | 78 // threads at the same time. |
86 CRITICAL_SECTION lock_; | 79 CRITICAL_SECTION lock_; |
87 | 80 |
88 // provides a pool of threads that are used to wait on the IPC calls. | 81 // provides a pool of threads that are used to wait on the IPC calls. |
89 ThreadProvider* thread_pool_; | 82 ThreadProvider* thread_pool_; |
90 | 83 |
91 // List of the trackers for closing and cleanup purposes. | 84 // List of the trackers for closing and cleanup purposes. |
92 typedef std::list<JobTracker*> JobTrackerList; | 85 typedef std::list<JobTracker*> JobTrackerList; |
93 JobTrackerList tracker_list_; | 86 JobTrackerList tracker_list_; |
94 | 87 |
95 // Provides a fast lookup to identify sandboxed processes. | |
96 std::set<DWORD> child_process_ids_; | |
97 | |
98 DISALLOW_COPY_AND_ASSIGN(BrokerServicesBase); | 88 DISALLOW_COPY_AND_ASSIGN(BrokerServicesBase); |
99 }; | 89 }; |
100 | 90 |
101 } // namespace sandbox | 91 } // namespace sandbox |
102 | 92 |
103 | 93 |
104 #endif // SANDBOX_SRC_BROKER_SERVICES_H__ | 94 #endif // SANDBOX_SRC_BROKER_SERVICES_H__ |
OLD | NEW |