| Index: chrome/browser/extensions/extension_service.cc
|
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
|
| index db32e5a39c86f6bd2326edeb6d1e80bef818cc13..c72ad380aabd77e2f41da7bcbde7acc8ff115d4a 100644
|
| --- a/chrome/browser/extensions/extension_service.cc
|
| +++ b/chrome/browser/extensions/extension_service.cc
|
| @@ -574,10 +574,7 @@ void ExtensionService::Init() {
|
| // rather than running immediately at startup.
|
| CheckForExternalUpdates();
|
|
|
| - InstallVerifier* verifier =
|
| - extensions::ExtensionSystem::Get(profile_)->install_verifier();
|
| - if (verifier->NeedsBootstrap())
|
| - VerifyAllExtensions(true); // bootstrap=true.
|
| + MaybeBootstrapVerifier();
|
| base::MessageLoop::current()->PostDelayedTask(
|
| FROM_HERE,
|
| base::Bind(&ExtensionService::GarbageCollectExtensions, AsWeakPtr()),
|
| @@ -611,6 +608,33 @@ void ExtensionService::LoadGreylistFromPrefs() {
|
| }
|
| }
|
|
|
| +void ExtensionService::MaybeBootstrapVerifier() {
|
| + InstallVerifier* verifier =
|
| + extensions::ExtensionSystem::Get(profile_)->install_verifier();
|
| + bool do_bootstrap = false;
|
| +
|
| + if (verifier->NeedsBootstrap()) {
|
| + do_bootstrap = true;
|
| + } else {
|
| + // If any of the installed extensions have an install time newer than the
|
| + // signature's timestamp, we need to bootstrap because our signature may
|
| + // be missing valid extensions.
|
| + base::Time timestamp = verifier->SignatureTimestamp();
|
| + for (extensions::ExtensionSet::const_iterator i = extensions()->begin();
|
| + i != extensions()->end();
|
| + ++i) {
|
| + const Extension& extension = **i;
|
| + if (verifier->NeedsVerification(extension) &&
|
| + extension_prefs_->GetInstallTime(extension.id()) >= timestamp) {
|
| + do_bootstrap = true;
|
| + break;
|
| + }
|
| + }
|
| + }
|
| + if (do_bootstrap)
|
| + VerifyAllExtensions(true); // bootstrap=true.
|
| +}
|
| +
|
| void ExtensionService::VerifyAllExtensions(bool bootstrap) {
|
| ExtensionIdSet to_add;
|
| scoped_ptr<ExtensionSet> all_extensions = GenerateInstalledExtensionsSet();
|
|
|