summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorsatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-01 06:56:44 +0000
committersatorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-01 06:56:44 +0000
commit1f82195650ce727134f859229813240e4446f4ad (patch)
tree0d625249558709f6dae2eb3fd5e1a70e84651305 /chrome
parent9cc688d8459548d09a9efdd9e1e626c40f3b5b34 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/chromeos/cros_settings_provider.cc23
-rw-r--r--chrome/browser/chromeos/cros_settings_provider.h6
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_proxy.cc4
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_proxy.h5
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_stats.cc3
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_stats.h4
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_user.cc3
-rw-r--r--chrome/browser/chromeos/cros_settings_provider_user.h4
-rw-r--r--chrome/browser/chromeos/dom_ui/system_settings_provider.cc2
-rw-r--r--chrome/browser/chromeos/dom_ui/system_settings_provider.h3
-rw-r--r--chrome/chrome_browser.gypi1
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',