Update broken references to image assets
[chromium-blink-merge.git] / chrome / browser / chromeos / extensions / info_private_api.cc
blobdbe59d18acac66738987fe905a0411dc026b5147
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/extensions/info_private_api.h"
7 #include "base/basictypes.h"
8 #include "base/prefs/pref_service.h"
9 #include "base/sys_info.h"
10 #include "base/values.h"
11 #include "chrome/browser/app_mode/app_mode_utils.h"
12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/chromeos/login/startup_utils.h"
14 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
15 #include "chrome/browser/chromeos/settings/cros_settings.h"
16 #include "chrome/browser/chromeos/system/timezone_util.h"
17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/common/pref_names.h"
19 #include "chromeos/network/device_state.h"
20 #include "chromeos/network/network_handler.h"
21 #include "chromeos/network/network_state_handler.h"
22 #include "chromeos/settings/cros_settings_names.h"
23 #include "chromeos/system/statistics_provider.h"
24 #include "components/metrics/metrics_service.h"
25 #include "components/user_manager/user_manager.h"
26 #include "extensions/common/error_utils.h"
27 #include "third_party/cros_system_api/dbus/service_constants.h"
29 using chromeos::NetworkHandler;
31 namespace extensions {
33 namespace {
35 // Key which corresponds to the HWID setting.
36 const char kPropertyHWID[] = "hwid";
38 // Key which corresponds to the customization ID setting.
39 const char kPropertyCustomizationID[] = "customizationId";
41 // Key which corresponds to the home provider property.
42 const char kPropertyHomeProvider[] = "homeProvider";
44 // Key which corresponds to the initial_locale property.
45 const char kPropertyInitialLocale[] = "initialLocale";
47 // Key which corresponds to the board property in JS.
48 const char kPropertyBoard[] = "board";
50 // Key which corresponds to the isOwner property in JS.
51 const char kPropertyOwner[] = "isOwner";
53 // Key which corresponds to the clientId property in JS.
54 const char kPropertyClientId[] = "clientId";
56 // Key which corresponds to the timezone property in JS.
57 const char kPropertyTimezone[] = "timezone";
59 // Key which corresponds to the timezone property in JS.
60 const char kPropertySupportedTimezones[] = "supportedTimezones";
62 // Key which corresponds to the large cursor A11Y property in JS.
63 const char kPropertyLargeCursorEnabled[] = "a11yLargeCursorEnabled";
65 // Key which corresponds to the sticky keys A11Y property in JS.
66 const char kPropertyStickyKeysEnabled[] = "a11yStickyKeysEnabled";
68 // Key which corresponds to the spoken feedback A11Y property in JS.
69 const char kPropertySpokenFeedbackEnabled[] = "a11ySpokenFeedbackEnabled";
71 // Key which corresponds to the high contrast mode A11Y property in JS.
72 const char kPropertyHighContrastEnabled[] = "a11yHighContrastEnabled";
74 // Key which corresponds to the screen magnifier A11Y property in JS.
75 const char kPropertyScreenMagnifierEnabled[] = "a11yScreenMagnifierEnabled";
77 // Key which corresponds to the auto click A11Y property in JS.
78 const char kPropertyAutoclickEnabled[] = "a11yAutoClickEnabled";
80 // Key which corresponds to the auto click A11Y property in JS.
81 const char kPropertyVirtualKeyboardEnabled[] = "a11yVirtualKeyboardEnabled";
83 // Key which corresponds to the send-function-keys property in JS.
84 const char kPropertySendFunctionsKeys[] = "sendFunctionKeys";
86 // Property not found error message.
87 const char kPropertyNotFound[] = "Property '*' does not exist.";
89 const struct {
90 const char* api_name;
91 const char* preference_name;
92 } kPreferencesMap[] = {
93 {kPropertyLargeCursorEnabled, prefs::kAccessibilityLargeCursorEnabled},
94 {kPropertyStickyKeysEnabled, prefs::kAccessibilityStickyKeysEnabled},
95 {kPropertySpokenFeedbackEnabled,
96 prefs::kAccessibilitySpokenFeedbackEnabled},
97 {kPropertyHighContrastEnabled, prefs::kAccessibilityHighContrastEnabled},
98 {kPropertyScreenMagnifierEnabled,
99 prefs::kAccessibilityScreenMagnifierEnabled},
100 {kPropertyAutoclickEnabled, prefs::kAccessibilityAutoclickEnabled},
101 {kPropertyVirtualKeyboardEnabled,
102 prefs::kAccessibilityVirtualKeyboardEnabled},
103 {kPropertySendFunctionsKeys, prefs::kLanguageSendFunctionKeys}};
105 const char* GetBoolPrefNameForApiProperty(const char* api_name) {
106 for (size_t i = 0;
107 i < (sizeof(kPreferencesMap)/sizeof(*kPreferencesMap));
108 i++) {
109 if (strcmp(kPreferencesMap[i].api_name, api_name) == 0)
110 return kPreferencesMap[i].preference_name;
113 return NULL;
116 bool IsEnterpriseKiosk() {
117 if (!chrome::IsRunningInForcedAppMode())
118 return false;
120 policy::BrowserPolicyConnectorChromeOS* connector =
121 g_browser_process->platform_part()->browser_policy_connector_chromeos();
122 return connector->IsEnterpriseManaged();
125 std::string GetClientId() {
126 return IsEnterpriseKiosk()
127 ? g_browser_process->metrics_service()->GetClientId()
128 : std::string();
131 } // namespace
133 ChromeosInfoPrivateGetFunction::ChromeosInfoPrivateGetFunction() {
136 ChromeosInfoPrivateGetFunction::~ChromeosInfoPrivateGetFunction() {
139 bool ChromeosInfoPrivateGetFunction::RunAsync() {
140 base::ListValue* list = NULL;
141 EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &list));
142 scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue());
143 for (size_t i = 0; i < list->GetSize(); ++i) {
144 std::string property_name;
145 EXTENSION_FUNCTION_VALIDATE(list->GetString(i, &property_name));
146 base::Value* value = GetValue(property_name);
147 if (value)
148 result->Set(property_name, value);
150 SetResult(result.release());
151 SendResponse(true);
152 return true;
155 base::Value* ChromeosInfoPrivateGetFunction::GetValue(
156 const std::string& property_name) {
157 if (property_name == kPropertyHWID) {
158 std::string hwid;
159 chromeos::system::StatisticsProvider* provider =
160 chromeos::system::StatisticsProvider::GetInstance();
161 provider->GetMachineStatistic(chromeos::system::kHardwareClassKey, &hwid);
162 return new base::StringValue(hwid);
163 } else if (property_name == kPropertyCustomizationID) {
164 std::string customization_id;
165 chromeos::system::StatisticsProvider* provider =
166 chromeos::system::StatisticsProvider::GetInstance();
167 provider->GetMachineStatistic(chromeos::system::kCustomizationIdKey,
168 &customization_id);
169 return new base::StringValue(customization_id);
170 } else if (property_name == kPropertyHomeProvider) {
171 const chromeos::DeviceState* cellular_device =
172 NetworkHandler::Get()->network_state_handler()->GetDeviceStateByType(
173 chromeos::NetworkTypePattern::Cellular());
174 std::string home_provider_id;
175 if (cellular_device)
176 home_provider_id = cellular_device->home_provider_id();
177 return new base::StringValue(home_provider_id);
178 } else if (property_name == kPropertyInitialLocale) {
179 return new base::StringValue(
180 chromeos::StartupUtils::GetInitialLocale());
181 } else if (property_name == kPropertyBoard) {
182 return new base::StringValue(base::SysInfo::GetLsbReleaseBoard());
183 } else if (property_name == kPropertyOwner) {
184 return new base::FundamentalValue(
185 user_manager::UserManager::Get()->IsCurrentUserOwner());
186 } else if (property_name == kPropertyClientId) {
187 return new base::StringValue(GetClientId());
188 } else if (property_name == kPropertyTimezone) {
189 return chromeos::CrosSettings::Get()->GetPref(
190 chromeos::kSystemTimezone)->DeepCopy();
191 } else if (property_name == kPropertySupportedTimezones) {
192 scoped_ptr<base::ListValue> values = chromeos::system::GetTimezoneList();
193 return values.release();
194 } else {
195 const char* pref_name =
196 GetBoolPrefNameForApiProperty(property_name.c_str());
197 if (pref_name) {
198 return new base::FundamentalValue(
199 Profile::FromBrowserContext(context_)->GetPrefs()->GetBoolean(
200 pref_name));
204 DLOG(ERROR) << "Unknown property request: " << property_name;
205 return NULL;
208 ChromeosInfoPrivateSetFunction::ChromeosInfoPrivateSetFunction() {
211 ChromeosInfoPrivateSetFunction::~ChromeosInfoPrivateSetFunction() {
214 bool ChromeosInfoPrivateSetFunction::RunSync() {
215 std::string param_name;
216 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &param_name));
217 if (param_name == kPropertyTimezone) {
218 std::string param_value;
219 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &param_value));
220 chromeos::CrosSettings::Get()->Set(chromeos::kSystemTimezone,
221 base::StringValue(param_value));
222 } else {
223 const char* pref_name = GetBoolPrefNameForApiProperty(param_name.c_str());
224 if (pref_name) {
225 bool param_value;
226 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(1, &param_value));
227 Profile::FromBrowserContext(context_)->GetPrefs()->SetBoolean(
228 pref_name,
229 param_value);
230 } else {
231 error_ = ErrorUtils::FormatErrorMessage(kPropertyNotFound, param_name);
232 return false;
236 return true;
239 } // namespace extensions