signin_screen_handler.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 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/signin_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/debug/trace_event.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/metrics/histogram.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/browser_process_platform_part_chromeos.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/hwid_checker.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/login_display_host_impl.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/screen_locker.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/user.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/webui_login_display.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/net/network_portal_detector.h" 31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/policy/browser_policy_connector.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/xkeyboard.h" 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state.h" 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chromeos/network/network_state_handler.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_switches.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/chromium_strings.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ash/wm/lock_state_controller.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::RenderViewHost; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// User dictionary keys. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyUsername[] = "username"; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyDisplayName[] = "displayName"; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyEmailAddress[] = "emailAddress"; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kKeyEnterpriseDomain[] = "enterpriseDomain"; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kKeyPublicAccount[] = "publicAccount"; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kKeyLocallyManagedUser[] = "locallyManagedUser"; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeySignedIn[] = "signedIn"; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyCanRemove[] = "canRemove"; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kKeyIsOwner[] = "isOwner"; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kKeyOauthTokenStatus[] = "oauthTokenStatus"; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Max number of users to show. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const size_t kMaxUsers = 18; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Timeout to delay first notification about offline state for a 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// current network. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kOfflineTimeoutSec = 5; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Timeout used to prevent infinite connecting to a flaky network. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kConnectingTimeoutSec = 60; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Type of the login screen UI that is currently presented to user. 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSourceGaiaSignin[] = "gaia-signin"; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSourceAccountPicker[] = "account-picker"; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Task posted to PostTaskAndReply in StartClearingDnsCache on the IO 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thread. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ClearDnsCache(IOThread* io_thread) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browser_shutdown::IsTryingToQuit()) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread->ClearHostCache(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkStateOffline[] = "offline"; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkStateOnline[] = "online"; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkStateCaptivePortal[] = "behind captive portal"; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkStateConnecting[] = "connecting"; 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kNetworkStateProxyAuthRequired[] = "proxy auth required"; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 118a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonProxyAuthCancelled[] = "proxy auth cancelled"; 119a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonProxyAuthSupplied[] = "proxy auth supplied"; 120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonProxyConnectionFailed[] = "proxy connection failed"; 121a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonProxyConfigChanged[] = "proxy config changed"; 122a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonLoadingTimeout[] = "loading timeout"; 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonPortalDetected[] = "portal detected"; 124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonNetworkStateChanged[] = "network state changed"; 125a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonUpdate[] = "update"; 126a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char kErrorReasonFrameError[] = "frame error"; 127a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* NetworkStateStatusString(NetworkStateInformer::State state) { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (state) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkStateInformer::OFFLINE: 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kNetworkStateOffline; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkStateInformer::ONLINE: 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kNetworkStateOnline; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkStateInformer::CAPTIVE_PORTAL: 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kNetworkStateCaptivePortal; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkStateInformer::CONNECTING: 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kNetworkStateConnecting; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkStateInformer::PROXY_AUTH_REQUIRED: 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return kNetworkStateProxyAuthRequired; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 146a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)const char* ErrorReasonString(ErrorScreenActor::ErrorReason reason) { 147a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) switch (reason) { 148a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED: 149a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonProxyAuthCancelled; 150a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_PROXY_AUTH_SUPPLIED: 151a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonProxyAuthSupplied; 152a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED: 153a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonProxyConnectionFailed; 154a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_PROXY_CONFIG_CHANGED: 155a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonProxyConfigChanged; 156a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT: 157a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonLoadingTimeout; 158a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED: 159a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonPortalDetected; 160a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_NETWORK_STATE_CHANGED: 161a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonNetworkStateChanged; 162a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_UPDATE: 163a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonUpdate; 164a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) case ErrorScreenActor::ERROR_REASON_FRAME_ERROR: 165a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return kErrorReasonFrameError; 166a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) default: 167a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) NOTREACHED(); 168a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return NULL; 169a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 170a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 171a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Updates params dictionary passed to the auth extension with related 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preferences from CrosSettings. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateAuthParamsFromSettings(DictionaryValue* params, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CrosSettings* cros_settings) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_new_user = true; 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_guest = true; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowGuest, &allow_guest); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Account creation depends on Guest sign-in (http://crosbug.com/24570). 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params->SetBoolean("createAccount", allow_new_user && allow_guest); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params->SetBoolean("guestSignin", allow_guest); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 185a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool IsOnline(NetworkStateInformer::State state, 186a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 187a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return state == NetworkStateInformer::ONLINE && 188a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason != ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED && 189a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason != ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool IsUnderCaptivePortal(NetworkStateInformer::State state, 193a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 194a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return state == NetworkStateInformer::CAPTIVE_PORTAL || 195a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsProxyError(NetworkStateInformer::State state, 199ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ErrorScreenActor::ErrorReason reason, 200ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch net::Error frame_error) { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || 202a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED || 203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED || 204ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR && 205ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (frame_error == net::ERR_PROXY_CONNECTION_FAILED || 206ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch frame_error == net::ERR_TUNNEL_CONNECTION_FAILED)); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool IsSigninScreen(const OobeUI::Screen screen) { 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return screen == OobeUI::SCREEN_GAIA_SIGNIN || 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) screen == OobeUI::SCREEN_ACCOUNT_PICKER; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool IsSigninScreenError(ErrorScreen::ErrorState error_state) { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return error_state == ErrorScreen::ERROR_STATE_PORTAL || 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_OFFLINE || 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_PROXY || 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state == ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns network name by service path. 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string GetNetworkName(const std::string& service_path) { 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNetworkState(service_path); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return network->name(); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns network unique id by service path. 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string GetNetworkUniqueId(const std::string& service_path) { 23290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNetworkState(service_path); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return std::string(); 23690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return network->guid(); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns captive portal state for a network by its service path. 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkPortalDetector::CaptivePortalState GetCaptivePortalState( 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path) { 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector* detector = NetworkPortalDetector::GetInstance(); 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNetworkState(service_path); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!detector || !network) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NetworkPortalDetector::CaptivePortalState(); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return detector->GetCaptivePortalState(network); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecordDiscrepancyWithShill( 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NetworkPortalDetector::CaptivePortalStatus status) { 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network->connection_state() == flimflam::kStateOnline) { 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CaptivePortal.OOBE.DiscrepancyWithShill_Online", 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status, 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } else if (network->connection_state() == flimflam::kStatePortal) { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CaptivePortal.OOBE.DiscrepancyWithShill_RestrictedPool", 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status, 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION( 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "CaptivePortal.OOBE.DiscrepancyWithShill_Offline", 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status, 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Record state and descripancies with shill (e.g. shill thinks that 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// network is online but NetworkPortalDetector claims that it's behind 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// portal) for the network identified by |service_path|. 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RecordNetworkPortalDetectorStats(const std::string& service_path) { 27590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 27690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetNetworkState(service_path); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!network) 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector::CaptivePortalState state = 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCaptivePortalState(service_path); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("CaptivePortal.OOBE.DetectionResult", 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state.status, 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (state.status) { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN: 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE: 29390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network->connection_state() == flimflam::kStateOnline || 29490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) network->connection_state() == flimflam::kStatePortal) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordDiscrepancyWithShill(network, state.status); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE: 29890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network->connection_state() != flimflam::kStateOnline) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordDiscrepancyWithShill(network, state.status); 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL: 30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network->connection_state() != flimflam::kStatePortal) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordDiscrepancyWithShill(network, state.status); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED: 30690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (network->connection_state() != flimflam::kStateOnline) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordDiscrepancyWithShill(network, state.status); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_COUNT: 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SigninScreenHandler implementation ------------------------------------------ 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninScreenHandler::SigninScreenHandler( 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<NetworkStateInformer>& network_state_informer, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ErrorScreenActor* error_screen_actor) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ui_state_(UI_STATE_UNKNOWN), 323a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_state_(FRAME_STATE_UNKNOWN), 324a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_error_(net::OK), 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_(NULL), 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_window_delegate_(NULL), 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_(false), 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_ui_(false), 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_stolen_(false), 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_silent_load_(false), 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_account_picker_showing_first_time_(false), 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_cleared_(false), 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_clear_task_running_(false), 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_cleared_(false), 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_(network_state_informer), 336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test_expects_complete_login_(false), 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) weak_factory_(this), 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_visible_(false), 33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_(false), 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_(error_screen_actor), 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_first_update_state_call_(true), 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) offline_login_active_(false), 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) last_network_state_(NetworkStateInformer::UNKNOWN), 344ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch has_pending_auth_ui_(false) { 3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(network_state_informer_.get()); 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(error_screen_actor_); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_->AddObserver(this); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowNewUser, this); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowGuest, this); 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_NEEDED, 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_SUPPLIED, 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) registrar_.Add(this, 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_AUTH_CANCELLED, 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SigninScreenHandler::~SigninScreenHandler() { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.InvalidateWeakPtrs(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemKeyEventListener* key_event_listener = 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemKeyEventListener::GetInstance(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key_event_listener) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_event_listener->RemoveCapsLockObserver(this); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetWebUIHandler(NULL); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_->RemoveObserver(this); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowNewUser, this); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowGuest, this); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::DeclareLocalizedValues( 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinScreenTitle", IDS_SIGNIN_SCREEN_TITLE); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinScreenPasswordChanged", 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SIGNIN_SCREEN_PASSWORD_CHANGED); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordHint", IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT); 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("podMenuButtonAccessibleName", 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("podMenuRemoveItemAccessibleName", 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_MENU_REMOVE_ITEM_ACCESSIBLE_NAME); 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordFieldAccessibleName", 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_POD_PASSWORD_FIELD_ACCESSIBLE_NAME); 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signedIn", IDS_SCREEN_LOCK_ACTIVE_USER); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinButton", IDS_LOGIN_BUTTON); 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("shutDown", IDS_SHUTDOWN_BUTTON); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("addUser", IDS_ADD_USER_BUTTON); 391868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) builder->Add("cancelUserAdding", IDS_CANCEL_USER_ADDING); 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("browseAsGuest", IDS_GO_INCOGNITO_BUTTON); 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("cancel", IDS_CANCEL); 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signOutUser", IDS_SCREEN_LOCK_SIGN_OUT); 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("createAccount", IDS_CREATE_ACCOUNT_HTML); 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("guestSignin", IDS_BROWSE_WITHOUT_SIGNING_IN_HTML); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("createLocallyManagedUser", 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_CREATE_LOCALLY_MANAGED_USER_HTML); 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("createManagedUserFeatureName", 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_CREATE_LOCALLY_MANAGED_USER_FEATURE_NAME); 40190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) builder->Add("createManagedUserNoManagerText", 40290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) IDS_CREATE_LOCALLY_MANAGED_USER_NO_MANAGER_TEXT); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("offlineLogin", IDS_OFFLINE_LOGIN_HTML); 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("ownerUserPattern", IDS_LOGIN_POD_OWNER_USER); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("removeUser", IDS_LOGIN_POD_REMOVE_USER); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureTitle", IDS_LOGIN_ERROR_TPM_FAILURE_TITLE); 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureReboot", IDS_LOGIN_ERROR_TPM_FAILURE_REBOOT); 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("errorTpmFailureRebootButton", 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_ERROR_TPM_FAILURE_REBOOT_BUTTON); 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add( 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "disabledAddUserTooltip", 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->browser_policy_connector()->IsEnterpriseManaged() ? 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DISABLED_ADD_USER_TOOLTIP_ENTERPRISE : 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_DISABLED_ADD_USER_TOOLTIP); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Strings used by password changed dialog. 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedTitle", IDS_LOGIN_PASSWORD_CHANGED_TITLE); 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedDesc", IDS_LOGIN_PASSWORD_CHANGED_DESC); 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->AddF("passwordChangedMoreInfo", 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_MORE_INFO, 421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_SHORT_PRODUCT_OS_NAME); 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oldPasswordHint", IDS_LOGIN_PASSWORD_CHANGED_OLD_PASSWORD_HINT); 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oldPasswordIncorrect", 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_INCORRECT_OLD_PASSWORD); 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedCantRemember", 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_CANT_REMEMBER); 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedBackButton", 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_BACK_BUTTON); 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedsOkButton", IDS_OK); 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("passwordChangedProceedAnyway", 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_PROCEED_ANYWAY); 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("proceedAnywayButton", 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PASSWORD_CHANGED_PROCEED_ANYWAY_BUTTON); 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountInfoFormat", IDS_LOGIN_PUBLIC_ACCOUNT_INFO_FORMAT); 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountReminder", 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PUBLIC_ACCOUNT_SIGNOUT_REMINDER); 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountEnter", IDS_LOGIN_PUBLIC_ACCOUNT_ENTER); 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("publicAccountEnterAccessibleName", 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_PUBLIC_ACCOUNT_ENTER_ACCESSIBLE_NAME); 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch builder->AddF("removeManagedUserWarningText", 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch IDS_USER_IS_LOCALLY_MANAGED_REMOVE_WARNING, 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UTF8ToUTF16(chrome::kSupervisedUserManagementDisplayURL)); 4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) builder->Add("removeManagedUserWarningButtonTitle", 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IDS_USER_IS_LOCALLY_MANAGED_REMOVE_WARNING_BUTTON); 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) 448868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) builder->Add("demoLoginMessage", IDS_KIOSK_MODE_LOGIN_MESSAGE); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::Show(bool oobe_ui) { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(delegate_); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oobe_ui_ = oobe_ui; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!page_is_ready()) { 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = true; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (oobe_ui) { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows new user sign-in for OOBE. 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleShowAddUser(NULL); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Populates account picker. Animation is turned off for now until we 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // figure out how to make it fast enough. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendUserList(false); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset Caps Lock state when login screen is shown. 468a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) input_method::InputMethodManager::Get()->GetXKeyboard()-> 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCapsLockEnabled(false); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue params; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent()); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_ACCOUNT_PICKER, ¶ms); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowRetailModeLoginSpinner() { 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("showLoginSpinner"); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::SetDelegate(SigninScreenHandlerDelegate* delegate) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SetWebUIHandler(this); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::SetNativeWindowDelegate( 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NativeWindowDelegate* native_window_delegate) { 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_window_delegate_ = native_window_delegate; 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnNetworkReady() { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybePreloadAuthExtension(); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::UpdateState(NetworkStateInformer::State state, 497a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 498a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) UpdateStateInternal(state, reason, false); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SigninScreenHandler, private: ----------------------------------------------- 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::UpdateUIState(UIState ui_state, 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryValue* params) { 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (ui_state) { 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case UI_STATE_GAIA_SIGNIN: 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_GAIA_SIGNIN; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenGaiaSignin, params); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case UI_STATE_ACCOUNT_PICKER: 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_ACCOUNT_PICKER; 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenAccountPicker, params); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO (ygorshenin@): split this method into small parts. 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::UpdateStateInternal( 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateInformer::State state, 523a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason, 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool force_update) { 525a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Do nothing once user has signed in or sign in is in progress. 526a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // TODO(ygorshenin): We will end up here when processing network state 527a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // notification but no ShowSigninScreen() was called so delegate_ will be 528a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // NULL. Network state processing logic does not belong here. 529a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (delegate_ && 530a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (delegate_->IsUserSigninCompleted() || delegate_->IsSigninInProgress())) { 531a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return; 532a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 533a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 534a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string service_path = 535a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) network_state_informer_->last_network_service_path(); 536a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string network_id = 537a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) GetNetworkUniqueId(service_path); 538a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Skip "update" notification about OFFLINE state from 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetworkStateInformer if previous notification already was 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // delayed. 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state == NetworkStateInformer::OFFLINE && 543a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) reason == ErrorScreenActor::ERROR_REASON_UPDATE && 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !update_state_closure_.IsCancelled()) { 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO (ygorshenin@): switch log level to INFO once signin screen 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will be tested well. 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "SigninScreenHandler::UpdateStateInternal(): " 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "state=" << NetworkStateStatusString(state) << ", " 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "network_id=" << network_id << ", " 553a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) << "reason=" << ErrorReasonString(reason) << ", " 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "force_update=" << force_update; 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.Cancel(); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Delay UpdateStateInternal() call in the following cases: 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 1. this is the first call and it's about offline state of the 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // current network. This can happen because device is just powered 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // up and network stack isn't ready now. 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 2. proxy auth ui is displayed. UpdateStateCall() is delayed to 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // prevent screen change behind proxy auth ui. 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ((state == NetworkStateInformer::OFFLINE && is_first_update_state_call_) || 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_) { 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_first_update_state_call_ = false; 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.Reset( 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &SigninScreenHandler::UpdateStateInternal, 569a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_factory_.GetWeakPtr(), state, reason, force_update)); 57090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_state_closure_.callback(), 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(kOfflineTimeoutSec)); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_first_update_state_call_ = false; 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't show or hide error screen if we're in connecting state. 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state == NetworkStateInformer::CONNECTING && !force_update) { 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (connecting_closure_.IsCancelled()) { 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // First notification about CONNECTING state. 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.Reset( 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&SigninScreenHandler::UpdateStateInternal, 584a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) weak_factory_.GetWeakPtr(), state, reason, true)); 58590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.callback(), 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromSeconds(kConnectingTimeoutSec)); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connecting_closure_.Cancel(); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 594a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_online = IsOnline(state, reason); 595a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_under_captive_portal = IsUnderCaptivePortal(state, reason); 596a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_loading_timeout = 597a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 598a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_error = frame_error_ != net::OK && 599a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_error_ != net::ERR_NETWORK_CHANGED; 600a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_signin = IsGaiaVisible() || IsGaiaHiddenByError(); 601a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool error_screen_should_overlay = 602a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) !offline_login_active_ && IsGaiaVisible(); 603a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool from_not_online_to_online_transition = 604a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) is_online && last_network_state_ != NetworkStateInformer::ONLINE; 605a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) last_network_state_ = state; 606a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 607a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (is_online || !is_under_captive_portal) 608a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) error_screen_actor_->HideCaptivePortal(); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 610a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Hide offline message (if needed) and return if current screen is 611a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // not a Gaia frame. 612a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!is_gaia_signin) { 613a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!IsSigninScreenHiddenByError()) 614a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) HideOfflineMessage(state, reason); 615a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return; 616a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 617a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 618a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Reload frame if network state is changed from {!ONLINE} -> ONLINE state. 619a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (reason == ErrorScreenActor::ERROR_REASON_NETWORK_STATE_CHANGED && 620a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) from_not_online_to_online_transition) { 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules a immediate retry. 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Retry page load since network has been changed."; 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReloadGaiaScreen(); 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 626a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (reason == ErrorScreenActor::ERROR_REASON_PROXY_CONFIG_CHANGED && 627a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) error_screen_should_overlay) { 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules a immediate retry. 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Retry page load since proxy settings has been changed."; 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReloadGaiaScreen(); 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 633ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR && 634ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch !IsProxyError(state, reason, frame_error_)) { 635a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) LOG(WARNING) << "Retry page load due to reason: " 636a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) << ErrorReasonString(reason); 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ReloadGaiaScreen(); 638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 640a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if ((!is_online || is_gaia_loading_timeout || is_gaia_error) && 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !offline_login_active_) { 642a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) SetupAndShowOfflineMessage(state, reason); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 644a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) HideOfflineMessage(state, reason); 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::SetupAndShowOfflineMessage( 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateInformer:: State state, 650a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 651a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string service_path = 652a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) network_state_informer_->last_network_service_path(); 653a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string network_id = GetNetworkUniqueId(service_path); 654a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_under_captive_portal = IsUnderCaptivePortal(state, reason); 655ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const bool is_proxy_error = IsProxyError(state, reason, frame_error_); 656a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool is_gaia_loading_timeout = 657a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) (reason == ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 658a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 659a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) LOG(WARNING) << "Offline message is displayed"; 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Record portal detection stats only if we're going to show or 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // change state of the error screen. 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordNetworkPortalDetectorStats(service_path); 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_proxy_error) { 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY, 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (is_under_captive_portal) { 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do not bother a user with obsessive captive portal showing. This 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // check makes captive portal being shown only once: either when error 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // screen is shown for the first time or when switching from another 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // error screen (offline, proxy). 673a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (IsGaiaVisible() || 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (error_screen_actor_->error_state() != 675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_PORTAL)) { 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->FixCaptivePortal(); 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 678a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const std::string network_name = GetNetworkName(service_path); 679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) network_name); 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (is_gaia_loading_timeout) { 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState( 683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT, std::string()); 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, 686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string()); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 689a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool guest_signin_allowed = IsGuestSigninAllowed() && 690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsSigninScreenError(error_screen_actor_->error_state()); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->AllowGuestSignin(guest_signin_allowed); 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 693a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) const bool offline_login_allowed = IsOfflineLoginAllowed() && 694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsSigninScreenError(error_screen_actor_->error_state()) && 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->error_state() != 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT; 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->AllowOfflineLogin(offline_login_allowed); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryValue params; 70190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string connection_type = 702a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) network_state_informer_->last_network_type(); 70390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.SetString("lastNetworkType", connection_type); 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_SIGNIN); 7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) error_screen_actor_->Show(OobeUI::SCREEN_GAIA_SIGNIN, ¶ms); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 709a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void SigninScreenHandler::HideOfflineMessage( 710a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) NetworkStateInformer::State state, 711a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ErrorReason reason) { 712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!IsSigninScreenHiddenByError()) 713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 714a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 715a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) LOG(WARNING) << "Offline message is hidden"; 716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_screen_actor_->Hide(); 717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Forces a reload for Gaia screen on hiding error message. 719a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (IsGaiaVisible() || IsGaiaHiddenByError()) 720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ReloadGaiaScreen(); 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ReloadGaiaScreen() { 724a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (frame_state_ == FRAME_STATE_LOADING) 725a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return; 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateInformer::State state = network_state_informer_->state(); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (state != NetworkStateInformer::ONLINE) { 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Skipping reload of auth extension frame since " 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "network state=" << NetworkStateStatusString(state); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Reload auth extension frame."; 733a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_state_ = FRAME_STATE_LOADING; 734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.GaiaSigninScreen.doReload"); 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::Initialize() { 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If delegate_ is NULL here (e.g. WebUIScreenLocker has been destroyed), 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't do anything, just return. 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Register for Caps Lock state change notifications; 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemKeyEventListener* key_event_listener = 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemKeyEventListener::GetInstance(); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key_event_listener) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_event_listener->AddCapsLockObserver(this); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (show_on_init_) { 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = false; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(oobe_ui_); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow SigninScreenHandler::GetNativeWindow() { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (native_window_delegate_) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return native_window_delegate_->GetNativeWindow(); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::RegisterMessages() { 762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("authenticateUser", &SigninScreenHandler::HandleAuthenticateUser); 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("completeLogin", &SigninScreenHandler::HandleCompleteLogin); 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("completeAuthentication", 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleCompleteAuthentication); 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("getUsers", &SigninScreenHandler::HandleGetUsers); 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchDemoUser", &SigninScreenHandler::HandleLaunchDemoUser); 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito); 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("showLocallyManagedUserCreationScreen", 770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleShowLocallyManagedUserCreationScreen); 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchPublicAccount", 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleLaunchPublicAccount); 773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin); 774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("rebootSystem", &SigninScreenHandler::HandleRebootSystem); 775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddRawCallback("showAddUser", &SigninScreenHandler::HandleShowAddUser); 776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("shutdownSystem", &SigninScreenHandler::HandleShutdownSystem); 777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loadWallpaper", &SigninScreenHandler::HandleLoadWallpaper); 778c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("removeUser", &SigninScreenHandler::HandleRemoveUser); 779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("toggleEnrollmentScreen", 780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleToggleEnrollmentScreen); 7817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AddCallback("toggleKioskEnableScreen", 7827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &SigninScreenHandler::HandleToggleKioskEnableScreen); 783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("toggleResetScreen", 784c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleToggleResetScreen); 785c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("launchHelpApp", &SigninScreenHandler::HandleLaunchHelpApp); 786c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("createAccount", &SigninScreenHandler::HandleCreateAccount); 787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("accountPickerReady", 788c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleAccountPickerReady); 789c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("wallpaperReady", &SigninScreenHandler::HandleWallpaperReady); 790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loginWebuiReady", &SigninScreenHandler::HandleLoginWebuiReady); 791c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("demoWebuiReady", &SigninScreenHandler::HandleDemoWebuiReady); 792c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("signOutUser", &SigninScreenHandler::HandleSignOutUser); 793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("userImagesLoaded", &SigninScreenHandler::HandleUserImagesLoaded); 794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("networkErrorShown", 795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleNetworkErrorShown); 796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("openProxySettings", 797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleOpenProxySettings); 798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loginVisible", &SigninScreenHandler::HandleLoginVisible); 799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("cancelPasswordChangedFlow", 800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleCancelPasswordChangedFlow); 801868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AddCallback("cancelUserAdding", 802868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) &SigninScreenHandler::HandleCancelUserAdding); 803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("migrateUserData", &SigninScreenHandler::HandleMigrateUserData); 804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("resyncUserData", &SigninScreenHandler::HandleResyncUserData); 805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("loginUIStateChanged", 806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleLoginUIStateChanged); 807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("unlockOnLoginSuccess", 808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleUnlockOnLoginSuccess); 809a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) AddCallback("frameLoadingCompleted", 810a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) &SigninScreenHandler::HandleFrameLoadingCompleted); 811c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("showLoadingTimeoutError", 812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleShowLoadingTimeoutError); 813c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("updateOfflineLogin", 814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &SigninScreenHandler::HandleUpdateOfflineLogin); 815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleGetUsers() { 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendUserList(false); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ClearAndEnablePassword() { 822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.resetSigninUI", false); 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ClearUserPodPassword() { 826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.clearUserPodPassword"); 8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SigninScreenHandler::RefocusCurrentPod() { 83090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CallJS("cr.ui.Oobe.refocusCurrentPod"); 83190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 83290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnLoginSuccess(const std::string& username) { 834c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.onLoginSuccess", username); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnUserRemoved(const std::string& username) { 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendUserList(false); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnUserImageChanged(const User& user) { 842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.AccountPickerScreen.updateUserImage", user.email()); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnPreferencesChanged() { 84790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Make sure that one of the login UI is fully functional now, otherwise 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preferences update would be picked up next time it will be shown. 84990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!webui_visible_) { 85090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LOG(WARNING) << "Login UI is not active - postponed prefs change."; 85190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_ = true; 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_ && !delegate_->IsShowUsers()) { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HandleShowAddUser(NULL); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendUserList(false); 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_ACCOUNT_PICKER, NULL); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 86190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) preferences_changed_delayed_ = false; 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ResetSigninScreenHandlerDelegate() { 8652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetDelegate(NULL); 8662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowError(int login_attempts, 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& error_text, 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& help_link_text, 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HelpAppLauncher::HelpTopic help_topic_id) { 872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.showSignInError", login_attempts, error_text, 873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) help_link_text, static_cast<int>(help_topic_id)); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowErrorScreen(LoginDisplay::SigninError error_id) { 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (error_id) { 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case LoginDisplay::TPM_ERROR: 879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.showTpmError"); 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Unknown sign in error"; 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowSigninUI(const std::string& email) { 888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.showSigninUI", email); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowGaiaPasswordChanged(const std::string& username) { 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) email_ = username; 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) password_changed_for_.insert(email_); 894c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.showSigninUI", email_); 895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.AccountPickerScreen.updateUserGaiaNeeded", email_); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowPasswordChangedDialog(bool show_password_error) { 899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.Oobe.showPasswordChangedScreen", show_password_error); 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::ShowSigninScreenForCreds( 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& username, 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& password) { 905eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VLOG(2) << "ShowSigninScreenForCreds for user " << username 906eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch << ", frame_state=" << frame_state_; 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_user_ = username; 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_pass_ = password; 910eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test_expects_complete_login_ = true; 911eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 912eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Submit login form for test if gaia is ready. If gaia is loading, login 913eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // will be attempted in HandleLoginWebuiReady after gaia is ready. Otherwise, 914eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // reload gaia then follow the loading case. 915eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (frame_state_ == FRAME_STATE_LOADED) 916eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SubmitLoginFormForTest(); 917eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch else if (frame_state_ != FRAME_STATE_LOADING) 918eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch HandleShowAddUser(NULL); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 921b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void SigninScreenHandler::OnCookiesCleared(base::Closure on_clear_callback) { 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_cleared_ = true; 924b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) on_clear_callback.Run(); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnCapsLockChange(bool enabled) { 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (page_is_ready()) 929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.AccountPickerScreen.setCapsLockState", enabled); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::Observe(int type, 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (type) { 9362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_SYSTEM_SETTING_CHANGED: { 9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateAuthExtension(); 9382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateAddButtonStatus(); 9392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_NEEDED: { 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = true; 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_SUPPLIED: 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = false; 9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsSigninScreenHiddenByError()) { 9482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Hide error screen and reload auth extension. 9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HideOfflineMessage(network_state_informer_->state(), 950a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ERROR_REASON_PROXY_AUTH_SUPPLIED); 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (ui_state_ == UI_STATE_GAIA_SIGNIN) { 952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Reload auth extension as proxy credentials are supplied. 9532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ReloadGaiaScreen(); 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case chrome::NOTIFICATION_AUTH_CANCELLED: { 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Don't reload auth extension if proxy auth dialog was cancelled. 9582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) has_pending_auth_ui_ = false; 9592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 9612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 9622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Unexpected notification " << type; 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::OnDnsCleared() { 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_clear_task_running_ = false; 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_cleared_ = true; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowSigninScreenIfReady(); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::ShowSigninScreenIfReady() { 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!dns_cleared_ || !cookies_cleared_ || !delegate_) 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string active_network = 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_state_informer_->active_network_service_path(); 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gaia_silent_load_ && 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (!network_state_informer_->is_online() || 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gaia_silent_load_network_ != active_network)) { 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Network has changed. Force Gaia reload. 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_silent_load_ = false; 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gaia page will be realoded, so focus isn't stolen anymore. 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_stolen_ = false; 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that LoadAuthExtension clears |email_|. 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (email_.empty()) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LoadSigninWallpaper(); 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LoadWallpaper(email_); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAuthExtension(!gaia_silent_load_, false, false); 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gaia_silent_load_) { 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The variable is assigned to false because silently loaded Gaia page was 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used. 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_silent_load_ = false; 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focus_stolen_) 1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HandleLoginWebuiReady(); 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateState(network_state_informer_->state(), 1006a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ERROR_REASON_UPDATE); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 101090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SigninScreenHandler::UpdateAuthParams(DictionaryValue* params) { 1011eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!delegate_) 1012eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 1013eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 101490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateAuthParamsFromSettings(params, CrosSettings::Get()); 101590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1016eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Allow locally managed user creation only if: 101790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // 1. Enterprise managed device > is allowed by policy. 101890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // 2. Consumer device > owner exists. 1019ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // 3. New users are allowed by owner. 1020ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1021ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch CrosSettings* cros_settings = CrosSettings::Get(); 1022ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool allow_new_user = false; 1023ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); 1024ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1025eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool managed_users_allowed = 1026eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UserManager::Get()->AreLocallyManagedUsersAllowed(); 102790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool managed_users_can_create = false; 1028ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (managed_users_allowed) { 1029ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch managed_users_can_create = 1030ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch (delegate_->GetUsers().size() > 0) && allow_new_user; 1031ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1032eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch params->SetBoolean("managedUsersEnabled", managed_users_allowed); 103390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params->SetBoolean("managedUsersCanCreate", managed_users_can_create); 103490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 103590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::LoadAuthExtension( 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool force, bool silent_load, bool offline) { 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue params; 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("forceReload", force); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("silentLoad", silent_load); 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("isLocal", offline); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("passwordChanged", 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !email_.empty() && password_changed_for_.count(email_)); 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetBoolean("isShowUsers", delegate_->IsShowUsers()); 1047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.SetBoolean("useOffline", offline); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetString("email", email_); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) email_.clear(); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateAuthParams(¶ms); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!offline) { 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string app_locale = g_browser_process->GetApplicationLocale(); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!app_locale.empty()) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.SetString("hl", app_locale); 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue *localized_strings = new base::DictionaryValue(); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings->SetString("stringEmail", 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_EMAIL)); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings->SetString("stringPassword", 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_PASSWORD)); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings->SetString("stringSignIn", 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_SIGNIN)); 10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) localized_strings->SetString("stringEmptyEmail", 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_EMPTY_EMAIL)); 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) localized_strings->SetString("stringEmptyPassword", 10682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_EMPTY_PASSWORD)); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings->SetString("stringError", 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_ERROR)); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.Set("localizedStrings", localized_strings); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const GURL gaia_url = 10757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch(::switches::kGaiaUrl) ? 10767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GURL(CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 10777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ::switches::kGaiaUrl)) : 10787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GaiaUrls::GetInstance()->gaia_url(); 107990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) params.SetString("gaiaUrl", gaia_url.spec()); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1081868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) frame_state_ = FRAME_STATE_LOADING; 1082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.GaiaSigninScreen.loadAuthExtension", params); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::UpdateAuthExtension() { 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue params; 108790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateAuthParams(¶ms); 1088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.GaiaSigninScreen.updateAuthExtension", params); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::UpdateAddButtonStatus() { 1092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("cr.ui.login.DisplayManager.updateAddUserButtonStatus", 1093c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AllWhitelistedUsersPresent()); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1096c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleCompleteLogin(const std::string& typed_email, 1097c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& password) { 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string sanitized_email = gaia::SanitizeEmail(typed_email); 1101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->SetDisplayEmail(sanitized_email); 1102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->CompleteLogin(UserContext(sanitized_email, 1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) password, 1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string())); // auth_code 1105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (test_expects_complete_login_) { 1107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VLOG(2) << "Complete test login for " << typed_email 1108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch << ", requested=" << test_user_; 1109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test_expects_complete_login_ = false; 1111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test_user_.clear(); 1112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test_pass_.clear(); 1113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::HandleCompleteAuthentication( 1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& email, 1118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& password, 1119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& auth_code) { 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!delegate_) 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string sanitized_email = gaia::SanitizeEmail(email); 1123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->SetDisplayEmail(sanitized_email); 1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->CompleteLogin(UserContext(sanitized_email, password, auth_code)); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleAuthenticateUser(const std::string& username, 1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& password) { 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->Login(UserContext(gaia::SanitizeEmail(username), 1132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) password, 1133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string())); // auth_code 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLaunchDemoUser() { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 11382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->LoginAsRetailModeUser(); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLaunchIncognito() { 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LoginAsGuest(); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleShowLocallyManagedUserCreationScreen() { 1147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!UserManager::Get()->AreLocallyManagedUsersAllowed()) { 1148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch LOG(ERROR) << "Managed users not allowed."; 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<DictionaryValue> params(new DictionaryValue()); 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginDisplayHostImpl::default_host()-> 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StartWizard(WizardController::kLocallyManagedUserCreationScreenName, 1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.Pass()); 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::HandleLaunchPublicAccount( 1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& username) { 1159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (delegate_) 1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->LoginAsPublicAccount(username); 11612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) { 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_ || delegate_->IsShowUsers()) { 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!args->GetString(0, &email_)) 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) email_.clear(); 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load auth extension. Parameters are: force reload, do not load extension in 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // background, use offline version. 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAuthExtension(true, false, true); 11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateUIState(UI_STATE_GAIA_SIGNIN, NULL); 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleShutdownSystem() { 1177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ash::Shell::GetInstance()->lock_state_controller()->RequestShutdown(); 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoadWallpaper(const std::string& email) { 1181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (delegate_) 1182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->LoadWallpaper(email); 1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleRebootSystem() { 1186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleRemoveUser(const std::string& email) { 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RemoveUser(email); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAddButtonStatus(); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::HandleShowAddUser(const base::ListValue* args) { 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) email_.clear(); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |args| can be null if it's OOBE. 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args) 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) args->GetString(0, &email_); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_account_picker_showing_first_time_ = false; 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (gaia_silent_load_ && email_.empty()) { 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_cleared_ = true; 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_cleared_ = true; 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowSigninScreenIfReady(); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartClearingDnsCache(); 1209b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) StartClearingCookies(base::Bind( 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &SigninScreenHandler::ShowSigninScreenIfReady, 1211b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_factory_.GetWeakPtr())); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleToggleEnrollmentScreen() { 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowEnterpriseEnrollmentScreen(); 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void SigninScreenHandler::HandleToggleKioskEnableScreen() { 12217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (delegate_ && 12227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) !g_browser_process->browser_policy_connector()->IsEnterpriseManaged()) { 12237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delegate_->ShowKioskEnableScreen(); 12247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 12257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 12267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleToggleResetScreen() { 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_ && 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !g_browser_process->browser_policy_connector()->IsEnterpriseManaged()) { 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowResetScreen(); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SigninScreenHandler::HandleToggleKioskAutolaunchScreen() { 1235868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (delegate_ && 1236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) !g_browser_process->browser_policy_connector()->IsEnterpriseManaged()) { 1237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->ShowKioskAutolaunchScreen(); 1238868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLaunchHelpApp(double help_topic_id) { 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!help_app_.get()) 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_app_ = new HelpAppLauncher(GetNativeWindow()); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) help_app_->ShowHelpTopic( 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<HelpAppLauncher::HelpTopic>(help_topic_id)); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::FillUserDictionary(User* user, 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_owner, 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryValue* user_dict) { 12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& email = user->email(); 12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_public_account = 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user->GetType() == User::USER_TYPE_PUBLIC_ACCOUNT; 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_locally_managed_user = 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user->GetType() == User::USER_TYPE_LOCALLY_MANAGED; 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetString(kKeyUsername, email); 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetString(kKeyEmailAddress, user->display_email()); 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetString(kKeyDisplayName, user->GetDisplayName()); 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetBoolean(kKeyPublicAccount, is_public_account); 12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetBoolean(kKeyLocallyManagedUser, is_locally_managed_user); 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetInteger(kKeyOauthTokenStatus, user->oauth_token_status()); 1265868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) user_dict->SetBoolean(kKeySignedIn, user->is_logged_in()); 12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetBoolean(kKeyIsOwner, is_owner); 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_public_account) { 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy::BrowserPolicyConnector* policy_connector = 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_browser_process->browser_policy_connector(); 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (policy_connector->IsEnterpriseManaged()) { 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_dict->SetString(kKeyEnterpriseDomain, 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_connector->GetEnterpriseDomain()); 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::SendUserList(bool animated) { 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max_non_owner_users = kMaxUsers - 1; 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t non_owner_count = 0; 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ListValue users_list; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UserList& users = delegate_->GetUsers(); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(nkostylev): Show optional intro dialog about multi-profiles feature 1290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // based on user preferences. http://crbug.com/230862 1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TODO(nkostylev): Move to a separate method in UserManager. 1293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // http://crbug.com/230852 1294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool is_signin_to_add = LoginDisplayHostImpl::default_host() && 1295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserManager::Get()->IsUserLoggedIn(); 1296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool single_user = users.size() == 1; 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (UserList::const_iterator it = users.begin(); it != users.end(); ++it) { 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& email = (*it)->email(); 1300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string owner; 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_owner = (email == owner); 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (non_owner_count < max_non_owner_users || is_owner) { 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValue* user_dict = new DictionaryValue(); 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FillUserDictionary(*it, is_owner, user_dict); 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_public_account = 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ((*it)->GetType() == User::USER_TYPE_PUBLIC_ACCOUNT); 1310868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool signed_in = (*it)->is_logged_in(); 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Single user check here is necessary because owner info might not be 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // available when running into login screen on first boot. 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See http://crosbug.com/12723 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_dict->SetBoolean(kKeyCanRemove, 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !single_user && 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !email.empty() && 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !is_owner && 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !is_public_account && 1319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !signed_in && 1320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !is_signin_to_add); 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_list.Append(user_dict); 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_owner) 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++non_owner_count; 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallJS("login.AccountPickerScreen.loadUsers", users_list, animated, 1329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->IsShowGuest()); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleAccountPickerReady() { 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Login WebUI >> AccountPickerReady"; 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_ && !ScreenLocker::default_screen_locker() && 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !chromeos::IsMachineHWIDCorrect() && 13372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !oobe_ui_) { 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ShowWrongHWIDScreen(); 13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs = g_browser_process->local_state(); 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prefs->GetBoolean(prefs::kFactoryResetRequested)) { 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->SetBoolean(prefs::kFactoryResetRequested, false); 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->CommitPendingWrite(); 1346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HandleToggleResetScreen(); 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_account_picker_showing_first_time_ = true; 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybePreloadAuthExtension(); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) { 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOCK_WEBUI_READY, 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 13612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->OnSigninScreenReady(); 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleWallpaperReady() { 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) { 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOCK_BACKGROUND_DISPLAYED, 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoginWebuiReady() { 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focus_stolen_) { 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set focus to the Gaia page. 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(altimofeev): temporary solution, until focus parameters are 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implemented on the Gaia side. 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do this only once. Any subsequent call would relod GAIA frame. 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_stolen_ = false; 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char code[] = "gWindowOnLoad();"; 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh = web_ui()->GetWebContents()->GetRenderViewHost(); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->ExecuteJavascriptInWebFrame( 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("//iframe[@id='signin-frame']\n//iframe"), 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16(code)); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!gaia_silent_load_) { 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOGIN_WEBUI_LOADED, 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_stolen_ = true; 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Prevent focus stealing by the Gaia page. 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(altimofeev): temporary solution, until focus parameters are 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // implemented on the Gaia side. 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char code[] = "var gWindowOnLoad = window.onload; " 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "window.onload=function() {};"; 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* rvh = web_ui()->GetWebContents()->GetRenderViewHost(); 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh->ExecuteJavascriptInWebFrame( 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("//iframe[@id='signin-frame']\n//iframe"), 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16(code)); 140290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // As we could miss and window.onload could already be called, restore 140390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // focus to current pod (see crbug/175243). 140490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RefocusCurrentPod(); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1406a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) HandleFrameLoadingCompleted(0); 1407eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (test_expects_complete_login_) 1409eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SubmitLoginFormForTest(); 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleDemoWebuiReady() { 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_DEMO_WEBUI_LOADED, 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleSignOutUser() { 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->Signout(); 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleUserImagesLoaded() { 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOGIN_USER_IMAGES_LOADED, 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleNetworkErrorShown() { 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN, 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleCreateAccount() { 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->CreateAccount(); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleOpenProxySettings() { 1444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LoginDisplayHostImpl::default_host()->OpenProxySettings(); 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoginVisible(const std::string& source) { 1448ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LOG(WARNING) << "Login WebUI >> loginVisible, src: " << source << ", " 1449ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch << "webui_visible_: " << webui_visible_; 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!webui_visible_) { 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There might be multiple messages from OOBE UI so send notifications after 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the first one only. 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 1457ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch TRACE_EVENT_ASYNC_END0( 1458ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch "ui", "ShowLoginWebUI", LoginDisplayHostImpl::kShowLoginWebUIid); 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webui_visible_ = true; 146190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (preferences_changed_delayed_) 146290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) OnPreferencesChanged(); 14632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleCancelPasswordChangedFlow() { 1466b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) StartClearingCookies(base::Bind( 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &SigninScreenHandler::CancelPasswordChangedFlowInternal, 1468b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_factory_.GetWeakPtr())); 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1471868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SigninScreenHandler::HandleCancelUserAdding() { 1472868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (delegate_) 1473868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->CancelUserAdding(); 1474868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 1475868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleMigrateUserData( 1477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& old_password) { 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->MigrateUserData(old_password); 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleResyncUserData() { 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->ResyncUserData(); 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleLoginUIStateChanged(const std::string& source, 1488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool new_value) { 148990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) LOG(INFO) << "Login WebUI >> active: " << new_value << ", " 149090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) << "source: " << source; 149190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1492868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (!KioskAppManager::Get()->GetAutoLaunchApp().empty() && 1493868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) KioskAppManager::Get()->IsAutoLaunchRequested()) { 1494868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LOG(INFO) << "Showing auto-launch warning"; 1495868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) HandleToggleKioskAutolaunchScreen(); 1496868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return; 1497868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (source == kSourceGaiaSignin) { 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_GAIA_SIGNIN; 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (source == kSourceAccountPicker) { 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ = UI_STATE_ACCOUNT_PICKER; 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleUnlockOnLoginSuccess() { 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(UserManager::Get()->IsUserLoggedIn()); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ScreenLocker::default_screen_locker()) 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScreenLocker::default_screen_locker()->UnlockOnLoginSuccess(); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)void SigninScreenHandler::HandleFrameLoadingCompleted(int status) { 1516ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const net::Error frame_error = static_cast<net::Error>(-status); 1517ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (frame_error == net::ERR_ABORTED) { 1518ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LOG(WARNING) << "Ignore gaia frame error: " << frame_error; 1519ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 1520ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1521ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch frame_error_ = frame_error; 1522ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (frame_error == net::OK) { 1523a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) LOG(INFO) << "Gaia frame is loaded"; 1524a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_state_ = FRAME_STATE_LOADED; 1525a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } else { 1526a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) LOG(WARNING) << "Gaia frame error: " << frame_error_; 1527a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) frame_state_ = FRAME_STATE_ERROR; 1528a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 1529868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (network_state_informer_->state() != NetworkStateInformer::ONLINE) 15312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1532a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (frame_state_ == FRAME_STATE_LOADED) { 1533a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) UpdateState(network_state_informer_->state(), 1534a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ERROR_REASON_UPDATE); 1535a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } else if (frame_state_ == FRAME_STATE_ERROR) { 1536a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) UpdateState(network_state_informer_->state(), 1537a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ERROR_REASON_FRAME_ERROR); 1538a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) } 15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleShowLoadingTimeoutError() { 1542a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) UpdateState(network_state_informer_->state(), 1543a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ErrorScreenActor::ERROR_REASON_LOADING_TIMEOUT); 15442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SigninScreenHandler::HandleUpdateOfflineLogin(bool offline_login_active) { 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) offline_login_active_ = offline_login_active; 15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::StartClearingDnsCache() { 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dns_clear_task_running_ || !g_browser_process->io_thread()) 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_cleared_ = false; 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTaskAndReply( 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&ClearDnsCache, g_browser_process->io_thread()), 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&SigninScreenHandler::OnDnsCleared, 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dns_clear_task_running_ = true; 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1563b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void SigninScreenHandler::StartClearingCookies( 1564b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const base::Closure& on_clear_callback) { 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookies_cleared_ = false; 1566b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ProfileHelper* profile_helper = 1567b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) g_browser_process->platform_part()->profile_helper(); 1568b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) LOG_ASSERT( 1569b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Profile::FromWebUI(web_ui()) == profile_helper->GetSigninProfile()); 1570b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) profile_helper->ClearSigninProfile(base::Bind( 1571b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) &SigninScreenHandler::OnCookiesCleared, 1572b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) weak_factory_.GetWeakPtr(), on_clear_callback)); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SigninScreenHandler::MaybePreloadAuthExtension() { 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fetching of the extension is not started before account picker page is 1577b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // loaded because it can affect the loading speed. Also if cookies clearing 1578b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // was initiated or |dns_clear_task_running_| then auth extension showing has 1579b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // already been initiated and preloading is senseless. 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not load the extension for the screen locker, see crosbug.com/25018. 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_account_picker_showing_first_time_ && 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !gaia_silent_load_ && 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !ScreenLocker::default_screen_locker() && 1584b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) !cookies_cleared_ && 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !dns_clear_task_running_ && 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) network_state_informer_->is_online()) { 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_silent_load_ = true; 15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gaia_silent_load_network_ = 15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_state_informer_->active_network_service_path(); 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadAuthExtension(true, true, false); 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SigninScreenHandler::AllWhitelistedUsersPresent() { 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool allow_new_user = false; 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (allow_new_user) 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserManager* user_manager = UserManager::Get(); 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UserList& users = user_manager->GetUsers(); 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!delegate_ || users.size() > kMaxUsers) { 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::ListValue* whitelist = NULL; 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!cros_settings->GetList(kAccountsPrefUsers, &whitelist) || !whitelist) 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < whitelist->GetSize(); ++i) { 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string whitelisted_user; 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NB: Wildcards in the whitelist are also detected as not present here. 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!whitelist->GetString(i, &whitelisted_user) || 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !user_manager->IsKnownUser(whitelisted_user)) { 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SigninScreenHandler::CancelPasswordChangedFlowInternal() { 16202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (delegate_) { 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Show(oobe_ui_); 16222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->CancelPasswordChangedFlow(); 16232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 16242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OobeUI::Screen SigninScreenHandler::GetCurrentScreen() const { 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN; 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (oobe_ui) 16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) screen = oobe_ui->current_screen(); 16312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return screen; 16322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1634a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool SigninScreenHandler::IsGaiaVisible() const { 16352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return IsSigninScreen(GetCurrentScreen()) && 16362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_state_ == UI_STATE_GAIA_SIGNIN; 16372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1639a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool SigninScreenHandler::IsGaiaHiddenByError() const { 1640a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return IsSigninScreenHiddenByError() && 1641a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ui_state_ == UI_STATE_GAIA_SIGNIN; 1642a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 1643a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsSigninScreenHiddenByError() const { 16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return (GetCurrentScreen() == OobeUI::SCREEN_ERROR_MESSAGE) && 16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (IsSigninScreen(error_screen_actor_->parent_screen())); 16472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsGuestSigninAllowed() const { 16502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cros_settings) 16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allow_guest; 16542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefAllowGuest, &allow_guest); 16552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return allow_guest; 16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool SigninScreenHandler::IsOfflineLoginAllowed() const { 16592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CrosSettings* cros_settings = CrosSettings::Get(); 16602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cros_settings) 16612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 16622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Offline login is allowed only when user pods are hidden. 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_pods; 16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cros_settings->GetBoolean(kAccountsPrefShowUserNamesOnSignIn, &show_pods); 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return !show_pods; 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SigninScreenHandler::SubmitLoginFormForTest() { 1670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VLOG(2) << "Submit login form for test, user=" << test_user_; 1671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string code; 1673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch code += "document.getElementById('Email').value = '" + test_user_ + "';"; 1674eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch code += "document.getElementById('Passwd').value = '" + test_pass_ + "';"; 1675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch code += "document.getElementById('signIn').click();"; 1676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderViewHost* rvh = web_ui()->GetWebContents()->GetRenderViewHost(); 1678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch rvh->ExecuteJavascriptInWebFrame( 1679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("//iframe[@id='signin-frame']\n//iframe"), 1680eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(code)); 1681eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1682eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Test properties are cleared in HandleCompleteLogin because the form 1683eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // submission might fail and login will not be attempted after reloading 1684eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // if they are cleared here. 1685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1686eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1688