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

Side by Side Diff: chrome/browser/extensions/sandboxed_unpacker.cc

Issue 406713002: Allow drag-and-drop of zipped extensions on chrome://extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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_unpacker.h" 5 #include "chrome/browser/extensions/sandboxed_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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 const base::FilePath& crx_path, 216 const base::FilePath& crx_path,
217 Manifest::Location location, 217 Manifest::Location location,
218 int creation_flags, 218 int creation_flags,
219 const base::FilePath& extensions_dir, 219 const base::FilePath& extensions_dir,
220 base::SequencedTaskRunner* unpacker_io_task_runner, 220 base::SequencedTaskRunner* unpacker_io_task_runner,
221 SandboxedUnpackerClient* client) 221 SandboxedUnpackerClient* client)
222 : crx_path_(crx_path), 222 : crx_path_(crx_path),
223 client_(client), 223 client_(client),
224 extensions_dir_(extensions_dir), 224 extensions_dir_(extensions_dir),
225 got_response_(false), 225 got_response_(false),
226 is_zipfile_(false),
226 location_(location), 227 location_(location),
227 creation_flags_(creation_flags), 228 creation_flags_(creation_flags),
228 unpacker_io_task_runner_(unpacker_io_task_runner) { 229 unpacker_io_task_runner_(unpacker_io_task_runner) {
229 } 230 }
230 231
231 bool SandboxedUnpacker::CreateTempDirectory() { 232 bool SandboxedUnpacker::CreateTempDirectory() {
232 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread()); 233 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread());
233 234
234 base::FilePath temp_dir; 235 base::FilePath temp_dir;
235 if (!FindWritableTempLocation(extensions_dir_, &temp_dir)) { 236 if (!FindWritableTempLocation(extensions_dir_, &temp_dir)) {
(...skipping 17 matching lines...) Expand all
253 return true; 254 return true;
254 } 255 }
255 256
256 void SandboxedUnpacker::Start() { 257 void SandboxedUnpacker::Start() {
257 // We assume that we are started on the thread that the client wants us to do 258 // We assume that we are started on the thread that the client wants us to do
258 // file IO on. 259 // file IO on.
259 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread()); 260 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread());
260 261
261 unpack_start_time_ = base::TimeTicks::Now(); 262 unpack_start_time_ = base::TimeTicks::Now();
262 263
264 if (crx_path_.Extension() == ".zip")
265 is_zipfile_ = true;
meacer 2014/07/28 23:01:05 Cleaner? is_zipfile_ = crx_path_.Extension() == "
elijahtaylor1 2014/07/31 17:29:55 removed code
266
263 PATH_LENGTH_HISTOGRAM("Extensions.SandboxUnpackInitialCrxPathLength", 267 PATH_LENGTH_HISTOGRAM("Extensions.SandboxUnpackInitialCrxPathLength",
264 crx_path_); 268 crx_path_);
265 if (!CreateTempDirectory()) 269 if (!CreateTempDirectory())
266 return; // ReportFailure() already called. 270 return; // ReportFailure() already called.
267 271
268 // Initialize the path that will eventually contain the unpacked extension. 272 // Initialize the path that will eventually contain the unpacked extension.
269 extension_root_ = temp_dir_.path().AppendASCII(kTempExtensionName); 273 extension_root_ = temp_dir_.path().AppendASCII(kTempExtensionName);
270 PATH_LENGTH_HISTOGRAM("Extensions.SandboxUnpackUnpackedCrxPathLength", 274 PATH_LENGTH_HISTOGRAM("Extensions.SandboxUnpackUnpackedCrxPathLength",
271 extension_root_); 275 extension_root_);
272 276
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 host->Send( 358 host->Send(
355 new ChromeUtilityMsg_UnpackExtension( 359 new ChromeUtilityMsg_UnpackExtension(
356 temp_crx_path, extension_id_, location_, creation_flags_)); 360 temp_crx_path, extension_id_, location_, creation_flags_));
357 } 361 }
358 362
359 void SandboxedUnpacker::OnUnpackExtensionSucceeded( 363 void SandboxedUnpacker::OnUnpackExtensionSucceeded(
360 const base::DictionaryValue& manifest) { 364 const base::DictionaryValue& manifest) {
361 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread()); 365 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread());
362 got_response_ = true; 366 got_response_ = true;
363 367
368 if (is_zipfile_) {
369 ReportSuccess(manifest, SkBitmap());
370 return;
371 }
372
364 scoped_ptr<base::DictionaryValue> final_manifest( 373 scoped_ptr<base::DictionaryValue> final_manifest(
365 RewriteManifestFile(manifest)); 374 RewriteManifestFile(manifest));
366 if (!final_manifest) 375 if (!final_manifest)
367 return; 376 return;
368 377
369 // Create an extension object that refers to the temporary location the 378 // Create an extension object that refers to the temporary location the
370 // extension was unpacked to. We use this until the extension is finally 379 // extension was unpacked to. We use this until the extension is finally
371 // installed. For example, the install UI shows images from inside the 380 // installed. For example, the install UI shows images from inside the
372 // extension. 381 // extension.
373 382
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread()); 423 CHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread());
415 got_response_ = true; 424 got_response_ = true;
416 ReportFailure( 425 ReportFailure(
417 UNPACKER_CLIENT_FAILED, 426 UNPACKER_CLIENT_FAILED,
418 l10n_util::GetStringFUTF16( 427 l10n_util::GetStringFUTF16(
419 IDS_EXTENSION_PACKAGE_ERROR_MESSAGE, 428 IDS_EXTENSION_PACKAGE_ERROR_MESSAGE,
420 error)); 429 error));
421 } 430 }
422 431
423 bool SandboxedUnpacker::ValidateSignature() { 432 bool SandboxedUnpacker::ValidateSignature() {
433 if (is_zipfile_)
434 return true;
435
424 base::ScopedFILE file(base::OpenFile(crx_path_, "rb")); 436 base::ScopedFILE file(base::OpenFile(crx_path_, "rb"));
425 437
426 if (!file.get()) { 438 if (!file.get()) {
427 // Could not open crx file for reading. 439 // Could not open crx file for reading.
428 #if defined (OS_WIN) 440 #if defined (OS_WIN)
429 // On windows, get the error code. 441 // On windows, get the error code.
430 uint32 error_code = ::GetLastError(); 442 uint32 error_code = ::GetLastError();
431 // TODO(skerner): Use this histogram to understand why so many 443 // TODO(skerner): Use this histogram to understand why so many
432 // windows users hit this error. crbug.com/69693 444 // windows users hit this error. crbug.com/69693
433 445
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 841
830 void SandboxedUnpacker::Cleanup() { 842 void SandboxedUnpacker::Cleanup() {
831 DCHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread()); 843 DCHECK(unpacker_io_task_runner_->RunsTasksOnCurrentThread());
832 if (!temp_dir_.Delete()) { 844 if (!temp_dir_.Delete()) {
833 LOG(WARNING) << "Can not delete temp directory at " 845 LOG(WARNING) << "Can not delete temp directory at "
834 << temp_dir_.path().value(); 846 << temp_dir_.path().value();
835 } 847 }
836 } 848 }
837 849
838 } // namespace extensions 850 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698