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

Side by Side Diff: chrome/browser/extensions/api/settings_private/settings_private_delegate.cc

Issue 1163593005: Update chrome.settingsPrivate to support CrOS-only settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix issues preventing compilation on non-CrOS builds. Created 5 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/settings_private/settings_private_delega te.h" 5 #include "chrome/browser/extensions/api/settings_private/settings_private_delega te.h"
6 6
7 #include "base/json/json_reader.h"
8 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
9 #include "base/values.h" 8 #include "base/values.h"
10 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/chromeos/settings/cros_settings.h"
11 #include "chrome/browser/extensions/api/settings_private/prefs_util.h" 11 #include "chrome/browser/extensions/api/settings_private/prefs_util.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
14 #include "components/url_fixer/url_fixer.h"
15 #include "extensions/browser/extension_registry.h" 14 #include "extensions/browser/extension_registry.h"
16 #include "extensions/common/extension.h" 15 #include "extensions/common/extension.h"
17 #include "url/gurl.h" 16 #include "url/gurl.h"
18 17
19 namespace extensions { 18 namespace extensions {
20 19
21 namespace settings_private = api::settings_private; 20 namespace settings_private = api::settings_private;
22 21
23 SettingsPrivateDelegate::SettingsPrivateDelegate(Profile* profile) 22 SettingsPrivateDelegate::SettingsPrivateDelegate(Profile* profile)
24 : profile_(profile) { 23 : profile_(profile) {
24 prefs_util_.reset(new PrefsUtil(profile));
25 } 25 }
26 26
27 SettingsPrivateDelegate::~SettingsPrivateDelegate() { 27 SettingsPrivateDelegate::~SettingsPrivateDelegate() {
28 } 28 }
29 29
30 scoped_ptr<base::Value> SettingsPrivateDelegate::GetPref( 30 scoped_ptr<base::Value> SettingsPrivateDelegate::GetPref(
31 const std::string& name) { 31 const std::string& name) {
32 return prefs_util::GetPref(profile_, name)->ToValue(); 32 return prefs_util_->GetPref(name)->ToValue();
33 } 33 }
34 34
35 scoped_ptr<base::Value> SettingsPrivateDelegate::GetAllPrefs() { 35 scoped_ptr<base::Value> SettingsPrivateDelegate::GetAllPrefs() {
36 scoped_ptr<base::ListValue> prefs(new base::ListValue()); 36 scoped_ptr<base::ListValue> prefs(new base::ListValue());
37 37
38 const TypedPrefMap& keys = prefs_util::GetWhitelistedKeys(); 38 const TypedPrefMap& keys = prefs_util_->GetWhitelistedKeys();
39 for (const auto& it : keys) { 39 for (const auto& it : keys) {
40 prefs->Append(GetPref(it.first).release()); 40 prefs->Append(GetPref(it.first).release());
41 } 41 }
42 42
43 return prefs.Pass(); 43 return prefs.Pass();
44 } 44 }
45 45
46 bool SettingsPrivateDelegate::SetPref(const std::string& pref_name, 46 bool SettingsPrivateDelegate::SetPref(const std::string& pref_name,
47 const base::Value* value) { 47 const base::Value* value) {
48 PrefService* pref_service = 48 return prefs_util_->SetPref(pref_name, value);
49 prefs_util::FindServiceForPref(profile_, pref_name);
50
51 if (!prefs_util::IsPrefUserModifiable(profile_, pref_name))
52 return false;
53
54 const PrefService::Preference* pref =
55 pref_service->FindPreference(pref_name.c_str());
56 if (!pref)
57 return false;
58
59 DCHECK_EQ(pref->GetType(), value->GetType());
60
61 scoped_ptr<base::Value> temp_value;
62
63 switch (pref->GetType()) {
64 case base::Value::TYPE_INTEGER: {
65 // In JS all numbers are doubles.
66 double double_value;
67 if (!value->GetAsDouble(&double_value))
68 return false;
69
70 int int_value = static_cast<int>(double_value);
71 temp_value.reset(new base::FundamentalValue(int_value));
72 value = temp_value.get();
73 break;
74 }
75 case base::Value::TYPE_STRING: {
76 std::string original;
77 if (!value->GetAsString(&original))
78 return false;
79
80 if (prefs_util::IsPrefTypeURL(pref_name)) {
81 GURL fixed = url_fixer::FixupURL(original, std::string());
82 temp_value.reset(new base::StringValue(fixed.spec()));
83 value = temp_value.get();
84 }
85 break;
86 }
87 case base::Value::TYPE_LIST: {
88 // In case we have a List pref we got a JSON string.
89 std::string json_string;
90 if (!value->GetAsString(&json_string))
91 return false;
92
93 temp_value.reset(base::JSONReader::DeprecatedRead(json_string));
94 value = temp_value.get();
95 if (!value->IsType(base::Value::TYPE_LIST))
96 return false;
97
98 break;
99 }
100 case base::Value::TYPE_BOOLEAN:
101 case base::Value::TYPE_DOUBLE:
102 break;
103 default:
104 return false;
105 }
106
107 // TODO(orenb): Process setting metrics here (like "ProcessUserMetric" in
108 // CoreOptionsHandler).
109 pref_service->Set(pref_name.c_str(), *value);
110 return true;
111 } 49 }
112 50
113 } // namespace extensions 51 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698