| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/install_verifier.h" | 5 #include "chrome/browser/extensions/install_verifier.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 | 227 |
| 228 void InstallVerifier::Init() { | 228 void InstallVerifier::Init() { |
| 229 TRACE_EVENT0("browser,startup", "extensions::InstallVerifier::Init"); | 229 TRACE_EVENT0("browser,startup", "extensions::InstallVerifier::Init"); |
| 230 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.ExperimentStatus", | 230 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.ExperimentStatus", |
| 231 GetExperimentStatus(), VERIFY_STATUS_MAX); | 231 GetExperimentStatus(), VERIFY_STATUS_MAX); |
| 232 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.ActualStatus", | 232 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.ActualStatus", |
| 233 GetStatus(), VERIFY_STATUS_MAX); | 233 GetStatus(), VERIFY_STATUS_MAX); |
| 234 | 234 |
| 235 const base::DictionaryValue* pref = prefs_->GetInstallSignature(); | 235 const base::DictionaryValue* pref = prefs_->GetInstallSignature(); |
| 236 if (pref) { | 236 if (pref) { |
| 237 scoped_ptr<InstallSignature> signature_from_prefs = | 237 std::unique_ptr<InstallSignature> signature_from_prefs = |
| 238 InstallSignature::FromValue(*pref); | 238 InstallSignature::FromValue(*pref); |
| 239 if (!signature_from_prefs.get()) { | 239 if (!signature_from_prefs.get()) { |
| 240 LogInitResultHistogram(INIT_UNPARSEABLE_PREF); | 240 LogInitResultHistogram(INIT_UNPARSEABLE_PREF); |
| 241 } else if (!InstallSigner::VerifySignature(*signature_from_prefs.get())) { | 241 } else if (!InstallSigner::VerifySignature(*signature_from_prefs.get())) { |
| 242 LogInitResultHistogram(INIT_INVALID_SIGNATURE); | 242 LogInitResultHistogram(INIT_INVALID_SIGNATURE); |
| 243 DVLOG(1) << "Init - ignoring invalid signature"; | 243 DVLOG(1) << "Init - ignoring invalid signature"; |
| 244 } else { | 244 } else { |
| 245 signature_ = std::move(signature_from_prefs); | 245 signature_ = std::move(signature_from_prefs); |
| 246 LogInitResultHistogram(INIT_VALID_SIGNATURE); | 246 LogInitResultHistogram(INIT_VALID_SIGNATURE); |
| 247 UMA_HISTOGRAM_COUNTS_100("ExtensionInstallVerifier.InitSignatureCount", | 247 UMA_HISTOGRAM_COUNTS_100("ExtensionInstallVerifier.InitSignatureCount", |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 } | 445 } |
| 446 | 446 |
| 447 InstallVerifier::PendingOperation::PendingOperation(OperationType type) | 447 InstallVerifier::PendingOperation::PendingOperation(OperationType type) |
| 448 : type(type) {} | 448 : type(type) {} |
| 449 | 449 |
| 450 InstallVerifier::PendingOperation::~PendingOperation() { | 450 InstallVerifier::PendingOperation::~PendingOperation() { |
| 451 } | 451 } |
| 452 | 452 |
| 453 ExtensionIdSet InstallVerifier::GetExtensionsToVerify() const { | 453 ExtensionIdSet InstallVerifier::GetExtensionsToVerify() const { |
| 454 ExtensionIdSet result; | 454 ExtensionIdSet result; |
| 455 scoped_ptr<ExtensionSet> extensions = | 455 std::unique_ptr<ExtensionSet> extensions = |
| 456 ExtensionRegistry::Get(context_)->GenerateInstalledExtensionsSet(); | 456 ExtensionRegistry::Get(context_)->GenerateInstalledExtensionsSet(); |
| 457 for (ExtensionSet::const_iterator iter = extensions->begin(); | 457 for (ExtensionSet::const_iterator iter = extensions->begin(); |
| 458 iter != extensions->end(); | 458 iter != extensions->end(); |
| 459 ++iter) { | 459 ++iter) { |
| 460 if (NeedsVerification(*iter->get())) | 460 if (NeedsVerification(*iter->get())) |
| 461 result.insert((*iter)->id()); | 461 result.insert((*iter)->id()); |
| 462 } | 462 } |
| 463 return result; | 463 return result; |
| 464 } | 464 } |
| 465 | 465 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 if (!signature_.get() || signature_->ids.empty()) { | 586 if (!signature_.get() || signature_->ids.empty()) { |
| 587 DVLOG(1) << "SaveToPrefs - saving NULL"; | 587 DVLOG(1) << "SaveToPrefs - saving NULL"; |
| 588 prefs_->SetInstallSignature(NULL); | 588 prefs_->SetInstallSignature(NULL); |
| 589 } else { | 589 } else { |
| 590 base::DictionaryValue pref; | 590 base::DictionaryValue pref; |
| 591 signature_->ToValue(&pref); | 591 signature_->ToValue(&pref); |
| 592 if (VLOG_IS_ON(1)) { | 592 if (VLOG_IS_ON(1)) { |
| 593 DVLOG(1) << "SaveToPrefs - saving"; | 593 DVLOG(1) << "SaveToPrefs - saving"; |
| 594 | 594 |
| 595 DCHECK(InstallSigner::VerifySignature(*signature_.get())); | 595 DCHECK(InstallSigner::VerifySignature(*signature_.get())); |
| 596 scoped_ptr<InstallSignature> rehydrated = | 596 std::unique_ptr<InstallSignature> rehydrated = |
| 597 InstallSignature::FromValue(pref); | 597 InstallSignature::FromValue(pref); |
| 598 DCHECK(InstallSigner::VerifySignature(*rehydrated.get())); | 598 DCHECK(InstallSigner::VerifySignature(*rehydrated.get())); |
| 599 } | 599 } |
| 600 prefs_->SetInstallSignature(&pref); | 600 prefs_->SetInstallSignature(&pref); |
| 601 } | 601 } |
| 602 } | 602 } |
| 603 | 603 |
| 604 namespace { | 604 namespace { |
| 605 | 605 |
| 606 enum CallbackResult { | 606 enum CallbackResult { |
| 607 CALLBACK_NO_SIGNATURE = 0, | 607 CALLBACK_NO_SIGNATURE = 0, |
| 608 CALLBACK_INVALID_SIGNATURE, | 608 CALLBACK_INVALID_SIGNATURE, |
| 609 CALLBACK_VALID_SIGNATURE, | 609 CALLBACK_VALID_SIGNATURE, |
| 610 | 610 |
| 611 // This is used in histograms - do not remove or reorder entries above! Also | 611 // This is used in histograms - do not remove or reorder entries above! Also |
| 612 // the "MAX" item below should always be the last element. | 612 // the "MAX" item below should always be the last element. |
| 613 | 613 |
| 614 CALLBACK_RESULT_MAX | 614 CALLBACK_RESULT_MAX |
| 615 }; | 615 }; |
| 616 | 616 |
| 617 void GetSignatureResultHistogram(CallbackResult result) { | 617 void GetSignatureResultHistogram(CallbackResult result) { |
| 618 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.GetSignatureResult", | 618 UMA_HISTOGRAM_ENUMERATION("ExtensionInstallVerifier.GetSignatureResult", |
| 619 result, CALLBACK_RESULT_MAX); | 619 result, CALLBACK_RESULT_MAX); |
| 620 } | 620 } |
| 621 | 621 |
| 622 } // namespace | 622 } // namespace |
| 623 | 623 |
| 624 void InstallVerifier::SignatureCallback( | 624 void InstallVerifier::SignatureCallback( |
| 625 scoped_ptr<InstallSignature> signature) { | 625 std::unique_ptr<InstallSignature> signature) { |
| 626 | |
| 627 linked_ptr<PendingOperation> operation = operation_queue_.front(); | 626 linked_ptr<PendingOperation> operation = operation_queue_.front(); |
| 628 operation_queue_.pop(); | 627 operation_queue_.pop(); |
| 629 | 628 |
| 630 bool success = false; | 629 bool success = false; |
| 631 if (!signature.get()) { | 630 if (!signature.get()) { |
| 632 GetSignatureResultHistogram(CALLBACK_NO_SIGNATURE); | 631 GetSignatureResultHistogram(CALLBACK_NO_SIGNATURE); |
| 633 } else if (!InstallSigner::VerifySignature(*signature)) { | 632 } else if (!InstallSigner::VerifySignature(*signature)) { |
| 634 GetSignatureResultHistogram(CALLBACK_INVALID_SIGNATURE); | 633 GetSignatureResultHistogram(CALLBACK_INVALID_SIGNATURE); |
| 635 } else { | 634 } else { |
| 636 GetSignatureResultHistogram(CALLBACK_VALID_SIGNATURE); | 635 GetSignatureResultHistogram(CALLBACK_VALID_SIGNATURE); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 667 ScopedInstallVerifierBypassForTest::~ScopedInstallVerifierBypassForTest() { | 666 ScopedInstallVerifierBypassForTest::~ScopedInstallVerifierBypassForTest() { |
| 668 g_bypass_for_test = old_value_; | 667 g_bypass_for_test = old_value_; |
| 669 } | 668 } |
| 670 | 669 |
| 671 // static | 670 // static |
| 672 bool ScopedInstallVerifierBypassForTest::ShouldBypass() { | 671 bool ScopedInstallVerifierBypassForTest::ShouldBypass() { |
| 673 return g_bypass_for_test; | 672 return g_bypass_for_test; |
| 674 } | 673 } |
| 675 | 674 |
| 676 } // namespace extensions | 675 } // namespace extensions |
| OLD | NEW |