OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/extensions/sandboxed_extension_unpacker.h" | 5 #include "chrome/browser/extensions/sandboxed_extension_unpacker.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 // Neither paths is link free chances are good installation will fail. | 156 // Neither paths is link free chances are good installation will fail. |
157 LOG(ERROR) << "Both the %TEMP% folder and the profile seem to be on " | 157 LOG(ERROR) << "Both the %TEMP% folder and the profile seem to be on " |
158 << "remote drives or read-only. Installation can not complete!"; | 158 << "remote drives or read-only. Installation can not complete!"; |
159 return false; | 159 return false; |
160 } | 160 } |
161 | 161 |
162 } // namespace | 162 } // namespace |
163 | 163 |
164 SandboxedExtensionUnpacker::SandboxedExtensionUnpacker( | 164 SandboxedExtensionUnpacker::SandboxedExtensionUnpacker( |
165 const FilePath& crx_path, | 165 const FilePath& crx_path, |
166 ResourceDispatcherHost* rdh, | |
167 Extension::Location location, | 166 Extension::Location location, |
168 int creation_flags, | 167 int creation_flags, |
169 SandboxedExtensionUnpackerClient* client) | 168 SandboxedExtensionUnpackerClient* client) |
170 : crx_path_(crx_path), | 169 : crx_path_(crx_path), |
171 thread_identifier_(BrowserThread::ID_COUNT), | 170 thread_identifier_(BrowserThread::ID_COUNT), |
172 rdh_(rdh), client_(client), got_response_(false), | 171 client_(client), |
173 location_(location), creation_flags_(creation_flags) { | 172 got_response_(false), |
| 173 location_(location), |
| 174 creation_flags_(creation_flags), |
| 175 use_utility_process_(true) { |
174 } | 176 } |
175 | 177 |
176 bool SandboxedExtensionUnpacker::CreateTempDirectory() { | 178 bool SandboxedExtensionUnpacker::CreateTempDirectory() { |
177 CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_identifier_)); | 179 CHECK(BrowserThread::GetCurrentThreadIdentifier(&thread_identifier_)); |
178 | 180 |
179 FilePath temp_dir; | 181 FilePath temp_dir; |
180 if (!FindWritableTempLocation(&temp_dir)) { | 182 if (!FindWritableTempLocation(&temp_dir)) { |
181 ReportFailure( | 183 ReportFailure( |
182 COULD_NOT_GET_TEMP_DIRECTORY, | 184 COULD_NOT_GET_TEMP_DIRECTORY, |
183 l10n_util::GetStringFUTF16( | 185 l10n_util::GetStringFUTF16( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 l10n_util::GetStringFUTF16( | 234 l10n_util::GetStringFUTF16( |
233 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, | 235 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, |
234 ASCIIToUTF16("FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"))); | 236 ASCIIToUTF16("FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"))); |
235 return; | 237 return; |
236 } | 238 } |
237 | 239 |
238 // If we are supposed to use a subprocess, kick off the subprocess. | 240 // If we are supposed to use a subprocess, kick off the subprocess. |
239 // | 241 // |
240 // TODO(asargent) we shouldn't need to do this branch here - instead | 242 // TODO(asargent) we shouldn't need to do this branch here - instead |
241 // UtilityProcessHost should handle it for us. (http://crbug.com/19192) | 243 // UtilityProcessHost should handle it for us. (http://crbug.com/19192) |
242 bool use_utility_process = rdh_ && | 244 bool use_utility_process = use_utility_process_ && |
243 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess); | 245 !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess); |
244 if (use_utility_process) { | 246 if (use_utility_process) { |
245 // The utility process will have access to the directory passed to | 247 // The utility process will have access to the directory passed to |
246 // SandboxedExtensionUnpacker. That directory should not contain a | 248 // SandboxedExtensionUnpacker. That directory should not contain a |
247 // symlink or NTFS reparse point. When the path is used, following | 249 // symlink or NTFS reparse point. When the path is used, following |
248 // the link/reparse point will cause file system access outside the | 250 // the link/reparse point will cause file system access outside the |
249 // sandbox path, and the sandbox will deny the operation. | 251 // sandbox path, and the sandbox will deny the operation. |
250 FilePath link_free_crx_path; | 252 FilePath link_free_crx_path; |
251 if (!file_util::NormalizeFilePath(temp_crx_path, &link_free_crx_path)) { | 253 if (!file_util::NormalizeFilePath(temp_crx_path, &link_free_crx_path)) { |
252 LOG(ERROR) << "Could not get the normalized path of " | 254 LOG(ERROR) << "Could not get the normalized path of " |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 ERROR_SAVING_CATALOG, | 770 ERROR_SAVING_CATALOG, |
769 l10n_util::GetStringFUTF16( | 771 l10n_util::GetStringFUTF16( |
770 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, | 772 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, |
771 ASCIIToUTF16("ERROR_SAVING_CATALOG"))); | 773 ASCIIToUTF16("ERROR_SAVING_CATALOG"))); |
772 return false; | 774 return false; |
773 } | 775 } |
774 } | 776 } |
775 | 777 |
776 return true; | 778 return true; |
777 } | 779 } |
OLD | NEW |