Index: chrome/browser/content_settings/content_settings_notification_provider.cc |
diff --git a/chrome/browser/content_settings/content_settings_notification_provider.cc b/chrome/browser/content_settings/content_settings_notification_provider.cc |
deleted file mode 100644 |
index 98893be0aa19a7bfe73d61bf8a37e69dbc5b2d88..0000000000000000000000000000000000000000 |
--- a/chrome/browser/content_settings/content_settings_notification_provider.cc |
+++ /dev/null |
@@ -1,368 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
- |
-#include "chrome/browser/content_settings/content_settings_notification_provider.h" |
- |
-#include "base/string_util.h" |
-#include "chrome/browser/notifications/desktop_notification_service_factory.h" |
-#include "chrome/browser/notifications/notification.h" |
-#include "chrome/browser/notifications/notifications_prefs_cache.h" |
-#include "chrome/browser/notifications/notification_ui_manager.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/prefs/scoped_user_pref_update.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/content_settings_types.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/url_constants.h" |
-#include "content/common/notification_service.h" |
-#include "googleurl/src/gurl.h" |
- |
-namespace { |
- |
-const ContentSetting kDefaultSetting = CONTENT_SETTING_ASK; |
- |
-} // namespace |
- |
-namespace content_settings { |
- |
-// //////////////////////////////////////////////////////////////////////////// |
-// NotificationProvider |
-// |
- |
-// static |
-void NotificationProvider::RegisterUserPrefs(PrefService* user_prefs) { |
- if (!user_prefs->FindPreference(prefs::kDesktopNotificationAllowedOrigins)) |
- user_prefs->RegisterListPref(prefs::kDesktopNotificationAllowedOrigins, |
- PrefService::SYNCABLE_PREF); |
- if (!user_prefs->FindPreference(prefs::kDesktopNotificationDeniedOrigins)) |
- user_prefs->RegisterListPref(prefs::kDesktopNotificationDeniedOrigins, |
- PrefService::SYNCABLE_PREF); |
-} |
- |
-// TODO(markusheintz): Re-factoring in progress. Do not move or touch the |
-// following two static methods as you might cause trouble. Thanks! |
- |
-// static |
-ContentSettingsPattern NotificationProvider::ToContentSettingsPattern( |
- const GURL& origin) { |
- // Fix empty GURLs. |
- if (origin.spec().empty()) { |
- std::string pattern_spec(chrome::kFileScheme); |
- pattern_spec += chrome::kStandardSchemeSeparator; |
- return ContentSettingsPattern::FromString(pattern_spec); |
- } |
- return ContentSettingsPattern::FromURLNoWildcard(origin); |
-} |
- |
-// static |
-GURL NotificationProvider::ToGURL(const ContentSettingsPattern& pattern) { |
- std::string pattern_spec(pattern.ToString()); |
- if (!pattern.IsValid() || |
- (pattern_spec.find(std::string( |
- ContentSettingsPattern::kDomainWildcard)) != std::string::npos)) { |
- NOTREACHED(); |
- } |
- return GURL(pattern_spec); |
-} |
- |
-NotificationProvider::NotificationProvider( |
- Profile* profile) |
- : profile_(profile) { |
- prefs_registrar_.Init(profile_->GetPrefs()); |
- StartObserving(); |
-} |
- |
-NotificationProvider::~NotificationProvider() { |
- StopObserving(); |
-} |
- |
-ContentSetting NotificationProvider::GetContentSetting( |
- const GURL& requesting_url, |
- const GURL& embedding_url, |
- ContentSettingsType content_type, |
- const ResourceIdentifier& resource_identifier) const { |
- if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- return CONTENT_SETTING_DEFAULT; |
- |
- return GetContentSetting(requesting_url); |
-} |
- |
-void NotificationProvider::SetContentSetting( |
- const ContentSettingsPattern& requesting_url_pattern, |
- const ContentSettingsPattern& embedding_url_pattern, |
- ContentSettingsType content_type, |
- const ResourceIdentifier& resource_identifier, |
- ContentSetting content_setting) { |
- if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- return; |
- |
- GURL origin = ToGURL(requesting_url_pattern); |
- if (CONTENT_SETTING_ALLOW == content_setting) { |
- GrantPermission(origin); |
- } else if (CONTENT_SETTING_BLOCK == content_setting) { |
- DenyPermission(origin); |
- } else if (CONTENT_SETTING_DEFAULT == content_setting) { |
- ContentSetting current_setting = GetContentSetting(origin); |
- if (CONTENT_SETTING_ALLOW == current_setting) { |
- ResetAllowedOrigin(origin); |
- } else if (CONTENT_SETTING_BLOCK == current_setting) { |
- ResetBlockedOrigin(origin); |
- } else { |
- NOTREACHED(); |
- } |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
-void NotificationProvider::GetAllContentSettingsRules( |
- ContentSettingsType content_type, |
- const ResourceIdentifier& resource_identifier, |
- Rules* content_setting_rules) const { |
- if (content_type != CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- return; |
- |
- std::vector<GURL> allowed_origins = GetAllowedOrigins(); |
- std::vector<GURL> denied_origins = GetBlockedOrigins(); |
- |
- for (std::vector<GURL>::iterator url = allowed_origins.begin(); |
- url != allowed_origins.end(); |
- ++url) { |
- ContentSettingsPattern pattern = |
- ContentSettingsPattern::FromURLNoWildcard(*url); |
- content_setting_rules->push_back(Rule( |
- pattern, |
- pattern, |
- CONTENT_SETTING_ALLOW)); |
- } |
- for (std::vector<GURL>::iterator url = denied_origins.begin(); |
- url != denied_origins.end(); |
- ++url) { |
- ContentSettingsPattern pattern = |
- ContentSettingsPattern::FromURLNoWildcard(*url); |
- content_setting_rules->push_back(Rule( |
- pattern, |
- pattern, |
- CONTENT_SETTING_BLOCK)); |
- } |
-} |
- |
-void NotificationProvider::ClearAllContentSettingsRules( |
- ContentSettingsType content_type) { |
- if (content_type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- ResetAllOrigins(); |
-} |
- |
-void NotificationProvider::ShutdownOnUIThread() { |
-} |
- |
-void NotificationProvider::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_PROFILE_DESTROYED == type) { |
- StopObserving(); |
- } |
-} |
- |
-///////////////////////////////////////////////////////////////////// |
-// Private |
-// |
- |
-void NotificationProvider::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_PROFILE_DESTROYED, |
- Source<Profile>(profile_)); |
-} |
- |
-void NotificationProvider::StopObserving() { |
- if (!profile_->IsOffTheRecord()) { |
- prefs_registrar_.RemoveAll(); |
- } |
- notification_registrar_.RemoveAll(); |
-} |
- |
-void NotificationProvider::OnPrefsChanged(const std::string& pref_name) { |
- if (pref_name == prefs::kDesktopNotificationAllowedOrigins) { |
- NotifySettingsChange(); |
- } else if (pref_name == prefs::kDesktopNotificationDeniedOrigins) { |
- NotifySettingsChange(); |
- } |
-} |
- |
-void NotificationProvider::NotifySettingsChange() { |
- // TODO(markusheintz): Re-factoring work in progress: Replace the |
- // DESKTOP_NOTIFICATION_SETTINGS_CHANGED with a CONTENT_SETTINGS_CHANGED |
- // notification, and use the HostContentSettingsMap as source once this |
- // content settings provider in integrated in the HostContentSetttingsMap. |
- NotificationService::current()->Notify( |
- chrome::NOTIFICATION_DESKTOP_NOTIFICATION_SETTINGS_CHANGED, |
- Source<DesktopNotificationService>( |
- DesktopNotificationServiceFactory::GetForProfile(profile_)), |
- NotificationService::NoDetails()); |
-} |
- |
-std::vector<GURL> NotificationProvider::GetAllowedOrigins() const { |
- std::vector<GURL> allowed_origins; |
- PrefService* prefs = profile_->GetPrefs(); |
- const ListValue* allowed_sites = |
- prefs->GetList(prefs::kDesktopNotificationAllowedOrigins); |
- if (allowed_sites) { |
- // TODO(markusheintz): Remove dependency to PrefsCache |
- NotificationsPrefsCache::ListValueToGurlVector(*allowed_sites, |
- &allowed_origins); |
- } |
- return allowed_origins; |
-} |
- |
-std::vector<GURL> NotificationProvider::GetBlockedOrigins() const { |
- std::vector<GURL> denied_origins; |
- PrefService* prefs = profile_->GetPrefs(); |
- const ListValue* denied_sites = |
- prefs->GetList(prefs::kDesktopNotificationDeniedOrigins); |
- if (denied_sites) { |
- // TODO(markusheintz): Remove dependency to PrefsCache |
- NotificationsPrefsCache::ListValueToGurlVector(*denied_sites, |
- &denied_origins); |
- } |
- return denied_origins; |
-} |
- |
-void NotificationProvider::GrantPermission(const GURL& origin) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- PersistPermissionChange(origin, true); |
- NotifySettingsChange(); |
-} |
- |
-void NotificationProvider::DenyPermission(const GURL& origin) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- PersistPermissionChange(origin, false); |
- NotifySettingsChange(); |
-} |
- |
-void NotificationProvider::PersistPermissionChange( |
- const GURL& origin, bool is_allowed) { |
- // Don't persist changes when incognito. |
- if (profile_->IsOffTheRecord()) |
- return; |
- PrefService* prefs = profile_->GetPrefs(); |
- |
- // |Observe()| updates the whole permission set in the cache, but only a |
- // single origin has changed. Hence, callers of this method manually |
- // schedule a task to update the prefs cache, and the prefs observer is |
- // disabled while the update runs. |
- StopObserving(); |
- |
- bool allowed_changed = false; |
- bool denied_changed = false; |
- |
- { |
- ListPrefUpdate update_allowed_sites( |
- prefs, prefs::kDesktopNotificationAllowedOrigins); |
- ListPrefUpdate update_denied_sites( |
- prefs, prefs::kDesktopNotificationDeniedOrigins); |
- ListValue* allowed_sites = update_allowed_sites.Get(); |
- ListValue* denied_sites = update_denied_sites.Get(); |
- // |value| is passed to the preferences list, or deleted. |
- StringValue* value = new StringValue(origin.spec()); |
- |
- // Remove from one list and add to the other. |
- if (is_allowed) { |
- // Remove from the denied list. |
- if (denied_sites->Remove(*value, NULL)) |
- denied_changed = true; |
- |
- // Add to the allowed list. |
- if (allowed_sites->AppendIfNotPresent(value)) |
- allowed_changed = true; |
- } else { |
- // Remove from the allowed list. |
- if (allowed_sites->Remove(*value, NULL)) |
- allowed_changed = true; |
- |
- // Add to the denied list. |
- if (denied_sites->AppendIfNotPresent(value)) |
- denied_changed = true; |
- } |
- } |
- |
- // Persist the pref if anthing changed, but only send updates for the |
- // list that changed. |
- if (allowed_changed || denied_changed) |
- prefs->ScheduleSavePersistentPrefs(); |
- StartObserving(); |
-} |
- |
-ContentSetting NotificationProvider::GetContentSetting( |
- const GURL& origin) const { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- |
- if (profile_->IsOffTheRecord()) |
- return kDefaultSetting; |
- |
- std::vector<GURL> allowed_origins(GetAllowedOrigins()); |
- if (std::find(allowed_origins.begin(), allowed_origins.end(), origin) != |
- allowed_origins.end()) |
- return CONTENT_SETTING_ALLOW; |
- |
- std::vector<GURL> denied_origins(GetBlockedOrigins()); |
- if (std::find(denied_origins.begin(), denied_origins.end(), origin) != |
- denied_origins.end()) |
- return CONTENT_SETTING_BLOCK; |
- |
- return CONTENT_SETTING_DEFAULT; |
-} |
- |
-void NotificationProvider::ResetAllowedOrigin(const GURL& origin) { |
- if (profile_->IsOffTheRecord()) |
- return; |
- |
- // Since this isn't called often, let the normal observer behavior update the |
- // cache in this case. |
- PrefService* prefs = profile_->GetPrefs(); |
- { |
- ListPrefUpdate update(prefs, prefs::kDesktopNotificationAllowedOrigins); |
- ListValue* allowed_sites = update.Get(); |
- StringValue value(origin.spec()); |
- bool removed = allowed_sites->Remove(value, NULL); |
- DCHECK_NE(false, removed) << origin << " was not allowed"; |
- } |
- prefs->ScheduleSavePersistentPrefs(); |
-} |
- |
-void NotificationProvider::ResetBlockedOrigin(const GURL& origin) { |
- if (profile_->IsOffTheRecord()) |
- return; |
- |
- // Since this isn't called often, let the normal observer behavior update the |
- // cache in this case. |
- PrefService* prefs = profile_->GetPrefs(); |
- { |
- ListPrefUpdate update(prefs, prefs::kDesktopNotificationDeniedOrigins); |
- ListValue* denied_sites = update.Get(); |
- StringValue value(origin.spec()); |
- bool removed = denied_sites->Remove(value, NULL); |
- DCHECK_NE(false, removed) << origin << " was not blocked"; |
- } |
- prefs->ScheduleSavePersistentPrefs(); |
-} |
- |
-void NotificationProvider::ResetAllOrigins() { |
- PrefService* prefs = profile_->GetPrefs(); |
- prefs->ClearPref(prefs::kDesktopNotificationAllowedOrigins); |
- prefs->ClearPref(prefs::kDesktopNotificationDeniedOrigins); |
-} |
- |
-} // namespace content_settings |