OLD | NEW |
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" |
11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
12 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
13 #include "chrome/common/chrome_switches.h" | 13 #include "chrome/common/chrome_switches.h" |
14 #include "chrome/common/utility_messages.h" | 14 #include "chrome/common/utility_messages.h" |
15 #include "ipc/ipc_switches.h" | 15 #include "ipc/ipc_switches.h" |
16 | 16 |
17 UtilityProcessHost::UtilityProcessHost(ResourceDispatcherHost* rdh, | 17 UtilityProcessHost::UtilityProcessHost(ResourceDispatcherHost* rdh, |
18 Client* client, | 18 Client* client, |
19 ChromeThread::ID client_thread_id) | 19 ChromeThread::ID client_thread_id) |
20 : ChildProcessHost(UTILITY_PROCESS, rdh), | 20 : ChildProcessHost(UTILITY_PROCESS, rdh), |
21 client_(client), | 21 client_(client), |
22 client_thread_id_(client_thread_id) { | 22 client_thread_id_(client_thread_id) { |
23 } | 23 } |
24 | 24 |
25 UtilityProcessHost::~UtilityProcessHost() { | 25 UtilityProcessHost::~UtilityProcessHost() { |
26 } | 26 } |
27 | 27 |
28 bool UtilityProcessHost::StartExtensionUnpacker(const FilePath& extension) { | 28 bool UtilityProcessHost::StartExtensionUnpacker(const FilePath& extension) { |
29 FilePath initial_path = extension.DirName(); | |
30 FilePath real_path; | |
31 | |
32 // The utility process will have access to the directory passed to | |
33 // StartProcess(). That directory should not be a symlink or NTFS | |
34 // junctions, because when the path is used, following the link will | |
35 // cause file system access outside the sandbox path. | |
36 | |
37 #if defined(OS_POSIX) | |
38 // Resolve symlinks to get a symlink free path. | |
39 if (!file_util::RealPath(initial_path, &real_path)) { | |
40 real_path = initial_path; | |
41 } | |
42 #else | |
43 // TODO(skerner): For windows, we need to expand NTFS junctions. | |
44 // http://crbug.com/13044 | |
45 real_path = initial_path; | |
46 #endif | |
47 | |
48 // TODO(skerner): Remove this logging once we understand crbug.com/35198 | |
49 LOG(INFO) << "initial_path: " << initial_path.value(); | |
50 LOG(INFO) << "real_path: " << real_path.value(); | |
51 | |
52 // Grant the subprocess access to the entire subdir the extension file is | 29 // Grant the subprocess access to the entire subdir the extension file is |
53 // in, so that it can unpack to that dir. | 30 // in, so that it can unpack to that dir. |
54 if (!StartProcess(real_path)) | 31 if (!StartProcess(extension.DirName())) |
55 return false; | 32 return false; |
56 | 33 |
57 Send(new UtilityMsg_UnpackExtension(extension)); | 34 Send(new UtilityMsg_UnpackExtension(extension)); |
58 return true; | 35 return true; |
59 } | 36 } |
60 | 37 |
61 bool UtilityProcessHost::StartWebResourceUnpacker(const std::string& data) { | 38 bool UtilityProcessHost::StartWebResourceUnpacker(const std::string& data) { |
62 if (!StartProcess(FilePath())) | 39 if (!StartProcess(FilePath())) |
63 return false; | 40 return false; |
64 | 41 |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Succeeded, | 154 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Succeeded, |
178 Client::OnParseUpdateManifestSucceeded) | 155 Client::OnParseUpdateManifestSucceeded) |
179 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Failed, | 156 IPC_MESSAGE_HANDLER(UtilityHostMsg_ParseUpdateManifest_Failed, |
180 Client::OnParseUpdateManifestFailed) | 157 Client::OnParseUpdateManifestFailed) |
181 IPC_MESSAGE_HANDLER(UtilityHostMsg_DecodeImage_Succeeded, | 158 IPC_MESSAGE_HANDLER(UtilityHostMsg_DecodeImage_Succeeded, |
182 Client::OnDecodeImageSucceeded) | 159 Client::OnDecodeImageSucceeded) |
183 IPC_MESSAGE_HANDLER(UtilityHostMsg_DecodeImage_Failed, | 160 IPC_MESSAGE_HANDLER(UtilityHostMsg_DecodeImage_Failed, |
184 Client::OnDecodeImageFailed) | 161 Client::OnDecodeImageFailed) |
185 IPC_END_MESSAGE_MAP_EX() | 162 IPC_END_MESSAGE_MAP_EX() |
186 } | 163 } |
OLD | NEW |