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

Unified Diff: chrome/browser/extensions/extension_disabled_ui.cc

Issue 22799016: Kill NOTIFICATION_EXTENSION_REMOVED (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_disabled_ui.cc
diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc
index 42767a1bf1f50f90fb4f771d9bf01f22a57dbf10..77c65e2064f50c72db7a692aa8f40c9f902c43e1 100644
--- a/chrome/browser/extensions/extension_disabled_ui.cc
+++ b/chrome/browser/extensions/extension_disabled_ui.cc
@@ -7,9 +7,11 @@
#include <string>
#include "base/bind.h"
+#include "base/callback_forward.h"
#include "base/lazy_instance.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/strings/utf_string_conversions.h"
@@ -168,6 +170,9 @@ class ExtensionDisabledGlobalError : public GlobalError,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
+ // Callback to notify UI that extension has been removed.
+ void HandleExtensionRemoved(const Extension* extension);
+
private:
ExtensionService* service_;
const Extension* extension_;
@@ -188,6 +193,8 @@ class ExtensionDisabledGlobalError : public GlobalError,
int menu_command_id_;
content::NotificationRegistrar registrar_;
+ base::WeakPtrFactory<ExtensionDisabledGlobalError> weak_factory_;
+ base::Callback<void(const Extension*)> on_removed_callback_;
};
// TODO(yoz): create error at startup for disabled extensions.
@@ -199,7 +206,8 @@ ExtensionDisabledGlobalError::ExtensionDisabledGlobalError(
extension_(extension),
icon_(icon),
user_response_(IGNORED),
- menu_command_id_(GetMenuCommandID()) {
+ menu_command_id_(GetMenuCommandID()),
+ weak_factory_(this) {
if (icon_.IsEmpty()) {
icon_ = gfx::Image(
gfx::ImageSkiaOperations::CreateResizedImage(
@@ -209,10 +217,12 @@ ExtensionDisabledGlobalError::ExtensionDisabledGlobalError(
skia::ImageOperations::RESIZE_BEST,
gfx::Size(kIconSize, kIconSize)));
}
+ on_removed_callback_ = base::Bind(
+ &ExtensionDisabledGlobalError::HandleExtensionRemoved,
+ weak_factory_.GetWeakPtr());
+ service_->RegisterExtensionRemovedCallback(on_removed_callback_);
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
content::Source<Profile>(service->profile()));
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_REMOVED,
- content::Source<Profile>(service->profile()));
}
ExtensionDisabledGlobalError::~ExtensionDisabledGlobalError() {
@@ -319,18 +329,24 @@ void ExtensionDisabledGlobalError::Observe(
const content::NotificationSource& source,
const content::NotificationDetails& details) {
// The error is invalidated if the extension has been loaded or removed.
- DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED ||
- type == chrome::NOTIFICATION_EXTENSION_REMOVED);
+ DCHECK(type == chrome::NOTIFICATION_EXTENSION_LOADED);
const Extension* extension = content::Details<const Extension>(details).ptr();
if (extension != extension_)
return;
GlobalErrorServiceFactory::GetForProfile(service_->profile())->
RemoveGlobalError(this);
+ user_response_ = REENABLE;
+ delete this;
+}
- if (type == chrome::NOTIFICATION_EXTENSION_LOADED)
- user_response_ = REENABLE;
- else if (type == chrome::NOTIFICATION_EXTENSION_REMOVED)
- user_response_ = UNINSTALL;
+void ExtensionDisabledGlobalError::HandleExtensionRemoved(
+ const Extension* extension) {
+ if (extension != extension_)
+ return;
+ GlobalErrorServiceFactory::GetForProfile(service_->profile())->
+ RemoveGlobalError(this);
+ user_response_ = UNINSTALL;
+ service_->RemoveExtensionRemovedCallback(on_removed_callback_);
Yoyo Zhou 2013/08/22 16:50:26 Seems like this should be in the destructor instea
Cait (Slow) 2013/08/26 18:01:46 Done.
delete this;
}

Powered by Google App Engine
This is Rietveld 408576698