15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/extensions/info_private_api.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/basictypes.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h"
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/sys_info.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/app_mode/app_mode_utils.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/browser_process.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/startup_utils.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/system/timezone_util.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h"
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chromeos/network/device_state.h"
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chromeos/network/network_handler.h"
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chromeos/network/network_state_handler.h"
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chromeos/settings/cros_settings_names.h"
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/system/statistics_provider.h"
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/metrics/metrics_service.h"
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "extensions/common/error_utils.h"
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)using chromeos::NetworkHandler;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Key which corresponds to the HWID setting.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPropertyHWID[] = "hwid";
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Key which corresponds to the customization ID setting.
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kPropertyCustomizationID[] = "customizationId";
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Key which corresponds to the home provider property.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPropertyHomeProvider[] = "homeProvider";
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Key which corresponds to the initial_locale property.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPropertyInitialLocale[] = "initialLocale";
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Key which corresponds to the board property in JS.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPropertyBoard[] = "board";
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Key which corresponds to the isOwner property in JS.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPropertyOwner[] = "isOwner";
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Key which corresponds to the clientId property in JS.
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kPropertyClientId[] = "clientId";
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Key which corresponds to the timezone property in JS.
570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const char kPropertyTimezone[] = "timezone";
580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Key which corresponds to the timezone property in JS.
600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const char kPropertySupportedTimezones[] = "supportedTimezones";
610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the large cursor A11Y property in JS.
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyLargeCursorEnabled[] = "a11yLargeCursorEnabled";
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the sticky keys A11Y property in JS.
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyStickyKeysEnabled[] = "a11yStickyKeysEnabled";
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the spoken feedback A11Y property in JS.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertySpokenFeedbackEnabled[] = "a11ySpokenFeedbackEnabled";
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the high contrast mode A11Y property in JS.
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyHighContrastEnabled[] = "a11yHighContrastEnabled";
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the screen magnifier A11Y property in JS.
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyScreenMagnifierEnabled[] = "a11yScreenMagnifierEnabled";
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the auto click A11Y property in JS.
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyAutoclickEnabled[] = "a11yAutoClickEnabled";
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the auto click A11Y property in JS.
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertyVirtualKeyboardEnabled[] = "a11yVirtualKeyboardEnabled";
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Key which corresponds to the send-function-keys property in JS.
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char kPropertySendFunctionsKeys[] = "sendFunctionKeys";
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Property not found error message.
870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const char kPropertyNotFound[] = "Property '*' does not exist.";
880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const struct {
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const char* api_name;
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const char* preference_name;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} kPreferencesMap[] = {
93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyLargeCursorEnabled, prefs::kAccessibilityLargeCursorEnabled},
94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyStickyKeysEnabled, prefs::kAccessibilityStickyKeysEnabled},
95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertySpokenFeedbackEnabled,
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)       prefs::kAccessibilitySpokenFeedbackEnabled},
97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyHighContrastEnabled, prefs::kAccessibilityHighContrastEnabled},
98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyScreenMagnifierEnabled,
99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)       prefs::kAccessibilityScreenMagnifierEnabled},
100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyAutoclickEnabled, prefs::kAccessibilityAutoclickEnabled},
101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      {kPropertyVirtualKeyboardEnabled,
102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)       prefs::kAccessibilityVirtualKeyboardEnabled},
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      {kPropertySendFunctionsKeys, prefs::kLanguageSendFunctionKeys}};
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* GetBoolPrefNameForApiProperty(const char* api_name) {
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0;
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       i < (sizeof(kPreferencesMap)/sizeof(*kPreferencesMap));
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)       i++) {
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (strcmp(kPreferencesMap[i].api_name, api_name) == 0)
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return kPreferencesMap[i].preference_name;
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)bool IsEnterpriseKiosk() {
11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (!chrome::IsRunningInForcedAppMode())
11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return false;
11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  policy::BrowserPolicyConnectorChromeOS* connector =
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      g_browser_process->platform_part()->browser_policy_connector_chromeos();
12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return connector->IsEnterpriseManaged();
12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string GetClientId() {
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return IsEnterpriseKiosk()
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)             ? g_browser_process->metrics_service()->GetClientId()
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)             : std::string();
12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeosInfoPrivateGetFunction::ChromeosInfoPrivateGetFunction() {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ChromeosInfoPrivateGetFunction::~ChromeosInfoPrivateGetFunction() {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool ChromeosInfoPrivateGetFunction::RunAsync() {
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::ListValue* list = NULL;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(args_->GetList(0, &list));
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<base::DictionaryValue> result(new base::DictionaryValue());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < list->GetSize(); ++i) {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string property_name;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXTENSION_FUNCTION_VALIDATE(list->GetString(i, &property_name));
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::Value* value = GetValue(property_name);
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (value)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result->Set(property_name, value);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetResult(result.release());
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SendResponse(true);
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Value* ChromeosInfoPrivateGetFunction::GetValue(
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& property_name) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (property_name == kPropertyHWID) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string hwid;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chromeos::system::StatisticsProvider* provider =
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chromeos::system::StatisticsProvider::GetInstance();
1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    provider->GetMachineStatistic(chromeos::system::kHardwareClassKey, &hwid);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return new base::StringValue(hwid);
163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (property_name == kPropertyCustomizationID) {
164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    std::string customization_id;
165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chromeos::system::StatisticsProvider* provider =
166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        chromeos::system::StatisticsProvider::GetInstance();
167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    provider->GetMachineStatistic(chromeos::system::kCustomizationIdKey,
168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                  &customization_id);
169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return new base::StringValue(customization_id);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (property_name == kPropertyHomeProvider) {
171a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    const chromeos::DeviceState* cellular_device =
172a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        NetworkHandler::Get()->network_state_handler()->GetDeviceStateByType(
17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            chromeos::NetworkTypePattern::Cellular());
174a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    std::string home_provider_id;
175a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (cellular_device)
176a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      home_provider_id = cellular_device->home_provider_id();
177a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return new base::StringValue(home_provider_id);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (property_name == kPropertyInitialLocale) {
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return new base::StringValue(
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        chromeos::StartupUtils::GetInitialLocale());
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (property_name == kPropertyBoard) {
1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return new base::StringValue(base::SysInfo::GetLsbReleaseBoard());
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (property_name == kPropertyOwner) {
184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return new base::FundamentalValue(
1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        user_manager::UserManager::Get()->IsCurrentUserOwner());
18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  } else if (property_name == kPropertyClientId) {
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return new base::StringValue(GetClientId());
1880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  } else if (property_name == kPropertyTimezone) {
1890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    return chromeos::CrosSettings::Get()->GetPref(
1900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)            chromeos::kSystemTimezone)->DeepCopy();
1910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  } else if (property_name == kPropertySupportedTimezones) {
1920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    scoped_ptr<base::ListValue> values = chromeos::system::GetTimezoneList();
1930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    return values.release();
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else {
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const char* pref_name =
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        GetBoolPrefNameForApiProperty(property_name.c_str());
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (pref_name) {
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      return new base::FundamentalValue(
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          Profile::FromBrowserContext(context_)->GetPrefs()->GetBoolean(
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              pref_name));
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DLOG(ERROR) << "Unknown property request: " << property_name;
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ChromeosInfoPrivateSetFunction::ChromeosInfoPrivateSetFunction() {
2090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ChromeosInfoPrivateSetFunction::~ChromeosInfoPrivateSetFunction() {
2120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liubool ChromeosInfoPrivateSetFunction::RunSync() {
2150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  std::string param_name;
2160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &param_name));
2170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  if (param_name == kPropertyTimezone) {
2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    std::string param_value;
2190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &param_value));
2200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    chromeos::CrosSettings::Get()->Set(chromeos::kSystemTimezone,
2210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)                                       base::StringValue(param_value));
2220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  } else {
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const char* pref_name = GetBoolPrefNameForApiProperty(param_name.c_str());
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (pref_name) {
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      bool param_value;
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(1, &param_value));
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      Profile::FromBrowserContext(context_)->GetPrefs()->SetBoolean(
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          pref_name,
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          param_value);
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    } else {
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      error_ = ErrorUtils::FormatErrorMessage(kPropertyNotFound, param_name);
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return false;
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
2340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  }
2350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  return true;
2370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
2380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
240