| 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 | 
|---|