Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(939)

Side by Side Diff: chrome/browser/utility_process_host.cc

Issue 341033: Sandbox Worker process on the Mac. (Closed)
Patch Set: Fix latest round of comments Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/utility.sb ('k') | chrome/browser/utility_process_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #include "chrome/browser/utility_process_host.h" 5 #include "chrome/browser/utility_process_host.h"
6 6
7 #include "app/app_switches.h" 7 #include "app/app_switches.h"
8 #include "app/l10n_util.h" 8 #include "app/l10n_util.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 Send(new UtilityMsg_ParseUpdateManifest(xml)); 60 Send(new UtilityMsg_ParseUpdateManifest(xml));
61 return true; 61 return true;
62 } 62 }
63 63
64 FilePath UtilityProcessHost::GetUtilityProcessCmd() { 64 FilePath UtilityProcessHost::GetUtilityProcessCmd() {
65 return GetChildPath(); 65 return GetChildPath();
66 } 66 }
67 67
68 bool UtilityProcessHost::StartProcess(const FilePath& exposed_dir) { 68 bool UtilityProcessHost::StartProcess(const FilePath& exposed_dir) {
69 #if defined(OS_POSIX) 69 #if defined(OS_POSIX)
70 // TODO(port): We should not reach here on linux (crbug.com/22703) or 70 // TODO(port): We should not reach here on Linux (crbug.com/22703).
71 // MacOS (crbug.com/8102) until problems related to autoupdate are fixed. 71 // (crbug.com/23837) covers enabling this on Linux/OS X.
72 NOTREACHED(); 72 NOTREACHED();
73 return false; 73 return false;
74 #endif 74 #endif
75 75
76 // Name must be set or metrics_service will crash in any test which 76 // Name must be set or metrics_service will crash in any test which
77 // launches a UtilityProcessHost. 77 // launches a UtilityProcessHost.
78 set_name(L"utility process"); 78 set_name(L"utility process");
79 79
80 if (!CreateChannel()) 80 if (!CreateChannel())
81 return false; 81 return false;
(...skipping 19 matching lines...) Expand all
101 #if defined(OS_WIN) 101 #if defined(OS_WIN)
102 if (!UseSandbox()) { 102 if (!UseSandbox()) {
103 // Don't use the sandbox during unit tests. 103 // Don't use the sandbox during unit tests.
104 base::LaunchApp(cmd_line, false, false, &process); 104 base::LaunchApp(cmd_line, false, false, &process);
105 } else if (exposed_dir.empty()) { 105 } else if (exposed_dir.empty()) {
106 process = sandbox::StartProcess(&cmd_line); 106 process = sandbox::StartProcess(&cmd_line);
107 } else { 107 } else {
108 process = sandbox::StartProcessWithAccess(&cmd_line, exposed_dir); 108 process = sandbox::StartProcessWithAccess(&cmd_line, exposed_dir);
109 } 109 }
110 #else 110 #else
111 // TODO(port): Sandbox this on Linux/Mac. Also, zygote this to work with 111 // TODO(port): Sandbox this on Linux. Also, zygote this to work with
112 // Linux updating. 112 // Linux updating.
113 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); 113 const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
114 bool has_cmd_prefix = browser_command_line.HasSwitch( 114 bool has_cmd_prefix = browser_command_line.HasSwitch(
115 switches::kUtilityCmdPrefix); 115 switches::kUtilityCmdPrefix);
116 if (has_cmd_prefix) { 116 if (has_cmd_prefix) {
117 // launch the utility child process with some prefix (usually "xterm -e gdb 117 // launch the utility child process with some prefix (usually "xterm -e gdb
118 // --args"). 118 // --args").
119 cmd_line.PrependWrapper(browser_command_line.GetSwitchValue( 119 cmd_line.PrependWrapper(browser_command_line.GetSwitchValue(
120 switches::kUtilityCmdPrefix)); 120 switches::kUtilityCmdPrefix));
121 } 121 }
122 122
123 cmd_line.AppendSwitchWithValue(switches::kUtilityProcessAllowedDir,
124 exposed_dir.value().c_str());
125
123 // This code is duplicated with browser_render_process_host.cc and 126 // This code is duplicated with browser_render_process_host.cc and
124 // plugin_process_host.cc, but there's not a good place to de-duplicate it. 127 // plugin_process_host.cc, but there's not a good place to de-duplicate it.
125 // Maybe we can merge this into sandbox::StartProcess which will set up 128 // Maybe we can merge this into sandbox::StartProcess which will set up
126 // everything before calling LaunchApp? 129 // everything before calling LaunchApp?
127 base::file_handle_mapping_vector fds_to_map; 130 base::file_handle_mapping_vector fds_to_map;
128 const int ipcfd = channel().GetClientFileDescriptor(); 131 const int ipcfd = channel().GetClientFileDescriptor();
129 if (ipcfd > -1) 132 if (ipcfd > -1)
130 fds_to_map.push_back(std::pair<int, int>( 133 fds_to_map.push_back(std::pair<int, int>(
131 ipcfd, kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor)); 134 ipcfd, kPrimaryIPCChannel + base::GlobalDescriptors::kBaseDescriptor));
132 base::LaunchApp(cmd_line.argv(), fds_to_map, false, &process); 135 base::LaunchApp(cmd_line.argv(), fds_to_map, false, &process);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackWebResource_Succeeded, 167 IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackWebResource_Succeeded,
165 Client::OnUnpackWebResourceSucceeded) 168 Client::OnUnpackWebResourceSucceeded)
166 IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackWebResource_Failed, 169 IPC_MESSAGE_HANDLER(UtilityHostMsg_UnpackWebResource_Failed,
167 Client::OnUnpackWebResourceFailed) 170 Client::OnUnpackWebResourceFailed)
168 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Succeeded, 171 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Succeeded,
169 Client::OnParseUpdateManifestSucceeded) 172 Client::OnParseUpdateManifestSucceeded)
170 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Failed, 173 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Failed,
171 Client::OnParseUpdateManifestFailed) 174 Client::OnParseUpdateManifestFailed)
172 IPC_END_MESSAGE_MAP_EX() 175 IPC_END_MESSAGE_MAP_EX()
173 } 176 }
OLDNEW
« no previous file with comments | « chrome/browser/utility.sb ('k') | chrome/browser/utility_process_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698