| 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/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 std::string("Manifest is invalid: ") + error); | 277 std::string("Manifest is invalid: ") + error); |
| 278 return; | 278 return; |
| 279 } | 279 } |
| 280 | 280 |
| 281 if (!RewriteImageFiles()) | 281 if (!RewriteImageFiles()) |
| 282 return; | 282 return; |
| 283 | 283 |
| 284 if (!RewriteCatalogFiles()) | 284 if (!RewriteCatalogFiles()) |
| 285 return; | 285 return; |
| 286 | 286 |
| 287 ReportSuccess(); | 287 ReportSuccess(manifest); |
| 288 } | 288 } |
| 289 | 289 |
| 290 void SandboxedExtensionUnpacker::OnUnpackExtensionFailed( | 290 void SandboxedExtensionUnpacker::OnUnpackExtensionFailed( |
| 291 const std::string& error) { | 291 const std::string& error) { |
| 292 CHECK(BrowserThread::CurrentlyOn(thread_identifier_)); | 292 CHECK(BrowserThread::CurrentlyOn(thread_identifier_)); |
| 293 got_response_ = true; | 293 got_response_ = true; |
| 294 ReportFailure( | 294 ReportFailure( |
| 295 UNPACKER_CLIENT_FAILED, | 295 UNPACKER_CLIENT_FAILED, |
| 296 l10n_util::GetStringFUTF8( | 296 l10n_util::GetStringFUTF8( |
| 297 IDS_EXTENSION_PACKAGE_ERROR_MESSAGE, | 297 IDS_EXTENSION_PACKAGE_ERROR_MESSAGE, |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 void SandboxedExtensionUnpacker::ReportFailure(FailureReason reason, | 473 void SandboxedExtensionUnpacker::ReportFailure(FailureReason reason, |
| 474 const std::string& error) { | 474 const std::string& error) { |
| 475 UMA_HISTOGRAM_ENUMERATION("Extensions.SandboxUnpackFailureReason", | 475 UMA_HISTOGRAM_ENUMERATION("Extensions.SandboxUnpackFailureReason", |
| 476 reason, NUM_FAILURE_REASONS); | 476 reason, NUM_FAILURE_REASONS); |
| 477 UMA_HISTOGRAM_TIMES("Extensions.SandboxUnpackFailureTime", | 477 UMA_HISTOGRAM_TIMES("Extensions.SandboxUnpackFailureTime", |
| 478 base::TimeTicks::Now() - unpack_start_time_); | 478 base::TimeTicks::Now() - unpack_start_time_); |
| 479 | 479 |
| 480 client_->OnUnpackFailure(error); | 480 client_->OnUnpackFailure(error); |
| 481 } | 481 } |
| 482 | 482 |
| 483 void SandboxedExtensionUnpacker::ReportSuccess() { | 483 void SandboxedExtensionUnpacker::ReportSuccess( |
| 484 const DictionaryValue& original_manifest) { |
| 484 UMA_HISTOGRAM_COUNTS("Extensions.SandboxUnpackSuccess", 1); | 485 UMA_HISTOGRAM_COUNTS("Extensions.SandboxUnpackSuccess", 1); |
| 485 | 486 |
| 486 RecordSuccessfulUnpackTimeHistograms( | 487 RecordSuccessfulUnpackTimeHistograms( |
| 487 crx_path_, base::TimeTicks::Now() - unpack_start_time_); | 488 crx_path_, base::TimeTicks::Now() - unpack_start_time_); |
| 488 | 489 |
| 489 // Client takes ownership of temporary directory and extension. | 490 // Client takes ownership of temporary directory and extension. |
| 490 client_->OnUnpackSuccess(temp_dir_.Take(), extension_root_, extension_); | 491 client_->OnUnpackSuccess(temp_dir_.Take(), |
| 492 extension_root_, |
| 493 &original_manifest, |
| 494 extension_); |
| 491 extension_ = NULL; | 495 extension_ = NULL; |
| 492 } | 496 } |
| 493 | 497 |
| 494 DictionaryValue* SandboxedExtensionUnpacker::RewriteManifestFile( | 498 DictionaryValue* SandboxedExtensionUnpacker::RewriteManifestFile( |
| 495 const DictionaryValue& manifest) { | 499 const DictionaryValue& manifest) { |
| 496 // Add the public key extracted earlier to the parsed manifest and overwrite | 500 // Add the public key extracted earlier to the parsed manifest and overwrite |
| 497 // the original manifest. We do this to ensure the manifest doesn't contain an | 501 // the original manifest. We do this to ensure the manifest doesn't contain an |
| 498 // exploitable bug that could be used to compromise the browser. | 502 // exploitable bug that could be used to compromise the browser. |
| 499 scoped_ptr<DictionaryValue> final_manifest(manifest.DeepCopy()); | 503 scoped_ptr<DictionaryValue> final_manifest(manifest.DeepCopy()); |
| 500 final_manifest->SetString(extension_manifest_keys::kPublicKey, public_key_); | 504 final_manifest->SetString(extension_manifest_keys::kPublicKey, public_key_); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 ERROR_SAVING_CATALOG, | 692 ERROR_SAVING_CATALOG, |
| 689 l10n_util::GetStringFUTF8( | 693 l10n_util::GetStringFUTF8( |
| 690 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, | 694 IDS_EXTENSION_PACKAGE_INSTALL_ERROR, |
| 691 ASCIIToUTF16("ERROR_SAVING_CATALOG"))); | 695 ASCIIToUTF16("ERROR_SAVING_CATALOG"))); |
| 692 return false; | 696 return false; |
| 693 } | 697 } |
| 694 } | 698 } |
| 695 | 699 |
| 696 return true; | 700 return true; |
| 697 } | 701 } |
| OLD | NEW |