Chromium Code Reviews| Index: chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api.cc b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| index 490ac1d946a10471738c6a0b9e1693b8ad5d9dff..65e2683096a69f2b180aa47165e4bdd099cc29e3 100644 |
| --- a/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| +++ b/chrome/browser/extensions/api/developer_private/developer_private_api.cc |
| @@ -141,6 +141,20 @@ std::string GetExtensionID(const RenderViewHost* render_view_host) { |
| return render_view_host->GetSiteInstance()->GetSiteURL().host(); |
| } |
| +void BroadcastItemStateChanged(content::BrowserContext* browser_context, |
| + developer::EventType event_type, |
| + const std::string& item_id) { |
| + developer::EventData event_data; |
| + event_data.event_type = event_type; |
| + event_data.item_id = item_id; |
| + |
| + scoped_ptr<base::ListValue> args(new base::ListValue()); |
| + args->Append(event_data.ToValue().release()); |
| + scoped_ptr<Event> event(new Event( |
| + developer_private::OnItemStateChanged::kEventName, args.Pass())); |
| + EventRouter::Get(browser_context)->BroadcastEvent(event.Pass()); |
| +} |
| + |
| } // namespace |
| namespace AllowFileAccess = api::developer_private::AllowFileAccess; |
| @@ -173,22 +187,18 @@ DeveloperPrivateAPI::DeveloperPrivateAPI(content::BrowserContext* context) |
| } |
| DeveloperPrivateEventRouter::DeveloperPrivateEventRouter(Profile* profile) |
| - : profile_(profile) { |
| - int types[] = {chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED, |
| - chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED, |
| - chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
| - chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
| + : extension_registry_observer_(this), profile_(profile) { |
| + registrar_.Add(this, |
| chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED, |
| - chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED}; |
| - |
| - CHECK(registrar_.IsEmpty()); |
| - for (size_t i = 0; i < arraysize(types); ++i) { |
| - registrar_.Add(this, |
| - types[i], |
| - content::Source<Profile>(profile_)); |
| - } |
| + content::Source<Profile>(profile_)); |
| + registrar_.Add(this, |
| + chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED, |
| + content::Source<Profile>(profile_)); |
| + // TODO(limasdf): Use scoped_observer instead. |
| ErrorConsole::Get(profile)->AddObserver(this); |
| + |
| + extension_registry_observer_.Add(ExtensionRegistry::Get(profile_)); |
| } |
| DeveloperPrivateEventRouter::~DeveloperPrivateEventRouter() { |
| @@ -209,56 +219,69 @@ void DeveloperPrivateEventRouter::Observe( |
| int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) { |
| - const char* event_name = NULL; |
| Profile* profile = content::Source<Profile>(source).ptr(); |
| CHECK(profile); |
| CHECK(profile_->IsSameProfile(profile)); |
| - developer::EventData event_data; |
| - const Extension* extension = NULL; |
| switch (type) { |
| - case chrome::NOTIFICATION_EXTENSION_INSTALLED_DEPRECATED: |
| - event_data.event_type = developer::EVENT_TYPE_INSTALLED; |
| - extension = |
| - content::Details<const InstalledExtensionInfo>(details)->extension; |
| - break; |
| - case chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED: |
| - event_data.event_type = developer::EVENT_TYPE_UNINSTALLED; |
| - extension = content::Details<const Extension>(details).ptr(); |
| - break; |
| - case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: |
| - event_data.event_type = developer::EVENT_TYPE_LOADED; |
| - extension = content::Details<const Extension>(details).ptr(); |
| - break; |
| - case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: |
| - event_data.event_type = developer::EVENT_TYPE_UNLOADED; |
| - extension = |
| - content::Details<const UnloadedExtensionInfo>(details)->extension; |
| - break; |
| - case chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED: |
| + case chrome::NOTIFICATION_EXTENSION_VIEW_UNREGISTERED: { |
| + developer::EventData event_data; |
|
Devlin
2014/06/02 18:41:02
nit: Move this outside switch() to line 225...
limasdf
2014/06/02 18:52:36
Done.
|
| event_data.event_type = developer::EVENT_TYPE_VIEW_UNREGISTERED; |
| event_data.item_id = GetExtensionID( |
| content::Details<const RenderViewHost>(details).ptr()); |
| + BroadcastItemStateChanged( |
|
Devlin
2014/06/02 18:41:02
... and then put this and the same call on line 24
limasdf
2014/06/02 18:52:36
Done.
|
| + profile, event_data.event_type, event_data.item_id); |
| break; |
| - case chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED: |
| + } |
| + case chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED: { |
| + developer::EventData event_data; |
| event_data.event_type = developer::EVENT_TYPE_VIEW_REGISTERED; |
| event_data.item_id = GetExtensionID( |
| content::Details<const RenderViewHost>(details).ptr()); |
| + BroadcastItemStateChanged( |
| + profile, event_data.event_type, event_data.item_id); |
| break; |
| + } |
| default: |
| NOTREACHED(); |
| return; |
| } |
| +} |
| - if (extension) |
| - event_data.item_id = extension->id(); |
| +void DeveloperPrivateEventRouter::OnExtensionLoaded( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension) { |
| + CHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context))); |
|
Devlin
2014/06/02 18:41:02
probably safe to make these DCHECKs. Nothing terr
|
| + BroadcastItemStateChanged( |
| + browser_context, developer::EVENT_TYPE_LOADED, extension->id()); |
| +} |
| - scoped_ptr<base::ListValue> args(new base::ListValue()); |
| - args->Append(event_data.ToValue().release()); |
| +void DeveloperPrivateEventRouter::OnExtensionUnloaded( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + UnloadedExtensionInfo::Reason reason) { |
| + CHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context))); |
| + BroadcastItemStateChanged( |
| + browser_context, developer::EVENT_TYPE_UNLOADED, extension->id()); |
| +} |
| - event_name = developer_private::OnItemStateChanged::kEventName; |
| - scoped_ptr<Event> event(new Event(event_name, args.Pass())); |
| - EventRouter::Get(profile)->BroadcastEvent(event.Pass()); |
| +void DeveloperPrivateEventRouter::OnExtensionWillBeInstalled( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension, |
| + bool is_update, |
| + bool from_ephemeral, |
| + const std::string& old_name) { |
| + CHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context))); |
| + BroadcastItemStateChanged( |
| + browser_context, developer::EVENT_TYPE_INSTALLED, extension->id()); |
| +} |
| + |
| +void DeveloperPrivateEventRouter::OnExtensionUninstalled( |
| + content::BrowserContext* browser_context, |
| + const Extension* extension) { |
| + CHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context))); |
| + BroadcastItemStateChanged( |
| + browser_context, developer::EVENT_TYPE_UNINSTALLED, extension->id()); |
| } |
| void DeveloperPrivateEventRouter::OnErrorAdded(const ExtensionError* error) { |
| @@ -268,15 +291,8 @@ void DeveloperPrivateEventRouter::OnErrorAdded(const ExtensionError* error) { |
| if (extension_ids_.find(error->extension_id()) != extension_ids_.end()) |
| return; |
| - developer::EventData event_data; |
| - event_data.event_type = developer::EVENT_TYPE_ERROR_ADDED; |
| - event_data.item_id = error->extension_id(); |
| - |
| - scoped_ptr<base::ListValue> args(new base::ListValue); |
| - args->Append(event_data.ToValue().release()); |
| - |
| - EventRouter::Get(profile_)->BroadcastEvent(scoped_ptr<Event>(new Event( |
| - developer_private::OnItemStateChanged::kEventName, args.Pass()))); |
| + BroadcastItemStateChanged( |
| + profile_, developer::EVENT_TYPE_ERROR_ADDED, error->extension_id()); |
| } |
| void DeveloperPrivateAPI::SetLastUnpackedDirectory(const base::FilePath& path) { |