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

Unified Diff: chrome/browser/notifications/desktop_notification_service.cc

Issue 7655019: Migrate Obsolete NotificationsSettings and remove content_settings::NotificationsProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove include of deleted notifications_prefs_cache.h Created 9 years, 4 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
Index: chrome/browser/notifications/desktop_notification_service.cc
diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc
index 53dce9d5fd6d98c8c7b14f4654567c16eb186a0b..bd46686e5511dca4bd41ad284523918a89032984 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -7,6 +7,8 @@
#include "base/metrics/histogram.h"
#include "base/threading/thread.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/content_settings/content_settings_details.h"
+#include "chrome/browser/content_settings/content_settings_pattern.h"
#include "chrome/browser/content_settings/content_settings_provider.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -14,7 +16,6 @@
#include "chrome/browser/notifications/notification.h"
#include "chrome/browser/notifications/notification_object_proxy.h"
#include "chrome/browser/notifications/notification_ui_manager.h"
-#include "chrome/browser/notifications/notifications_prefs_cache.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/browser/profiles/profile.h"
@@ -45,45 +46,6 @@ using WebKit::WebTextDirection;
const ContentSetting kDefaultSetting = CONTENT_SETTING_ASK;
-namespace {
-
-typedef content_settings::ProviderInterface::Rules Rules;
-
-void GetOriginsWithSettingFromContentSettingsRules(
- const Rules& content_setting_rules,
- ContentSetting setting,
- std::vector<GURL>* origins) {
- origins->clear();
-
- for (Rules::const_iterator rule = content_setting_rules.begin();
- rule != content_setting_rules.end();
- ++rule) {
- if (setting == rule->content_setting) {
- std::string url_str = rule->primary_pattern.ToString();
- if (!rule->primary_pattern.IsValid()) {
- // TODO(markusheintz): This will be removed in one of the next
- // refactoring steps as this entire function will disapear.
- LOG(DFATAL) << "Ignoring invalid content settings pattern: "
- << url_str;
- } else if (url_str.find(ContentSettingsPattern::kDomainWildcard) == 0) {
- // TODO(markusheintz): This must be changed once the UI code is
- // refactored and content_settings patterns are fully supported for
- // notifications settings.
- LOG(DFATAL) << "Ignoring unsupported content settings pattern: "
- << url_str << ". Content settings patterns other than "
- << "hostnames (e.g. wildcard patterns) are not supported "
- << "for notification content settings yet.";
- } else {
- origins->push_back(
- content_settings::NotificationProvider::ToGURL(
- rule->primary_pattern));
- }
- }
- }
-}
-
-} // namespace
-
// NotificationPermissionInfoBarDelegate --------------------------------------
// The delegate for the infobar shown when an origin requests notification
@@ -252,8 +214,6 @@ DesktopNotificationService::DesktopNotificationService(Profile* profile,
NotificationUIManager* ui_manager)
: profile_(profile),
ui_manager_(ui_manager) {
- prefs_registrar_.Init(profile_->GetPrefs());
- InitPrefs();
StartObserving();
}
@@ -261,114 +221,45 @@ DesktopNotificationService::~DesktopNotificationService() {
StopObserving();
}
-void DesktopNotificationService::RegisterUserPrefs(PrefService* user_prefs) {
- content_settings::NotificationProvider::RegisterUserPrefs(user_prefs);
-}
-
-// Initialize the cache with the allowed and denied origins, or
-// create the preferences if they don't exist yet.
-void DesktopNotificationService::InitPrefs() {
- provider_.reset(new content_settings::NotificationProvider(profile_));
-
- std::vector<GURL> allowed_origins;
- std::vector<GURL> denied_origins;
- ContentSetting default_content_setting = CONTENT_SETTING_DEFAULT;
-
- if (!profile_->IsOffTheRecord()) {
- default_content_setting =
- profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
- allowed_origins = GetAllowedOrigins();
- denied_origins = GetBlockedOrigins();
- }
-
- prefs_cache_ = new NotificationsPrefsCache();
- prefs_cache_->SetCacheDefaultContentSetting(default_content_setting);
- prefs_cache_->SetCacheAllowedOrigins(allowed_origins);
- prefs_cache_->SetCacheDeniedOrigins(denied_origins);
- prefs_cache_->set_is_initialized(true);
-}
-
void DesktopNotificationService::StartObserving() {
if (!profile_->IsOffTheRecord()) {
- prefs_registrar_.Add(prefs::kDesktopNotificationAllowedOrigins, this);
- prefs_registrar_.Add(prefs::kDesktopNotificationDeniedOrigins, this);
notification_registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
NotificationService::AllSources());
- notification_registrar_.Add(
- this,
- chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED,
- Source<HostContentSettingsMap>(profile_->GetHostContentSettingsMap()));
}
notification_registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
Source<Profile>(profile_));
}
void DesktopNotificationService::StopObserving() {
- if (!profile_->IsOffTheRecord()) {
- prefs_registrar_.RemoveAll();
- }
notification_registrar_.RemoveAll();
}
void DesktopNotificationService::GrantPermission(const GURL& origin) {
- ContentSettingsPattern pattern =
- content_settings::NotificationProvider::ToContentSettingsPattern(origin);
- provider_->SetContentSetting(
- pattern,
- pattern,
+ ContentSettingsPattern primary_pattern =
+ ContentSettingsPattern::FromURLNoWildcard(origin);
+ profile_->GetHostContentSettingsMap()->SetContentSetting(
+ primary_pattern,
+ ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
NO_RESOURCE_IDENTIFIER,
CONTENT_SETTING_ALLOW);
-
- // Schedule a cache update on the IO thread.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- prefs_cache_.get(),
- &NotificationsPrefsCache::CacheAllowedOrigin,
- origin));
}
void DesktopNotificationService::DenyPermission(const GURL& origin) {
- // Update content settings
- ContentSettingsPattern pattern =
- content_settings::NotificationProvider::ToContentSettingsPattern(origin);
- provider_->SetContentSetting(
- pattern,
- pattern,
+ ContentSettingsPattern primary_pattern =
+ ContentSettingsPattern::FromURLNoWildcard(origin);
+ profile_->GetHostContentSettingsMap()->SetContentSetting(
+ primary_pattern,
+ ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
NO_RESOURCE_IDENTIFIER,
CONTENT_SETTING_BLOCK);
-
- // Schedule a cache update on the IO thread.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- prefs_cache_.get(),
- &NotificationsPrefsCache::CacheDeniedOrigin,
- origin));
}
void DesktopNotificationService::Observe(int type,
const NotificationSource& source,
const NotificationDetails& details) {
- if (chrome::NOTIFICATION_PREF_CHANGED == type) {
- const std::string& name = *Details<std::string>(details).ptr();
- OnPrefsChanged(name);
- } else if (chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED == type) {
- // TODO(markusheintz): Check if content settings type default was changed;
- const ContentSetting default_content_setting =
- profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
- // Schedule a cache update on the IO thread.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- prefs_cache_.get(),
- &NotificationsPrefsCache::SetCacheDefaultContentSetting,
- default_content_setting));
- } else if (chrome::NOTIFICATION_EXTENSION_UNLOADED == type) {
+ if (chrome::NOTIFICATION_EXTENSION_UNLOADED == type) {
// Remove all notifications currently shown or queued by the extension
// which was unloaded.
const Extension* extension =
@@ -380,30 +271,6 @@ void DesktopNotificationService::Observe(int type,
}
}
-void DesktopNotificationService::OnPrefsChanged(const std::string& pref_name) {
- if (pref_name == prefs::kDesktopNotificationAllowedOrigins) {
- // Schedule a cache update on the IO thread.
- std::vector<GURL> allowed_origins(GetAllowedOrigins());
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- prefs_cache_.get(),
- &NotificationsPrefsCache::SetCacheAllowedOrigins,
- allowed_origins));
- } else if (pref_name == prefs::kDesktopNotificationDeniedOrigins) {
- // Schedule a cache update on the IO thread.
- std::vector<GURL> denied_origins(GetBlockedOrigins());
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- NewRunnableMethod(
- prefs_cache_.get(),
- &NotificationsPrefsCache::SetCacheDeniedOrigins,
- denied_origins));
- } else {
- NOTREACHED();
- }
-}
-
ContentSetting DesktopNotificationService::GetDefaultContentSetting() {
return profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
@@ -425,70 +292,36 @@ void DesktopNotificationService::ResetToDefaultContentSetting() {
CONTENT_SETTINGS_TYPE_NOTIFICATIONS, CONTENT_SETTING_DEFAULT);
}
-std::vector<GURL> DesktopNotificationService::GetAllowedOrigins() {
- content_settings::ProviderInterface::Rules content_setting_rules;
- provider_->GetAllContentSettingsRules(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- NO_RESOURCE_IDENTIFIER,
- &content_setting_rules);
- std::vector<GURL> allowed_origins;
-
- GetOriginsWithSettingFromContentSettingsRules(
- content_setting_rules, CONTENT_SETTING_ALLOW, &allowed_origins);
-
- return allowed_origins;
-}
-
-std::vector<GURL> DesktopNotificationService::GetBlockedOrigins() {
- content_settings::ProviderInterface::Rules content_settings_rules;
- provider_->GetAllContentSettingsRules(
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
- NO_RESOURCE_IDENTIFIER,
- &content_settings_rules);
- std::vector<GURL> denied_origins;
-
- GetOriginsWithSettingFromContentSettingsRules(
- content_settings_rules, CONTENT_SETTING_BLOCK, &denied_origins);
-
- return denied_origins;
-}
-
-void DesktopNotificationService::ResetAllowedOrigin(const GURL& origin) {
- ContentSettingsPattern pattern =
- ContentSettingsPattern::FromURLNoWildcard(origin);
- provider_->SetContentSetting(
- pattern,
- pattern,
+void DesktopNotificationService::GetNotificationsSettings(
+ HostContentSettingsMap::SettingsForOneType* settings) {
+ profile_->GetHostContentSettingsMap()->GetSettingsForOneType(
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
NO_RESOURCE_IDENTIFIER,
- CONTENT_SETTING_DEFAULT);
+ settings);
}
-void DesktopNotificationService::ResetBlockedOrigin(const GURL& origin) {
- ContentSettingsPattern pattern =
- ContentSettingsPattern::FromURLNoWildcard(origin);
- provider_->SetContentSetting(
- pattern,
+void DesktopNotificationService::ClearSetting(
+ const ContentSettingsPattern& pattern) {
+ profile_->GetHostContentSettingsMap()->SetContentSetting(
pattern,
+ ContentSettingsPattern::Wildcard(),
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
NO_RESOURCE_IDENTIFIER,
CONTENT_SETTING_DEFAULT);
}
void DesktopNotificationService::ResetAllOrigins() {
- provider_->ClearAllContentSettingsRules(CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
+ profile_->GetHostContentSettingsMap()->ClearSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
}
ContentSetting DesktopNotificationService::GetContentSetting(
const GURL& origin) {
- ContentSetting provided_setting = provider_->GetContentSetting(
+ return profile_->GetHostContentSettingsMap()->GetContentSetting(
origin,
origin,
CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
NO_RESOURCE_IDENTIFIER);
- if (CONTENT_SETTING_DEFAULT == provided_setting)
- return GetDefaultContentSetting();
- return provided_setting;
}
void DesktopNotificationService::RequestPermission(
@@ -539,7 +372,6 @@ bool DesktopNotificationService::CancelDesktopNotification(
return ui_manager_->CancelById(proxy->id());
}
-
bool DesktopNotificationService::ShowDesktopNotification(
const DesktopNotificationHostMsg_Show_Params& params,
int process_id, int route_id, DesktopNotificationSource source) {
@@ -589,5 +421,20 @@ void DesktopNotificationService::NotifySettingsChange() {
WebKit::WebNotificationPresenter::Permission
DesktopNotificationService::HasPermission(const GURL& origin) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- return prefs_cache()->HasPermission(origin.GetOrigin());
+ HostContentSettingsMap* host_content_settings_map =
+ profile_->GetHostContentSettingsMap();
+ ContentSetting setting = host_content_settings_map->GetContentSetting(
+ origin,
+ origin,
+ CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+ NO_RESOURCE_IDENTIFIER);
+
+ if (setting == CONTENT_SETTING_ALLOW)
+ return WebKit::WebNotificationPresenter::PermissionAllowed;
+ if (setting == CONTENT_SETTING_BLOCK)
+ return WebKit::WebNotificationPresenter::PermissionDenied;
+ if (setting == CONTENT_SETTING_ASK)
+ return WebKit::WebNotificationPresenter::PermissionNotAllowed;
+ NOTREACHED() << "Invalid notifications settings value: " << setting;
+ return WebKit::WebNotificationPresenter::PermissionNotAllowed;
}

Powered by Google App Engine
This is Rietveld 408576698