[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 1 | // Copyright (c) 2012 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 | |||||
[email protected] | a82af39 | 2012-02-24 04:40:20 | [diff] [blame] | 5 | #ifndef CONTENT_BROWSER_UTILITY_PROCESS_HOST_IMPL_H_ |
6 | #define CONTENT_BROWSER_UTILITY_PROCESS_HOST_IMPL_H_ | ||||
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 7 | |
8 | #include <string> | ||||
9 | #include <vector> | ||||
10 | |||||
11 | #include "base/basictypes.h" | ||||
12 | #include "base/compiler_specific.h" | ||||
[email protected] | b345c48 | 2013-08-30 18:00:39 | [diff] [blame] | 13 | #include "base/files/file_path.h" |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 14 | #include "base/memory/ref_counted.h" |
[email protected] | b7b6387 | 2013-01-03 02:41:19 | [diff] [blame] | 15 | #include "base/memory/scoped_ptr.h" |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 16 | #include "base/memory/weak_ptr.h" |
17 | #include "content/public/browser/browser_child_process_host_delegate.h" | ||||
18 | #include "content/public/browser/utility_process_host.h" | ||||
19 | |||||
[email protected] | 7f8f24f | 2012-11-15 19:40:14 | [diff] [blame] | 20 | namespace base { |
21 | class SequencedTaskRunner; | ||||
[email protected] | d7a2d89 | 2013-08-16 07:45:36 | [diff] [blame] | 22 | class Thread; |
[email protected] | 7f8f24f | 2012-11-15 19:40:14 | [diff] [blame] | 23 | } |
24 | |||||
[email protected] | 13075767 | 2012-10-24 00:26:19 | [diff] [blame] | 25 | namespace content { |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 26 | class BrowserChildProcessHostImpl; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 27 | |
[email protected] | 683f427 | 2014-04-17 20:42:18 | [diff] [blame] | 28 | typedef base::Thread* (*UtilityMainThreadFactoryFunction)( |
29 | const std::string& id); | ||||
30 | |||||
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 31 | class CONTENT_EXPORT UtilityProcessHostImpl |
[email protected] | 13075767 | 2012-10-24 00:26:19 | [diff] [blame] | 32 | : public NON_EXPORTED_BASE(UtilityProcessHost), |
33 | public BrowserChildProcessHostDelegate { | ||||
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 34 | public: |
[email protected] | 683f427 | 2014-04-17 20:42:18 | [diff] [blame] | 35 | static void RegisterUtilityMainThreadFactory( |
36 | UtilityMainThreadFactoryFunction create); | ||||
37 | |||||
[email protected] | 13075767 | 2012-10-24 00:26:19 | [diff] [blame] | 38 | UtilityProcessHostImpl(UtilityProcessHostClient* client, |
[email protected] | 7f8f24f | 2012-11-15 19:40:14 | [diff] [blame] | 39 | base::SequencedTaskRunner* client_task_runner); |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 40 | virtual ~UtilityProcessHostImpl(); |
41 | |||||
42 | // UtilityProcessHost implementation: | ||||
43 | virtual bool Send(IPC::Message* message) OVERRIDE; | ||||
44 | virtual bool StartBatchMode() OVERRIDE; | ||||
45 | virtual void EndBatchMode() OVERRIDE; | ||||
[email protected] | 2dec8ec | 2013-02-07 19:20:34 | [diff] [blame] | 46 | virtual void SetExposedDir(const base::FilePath& dir) OVERRIDE; |
[email protected] | 809d34b | 2013-07-20 11:51:53 | [diff] [blame] | 47 | virtual void EnableMDns() OVERRIDE; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 48 | virtual void DisableSandbox() OVERRIDE; |
[email protected] | fa01e47 | 2014-02-11 14:45:35 | [diff] [blame] | 49 | #if defined(OS_WIN) |
50 | virtual void ElevatePrivileges() OVERRIDE; | ||||
51 | #endif | ||||
[email protected] | dc1571a15 | 2012-12-19 02:23:38 | [diff] [blame] | 52 | virtual const ChildProcessData& GetData() OVERRIDE; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 53 | #if defined(OS_POSIX) |
[email protected] | b345c48 | 2013-08-30 18:00:39 | [diff] [blame] | 54 | virtual void SetEnv(const base::EnvironmentMap& env) OVERRIDE; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 55 | #endif |
56 | |||||
57 | void set_child_flags(int flags) { child_flags_ = flags; } | ||||
58 | |||||
59 | private: | ||||
60 | // Starts a process if necessary. Returns true if it succeeded or a process | ||||
61 | // has already been started via StartBatchMode(). | ||||
62 | bool StartProcess(); | ||||
63 | |||||
64 | // BrowserChildProcessHost: | ||||
65 | virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; | ||||
[email protected] | fa01e47 | 2014-02-11 14:45:35 | [diff] [blame] | 66 | virtual void OnProcessLaunchFailed() OVERRIDE; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 67 | virtual void OnProcessCrashed(int exit_code) OVERRIDE; |
68 | |||||
69 | // A pointer to our client interface, who will be informed of progress. | ||||
[email protected] | 13075767 | 2012-10-24 00:26:19 | [diff] [blame] | 70 | scoped_refptr<UtilityProcessHostClient> client_; |
[email protected] | 7f8f24f | 2012-11-15 19:40:14 | [diff] [blame] | 71 | scoped_refptr<base::SequencedTaskRunner> client_task_runner_; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 72 | // True when running in batch mode, i.e., StartBatchMode() has been called |
73 | // and the utility process will run until EndBatchMode(). | ||||
74 | bool is_batch_mode_; | ||||
75 | |||||
[email protected] | 2dec8ec | 2013-02-07 19:20:34 | [diff] [blame] | 76 | base::FilePath exposed_dir_; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 77 | |
[email protected] | dc120e7 | 2013-11-05 04:36:51 | [diff] [blame] | 78 | // Whether the utility process needs to perform presandbox initialization |
79 | // for mDNS. | ||||
[email protected] | 809d34b | 2013-07-20 11:51:53 | [diff] [blame] | 80 | bool is_mdns_enabled_; |
81 | |||||
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 82 | // Whether to pass switches::kNoSandbox to the child. |
83 | bool no_sandbox_; | ||||
84 | |||||
[email protected] | fa01e47 | 2014-02-11 14:45:35 | [diff] [blame] | 85 | // Whether to launch the process with elevated privileges. |
86 | bool run_elevated_; | ||||
[email protected] | fa01e47 | 2014-02-11 14:45:35 | [diff] [blame] | 87 | |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 88 | // Flags defined in ChildProcessHost with which to start the process. |
89 | int child_flags_; | ||||
90 | |||||
[email protected] | b345c48 | 2013-08-30 18:00:39 | [diff] [blame] | 91 | base::EnvironmentMap env_; |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 92 | |
93 | bool started_; | ||||
94 | |||||
95 | scoped_ptr<BrowserChildProcessHostImpl> process_; | ||||
96 | |||||
[email protected] | 6d057a0c | 2013-07-09 21:12:07 | [diff] [blame] | 97 | // Used in single-process mode instead of process_. |
[email protected] | d7a2d89 | 2013-08-16 07:45:36 | [diff] [blame] | 98 | scoped_ptr<base::Thread> in_process_thread_; |
[email protected] | 6d057a0c | 2013-07-09 21:12:07 | [diff] [blame] | 99 | |
[email protected] | c4f883a | 2012-02-03 17:02:07 | [diff] [blame] | 100 | DISALLOW_COPY_AND_ASSIGN(UtilityProcessHostImpl); |
101 | }; | ||||
102 | |||||
[email protected] | 13075767 | 2012-10-24 00:26:19 | [diff] [blame] | 103 | } // namespace content |
104 | |||||
[email protected] | a82af39 | 2012-02-24 04:40:20 | [diff] [blame] | 105 | #endif // CONTENT_BROWSER_UTILITY_PROCESS_HOST_IMPL_H_ |