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

Unified Diff: chrome/browser/geolocation/geolocation_content_settings_map.cc

Issue 7484072: Migrate geolocation settings to host content settings map. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: " 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/geolocation/geolocation_content_settings_map.cc
diff --git a/chrome/browser/geolocation/geolocation_content_settings_map.cc b/chrome/browser/geolocation/geolocation_content_settings_map.cc
deleted file mode 100644
index 56204212603ed2af5b5b20b674eb8b83dd07ca17..0000000000000000000000000000000000000000
--- a/chrome/browser/geolocation/geolocation_content_settings_map.cc
+++ /dev/null
@@ -1,228 +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.
-
-// Implementation of the geolocation content settings map. Styled on
-// HostContentSettingsMap however unlike that class, this one does not hold
-// an additional in-memory copy of the settings as it does not need to support
-// thread safe synchronous access to the settings; all geolocation permissions
-// are read and written in the UI thread. (If in future this is no longer the
-// case, refer to http://codereview.chromium.org/1525018 for a previous version
-// with caching. Note that as we must observe the prefs store for settings
-// changes, e.g. coming from the sync engine, the simplest design would be to
-// always write-through changes straight to the prefs store, and rely on the
-// notification observer to subsequently update any cached copy).
-
-#include "chrome/browser/geolocation/geolocation_content_settings_map.h"
-
-#include <string>
-
-#include "base/string_piece.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/host_content_settings_map.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/pref_names.h"
-#include "chrome/common/url_constants.h"
-#include "content/browser/browser_thread.h"
-#include "content/common/notification_service.h"
-#include "content/common/notification_source.h"
-#include "net/base/dns_util.h"
-#include "net/base/static_cookie_policy.h"
-
-GeolocationContentSettingsMap::GeolocationContentSettingsMap(Profile* profile)
- : profile_(profile) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- prefs_registrar_.Init(profile_->GetPrefs());
- prefs_registrar_.Add(prefs::kGeolocationContentSettings, this);
- notification_registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
- Source<Profile>(profile_));
- notification_registrar_.Add(
- this,
- chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED,
- Source<HostContentSettingsMap>(profile_->GetHostContentSettingsMap()));
-}
-
-// static
-void GeolocationContentSettingsMap::RegisterUserPrefs(PrefService* prefs) {
- prefs->RegisterDictionaryPref(prefs::kGeolocationContentSettings,
- PrefService::SYNCABLE_PREF);
-}
-
-ContentSetting GeolocationContentSettingsMap::GetContentSetting(
- const GURL& requesting_url,
- const GURL& embedding_url) const {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(requesting_url.is_valid() && embedding_url.is_valid());
- GURL requesting_origin(requesting_url.GetOrigin());
- GURL embedding_origin(embedding_url.GetOrigin());
- DCHECK(requesting_origin.is_valid() && embedding_origin.is_valid());
- // If the profile is destroyed (and set to NULL) return CONTENT_SETTING_BLOCK.
- if (!profile_)
- return CONTENT_SETTING_BLOCK;
- const DictionaryValue* all_settings_dictionary =
- profile_->GetPrefs()->GetDictionary(prefs::kGeolocationContentSettings);
- // Careful: The returned value could be NULL if the pref has never been set.
- if (all_settings_dictionary != NULL) {
- DictionaryValue* requesting_origin_settings;
- if (all_settings_dictionary->GetDictionaryWithoutPathExpansion(
- requesting_origin.spec(), &requesting_origin_settings)) {
- int setting;
- if (requesting_origin_settings->GetIntegerWithoutPathExpansion(
- embedding_origin.spec(), &setting))
- return IntToContentSetting(setting);
- // Check for any-embedder setting
- if (requesting_origin != embedding_origin &&
- requesting_origin_settings->GetIntegerWithoutPathExpansion(
- "", &setting))
- return IntToContentSetting(setting);
- }
- }
- return profile_->GetHostContentSettingsMap()->GetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_GEOLOCATION);
-}
-
-GeolocationContentSettingsMap::AllOriginsSettings
- GeolocationContentSettingsMap::GetAllOriginsSettings() const {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- AllOriginsSettings content_settings;
- const DictionaryValue* all_settings_dictionary =
- profile_->GetPrefs()->GetDictionary(prefs::kGeolocationContentSettings);
- // Careful: The returned value could be NULL if the pref has never been set.
- if (all_settings_dictionary != NULL) {
- for (DictionaryValue::key_iterator i(all_settings_dictionary->begin_keys());
- i != all_settings_dictionary->end_keys(); ++i) {
- const std::string& origin(*i);
- GURL origin_as_url(origin);
- if (!origin_as_url.is_valid())
- continue;
- DictionaryValue* requesting_origin_settings_dictionary = NULL;
- bool found = all_settings_dictionary->GetDictionaryWithoutPathExpansion(
- origin, &requesting_origin_settings_dictionary);
- DCHECK(found);
- if (!requesting_origin_settings_dictionary)
- continue;
- GetOneOriginSettingsFromDictionary(
- requesting_origin_settings_dictionary,
- &content_settings[origin_as_url]);
- }
- }
- return content_settings;
-}
-
-void GeolocationContentSettingsMap::SetContentSetting(
- const GURL& requesting_url,
- const GURL& embedding_url,
- ContentSetting setting) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(requesting_url.is_valid());
- DCHECK(embedding_url.is_valid() || embedding_url.is_empty());
- GURL requesting_origin(requesting_url.GetOrigin());
- GURL embedding_origin(embedding_url.GetOrigin());
- DCHECK(requesting_origin.is_valid());
- DCHECK(embedding_origin.is_valid() || embedding_url.is_empty());
- if (!profile_)
- return;
- PrefService* prefs = profile_->GetPrefs();
-
- DictionaryPrefUpdate update(prefs, prefs::kGeolocationContentSettings);
- DictionaryValue* all_settings_dictionary = update.Get();
- DictionaryValue* requesting_origin_settings_dictionary = NULL;
- all_settings_dictionary->GetDictionaryWithoutPathExpansion(
- requesting_origin.spec(), &requesting_origin_settings_dictionary);
- if (setting == CONTENT_SETTING_DEFAULT) {
- if (requesting_origin_settings_dictionary) {
- requesting_origin_settings_dictionary->RemoveWithoutPathExpansion(
- embedding_origin.spec(), NULL);
- if (requesting_origin_settings_dictionary->empty())
- all_settings_dictionary->RemoveWithoutPathExpansion(
- requesting_origin.spec(), NULL);
- }
- } else {
- if (!requesting_origin_settings_dictionary) {
- requesting_origin_settings_dictionary = new DictionaryValue;
- all_settings_dictionary->SetWithoutPathExpansion(
- requesting_origin.spec(), requesting_origin_settings_dictionary);
- }
- DCHECK(requesting_origin_settings_dictionary);
- requesting_origin_settings_dictionary->SetWithoutPathExpansion(
- embedding_origin.spec(), Value::CreateIntegerValue(setting));
- }
-}
-
-void GeolocationContentSettingsMap::ResetToDefault() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!profile_)
- return;
- PrefService* prefs = profile_->GetPrefs();
- prefs->ClearPref(prefs::kGeolocationContentSettings);
- profile_->GetHostContentSettingsMap()->SetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_DEFAULT);
-}
-
-void GeolocationContentSettingsMap::NotifyObservers(
- const ContentSettingsDetails& details) {
- NotificationService::current()->Notify(
- chrome::NOTIFICATION_GEOLOCATION_SETTINGS_CHANGED,
- Source<GeolocationContentSettingsMap>(this),
- Details<const ContentSettingsDetails>(&details));
-}
-
-void GeolocationContentSettingsMap::Observe(
- int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type == chrome::NOTIFICATION_PREF_CHANGED) {
- } else if (type == chrome::NOTIFICATION_CONTENT_SETTINGS_CHANGED) {
- const ContentSettingsType& content_type =
- Details<ContentSettingsDetails>(details).ptr()->type();
- if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
- ContentSettingsDetails details(ContentSettingsPattern(),
- ContentSettingsPattern(),
- CONTENT_SETTINGS_TYPE_DEFAULT,
- std::string());
- NotifyObservers(details);
- }
- } else if (chrome::NOTIFICATION_PROFILE_DESTROYED == type) {
- UnregisterObservers();
- } else {
- NOTREACHED();
- }
-}
-
-void GeolocationContentSettingsMap::UnregisterObservers() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!profile_)
- return;
- prefs_registrar_.RemoveAll();
- notification_registrar_.Remove(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
- Source<Profile>(profile_));
- profile_ = NULL;
-}
-
-GeolocationContentSettingsMap::~GeolocationContentSettingsMap() {
- UnregisterObservers();
-}
-
-// static
-void GeolocationContentSettingsMap::GetOneOriginSettingsFromDictionary(
- const DictionaryValue* dictionary,
- OneOriginSettings* one_origin_settings) {
- for (DictionaryValue::key_iterator i(dictionary->begin_keys());
- i != dictionary->end_keys(); ++i) {
- const std::string& target(*i);
- int setting = 0;
- bool found = dictionary->GetIntegerWithoutPathExpansion(target, &setting);
- DCHECK(found);
- GURL target_url(target);
- // An empty URL has a special meaning (wildcard), so only accept invalid
- // URLs if the original version was empty (avoids treating corrupted prefs
- // as the wildcard entry; see http://crbug.com/39685)
- if (target_url.is_valid() || target.empty())
- (*one_origin_settings)[target_url] = IntToContentSetting(setting);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698