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, ¶m_name)); 2170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (param_name == kPropertyTimezone) { 2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string param_value; 2190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, ¶m_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, ¶m_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