Index: chrome/browser/permissions/permission_manager.cc |
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc |
index c1a719a45241bd34562014df15d8fad512357426..3dfdc0ab73a4226f91e7bea146034c3d738e9662 100644 |
--- a/chrome/browser/permissions/permission_manager.cc |
+++ b/chrome/browser/permissions/permission_manager.cc |
@@ -12,6 +12,7 @@ |
#include "chrome/browser/permissions/permission_context.h" |
#include "chrome/browser/permissions/permission_context_base.h" |
#include "chrome/browser/permissions/permission_request_id.h" |
+#include "chrome/browser/permissions/permission_uma_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/tab_contents/tab_util.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
@@ -198,6 +199,7 @@ struct PermissionManager::Subscription { |
PermissionManager::PermissionManager(Profile* profile) |
: profile_(profile), |
weak_ptr_factory_(this) { |
+ HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); |
} |
PermissionManager::~PermissionManager() { |
@@ -351,8 +353,6 @@ int PermissionManager::SubscribePermissionStatusChange( |
const GURL& requesting_origin, |
const GURL& embedding_origin, |
const base::Callback<void(PermissionStatus)>& callback) { |
- if (subscriptions_.IsEmpty()) |
- HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this); |
Subscription* subscription = new Subscription(); |
subscription->permission = permission; |
@@ -375,10 +375,6 @@ int PermissionManager::SubscribePermissionStatusChange( |
void PermissionManager::UnsubscribePermissionStatusChange(int subscription_id) { |
// Whether |subscription_id| is known will be checked by the Remove() call. |
subscriptions_.Remove(subscription_id); |
- |
- if (subscriptions_.IsEmpty()) |
- HostContentSettingsMapFactory::GetForProfile(profile_) |
- ->RemoveObserver(this); |
} |
bool PermissionManager::IsPermissionBubbleManagerMissing( |
@@ -392,9 +388,14 @@ void PermissionManager::OnContentSettingChanged( |
const ContentSettingsPattern& primary_pattern, |
const ContentSettingsPattern& secondary_pattern, |
ContentSettingsType content_type, |
+ ContentSetting previous_value, |
std::string resource_identifier) { |
std::list<base::Closure> callbacks; |
+ PermissionUmaUtil::OnContentsettingChanged(profile_, primary_pattern, |
+ secondary_pattern, content_type, |
+ previous_value); |
+ |
for (SubscriptionsMap::iterator iter(&subscriptions_); |
!iter.IsAtEnd(); iter.Advance()) { |
Subscription* subscription = iter.GetCurrentValue(); |