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

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

Issue 2842043: Add a default content setting to the notifications service. (Closed)
Patch Set: '' Created 10 years, 6 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 683af4eb4d17d1a37b17dfd5fac57147d33b27e5..103c0f16a3d85634f8bcec6c4bc1f8e1e8ba976c 100644
--- a/chrome/browser/notifications/desktop_notification_service.cc
+++ b/chrome/browser/notifications/desktop_notification_service.cc
@@ -37,6 +37,8 @@
using WebKit::WebNotificationPresenter;
+const ContentSetting kDefaultSetting = CONTENT_SETTING_ASK;
dhollowa 2010/07/03 02:12:01 Please wrap in anonymous namespace.
Nico 2010/07/03 02:18:29 Not necessary, consts implicitly have internal lin
+
// static
string16 DesktopNotificationService::CreateDataUrl(
const GURL& icon_url, const string16& title, const string16& body) {
@@ -203,6 +205,11 @@ DesktopNotificationService::~DesktopNotificationService() {
}
void DesktopNotificationService::RegisterUserPrefs(PrefService* user_prefs) {
+ if (!user_prefs->FindPreference(
+ prefs::kDesktopNotificationDefaultContentSetting)) {
+ user_prefs->RegisterIntegerPref(
+ prefs::kDesktopNotificationDefaultContentSetting, kDefaultSetting);
+ }
if (!user_prefs->FindPreference(prefs::kDesktopNotificationAllowedOrigins))
user_prefs->RegisterListPref(prefs::kDesktopNotificationAllowedOrigins);
if (!user_prefs->FindPreference(prefs::kDesktopNotificationDeniedOrigins))
@@ -215,8 +222,12 @@ void DesktopNotificationService::InitPrefs() {
PrefService* prefs = profile_->GetPrefs();
std::vector<GURL> allowed_origins;
std::vector<GURL> denied_origins;
+ ContentSetting default_content_setting = CONTENT_SETTING_DEFAULT;
if (!profile_->IsOffTheRecord()) {
+ default_content_setting = IntToContentSetting(
+ prefs->GetInteger(prefs::kDesktopNotificationDefaultContentSetting));
+
const ListValue* allowed_sites =
prefs->GetList(prefs::kDesktopNotificationAllowedOrigins);
if (allowed_sites)
@@ -231,6 +242,7 @@ void DesktopNotificationService::InitPrefs() {
}
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);
@@ -239,6 +251,8 @@ void DesktopNotificationService::InitPrefs() {
void DesktopNotificationService::StartObserving() {
if (!profile_->IsOffTheRecord()) {
PrefService* prefs = profile_->GetPrefs();
+ prefs->AddPrefObserver(prefs::kDesktopNotificationDefaultContentSetting,
+ this);
prefs->AddPrefObserver(prefs::kDesktopNotificationAllowedOrigins, this);
prefs->AddPrefObserver(prefs::kDesktopNotificationDeniedOrigins, this);
}
@@ -247,6 +261,8 @@ void DesktopNotificationService::StartObserving() {
void DesktopNotificationService::StopObserving() {
if (!profile_->IsOffTheRecord()) {
PrefService* prefs = profile_->GetPrefs();
+ prefs->RemovePrefObserver(prefs::kDesktopNotificationDefaultContentSetting,
+ this);
prefs->RemovePrefObserver(prefs::kDesktopNotificationAllowedOrigins, this);
prefs->RemovePrefObserver(prefs::kDesktopNotificationDeniedOrigins, this);
}
@@ -313,6 +329,18 @@ void DesktopNotificationService::Observe(NotificationType type,
prefs_cache_.get(),
&NotificationsPrefsCache::SetCacheDeniedOrigins,
denied_origins));
+ } else if (0 == name->compare(
+ prefs::kDesktopNotificationDefaultContentSetting)) {
+ const ContentSetting default_content_setting = IntToContentSetting(
+ prefs->GetInteger(prefs::kDesktopNotificationDefaultContentSetting));
+
+ // Schedule a cache update on the IO thread.
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(
+ prefs_cache_.get(),
+ &NotificationsPrefsCache::SetCacheDefaultContentSetting,
+ default_content_setting));
}
}
@@ -377,6 +405,24 @@ void DesktopNotificationService::PersistPermissionChange(
StartObserving();
}
+ContentSetting DesktopNotificationService::GetDefaultContentSetting() {
+ PrefService* prefs = profile_->GetPrefs();
+ ContentSetting setting = IntToContentSetting(
+ prefs->GetInteger(prefs::kDesktopNotificationDefaultContentSetting));
+ if (setting == CONTENT_SETTING_DEFAULT)
+ setting = kDefaultSetting;
+ return setting;
+}
+
+void DesktopNotificationService::SetDefaultContentSetting(
+ ContentSetting setting) {
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
+ profile_->GetPrefs()->SetInteger(
+ prefs::kDesktopNotificationDefaultContentSetting,
+ setting == CONTENT_SETTING_DEFAULT ? kDefaultSetting : setting);
dhollowa 2010/07/03 02:12:01 There's an asymmetry here with respect to |GetDefa
Nico 2010/07/03 02:18:29 Yes, CONTENT_SETTING_DEFAULT should never be store
Nico 2010/07/03 02:33:18 (This mirrors SetDefaultContentSetting() and ReadD
+ // The cache is updated through the notification observer.
+}
+
void DesktopNotificationService::RequestPermission(
const GURL& origin, int process_id, int route_id, int callback_context,
TabContents* tab) {

Powered by Google App Engine
This is Rietveld 408576698