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

Unified Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 306053013: Use ExtensionRegistry in developer private api (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address review comments Created 6 years, 7 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
« no previous file with comments | « chrome/browser/extensions/api/developer_private/developer_private_api.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..5fc874720b9860bc8c1413569786a99b8112d29e 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,66 @@ 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: {
event_data.event_type = developer::EVENT_TYPE_VIEW_UNREGISTERED;
event_data.item_id = GetExtensionID(
content::Details<const RenderViewHost>(details).ptr());
break;
- case chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED:
+ }
+ case chrome::NOTIFICATION_EXTENSION_VIEW_REGISTERED: {
event_data.event_type = developer::EVENT_TYPE_VIEW_REGISTERED;
event_data.item_id = GetExtensionID(
content::Details<const RenderViewHost>(details).ptr());
break;
+ }
default:
NOTREACHED();
return;
}
- if (extension)
- event_data.item_id = extension->id();
+ BroadcastItemStateChanged(profile, event_data.event_type, event_data.item_id);
+}
- scoped_ptr<base::ListValue> args(new base::ListValue());
- args->Append(event_data.ToValue().release());
+void DeveloperPrivateEventRouter::OnExtensionLoaded(
+ content::BrowserContext* browser_context,
+ const Extension* extension) {
+ DCHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context)));
+ BroadcastItemStateChanged(
+ browser_context, developer::EVENT_TYPE_LOADED, extension->id());
+}
+
+void DeveloperPrivateEventRouter::OnExtensionUnloaded(
+ content::BrowserContext* browser_context,
+ const Extension* extension,
+ UnloadedExtensionInfo::Reason reason) {
+ DCHECK(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) {
+ DCHECK(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) {
+ DCHECK(profile_->IsSameProfile(Profile::FromBrowserContext(browser_context)));
+ BroadcastItemStateChanged(
+ browser_context, developer::EVENT_TYPE_UNINSTALLED, extension->id());
}
void DeveloperPrivateEventRouter::OnErrorAdded(const ExtensionError* error) {
@@ -268,15 +288,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) {
« no previous file with comments | « chrome/browser/extensions/api/developer_private/developer_private_api.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698