diff options
author | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-01 06:56:44 +0000 |
---|---|---|
committer | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-01 06:56:44 +0000 |
commit | 1f82195650ce727134f859229813240e4446f4ad (patch) | |
tree | 0d625249558709f6dae2eb3fd5e1a70e84651305 /chrome | |
parent | 9cc688d8459548d09a9efdd9e1e626c40f3b5b34 (diff) | |
download | chromium_src-1f82195650ce727134f859229813240e4446f4ad.zip chromium_src-1f82195650ce727134f859229813240e4446f4ad.tar.gz chromium_src-1f82195650ce727134f859229813240e4446f4ad.tar.bz2 |
Prohibit the guest from making any changes to the cros settings.
We should not allow the guest to change global settings.
TEST=confirmed that the stats/crash reporting setting worked as before
BUG=chromium-os:8239
Review URL: http://codereview.chromium.org/4197007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64579 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
11 files changed, 48 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/cros_settings_provider.cc b/chrome/browser/chromeos/cros_settings_provider.cc new file mode 100644 index 0000000..1bdd78b --- /dev/null +++ b/chrome/browser/chromeos/cros_settings_provider.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2010 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/chromeos/cros_settings_provider.h" + +#include "base/command_line.h" +#include "base/logging.h" +#include "chrome/common/chrome_switches.h" + +namespace chromeos { + +void CrosSettingsProvider::Set(const std::string& path, Value* value) { + // We don't allow changing any of the cros settings in the guest mode. + // It should not reach here from UI in the guest mode, but just in case. + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession)) { + LOG(ERROR) << "Ignoring the guest request to change: " << path; + return; + } + DoSet(path, value); +} + +}; // namespace chromeos diff --git a/chrome/browser/chromeos/cros_settings_provider.h b/chrome/browser/chromeos/cros_settings_provider.h index c069ce1..36e856e 100644 --- a/chrome/browser/chromeos/cros_settings_provider.h +++ b/chrome/browser/chromeos/cros_settings_provider.h @@ -17,7 +17,7 @@ class CrosSettingsProvider { // Sets |in_value| to given |path| in cros settings. // Note that this takes ownership of |in_value|. - virtual void Set(const std::string& path, Value* in_value) = 0; + void Set(const std::string& path, Value* in_value); // Gets settings value of given |path| to |out_value|. // Note that |out_value| is still owned by this class. @@ -25,6 +25,10 @@ class CrosSettingsProvider { // Gets the namespace prefix provided by this provider virtual bool HandlesSetting(const std::string& path) = 0; + + private: + // Does the real job for Set(). + virtual void DoSet(const std::string& path, Value* in_value) = 0; }; } // namespace chromeos diff --git a/chrome/browser/chromeos/cros_settings_provider_proxy.cc b/chrome/browser/chromeos/cros_settings_provider_proxy.cc index 5fe5916..5e88cb4 100644 --- a/chrome/browser/chromeos/cros_settings_provider_proxy.cc +++ b/chrome/browser/chromeos/cros_settings_provider_proxy.cc @@ -15,8 +15,8 @@ namespace chromeos { CrosSettingsProviderProxy::CrosSettingsProviderProxy() { } -void CrosSettingsProviderProxy::Set(const std::string& path, - Value* in_value) { +void CrosSettingsProviderProxy::DoSet(const std::string& path, + Value* in_value) { if (!in_value) { return; } diff --git a/chrome/browser/chromeos/cros_settings_provider_proxy.h b/chrome/browser/chromeos/cros_settings_provider_proxy.h index 26675ec..afb24ad 100644 --- a/chrome/browser/chromeos/cros_settings_provider_proxy.h +++ b/chrome/browser/chromeos/cros_settings_provider_proxy.h @@ -16,11 +16,14 @@ namespace chromeos { class CrosSettingsProviderProxy : public CrosSettingsProvider { public: CrosSettingsProviderProxy(); - virtual void Set(const std::string& path, Value* in_value); + // CrosSettingsProvider implementation. virtual bool Get(const std::string& path, Value** out_value) const; virtual bool HandlesSetting(const std::string& path); private: + // CrosSettingsProvider implementation. + virtual void DoSet(const std::string& path, Value* value); + chromeos::ProxyConfigServiceImpl* GetConfigService() const; void AppendPortIfValid( diff --git a/chrome/browser/chromeos/cros_settings_provider_stats.cc b/chrome/browser/chromeos/cros_settings_provider_stats.cc index 6d23d31..6a78f61 100644 --- a/chrome/browser/chromeos/cros_settings_provider_stats.cc +++ b/chrome/browser/chromeos/cros_settings_provider_stats.cc @@ -17,7 +17,8 @@ namespace chromeos { -void MetricsCrosSettingsProvider::Set(const std::string& path, Value* value) { +void MetricsCrosSettingsProvider::DoSet(const std::string& path, + Value* value) { DCHECK(path == kStatsReportingPref); bool enabled = false; CHECK(value->GetAsBoolean(&enabled)); diff --git a/chrome/browser/chromeos/cros_settings_provider_stats.h b/chrome/browser/chromeos/cros_settings_provider_stats.h index 1b89702..ff30f25 100644 --- a/chrome/browser/chromeos/cros_settings_provider_stats.h +++ b/chrome/browser/chromeos/cros_settings_provider_stats.h @@ -20,7 +20,6 @@ class MetricsCrosSettingsProvider : public CrosSettingsProvider { MetricsCrosSettingsProvider() {} // CrosSettingsProvider implementation. - virtual void Set(const std::string& path, Value* value); virtual bool Get(const std::string& path, Value** value) const; virtual bool HandlesSetting(const std::string& path); @@ -31,6 +30,9 @@ class MetricsCrosSettingsProvider : public CrosSettingsProvider { static bool GetMetricsStatus(); private: + // CrosSettingsProvider implementation. + virtual void DoSet(const std::string& path, Value* value); + DISALLOW_COPY_AND_ASSIGN(MetricsCrosSettingsProvider); }; diff --git a/chrome/browser/chromeos/cros_settings_provider_user.cc b/chrome/browser/chromeos/cros_settings_provider_user.cc index 33b11f2..7b9c0c3 100644 --- a/chrome/browser/chromeos/cros_settings_provider_user.cc +++ b/chrome/browser/chromeos/cros_settings_provider_user.cc @@ -150,7 +150,8 @@ bool UserCrosSettingsProvider::IsEmailInCachedWhitelist( return false; } -void UserCrosSettingsProvider::Set(const std::string& path, Value* in_value) { +void UserCrosSettingsProvider::DoSet(const std::string& path, + Value* in_value) { if (!UserManager::Get()->current_user_is_owner()) { LOG(WARNING) << "Changing settings from non-owner, setting=" << path; diff --git a/chrome/browser/chromeos/cros_settings_provider_user.h b/chrome/browser/chromeos/cros_settings_provider_user.h index c9ac4d9..3fafa41 100644 --- a/chrome/browser/chromeos/cros_settings_provider_user.h +++ b/chrome/browser/chromeos/cros_settings_provider_user.h @@ -40,7 +40,6 @@ class UserCrosSettingsProvider : public CrosSettingsProvider, static bool IsEmailInCachedWhitelist(const std::string& email); // CrosSettingsProvider implementation. - virtual void Set(const std::string& path, Value* in_value); virtual bool Get(const std::string& path, Value** out_value) const; virtual bool HandlesSetting(const std::string& path); @@ -59,6 +58,9 @@ class UserCrosSettingsProvider : public CrosSettingsProvider, static void UpdateCachedOwner(const std::string& email); private: + // CrosSettingsProvider implementation. + virtual void DoSet(const std::string& path, Value* value); + void StartFetchingBoolSetting(const std::string& name); void StartFetchingStringSetting(const std::string& name); void StartFetchingSetting(const std::string& name); diff --git a/chrome/browser/chromeos/dom_ui/system_settings_provider.cc b/chrome/browser/chromeos/dom_ui/system_settings_provider.cc index cd17c0d..a376cf0 100644 --- a/chrome/browser/chromeos/dom_ui/system_settings_provider.cc +++ b/chrome/browser/chromeos/dom_ui/system_settings_provider.cc @@ -67,7 +67,7 @@ SystemSettingsProvider::~SystemSettingsProvider() { STLDeleteElements(&timezones_); } -void SystemSettingsProvider::Set(const std::string& path, Value* in_value) { +void SystemSettingsProvider::DoSet(const std::string& path, Value* in_value) { if (path == kSystemTimezone) { string16 value; if (!in_value || !in_value->IsType(Value::TYPE_STRING) || diff --git a/chrome/browser/chromeos/dom_ui/system_settings_provider.h b/chrome/browser/chromeos/dom_ui/system_settings_provider.h index df97c46..816ea2c 100644 --- a/chrome/browser/chromeos/dom_ui/system_settings_provider.h +++ b/chrome/browser/chromeos/dom_ui/system_settings_provider.h @@ -24,7 +24,6 @@ class SystemSettingsProvider : public CrosSettingsProvider, virtual ~SystemSettingsProvider(); // CrosSettingsProvider overrides. - virtual void Set(const std::string& path, Value* in_value); virtual bool Get(const std::string& path, Value** out_value) const; virtual bool HandlesSetting(const std::string& path); @@ -35,6 +34,8 @@ class SystemSettingsProvider : public CrosSettingsProvider, ListValue* GetTimezoneList(); private: + // CrosSettingsProvider overrides. + virtual void DoSet(const std::string& path, Value* in_value); // Gets timezone name. static string16 GetTimezoneName(const icu::TimeZone& timezone); diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index eded665..c17f7dc 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -410,6 +410,7 @@ 'browser/chromeos/cros_settings_names.cc', 'browser/chromeos/cros_settings_names.h', 'browser/chromeos/cros_settings_provider.h', + 'browser/chromeos/cros_settings_provider.cc', 'browser/chromeos/cros_settings_provider_proxy.cc', 'browser/chromeos/cros_settings_provider_proxy.h', 'browser/chromeos/cros_settings_provider_stats.cc', |