Chromium Code Reviews| Index: chrome/browser/extensions/external_install_manager.cc |
| diff --git a/chrome/browser/extensions/external_install_manager.cc b/chrome/browser/extensions/external_install_manager.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..84cd925f569af04445c3b5a09377cc641618bed4 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/external_install_manager.cc |
| @@ -0,0 +1,84 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/extensions/external_install_manager.h" |
| + |
| +#include <string> |
| + |
| +#include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/extensions/external_install_error.h" |
| +#include "chrome/common/extensions/manifest_url_handler.h" |
| +#include "extensions/browser/extension_registry.h" |
| +#include "extensions/browser/extension_system.h" |
| +#include "extensions/common/extension.h" |
| + |
| +namespace extensions { |
| + |
| +ExternalInstallManager::ExternalInstallManager( |
| + content::BrowserContext* browser_context) |
| + : browser_context_(browser_context), |
| + extension_registry_observer_(this) { |
| + DCHECK(browser_context_); |
| + extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); |
| +} |
| + |
| +ExternalInstallManager::~ExternalInstallManager() { |
| +} |
| + |
| +void ExternalInstallManager::AddExternalInstallError(const Extension* extension, |
| + bool is_new_profile) { |
| + if (HasExternalInstallError()) |
| + return; // Only have one external install error at a time. |
| + |
| + if (ManifestURL::UpdatesFromGallery(extension) && !is_new_profile) { |
| + error_.reset(new ExternalInstallError(browser_context_, |
| + extension->id(), |
| + ExternalInstallError::BUBBLE_ALERT, |
| + this)); |
| + } else { |
| + error_.reset(new ExternalInstallError(browser_context_, |
| + extension->id(), |
| + ExternalInstallError::MENU_ALERT, |
| + this)); |
| + } |
| +} |
| + |
| +void ExternalInstallManager::RemoveExternalInstallError() { |
| + error_.reset(); |
| + ExtensionSystem::Get(browser_context_) |
| + ->extension_service() |
| + ->UpdateExternalExtensionAlert(); |
| +} |
| + |
| +bool ExternalInstallManager::HasExternalInstallError() const { |
| + return error_.get() != NULL; |
| +} |
| + |
| +bool ExternalInstallManager::HasExternalInstallBubble() const { |
| + return error_.get() && |
| + error_->alert_type() == ExternalInstallError::BUBBLE_ALERT; |
| +} |
| + |
| +void ExternalInstallManager::OnExtensionLoaded( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension) { |
| + // The error is invalidated if the extension has been loaded or removed. |
| + if (error_.get() && extension->id() == error_->extension_id()) { |
| + // We treat loading as acknowledgement (since the user consciously chose to |
| + // re-enable the extension). |
| + error_->AcknowledgeExtension(); |
| + RemoveExternalInstallError(); |
| + } |
| +} |
| + |
| +void ExternalInstallManager::OnExtensionUnloaded( |
|
Yoyo Zhou
2014/05/29 23:20:24
Does this handle the removal of a disabled extensi
Devlin
2014/05/30 16:14:44
Dang, it doesn't. Guess we have to go back to the
|
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + UnloadedExtensionInfo::Reason reason) { |
| + // The error is invalidated if the extension has been loaded or removed. |
| + if (error_.get() && extension->id() == error_->extension_id()) |
| + RemoveExternalInstallError(); |
| +} |
| + |
| +} // namespace extensions |