Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc |
| index 5b0bd91012a55677057508b67c19977a5b0cd43d..306a4e26418662dd17db90b8b8ef45bb5960ecb3 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc |
| @@ -4,35 +4,12 @@ |
| #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" |
| -#include "base/logging.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/time/time.h" |
| -#include "chrome/browser/chrome_notification_types.h" |
| -#include "chrome/browser/chromeos/app_mode/app_session_lifetime.h" |
| -#include "chrome/browser/chromeos/app_mode/certificate_manager_dialog.h" |
| -#include "chrome/browser/chromeos/login/ui/captive_portal_window_proxy.h" |
| -#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| -#include "chrome/browser/chromeos/login/ui/webui_login_view.h" |
| -#include "chrome/browser/extensions/component_loader.h" |
| -#include "chrome/browser/extensions/extension_service.h" |
| -#include "chrome/browser/profiles/profile_manager.h" |
| -#include "chrome/browser/ui/extensions/app_launch_params.h" |
| -#include "chrome/browser/ui/extensions/application_launch.h" |
| -#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h" |
| -#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" |
| -#include "chrome/common/extensions/extension_constants.h" |
| +#include "chrome/browser/chromeos/login/screens/network_error_model.h" |
| #include "chrome/grit/chromium_strings.h" |
| #include "chrome/grit/generated_resources.h" |
| -#include "chromeos/dbus/dbus_thread_manager.h" |
| -#include "chromeos/dbus/power_manager_client.h" |
| -#include "chromeos/dbus/session_manager_client.h" |
| -#include "chromeos/network/portal_detector/network_portal_detector.h" |
| -#include "chromeos/network/portal_detector/network_portal_detector_strategy.h" |
| #include "components/login/localized_values_builder.h" |
| -#include "components/user_manager/user_manager.h" |
| -#include "extensions/browser/extension_system.h" |
| -#include "extensions/common/constants.h" |
| -#include "grit/browser_resources.h" |
| #include "ui/strings/grit/ui_strings.h" |
| namespace { |
| @@ -43,131 +20,48 @@ const char kJsScreenPath[] = "login.ErrorMessageScreen"; |
| namespace chromeos { |
| -ErrorScreenHandler::ErrorScreenHandler( |
| - const scoped_refptr<NetworkStateInformer>& network_state_informer) |
| +ErrorScreenHandler::ErrorScreenHandler() |
| : BaseScreenHandler(kJsScreenPath), |
| - delegate_(NULL), |
| - network_state_informer_(network_state_informer), |
| + model_(nullptr), |
| show_on_init_(false), |
| weak_ptr_factory_(this) { |
| - DCHECK(network_state_informer_.get()); |
| } |
| ErrorScreenHandler::~ErrorScreenHandler() { |
| - if (delegate_) |
| - delegate_->OnActorDestroyed(); |
| + if (model_) |
| + model_->OnViewDestroyed(this); |
| } |
| -void ErrorScreenHandler::SetDelegate(ErrorScreenActorDelegate* delegate) { |
| - delegate_ = delegate; |
| +void ErrorScreenHandler::PrepareToShow() { |
| } |
| -void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen, |
| - base::DictionaryValue* params, |
| - const base::Closure& on_hide) { |
| +void ErrorScreenHandler::Show() { |
| if (!page_is_ready()) { |
| show_on_init_ = true; |
| return; |
| } |
| - parent_screen_ = parent_screen; |
| - on_hide_.reset(new base::Closure(on_hide)); |
| - ShowScreen(OobeUI::kScreenErrorMessage, params); |
| - NetworkErrorShown(); |
| - NetworkPortalDetector::Get()->SetStrategy( |
| - PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN); |
| - if (delegate_) |
| - delegate_->OnErrorShow(); |
| - LOG(WARNING) << "Offline message is displayed"; |
| -} |
| - |
| -void ErrorScreenHandler::CheckAndShowScreen() { |
| - std::string screen_name; |
| - if (GetScreenName(parent_screen(), &screen_name)) |
| - ShowScreen(screen_name.c_str(), NULL); |
| -} |
| - |
| -void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen, |
| - base::DictionaryValue* params) { |
| - Show(parent_screen, |
| - params, |
| - base::Bind(&ErrorScreenHandler::CheckAndShowScreen, |
| - weak_ptr_factory_.GetWeakPtr())); |
| + BaseScreenHandler::ShowScreen(OobeUI::kScreenErrorMessage, NULL); |
| + if (model_) |
| + model_->OnShow(); |
| } |
| void ErrorScreenHandler::Hide() { |
|
Dmitry Polukhin
2015/03/05 09:56:54
It seems that ErrorScreen is not hiding on restori
|
| - if (parent_screen_ == OobeUI::SCREEN_UNKNOWN) |
| - return; |
| - if (on_hide_) |
| - on_hide_->Run(); |
| - NetworkPortalDetector::Get()->SetStrategy( |
| - PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN); |
| - if (delegate_) |
| - delegate_->OnErrorHide(); |
| - LOG(WARNING) << "Offline message is hidden"; |
| -} |
| - |
| -void ErrorScreenHandler::FixCaptivePortal() { |
| - if (!captive_portal_window_proxy_.get()) { |
| - content::WebContents* web_contents = |
| - LoginDisplayHostImpl::default_host()->GetWebUILoginView()-> |
| - GetWebContents(); |
| - captive_portal_window_proxy_.reset( |
| - new CaptivePortalWindowProxy(network_state_informer_.get(), |
| - web_contents)); |
| - } |
| - captive_portal_window_proxy_->ShowIfRedirected(); |
| -} |
| - |
| -void ErrorScreenHandler::ShowCaptivePortal() { |
| - // This call is an explicit user action |
| - // i.e. clicking on link so force dialog show. |
| - FixCaptivePortal(); |
| - captive_portal_window_proxy_->Show(); |
| -} |
| - |
| -void ErrorScreenHandler::HideCaptivePortal() { |
| - if (captive_portal_window_proxy_.get()) |
| - captive_portal_window_proxy_->Close(); |
| -} |
| - |
| -void ErrorScreenHandler::SetUIState(ErrorScreen::UIState ui_state) { |
| - show_connecting_indicator_ = false; |
| - ui_state_ = ui_state; |
| - if (page_is_ready()) |
| - CallJS("setUIState", static_cast<int>(ui_state_)); |
| -} |
| - |
| -void ErrorScreenHandler::SetErrorState(ErrorScreen::ErrorState error_state, |
| - const std::string& network) { |
| - error_state_ = error_state; |
| - network_ = network; |
| - if (page_is_ready()) |
| - CallJS("setErrorState", static_cast<int>(error_state_), network); |
| -} |
| - |
| -void ErrorScreenHandler::AllowGuestSignin(bool allowed) { |
| - guest_signin_allowed_ = allowed; |
| - if (page_is_ready()) |
| - CallJS("allowGuestSignin", allowed); |
| } |
| -void ErrorScreenHandler::AllowOfflineLogin(bool allowed) { |
| - offline_login_allowed_ = allowed; |
| - if (page_is_ready()) |
| - CallJS("allowOfflineLogin", allowed); |
| +void ErrorScreenHandler::Bind(NetworkErrorModel& model) { |
| + model_ = &model; |
| + BaseScreenHandler::SetBaseScreen(model_); |
| } |
| -void ErrorScreenHandler::ShowConnectingIndicator(bool show) { |
| - show_connecting_indicator_ = show; |
| - if (page_is_ready()) |
| - CallJS("showConnectingIndicator", show); |
| +void ErrorScreenHandler::Unbind() { |
| + model_ = nullptr; |
| + BaseScreenHandler::SetBaseScreen(nullptr); |
| } |
| -void ErrorScreenHandler::NetworkErrorShown() { |
| - content::NotificationService::current()->Notify( |
| - chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN, |
| - content::NotificationService::AllSources(), |
| - content::NotificationService::NoDetails()); |
| +void ErrorScreenHandler::ShowScreen(OobeUI::Screen screen) { |
| + std::string screen_name; |
| + if (GetScreenName(screen, &screen_name)) |
| + BaseScreenHandler::ShowScreen(screen_name.c_str(), NULL); |
| } |
| bool ErrorScreenHandler::GetScreenName(OobeUI::Screen screen, |
| @@ -179,75 +73,14 @@ bool ErrorScreenHandler::GetScreenName(OobeUI::Screen screen, |
| return true; |
| } |
| -void ErrorScreenHandler::HandleShowCaptivePortal() { |
| - ShowCaptivePortal(); |
| -} |
| - |
| void ErrorScreenHandler::HandleHideCaptivePortal() { |
| - HideCaptivePortal(); |
| -} |
| - |
| -void ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked() { |
| - chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> |
| - StartDeviceWipe(); |
| -} |
| - |
| -void ErrorScreenHandler::HandleRebootButtonClicked() { |
| - chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart(); |
| -} |
| - |
| -void ErrorScreenHandler::HandleDiagnoseButtonClicked() { |
| - Profile* profile = ProfileManager::GetActiveUserProfile(); |
| - ExtensionService* extension_service = |
| - extensions::ExtensionSystem::Get(profile)->extension_service(); |
| - |
| - std::string extension_id = |
| - extension_service->component_loader()->Add( |
| - IDR_CONNECTIVITY_DIAGNOSTICS_MANIFEST, |
| - base::FilePath(extension_misc::kConnectivityDiagnosticsKioskPath)); |
| - |
| - const extensions::Extension* extension = extension_service-> |
| - GetExtensionById(extension_id, true); |
| - OpenApplication( |
| - AppLaunchParams(profile, extension, extensions::LAUNCH_CONTAINER_WINDOW, |
| - NEW_WINDOW, extensions::SOURCE_CHROME_INTERNAL)); |
| - InitAppSession(profile, extension_id); |
| - |
| - user_manager::UserManager::Get()->SessionStarted(); |
| - |
| - LoginDisplayHostImpl::default_host()->Finalize(); |
| -} |
| - |
| -void ErrorScreenHandler::HandleConfigureCerts() { |
| - CertificateManagerDialog* dialog = |
| - new CertificateManagerDialog(ProfileManager::GetActiveUserProfile(), |
| - NULL, |
| - GetNativeWindow()); |
| - dialog->Show(); |
| -} |
| - |
| -void ErrorScreenHandler::HandleLaunchOobeGuestSession() { |
| - if (delegate_) |
| - delegate_->OnLaunchOobeGuestSession(); |
| + model_->HideCaptivePortal(); |
| } |
| void ErrorScreenHandler::RegisterMessages() { |
| - AddCallback("showCaptivePortal", |
| - &ErrorScreenHandler::HandleShowCaptivePortal); |
| AddCallback("hideCaptivePortal", |
| &ErrorScreenHandler::HandleHideCaptivePortal); |
| - AddCallback("localStateErrorPowerwashButtonClicked", |
| - &ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked); |
| - AddCallback("rebootButtonClicked", |
| - &ErrorScreenHandler::HandleRebootButtonClicked); |
| - AddCallback("diagnoseButtonClicked", |
| - &ErrorScreenHandler::HandleDiagnoseButtonClicked); |
| - AddCallback("configureCertsClicked", |
| - &ErrorScreenHandler::HandleConfigureCerts); |
| - AddCallback("launchOobeGuestSession", |
| - &ErrorScreenHandler::HandleLaunchOobeGuestSession); |
| - AddCallback("rollbackOkButtonClicked", |
| - &ErrorScreenHandler::HandleRebootButtonClicked); |
| + BaseScreenHandler::RegisterMessages(); |
| } |
| void ErrorScreenHandler::DeclareLocalizedValues( |
| @@ -289,15 +122,10 @@ void ErrorScreenHandler::DeclareLocalizedValues( |
| void ErrorScreenHandler::Initialize() { |
| if (!page_is_ready()) |
| return; |
| + |
| if (show_on_init_) { |
| - base::DictionaryValue params; |
| - params.SetInteger("uiState", static_cast<int>(ui_state_)); |
| - params.SetInteger("errorState", static_cast<int>(error_state_)); |
| - params.SetString("network", network_); |
| - params.SetBoolean("guestSigninAllowed", guest_signin_allowed_); |
| - params.SetBoolean("offlineLoginAllowed", offline_login_allowed_); |
| - params.SetBoolean("showConnectingIndicator", show_connecting_indicator_); |
| - Show(parent_screen_, ¶ms); |
| + // TODO(nkostylev): Check that context initial state is properly passed. |
| + Show(); |
| show_on_init_ = false; |
| } |
| } |