| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/notifications/notifier_state_tracker.h" | 5 #include "chrome/browser/notifications/notifier_state_tracker.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "build/build_config.h" | 13 #include "build/build_config.h" |
| 14 #include "chrome/browser/permissions/permission_manager.h" | 14 #include "chrome/browser/permissions/permission_manager.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/common/pref_names.h" | 16 #include "chrome/common/pref_names.h" |
| 17 #include "components/pref_registry/pref_registry_syncable.h" | 17 #include "components/pref_registry/pref_registry_syncable.h" |
| 18 #include "components/prefs/scoped_user_pref_update.h" | 18 #include "components/prefs/scoped_user_pref_update.h" |
| 19 #include "content/public/browser/permission_type.h" | 19 #include "content/public/browser/permission_type.h" |
| 20 #include "extensions/features/features.h" |
| 20 #include "ui/message_center/notifier_settings.h" | 21 #include "ui/message_center/notifier_settings.h" |
| 21 | 22 |
| 22 #if defined(ENABLE_EXTENSIONS) | 23 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 23 #include "chrome/common/extensions/api/notifications.h" | 24 #include "chrome/common/extensions/api/notifications.h" |
| 24 #include "content/public/browser/browser_thread.h" | 25 #include "content/public/browser/browser_thread.h" |
| 25 #include "extensions/browser/event_router.h" | 26 #include "extensions/browser/event_router.h" |
| 26 #include "extensions/browser/extension_event_histogram_value.h" | 27 #include "extensions/browser/extension_event_histogram_value.h" |
| 27 #include "extensions/browser/extension_system.h" | 28 #include "extensions/browser/extension_system.h" |
| 28 #include "extensions/browser/extension_util.h" | 29 #include "extensions/browser/extension_util.h" |
| 29 #include "extensions/browser/info_map.h" | 30 #include "extensions/browser/info_map.h" |
| 30 #endif | 31 #endif |
| 31 | 32 |
| 32 using message_center::NotifierId; | 33 using message_center::NotifierId; |
| 33 | 34 |
| 34 // static | 35 // static |
| 35 void NotifierStateTracker::RegisterProfilePrefs( | 36 void NotifierStateTracker::RegisterProfilePrefs( |
| 36 user_prefs::PrefRegistrySyncable* registry) { | 37 user_prefs::PrefRegistrySyncable* registry) { |
| 37 registry->RegisterListPref(prefs::kMessageCenterDisabledExtensionIds); | 38 registry->RegisterListPref(prefs::kMessageCenterDisabledExtensionIds); |
| 38 registry->RegisterListPref(prefs::kMessageCenterDisabledSystemComponentIds); | 39 registry->RegisterListPref(prefs::kMessageCenterDisabledSystemComponentIds); |
| 39 } | 40 } |
| 40 | 41 |
| 41 NotifierStateTracker::NotifierStateTracker(Profile* profile) | 42 NotifierStateTracker::NotifierStateTracker(Profile* profile) |
| 42 : profile_(profile) | 43 : profile_(profile) |
| 43 #if defined(ENABLE_EXTENSIONS) | 44 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 44 , | 45 , |
| 45 extension_registry_observer_(this) | 46 extension_registry_observer_(this) |
| 46 #endif | 47 #endif |
| 47 { | 48 { |
| 48 OnStringListPrefChanged( | 49 OnStringListPrefChanged( |
| 49 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_); | 50 prefs::kMessageCenterDisabledExtensionIds, &disabled_extension_ids_); |
| 50 OnStringListPrefChanged( | 51 OnStringListPrefChanged( |
| 51 prefs::kMessageCenterDisabledSystemComponentIds, | 52 prefs::kMessageCenterDisabledSystemComponentIds, |
| 52 &disabled_system_component_ids_); | 53 &disabled_system_component_ids_); |
| 53 | 54 |
| 54 disabled_extension_id_pref_.Init( | 55 disabled_extension_id_pref_.Init( |
| 55 prefs::kMessageCenterDisabledExtensionIds, | 56 prefs::kMessageCenterDisabledExtensionIds, |
| 56 profile_->GetPrefs(), | 57 profile_->GetPrefs(), |
| 57 base::Bind( | 58 base::Bind( |
| 58 &NotifierStateTracker::OnStringListPrefChanged, | 59 &NotifierStateTracker::OnStringListPrefChanged, |
| 59 base::Unretained(this), | 60 base::Unretained(this), |
| 60 base::Unretained(prefs::kMessageCenterDisabledExtensionIds), | 61 base::Unretained(prefs::kMessageCenterDisabledExtensionIds), |
| 61 base::Unretained(&disabled_extension_ids_))); | 62 base::Unretained(&disabled_extension_ids_))); |
| 62 | 63 |
| 63 disabled_system_component_id_pref_.Init( | 64 disabled_system_component_id_pref_.Init( |
| 64 prefs::kMessageCenterDisabledSystemComponentIds, | 65 prefs::kMessageCenterDisabledSystemComponentIds, |
| 65 profile_->GetPrefs(), | 66 profile_->GetPrefs(), |
| 66 base::Bind( | 67 base::Bind( |
| 67 &NotifierStateTracker::OnStringListPrefChanged, | 68 &NotifierStateTracker::OnStringListPrefChanged, |
| 68 base::Unretained(this), | 69 base::Unretained(this), |
| 69 base::Unretained(prefs::kMessageCenterDisabledSystemComponentIds), | 70 base::Unretained(prefs::kMessageCenterDisabledSystemComponentIds), |
| 70 base::Unretained(&disabled_system_component_ids_))); | 71 base::Unretained(&disabled_system_component_ids_))); |
| 71 | 72 |
| 72 #if defined(ENABLE_EXTENSIONS) | 73 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 73 extension_registry_observer_.Add( | 74 extension_registry_observer_.Add( |
| 74 extensions::ExtensionRegistry::Get(profile_)); | 75 extensions::ExtensionRegistry::Get(profile_)); |
| 75 #endif | 76 #endif |
| 76 } | 77 } |
| 77 | 78 |
| 78 NotifierStateTracker::~NotifierStateTracker() { | 79 NotifierStateTracker::~NotifierStateTracker() { |
| 79 } | 80 } |
| 80 | 81 |
| 81 bool NotifierStateTracker::IsNotifierEnabled( | 82 bool NotifierStateTracker::IsNotifierEnabled( |
| 82 const NotifierId& notifier_id) const { | 83 const NotifierId& notifier_id) const { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 DCHECK_NE(NotifierId::WEB_PAGE, notifier_id.type); | 120 DCHECK_NE(NotifierId::WEB_PAGE, notifier_id.type); |
| 120 | 121 |
| 121 bool add_new_item = false; | 122 bool add_new_item = false; |
| 122 const char* pref_name = NULL; | 123 const char* pref_name = NULL; |
| 123 std::unique_ptr<base::StringValue> id; | 124 std::unique_ptr<base::StringValue> id; |
| 124 switch (notifier_id.type) { | 125 switch (notifier_id.type) { |
| 125 case NotifierId::APPLICATION: | 126 case NotifierId::APPLICATION: |
| 126 pref_name = prefs::kMessageCenterDisabledExtensionIds; | 127 pref_name = prefs::kMessageCenterDisabledExtensionIds; |
| 127 add_new_item = !enabled; | 128 add_new_item = !enabled; |
| 128 id.reset(new base::StringValue(notifier_id.id)); | 129 id.reset(new base::StringValue(notifier_id.id)); |
| 129 #if defined(ENABLE_EXTENSIONS) | 130 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 130 FirePermissionLevelChangedEvent(notifier_id, enabled); | 131 FirePermissionLevelChangedEvent(notifier_id, enabled); |
| 131 #endif | 132 #endif |
| 132 break; | 133 break; |
| 133 case NotifierId::SYSTEM_COMPONENT: | 134 case NotifierId::SYSTEM_COMPONENT: |
| 134 #if defined(OS_CHROMEOS) | 135 #if defined(OS_CHROMEOS) |
| 135 pref_name = prefs::kMessageCenterDisabledSystemComponentIds; | 136 pref_name = prefs::kMessageCenterDisabledSystemComponentIds; |
| 136 add_new_item = !enabled; | 137 add_new_item = !enabled; |
| 137 id.reset(new base::StringValue(notifier_id.id)); | 138 id.reset(new base::StringValue(notifier_id.id)); |
| 138 #else | 139 #else |
| 139 return; | 140 return; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 162 const base::ListValue* pref_list = pref_service->GetList(pref_name); | 163 const base::ListValue* pref_list = pref_service->GetList(pref_name); |
| 163 for (size_t i = 0; i < pref_list->GetSize(); ++i) { | 164 for (size_t i = 0; i < pref_list->GetSize(); ++i) { |
| 164 std::string element; | 165 std::string element; |
| 165 if (pref_list->GetString(i, &element) && !element.empty()) | 166 if (pref_list->GetString(i, &element) && !element.empty()) |
| 166 ids_field->insert(element); | 167 ids_field->insert(element); |
| 167 else | 168 else |
| 168 LOG(WARNING) << i << "-th element is not a string for " << pref_name; | 169 LOG(WARNING) << i << "-th element is not a string for " << pref_name; |
| 169 } | 170 } |
| 170 } | 171 } |
| 171 | 172 |
| 172 #if defined(ENABLE_EXTENSIONS) | 173 #if BUILDFLAG(ENABLE_EXTENSIONS) |
| 173 void NotifierStateTracker::OnExtensionUninstalled( | 174 void NotifierStateTracker::OnExtensionUninstalled( |
| 174 content::BrowserContext* browser_context, | 175 content::BrowserContext* browser_context, |
| 175 const extensions::Extension* extension, | 176 const extensions::Extension* extension, |
| 176 extensions::UninstallReason reason) { | 177 extensions::UninstallReason reason) { |
| 177 NotifierId notifier_id(NotifierId::APPLICATION, extension->id()); | 178 NotifierId notifier_id(NotifierId::APPLICATION, extension->id()); |
| 178 if (IsNotifierEnabled(notifier_id)) | 179 if (IsNotifierEnabled(notifier_id)) |
| 179 return; | 180 return; |
| 180 | 181 |
| 181 SetNotifierEnabled(notifier_id, true); | 182 SetNotifierEnabled(notifier_id, true); |
| 182 } | 183 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 199 // Tell the IO thread that this extension's permission for notifications | 200 // Tell the IO thread that this extension's permission for notifications |
| 200 // has changed. | 201 // has changed. |
| 201 extensions::InfoMap* extension_info_map = | 202 extensions::InfoMap* extension_info_map = |
| 202 extensions::ExtensionSystem::Get(profile_)->info_map(); | 203 extensions::ExtensionSystem::Get(profile_)->info_map(); |
| 203 content::BrowserThread::PostTask( | 204 content::BrowserThread::PostTask( |
| 204 content::BrowserThread::IO, FROM_HERE, | 205 content::BrowserThread::IO, FROM_HERE, |
| 205 base::Bind(&extensions::InfoMap::SetNotificationsDisabled, | 206 base::Bind(&extensions::InfoMap::SetNotificationsDisabled, |
| 206 extension_info_map, notifier_id.id, !enabled)); | 207 extension_info_map, notifier_id.id, !enabled)); |
| 207 } | 208 } |
| 208 #endif | 209 #endif |
| OLD | NEW |