15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/app_mode/app_session_lifetime.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/chromeos/app_mode/certificate_manager_dialog.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/captive_portal_window_proxy.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/webui_login_view.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/component_loader.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chromeos/dbus/power_manager_client.h" 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chromeos/dbus/session_manager_client.h" 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/portal_detector/network_portal_detector.h" 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/portal_detector/network_portal_detector_strategy.h" 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h" 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "grit/browser_resources.h" 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/strings/grit/ui_strings.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace { 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.ErrorMessageScreen"; 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ErrorScreenHandler::ErrorScreenHandler( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<NetworkStateInformer>& network_state_informer) 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : BaseScreenHandler(kJsScreenPath), 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delegate_(NULL), 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) network_state_informer_(network_state_informer), 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch show_on_init_(false), 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_ptr_factory_(this) { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(network_state_informer_.get()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ErrorScreenHandler::~ErrorScreenHandler() {} 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ErrorScreenHandler::SetDelegate(ErrorScreenActorDelegate* delegate) { 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delegate_ = delegate; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen, 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::DictionaryValue* params, 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& on_hide) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!page_is_ready()) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_on_init_ = true; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent_screen_ = parent_screen; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch on_hide_.reset(new base::Closure(on_hide)); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenErrorMessage, params); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkErrorShown(); 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkPortalDetector::Get()->SetStrategy( 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN); 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (delegate_) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delegate_->OnErrorShow(); 73ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(WARNING) << "Offline message is displayed"; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ErrorScreenHandler::CheckAndShowScreen() { 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string screen_name; 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (GetScreenName(parent_screen(), &screen_name)) 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ShowScreen(screen_name.c_str(), NULL); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::DictionaryValue* params) { 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Show(parent_screen, 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params, 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ErrorScreenHandler::CheckAndShowScreen, 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_ptr_factory_.GetWeakPtr())); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::Hide() { 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (parent_screen_ == OobeUI::SCREEN_UNKNOWN) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (on_hide_) 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch on_hide_->Run(); 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NetworkPortalDetector::Get()->SetStrategy( 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN); 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (delegate_) 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delegate_->OnErrorHide(); 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch LOG(WARNING) << "Offline message is hidden"; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::FixCaptivePortal() { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!captive_portal_window_proxy_.get()) { 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) content::WebContents* web_contents = 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LoginDisplayHostImpl::default_host()->GetWebUILoginView()-> 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GetWebContents(); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) captive_portal_window_proxy_.reset( 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new CaptivePortalWindowProxy(network_state_informer_.get(), 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) web_contents)); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) captive_portal_window_proxy_->ShowIfRedirected(); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::ShowCaptivePortal() { 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This call is an explicit user action 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // i.e. clicking on link so force dialog show. 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FixCaptivePortal(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) captive_portal_window_proxy_->Show(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::HideCaptivePortal() { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (captive_portal_window_proxy_.get()) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) captive_portal_window_proxy_->Close(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::SetUIState(ErrorScreen::UIState ui_state) { 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) show_connecting_indicator_ = false; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_state_ = ui_state; 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (page_is_ready()) 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CallJS("setUIState", static_cast<int>(ui_state_)); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::SetErrorState(ErrorScreen::ErrorState error_state, 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& network) { 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) error_state_ = error_state; 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) network_ = network; 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (page_is_ready()) 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CallJS("setErrorState", static_cast<int>(error_state_), network); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::AllowGuestSignin(bool allowed) { 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) guest_signin_allowed_ = allowed; 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (page_is_ready()) 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CallJS("allowGuestSignin", allowed); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::AllowOfflineLogin(bool allowed) { 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) offline_login_allowed_ = allowed; 14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (page_is_ready()) 15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) CallJS("allowOfflineLogin", allowed); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ErrorScreenHandler::ShowConnectingIndicator(bool show) { 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) show_connecting_indicator_ = show; 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (page_is_ready()) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CallJS("showConnectingIndicator", show); 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::NetworkErrorShown() { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::current()->Notify( 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllSources(), 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::NoDetails()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ErrorScreenHandler::GetScreenName(OobeUI::Screen screen, 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* name) const { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!oobe_ui) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *name = oobe_ui->GetScreenName(screen); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::HandleShowCaptivePortal() { 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowCaptivePortal(); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::HandleHideCaptivePortal() { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HideCaptivePortal(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked() { 18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> 18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) StartDeviceWipe(); 18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ErrorScreenHandler::HandleRebootButtonClicked() { 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ErrorScreenHandler::HandleDiagnoseButtonClicked() { 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Profile* profile = ProfileManager::GetActiveUserProfile(); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionService* extension_service = 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::ExtensionSystem::Get(profile)->extension_service(); 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string extension_id = 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_service->component_loader()->Add( 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IDR_CONNECTIVITY_DIAGNOSTICS_MANIFEST, 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath(extension_misc::kConnectivityDiagnosticsKioskPath)); 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const extensions::Extension* extension = extension_service-> 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetExtensionById(extension_id, true); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OpenApplication(AppLaunchParams(profile, extension, 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions::LAUNCH_CONTAINER_WINDOW, 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NEW_WINDOW)); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) InitAppSession(profile, extension_id); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) user_manager::UserManager::Get()->SessionStarted(); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) LoginDisplayHostImpl::default_host()->Finalize(); 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void ErrorScreenHandler::HandleConfigureCerts() { 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CertificateManagerDialog* dialog = 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) new CertificateManagerDialog(ProfileManager::GetActiveUserProfile(), 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NULL, 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetNativeWindow()); 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dialog->Show(); 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ErrorScreenHandler::HandleLaunchOobeGuestSession() { 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (delegate_) 224effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch delegate_->OnLaunchOobeGuestSession(); 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ErrorScreenHandler::RegisterMessages() { 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("showCaptivePortal", 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ErrorScreenHandler::HandleShowCaptivePortal); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("hideCaptivePortal", 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ErrorScreenHandler::HandleHideCaptivePortal); 23258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AddCallback("localStateErrorPowerwashButtonClicked", 23358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) &ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked); 234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddCallback("rebootButtonClicked", 235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) &ErrorScreenHandler::HandleRebootButtonClicked); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddCallback("diagnoseButtonClicked", 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &ErrorScreenHandler::HandleDiagnoseButtonClicked); 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddCallback("configureCertsClicked", 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &ErrorScreenHandler::HandleConfigureCerts); 240effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AddCallback("launchOobeGuestSession", 241effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &ErrorScreenHandler::HandleLaunchOobeGuestSession); 242010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AddCallback("rollbackOkButtonClicked", 243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &ErrorScreenHandler::HandleRebootButtonClicked); 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ErrorScreenHandler::DeclareLocalizedValues( 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 24858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) builder->Add("loginErrorTitle", IDS_LOGIN_ERROR_TITLE); 249010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) builder->Add("rollbackErrorTitle", IDS_RESET_SCREEN_REVERT_ERROR); 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinOfflineMessageBody", IDS_LOGIN_OFFLINE_MESSAGE); 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) builder->Add("kioskOfflineMessageBody", IDS_KIOSK_OFFLINE_MESSAGE); 252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("kioskOnlineTitle", IDS_LOGIN_NETWORK_RESTORED_TITLE); 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("kioskOnlineMessageBody", IDS_KIOSK_ONLINE_MESSAGE); 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) builder->Add("autoEnrollmentOfflineMessageBody", 255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDS_LOGIN_AUTO_ENROLLMENT_OFFLINE_MESSAGE); 256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) builder->AddF("rollbackErrorMessageBody", 257010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IDS_RESET_SCREEN_REVERT_ERROR_EXPLANATION, 258010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IDS_SHORT_PRODUCT_NAME); 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("captivePortalTitle", IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_TITLE); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("captivePortalMessage", IDS_LOGIN_MAYBE_CAPTIVE_PORTAL); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("captivePortalProxyMessage", 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_PROXY); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("captivePortalNetworkSelect", 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_NETWORK_SELECT); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("signinProxyMessageText", IDS_LOGIN_PROXY_ERROR_MESSAGE); 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("updateOfflineMessageBody", IDS_UPDATE_OFFLINE_MESSAGE); 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("updateProxyMessageText", IDS_UPDATE_PROXY_ERROR_MESSAGE); 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) builder->AddF("localStateErrorText0", IDS_LOCAL_STATE_ERROR_TEXT_0, 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) IDS_SHORT_PRODUCT_NAME); 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) builder->Add("localStateErrorText1", IDS_LOCAL_STATE_ERROR_TEXT_1); 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) builder->Add("localStateErrorPowerwashButton", 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) IDS_LOCAL_STATE_ERROR_POWERWASH_BUTTON); 273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) builder->Add("connectingIndicatorText", IDS_LOGIN_CONNECTING_INDICATOR_TEXT); 274effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("guestSigninFixNetwork", IDS_LOGIN_GUEST_SIGNIN_FIX_NETWORK); 275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) builder->Add("rebootButton", IDS_RELAUNCH_BUTTON); 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) builder->Add("diagnoseButton", IDS_DIAGNOSE_BUTTON); 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) builder->Add("configureCertsButton", IDS_MANAGE_CERTIFICATES); 278effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("continueButton", IDS_NETWORK_SELECTION_CONTINUE_BUTTON); 279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) builder->Add("okButton", IDS_APP_OK); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ErrorScreenHandler::Initialize() { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!page_is_ready()) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_on_init_) { 28658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::DictionaryValue params; 28758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.SetInteger("uiState", static_cast<int>(ui_state_)); 28858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.SetInteger("errorState", static_cast<int>(error_state_)); 28958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.SetString("network", network_); 29058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.SetBoolean("guestSigninAllowed", guest_signin_allowed_); 29158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) params.SetBoolean("offlineLoginAllowed", offline_login_allowed_); 292a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) params.SetBoolean("showConnectingIndicator", show_connecting_indicator_); 29358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Show(parent_screen_, ¶ms); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) show_on_init_ = false; 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 299