Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(794)

Unified Diff: chrome/browser/chromeos/login/screens/error_screen.cc

Issue 872633008: Migrate (Network)ErrorScreen to ScreenContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/screens/error_screen.cc
diff --git a/chrome/browser/chromeos/login/screens/error_screen.cc b/chrome/browser/chromeos/login/screens/error_screen.cc
index 14971c9c5dba73fe4b5c0c0af21c8726f5872c86..98569acba5e2198f697bd32ce626a0a05fe6e331 100644
--- a/chrome/browser/chromeos/login/screens/error_screen.cc
+++ b/chrome/browser/chromeos/login/screens/error_screen.cc
@@ -4,60 +4,141 @@
#include "chrome/browser/chromeos/login/screens/error_screen.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/command_line.h"
+#include "base/logging.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/auth/chrome_login_performer.h"
#include "chrome/browser/chromeos/login/chrome_restart_request.h"
-#include "chrome/browser/chromeos/login/screens/error_screen_actor.h"
+#include "chrome/browser/chromeos/login/screens/network_error_view.h"
#include "chrome/browser/chromeos/login/startup_utils.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/chromeos/login/wizard_controller.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/chromeos/settings/device_settings_service.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/common/extensions/extension_constants.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/user_manager/user_manager.h"
+#include "content/public/browser/notification_service.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/common/constants.h"
+#include "grit/browser_resources.h"
+#include "ui/gfx/native_widget_types.h"
namespace chromeos {
ErrorScreen::ErrorScreen(BaseScreenDelegate* base_screen_delegate,
- ErrorScreenActor* actor)
- : BaseScreen(base_screen_delegate),
- actor_(actor),
- parent_screen_(OobeDisplay::SCREEN_UNKNOWN),
+ NetworkErrorView* view)
+ : NetworkErrorModel(base_screen_delegate),
+ view_(view),
weak_factory_(this) {
- CHECK(actor_);
- actor_->SetDelegate(this);
+ network_state_informer_ = new NetworkStateInformer();
+ network_state_informer_->Init();
+ if (view_)
+ view_->Bind(*this);
}
ErrorScreen::~ErrorScreen() {
- if (actor_)
- actor_->SetDelegate(NULL);
+ if (view_)
+ view_->Unbind();
}
void ErrorScreen::PrepareToShow() {
+ if (view_)
+ view_->PrepareToShow();
}
void ErrorScreen::Show() {
- if (actor_)
- actor_->Show(parent_screen(), NULL);
+ if (!on_hide_callback()) {
+ SetHideCallback(base::Bind(&ErrorScreen::DefaultHideCallback,
+ weak_factory_.GetWeakPtr()));
+ }
+ if (view_)
+ view_->Show();
}
void ErrorScreen::Hide() {
- if (actor_)
- actor_->Hide();
+ if (view_)
+ view_->Hide();
}
-std::string ErrorScreen::GetName() const {
- return WizardController::kErrorScreenName;
+void ErrorScreen::OnShow() {
+ LOG(WARNING) << "Network error screen message is shown";
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Is that a good logging level?
Nikita (slow) 2015/02/11 12:18:57 Just leaving as is. INFO level will be filtrated.
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN,
+ content::NotificationService::AllSources(),
+ content::NotificationService::NoDetails());
+ NetworkPortalDetector::Get()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN);
}
-void ErrorScreen::OnErrorShow() {}
+void ErrorScreen::OnHide() {
+ LOG(WARNING) << "Network error screen message is hidden";
+ NetworkErrorModel::OnHide();
+ NetworkPortalDetector::Get()->SetStrategy(
+ PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Is it always a "Login Screen" strategy?
Nikita (slow) 2015/02/11 12:18:57 Yes, that's name may be a bit too specific but bas
+}
-void ErrorScreen::OnErrorHide() {}
+void ErrorScreen::OnUserAction(const std::string& action_id) {
+ if (action_id == kUserActionShowCaptivePortalClicked)
+ ShowCaptivePortal();
+ else if (action_id == kUserActionConfigureCertsButtonClicked)
+ HandleConfigureCerts();
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Let's agree on a naming scheme here. I'd prefer On
Nikita (slow) 2015/02/11 12:18:57 Done.
+ else if (action_id == kUserActionDiagnoseButtonClicked)
+ HandleDiagnoseButtonClicked();
+ else if (action_id == kUserActionLaunchOobeGuestSessionClicked)
+ HandleLaunchOobeGuestSession();
+ else if (action_id == kUserActionLocalStateErrorPowerwashButtonClicked)
+ HandleLocalStateErrorPowerwashButtonClicked();
+ else if (action_id == kUserActionRebootButtonClicked)
+ HandleRebootButtonClicked();
+}
-void ErrorScreen::OnLaunchOobeGuestSession() {
- DeviceSettingsService::Get()->GetOwnershipStatusAsync(
- base::Bind(&ErrorScreen::StartGuestSessionAfterOwnershipCheck,
- weak_factory_.GetWeakPtr()));
+void ErrorScreen::OnContextKeyUpdated(
+ const ::login::ScreenContext::KeyType& key) {
+ NetworkErrorModel::OnContextKeyUpdated(key);
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Why do we have fallback here and don't have simila
Nikita (slow) 2015/02/11 12:18:57 Done.
Denis Kuznetsov (DE-MUC) 2015/02/11 16:16:25 nit: use BaseSceen::OnContextKeyUpdated()
Nikita (slow) 2015/02/12 13:23:31 Done.
+}
+
+void ErrorScreen::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 ErrorScreen::HideCaptivePortal() {
+ if (captive_portal_window_proxy_.get())
+ captive_portal_window_proxy_->Close();
}
-void ErrorScreen::OnActorDestroyed() {
- actor_ = nullptr;
+void ErrorScreen::OnViewDestroyed(NetworkErrorView* view) {
+ if (view_ == view)
+ view_ = nullptr;
+}
+
+void ErrorScreen::ShowCaptivePortal() {
+ // This call is an explicit user action
+ // i.e. clicking on link so force dialog show.
+ FixCaptivePortal();
+ captive_portal_window_proxy_->Show();
}
void ErrorScreen::OnAuthFailure(const AuthFailure& error) {
@@ -102,49 +183,55 @@ void ErrorScreen::OnOnlineChecked(const std::string& username, bool success) {
LOG(FATAL);
}
-void ErrorScreen::FixCaptivePortal() {
- if (actor_)
- actor_->FixCaptivePortal();
+void ErrorScreen::DefaultHideCallback() {
+ if (view_)
+ view_->ShowScreen(parent_screen());
+ SetParentScreen(OobeUI::SCREEN_UNKNOWN);
}
-void ErrorScreen::ShowCaptivePortal() {
- if (actor_)
- actor_->ShowCaptivePortal();
+void ErrorScreen::HandleConfigureCerts() {
+ gfx::NativeWindow native_window =
+ LoginDisplayHostImpl::default_host()->GetNativeWindow();
+ CertificateManagerDialog* dialog = new CertificateManagerDialog(
+ ProfileManager::GetActiveUserProfile(), NULL, native_window);
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Why the "Active user"?
Nikita (slow) 2015/02/11 12:18:57 In this case ActiveUserProfile() will always retur
+ dialog->Show();
}
-void ErrorScreen::HideCaptivePortal() {
- if (actor_)
- actor_->HideCaptivePortal();
-}
+void ErrorScreen::HandleDiagnoseButtonClicked() {
+ Profile* profile = ProfileManager::GetActiveUserProfile();
+ ExtensionService* extension_service =
+ extensions::ExtensionSystem::Get(profile)->extension_service();
-void ErrorScreen::SetUIState(UIState ui_state) {
- if (actor_)
- actor_->SetUIState(ui_state);
-}
+ std::string extension_id = extension_service->component_loader()->Add(
+ IDR_CONNECTIVITY_DIAGNOSTICS_MANIFEST,
+ base::FilePath(extension_misc::kConnectivityDiagnosticsKioskPath));
-ErrorScreen::UIState ErrorScreen::GetUIState() const {
- return actor_ ? actor_->ui_state() : UI_STATE_UNKNOWN;
-}
+ 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();
-void ErrorScreen::SetErrorState(ErrorState error_state,
- const std::string& network) {
- if (actor_)
- actor_->SetErrorState(error_state, network);
+ LoginDisplayHostImpl::default_host()->Finalize();
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 What if this will happen inside user session (some
Nikita (slow) 2015/02/11 12:18:57 There're no plans to support this use case since i
}
-ErrorScreen::ErrorState ErrorScreen::GetErrorState() const {
- DCHECK(actor_);
- return actor_->error_state();
+void ErrorScreen::HandleLaunchOobeGuestSession() {
+ DeviceSettingsService::Get()->GetOwnershipStatusAsync(
+ base::Bind(&ErrorScreen::StartGuestSessionAfterOwnershipCheck,
Denis Kuznetsov (DE-MUC) 2015/02/10 17:03:26 Same question here.
Nikita (slow) 2015/02/11 12:18:58 Not possible since this is very specific case (ref
+ weak_factory_.GetWeakPtr()));
}
-void ErrorScreen::AllowGuestSignin(bool allow) {
- if (actor_)
- actor_->AllowGuestSignin(allow);
+void ErrorScreen::HandleLocalStateErrorPowerwashButtonClicked() {
+ chromeos::DBusThreadManager::Get()
+ ->GetSessionManagerClient()
+ ->StartDeviceWipe();
}
-void ErrorScreen::ShowConnectingIndicator(bool show) {
- if (actor_)
- actor_->ShowConnectingIndicator(show);
+void ErrorScreen::HandleRebootButtonClicked() {
+ chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
}
void ErrorScreen::StartGuestSessionAfterOwnershipCheck(

Powered by Google App Engine
This is Rietveld 408576698