Commit 76086fd3 authored by limasdf@gmail.com's avatar limasdf@gmail.com

remove NOTIFICATION_EXTENSION_UNLOADED from system_indicator API

R=dewittj@chromium.org
BUG=354046

Review URL: https://codereview.chromium.org/250733008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266820 0039d316-1c4b-4281-b951-d872f2087c98
parent 2e286a40
......@@ -17,6 +17,7 @@
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_source.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h"
#include "ui/gfx/image/image.h"
......@@ -121,9 +122,11 @@ ExtensionIndicatorIcon::ExtensionIndicatorIcon(const Extension* extension,
SystemIndicatorManager::SystemIndicatorManager(Profile* profile,
StatusTray* status_tray)
: profile_(profile), status_tray_(status_tray) {
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
content::Source<Profile>(profile_->GetOriginalProfile()));
: profile_(profile),
status_tray_(status_tray),
extension_registry_observer_(this) {
extension_registry_observer_.Add(ExtensionRegistry::Get(profile_));
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_SYSTEM_INDICATOR_UPDATED,
content::Source<Profile>(profile_->GetOriginalProfile()));
}
......@@ -136,25 +139,21 @@ void SystemIndicatorManager::Shutdown() {
DCHECK(thread_checker_.CalledOnValidThread());
}
void SystemIndicatorManager::OnExtensionUnloaded(
content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionInfo::Reason reason) {
RemoveIndicator(extension->id());
}
void SystemIndicatorManager::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK_EQ(type, chrome::NOTIFICATION_EXTENSION_SYSTEM_INDICATOR_UPDATED);
switch (type) {
case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED:
RemoveIndicator(
content::Details<UnloadedExtensionInfo>(details)->extension->id());
break;
case chrome::NOTIFICATION_EXTENSION_SYSTEM_INDICATOR_UPDATED:
OnSystemIndicatorChanged(
content::Details<ExtensionAction>(details).ptr());
break;
default:
NOTREACHED();
break;
}
OnSystemIndicatorChanged(content::Details<ExtensionAction>(details).ptr());
}
void SystemIndicatorManager::OnSystemIndicatorChanged(
......
......@@ -9,12 +9,13 @@
#include <string>
#include "base/memory/linked_ptr.h"
#include "base/scoped_observer.h"
#include "base/threading/thread_checker.h"
#include "chrome/browser/extensions/extension_action_icon_factory.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry_observer.h"
class ExtensionAction;
class Profile;
......@@ -23,13 +24,14 @@ class StatusTray;
FORWARD_DECLARE_TEST(SystemIndicatorApiTest, SystemIndicator);
namespace extensions {
class ExtensionIndicatorIcon;
class ExtensionRegistry;
// Keeps track of all the systemIndicator icons created for a given Profile
// that are currently visible in the UI. Use SystemIndicatorManagerFactory to
// create a SystemIndicatorManager object.
class SystemIndicatorManager : public content::NotificationObserver,
public ExtensionRegistryObserver,
public KeyedService {
public:
SystemIndicatorManager(Profile* profile, StatusTray* status_tray);
......@@ -38,13 +40,19 @@ class SystemIndicatorManager : public content::NotificationObserver,
// KeyedService implementation.
virtual void Shutdown() OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(::SystemIndicatorApiTest, SystemIndicator);
// content::NotificationDelegate implementation.
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
private:
FRIEND_TEST_ALL_PREFIXES(::SystemIndicatorApiTest, SystemIndicator);
// ExtensionRegistryObserver implementation.
virtual void OnExtensionUnloaded(
content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionInfo::Reason reason) OVERRIDE;
// Determines whether the indicator should be hidden or shown and calls the
// appropriate function.
......@@ -72,6 +80,10 @@ class SystemIndicatorManager : public content::NotificationObserver,
content::NotificationRegistrar registrar_;
base::ThreadChecker thread_checker_;
// Listen to extension unloaded notifications.
ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
extension_registry_observer_;
DISALLOW_COPY_AND_ASSIGN(SystemIndicatorManager);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment