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

Unified Diff: chrome/browser/content_settings/content_settings_notification_provider.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/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

Powered by Google App Engine
This is Rietveld 408576698