network_screen_handler.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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/ui/webui/chromeos/login/network_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <algorithm> 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/bind_helpers.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/logging.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/weak_ptr.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/base/locale_util.h" 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/idle_detector.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_util.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/login/input_events_blocker.h" 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/login/login_display_host.h" 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/login/login_display_host_impl.h" 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/chromeos/login/screens/core_oobe_actor.h" 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/system/input_device_settings.h" 300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/system/timezone_util.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h" 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/chromeos_switches.h" 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/ime/extension_ime_util.h" 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/fill_layout.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.NetworkScreen"; 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// JS API callbacks names. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kJsApiNetworkOnExit[] = "networkOnExit"; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged"; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kJsApiNetworkOnInputMethodChanged[] = "networkOnInputMethodChanged"; 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const char kJsApiNetworkOnTimezoneChanged[] = "networkOnTimezoneChanged"; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const char kUSLayout[] = "xkb:us::eng"; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kDerelectDetectionTimeoutSeconds = 8 * 60 * 60; // 8 hours. 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kDerelectIdleTimeoutSeconds = 5 * 60; // 5 minutes. 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kOobeTimerUpdateIntervalSeconds = 5 * 60; // 5 minutes. 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Returns true if element was inserted. 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool InsertString(const std::string& str, std::set<std::string>& to) { 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::pair<std::set<std::string>::iterator, bool> result = 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) to.insert(str); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return result.second; 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AddOptgroupOtherLayouts(base::ListValue* input_methods_list) { 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* optgroup = new base::DictionaryValue; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) optgroup->SetString( 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "optionGroupName", 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_OOBE_OTHER_KEYBOARD_LAYOUTS)); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_methods_list->Append(optgroup); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// For "UI Language" drop-down menu at OOBE screen we need to decide which 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// entry to mark "selected". If user has just selected "requested_locale", 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// but "loaded_locale" was actually loaded, we mark original user choice 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// "selected" only if loaded_locale is a backup for "requested_locale". 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochstd::string CalculateSelectedLanguage(const std::string& requested_locale, 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& loaded_locale) { 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::string resolved_locale; 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!l10n_util::CheckAndResolveLocale(requested_locale, &resolved_locale)) 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return loaded_locale; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (resolved_locale == loaded_locale) 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return requested_locale; 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return loaded_locale; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkScreenHandler, public: ----------------------------------------------- 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)NetworkScreenHandler::NetworkScreenHandler(CoreOobeActor* core_oobe_actor) 99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : BaseScreenHandler(kJsScreenPath), 100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) screen_(NULL), 101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_(core_oobe_actor), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_continue_enabled_(false), 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) show_on_init_(false), 104e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch should_reinitialize_language_keyboard_list_(false), 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_ptr_factory_(this) { 106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DCHECK(core_oobe_actor_); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetupTimeouts(); 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method::InputMethodManager* manager = 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method::InputMethodManager::Get(); 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->GetComponentExtensionIMEManager()->AddObserver(this); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)NetworkScreenHandler::~NetworkScreenHandler() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (screen_) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_->OnActorDestroyed(this); 117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method::InputMethodManager::Get() 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ->GetComponentExtensionIMEManager() 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ->RemoveObserver(this); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkScreenHandler, NetworkScreenActor implementation: -------------------- 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::SetDelegate(NetworkScreenActor::Delegate* screen) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_ = screen; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::PrepareToShow() { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::Show() { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!page_is_ready()) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = true; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Here we should handle default locales, for which we do not have UI 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // resources. This would load fallback, but properly show "selected" locale 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // in the UI. 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (selected_language_code_.empty()) { 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const StartupCustomizationDocument* startup_manifest = 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch StartupCustomizationDocument::GetInstance(); 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch HandleOnLanguageChanged(startup_manifest->initial_locale_default()); 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenOobeNetwork, NULL); 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableDemoMode)) 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (IsDerelict()) 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) StartIdleDetection(); 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) StartOobeTimer(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::Hide() { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NetworkScreenHandler::ShowError(const base::string16& message) { 162a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("showError", message); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::ClearErrors() { 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (page_is_ready()) 167a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) core_oobe_actor_->ClearErrors(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::ShowConnectingStatus( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool connecting, 172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& network_id) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::EnableContinue(bool enabled) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_continue_enabled_ = enabled; 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 178a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("enableContinueButton", enabled); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkScreenHandler, BaseScreenHandler implementation: -------------------- 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkScreenHandler::DeclareLocalizedValues( 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (system::InputDeviceSettings::Get()->ForceKeyboardDrivenUINavigation()) 186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) builder->Add("networkScreenGreeting", IDS_REMORA_CONFIRM_MESSAGE); 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) else 188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) builder->Add("networkScreenGreeting", IDS_WELCOME_SCREEN_GREETING); 189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("networkScreenTitle", IDS_WELCOME_SCREEN_TITLE); 191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("networkScreenAccessibleTitle", 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IDS_NETWORK_SCREEN_ACCESSIBLE_TITLE); 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("selectLanguage", IDS_LANGUAGE_SELECTION_SELECT); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("selectKeyboard", IDS_KEYBOARD_SELECTION_SELECT); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("selectNetwork", IDS_NETWORK_SELECTION_SELECT); 1960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) builder->Add("selectTimezone", IDS_OPTIONS_SETTINGS_TIMEZONE_DESCRIPTION); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("proxySettings", IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("continueButton", IDS_NETWORK_SELECTION_CONTINUE_BUTTON); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkScreenHandler::GetAdditionalParameters( 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* dict) { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->Set("languageList", GetLanguageList()); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict->Set("inputMethodsList", GetInputMethods()); 2050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) dict->Set("timezoneList", GetTimezoneList()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::Initialize() { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnableContinue(is_continue_enabled_); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (show_on_init_) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = false; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 215e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (should_reinitialize_language_keyboard_list_) { 216e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch should_reinitialize_language_keyboard_list_ = false; 217e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ReloadLocalizedContent(); 218e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch } 219e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 2200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) timezone_subscription_ = CrosSettings::Get()->AddSettingsObserver( 2210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) kSystemTimezone, 2220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Bind(&NetworkScreenHandler::OnSystemTimezoneChanged, 2230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::Unretained(this))); 2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) OnSystemTimezoneChanged(); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkScreenHandler, WebUIMessageHandler implementation: ------------------- 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NetworkScreenHandler::RegisterMessages() { 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback(kJsApiNetworkOnExit, &NetworkScreenHandler::HandleOnExit); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback(kJsApiNetworkOnLanguageChanged, 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &NetworkScreenHandler::HandleOnLanguageChanged); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback(kJsApiNetworkOnInputMethodChanged, 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &NetworkScreenHandler::HandleOnInputMethodChanged); 2350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) AddCallback(kJsApiNetworkOnTimezoneChanged, 2360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) &NetworkScreenHandler::HandleOnTimezoneChanged); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// static 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NetworkScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) { 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) registry->RegisterInt64Pref(prefs::kTimeOnOobe, 0); 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NetworkScreenHandler, private: ---------------------------------------------- 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkScreenHandler::HandleOnExit() { 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch idle_detector_.reset(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearErrors(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (screen_) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_->OnContinuePressed(); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct NetworkScreenHandlerOnLanguageChangedCallbackData { 255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit NetworkScreenHandlerOnLanguageChangedCallbackData( 256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<NetworkScreenHandler>& handler) 257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : handler_(handler) {} 258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<NetworkScreenHandler> handler_; 260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 261f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Block UI while resource bundle is being reloaded. 262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chromeos::InputEventsBlocker input_events_blocker; 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// static 266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkScreenHandler::OnLanguageChangedCallback( 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<NetworkScreenHandlerOnLanguageChangedCallbackData> context, 268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& requested_locale, 269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& loaded_locale, 270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const bool success) { 271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!context or !context->handler_) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NetworkScreenHandler* const self = context->handler_.get(); 275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (success) { 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (requested_locale == loaded_locale) { 278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self->selected_language_code_ = requested_locale; 279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self->selected_language_code_ = 281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CalculateSelectedLanguage(requested_locale, loaded_locale); 282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch self->selected_language_code_ = loaded_locale; 285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 287e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch self->ReloadLocalizedContent(); 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AccessibilityManager::Get()->OnLocaleChanged(); 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void NetworkScreenHandler::HandleOnLanguageChanged(const std::string& locale) { 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string app_locale = g_browser_process->GetApplicationLocale(); 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (app_locale == locale) 295f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::WeakPtr<NetworkScreenHandler> weak_self = 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(); 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<NetworkScreenHandlerOnLanguageChangedCallbackData> callback_data( 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new NetworkScreenHandlerOnLanguageChangedCallbackData(weak_self)); 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<locale_util::SwitchLanguageCallback> callback( 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new locale_util::SwitchLanguageCallback( 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&NetworkScreenHandler::OnLanguageChangedCallback, 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Passed(callback_data.Pass())))); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) locale_util::SwitchLanguage(locale, 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* enableLocaleKeyboardLayouts */, 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) true /* login_layouts_only */, 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) callback.Pass()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void NetworkScreenHandler::HandleOnInputMethodChanged(const std::string& id) { 312a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get()->ChangeInputMethod(id); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void NetworkScreenHandler::HandleOnTimezoneChanged( 3160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const std::string& timezone_id) { 3170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string current_timezone_id; 3180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CrosSettings::Get()->GetString(kSystemTimezone, ¤t_timezone_id); 3190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (current_timezone_id == timezone_id) 3200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 3210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CrosSettings::Get()->SetString(kSystemTimezone, timezone_id); 3230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 3240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void NetworkScreenHandler::OnSystemTimezoneChanged() { 3260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string current_timezone_id; 3270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CrosSettings::Get()->GetString(kSystemTimezone, ¤t_timezone_id); 3280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CallJS("setTimezone", current_timezone_id); 3290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 3300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NetworkScreenHandler::StartIdleDetection() { 332effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!idle_detector_.get()) { 333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch idle_detector_.reset( 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new IdleDetector(base::Closure(), 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&NetworkScreenHandler::OnIdle, 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr()))); 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch idle_detector_->Start(derelict_idle_timeout_); 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkScreenHandler::StartOobeTimer() { 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_.Start(FROM_HERE, 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_update_interval_, 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) this, 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &NetworkScreenHandler::OnOobeTimerUpdate); 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NetworkScreenHandler::OnIdle() { 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LoginDisplayHost* host = LoginDisplayHostImpl::default_host(); 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host->StartDemoAppLaunch(); 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkScreenHandler::OnOobeTimerUpdate() { 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) time_on_oobe_ += oobe_timer_update_interval_; 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PrefService* prefs = g_browser_process->local_state(); 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) prefs->SetInt64(prefs::kTimeOnOobe, time_on_oobe_.InSeconds()); 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (IsDerelict()) { 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_.Stop(); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) StartIdleDetection(); 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NetworkScreenHandler::SetupTimeouts() { 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommandLine* cmdline = CommandLine::ForCurrentProcess(); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(cmdline); 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) PrefService* prefs = g_browser_process->local_state(); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) time_on_oobe_ = 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromSeconds(prefs->GetInt64(prefs::kTimeOnOobe)); 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int derelict_detection_timeout; 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!cmdline->HasSwitch(switches::kDerelictDetectionTimeout) || 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !base::StringToInt( 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmdline->GetSwitchValueASCII(switches::kDerelictDetectionTimeout), 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &derelict_detection_timeout)) { 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) derelict_detection_timeout = kDerelectDetectionTimeoutSeconds; 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) derelict_detection_timeout_ = 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::TimeDelta::FromSeconds(derelict_detection_timeout); 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int derelict_idle_timeout; 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!cmdline->HasSwitch(switches::kDerelictIdleTimeout) || 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !base::StringToInt( 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cmdline->GetSwitchValueASCII(switches::kDerelictIdleTimeout), 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &derelict_idle_timeout)) { 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) derelict_idle_timeout = kDerelectIdleTimeoutSeconds; 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) derelict_idle_timeout_ = base::TimeDelta::FromSeconds(derelict_idle_timeout); 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int oobe_timer_update_interval; 394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!cmdline->HasSwitch(switches::kOobeTimerInterval) || 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) !base::StringToInt( 396a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cmdline->GetSwitchValueASCII(switches::kOobeTimerInterval), 397a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &oobe_timer_update_interval)) { 398a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_update_interval = kOobeTimerUpdateIntervalSeconds; 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_update_interval_ = 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromSeconds(oobe_timer_update_interval); 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // In case we'd be derelict before our timer is set to trigger, reduce 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the interval so we check again when we're scheduled to go derelict. 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) oobe_timer_update_interval_ = 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::max(std::min(oobe_timer_update_interval_, 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) derelict_detection_timeout_ - time_on_oobe_), 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromSeconds(0)); 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool NetworkScreenHandler::IsDerelict() { 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return time_on_oobe_ >= derelict_detection_timeout_; 4135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::ListValue* NetworkScreenHandler::GetLanguageList() { 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string app_locale = g_browser_process->GetApplicationLocale(); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method::InputMethodManager* manager = 418a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get(); 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ComponentExtensionIMEManager* comp_manager = 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->GetComponentExtensionIMEManager(); 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method::InputMethodDescriptors descriptors; 422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (extension_ime_util::UseWrappedExtensionKeyboardLayouts()) { 423a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (comp_manager->IsInitialized()) 424a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) descriptors = comp_manager->GetXkbIMEAsInputMethodDescriptor(); 425a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) descriptors = *(manager->GetSupportedInputMethods()); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 4285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* languages_list = 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) options::CrosLanguageOptionsHandler::GetUILanguageList(descriptors); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < languages_list->GetSize(); ++i) { 4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue* language_info = NULL; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!languages_list->GetDictionary(i, &language_info)) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string value; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) language_info->GetString("code", &value); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string display_name; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) language_info->GetString("displayName", &display_name); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string native_name; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) language_info->GetString("nativeDisplayName", &native_name); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If it's option group divider, add field name. 4435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (value == options::kVendorOtherLanguagesListDivider) { 4445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) language_info->SetString( 4455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "optionGroupName", 4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_OOBE_OTHER_LANGUAGES)); 4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (display_name != native_name) { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_name = base::StringPrintf("%s - %s", 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_name.c_str(), 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_name.c_str()); 4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) language_info->SetString("value", value); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) language_info->SetString("title", display_name); 456c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (selected_language_code_.empty()) { 457c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (value == app_locale) 458c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch language_info->SetBoolean("selected", true); 459c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 460c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (value == selected_language_code_) 461c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch language_info->SetBoolean("selected", true); 462c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return languages_list; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::DictionaryValue* CreateInputMethodsEntry( 4685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const input_method::InputMethodDescriptor& method, 4695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string current_input_method_id) { 4705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_method::InputMethodUtil* util = 4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_method::InputMethodManager::Get()->GetInputMethodUtil(); 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& ime_id = method.id(); 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<base::DictionaryValue> input_method(new base::DictionaryValue); 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_method->SetString("value", ime_id); 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_method->SetString("title", util->GetInputMethodLongName(method)); 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_method->SetBoolean("selected", ime_id == current_input_method_id); 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return input_method.release(); 4785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 480a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void NetworkScreenHandler::OnImeComponentExtensionInitialized() { 481a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Refreshes the language and keyboard list once the component extension 482a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // IMEs are initialized. 483e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch if (page_is_ready()) 484e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ReloadLocalizedContent(); 485e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch else 486e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch should_reinitialize_language_keyboard_list_ = true; 487e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 488e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 489e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid NetworkScreenHandler::ReloadLocalizedContent() { 490a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::DictionaryValue localized_strings; 491e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch static_cast<OobeUI*>(web_ui()->GetController()) 492a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ->GetLocalizedStrings(&localized_strings); 493e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch core_oobe_actor_->ReloadContent(localized_strings); 494e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 495e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Buttons are recreated, updated "Continue" button state. 496e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch EnableContinue(is_continue_enabled_); 497a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// static 5005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::ListValue* NetworkScreenHandler::GetInputMethods() { 5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::ListValue* input_methods_list = new base::ListValue; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method::InputMethodManager* manager = 503a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_method::InputMethodUtil* util = manager->GetInputMethodUtil(); 505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (extension_ime_util::UseWrappedExtensionKeyboardLayouts()) { 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ComponentExtensionIMEManager* comp_manager = 507a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->GetComponentExtensionIMEManager(); 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!comp_manager->IsInitialized()) { 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_method::InputMethodDescriptor fallback = 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) util->GetFallbackInputMethodDescriptor(); 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_methods_list->Append( 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CreateInputMethodsEntry(fallback, fallback.id())); 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return input_methods_list; 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 515a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 517c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::vector<std::string>& hardware_login_input_methods = 518c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch util->GetHardwareLoginInputMethodIds(); 519c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch manager->EnableLoginLayouts(g_browser_process->GetApplicationLocale(), 520c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch hardware_login_input_methods); 521c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<input_method::InputMethodDescriptors> input_methods( 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager->GetActiveInputMethods()); 524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& current_input_method_id = 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager->GetCurrentInputMethod().id(); 5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::set<std::string> input_methods_added; 5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (std::vector<std::string>::const_iterator i = 5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) hardware_login_input_methods.begin(); 5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) i != hardware_login_input_methods.end(); 5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ++i) { 5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const input_method::InputMethodDescriptor* ime = 5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) util->GetInputMethodDescriptorFromId(*i); 5345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(ime != NULL); 5355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Do not crash in case of misconfiguration. 5365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (ime != NULL) { 537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) input_methods_added.insert(*i); 5385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_methods_list->Append( 5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateInputMethodsEntry(*ime, current_input_method_id)); 5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool optgroup_added = false; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < input_methods->size(); ++i) { 545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Makes sure the id is in legacy xkb id format. 546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& ime_id = (*input_methods)[i].id(); 5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!InsertString(ime_id, input_methods_added)) 5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) continue; 5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!optgroup_added) { 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) optgroup_added = true; 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddOptgroupOtherLayouts(input_methods_list); 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_methods_list->Append( 554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CreateInputMethodsEntry((*input_methods)[i], current_input_method_id)); 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // "xkb:us::eng" should always be in the list of available layouts. 557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& us_keyboard_id = 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extension_ime_util::GetInputMethodIDByKeyboardLayout(kUSLayout); 559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (input_methods_added.find(us_keyboard_id) == input_methods_added.end()) { 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const input_method::InputMethodDescriptor* us_eng_descriptor = 561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) util->GetInputMethodDescriptorFromId(us_keyboard_id); 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(us_eng_descriptor != NULL); 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!optgroup_added) { 5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) optgroup_added = true; 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddOptgroupOtherLayouts(input_methods_list); 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) input_methods_list->Append( 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateInputMethodsEntry(*us_eng_descriptor, current_input_method_id)); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return input_methods_list; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// static 5740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)base::ListValue* NetworkScreenHandler::GetTimezoneList() { 5750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string current_timezone_id; 5760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CrosSettings::Get()->GetString(kSystemTimezone, ¤t_timezone_id); 5770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<base::ListValue> timezone_list(new base::ListValue); 5790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<base::ListValue> timezones = system::GetTimezoneList().Pass(); 5800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (size_t i = 0; i < timezones->GetSize(); ++i) { 5810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const base::ListValue* timezone = NULL; 5820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CHECK(timezones->GetList(i, &timezone)); 5830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string timezone_id; 5850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CHECK(timezone->GetString(0, &timezone_id)); 5860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string timezone_name; 5880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CHECK(timezone->GetString(1, &timezone_name)); 5890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<base::DictionaryValue> timezone_option( 5910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) new base::DictionaryValue); 5920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) timezone_option->SetString("value", timezone_id); 5930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) timezone_option->SetString("title", timezone_name); 5940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) timezone_option->SetBoolean("selected", timezone_id == current_timezone_id); 5950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) timezone_list->Append(timezone_option.release()); 5960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 5970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return timezone_list.release(); 5990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 6000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 602