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

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc

Issue 872633008: Migrate (Network)ErrorScreen to ScreenContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
6 6
7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
9 #include "base/time/time.h" 8 #include "base/time/time.h"
10 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chromeos/login/screens/network_error_model.h"
11 #include "chrome/browser/chromeos/app_mode/app_session_lifetime.h"
12 #include "chrome/browser/chromeos/app_mode/certificate_manager_dialog.h"
13 #include "chrome/browser/chromeos/login/ui/captive_portal_window_proxy.h"
14 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
15 #include "chrome/browser/chromeos/login/ui/webui_login_view.h"
16 #include "chrome/browser/extensions/component_loader.h"
17 #include "chrome/browser/extensions/extension_service.h"
18 #include "chrome/browser/profiles/profile_manager.h"
19 #include "chrome/browser/ui/extensions/app_launch_params.h"
20 #include "chrome/browser/ui/extensions/application_launch.h"
21 #include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h"
22 #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
23 #include "chrome/common/extensions/extension_constants.h"
24 #include "chrome/grit/chromium_strings.h" 10 #include "chrome/grit/chromium_strings.h"
25 #include "chrome/grit/generated_resources.h" 11 #include "chrome/grit/generated_resources.h"
26 #include "chromeos/dbus/dbus_thread_manager.h"
27 #include "chromeos/dbus/power_manager_client.h"
28 #include "chromeos/dbus/session_manager_client.h"
29 #include "chromeos/network/portal_detector/network_portal_detector.h"
30 #include "chromeos/network/portal_detector/network_portal_detector_strategy.h"
31 #include "components/login/localized_values_builder.h" 12 #include "components/login/localized_values_builder.h"
32 #include "components/user_manager/user_manager.h"
33 #include "extensions/browser/extension_system.h"
34 #include "extensions/common/constants.h"
35 #include "grit/browser_resources.h"
36 #include "ui/strings/grit/ui_strings.h" 13 #include "ui/strings/grit/ui_strings.h"
37 14
38 namespace { 15 namespace {
39 16
40 const char kJsScreenPath[] = "login.ErrorMessageScreen"; 17 const char kJsScreenPath[] = "login.ErrorMessageScreen";
41 18
42 } // namespace 19 } // namespace
43 20
44 namespace chromeos { 21 namespace chromeos {
45 22
46 ErrorScreenHandler::ErrorScreenHandler( 23 ErrorScreenHandler::ErrorScreenHandler()
47 const scoped_refptr<NetworkStateInformer>& network_state_informer)
48 : BaseScreenHandler(kJsScreenPath), 24 : BaseScreenHandler(kJsScreenPath),
49 delegate_(NULL), 25 model_(nullptr),
50 network_state_informer_(network_state_informer),
51 show_on_init_(false), 26 show_on_init_(false),
52 weak_ptr_factory_(this) { 27 weak_ptr_factory_(this) {
53 DCHECK(network_state_informer_.get());
54 } 28 }
55 29
56 ErrorScreenHandler::~ErrorScreenHandler() { 30 ErrorScreenHandler::~ErrorScreenHandler() {
57 if (delegate_) 31 if (model_)
58 delegate_->OnActorDestroyed(); 32 model_->OnViewDestroyed(this);
59 } 33 }
60 34
61 void ErrorScreenHandler::SetDelegate(ErrorScreenActorDelegate* delegate) { 35 void ErrorScreenHandler::PrepareToShow() {
62 delegate_ = delegate;
63 } 36 }
64 37
65 void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen, 38 void ErrorScreenHandler::Show() {
66 base::DictionaryValue* params,
67 const base::Closure& on_hide) {
68 if (!page_is_ready()) { 39 if (!page_is_ready()) {
69 show_on_init_ = true; 40 show_on_init_ = true;
70 return; 41 return;
71 } 42 }
72 parent_screen_ = parent_screen; 43 BaseScreenHandler::ShowScreen(OobeUI::kScreenErrorMessage, NULL);
73 on_hide_.reset(new base::Closure(on_hide)); 44 if (model_)
74 ShowScreen(OobeUI::kScreenErrorMessage, params); 45 model_->OnShow();
75 NetworkErrorShown();
76 NetworkPortalDetector::Get()->SetStrategy(
77 PortalDetectorStrategy::STRATEGY_ID_ERROR_SCREEN);
78 if (delegate_)
79 delegate_->OnErrorShow();
80 LOG(WARNING) << "Offline message is displayed";
81 }
82
83 void ErrorScreenHandler::CheckAndShowScreen() {
84 std::string screen_name;
85 if (GetScreenName(parent_screen(), &screen_name))
86 ShowScreen(screen_name.c_str(), NULL);
87 }
88
89 void ErrorScreenHandler::Show(OobeDisplay::Screen parent_screen,
90 base::DictionaryValue* params) {
91 Show(parent_screen,
92 params,
93 base::Bind(&ErrorScreenHandler::CheckAndShowScreen,
94 weak_ptr_factory_.GetWeakPtr()));
95 } 46 }
96 47
97 void ErrorScreenHandler::Hide() { 48 void ErrorScreenHandler::Hide() {
Dmitry Polukhin 2015/03/05 09:56:54 It seems that ErrorScreen is not hiding on restori
98 if (parent_screen_ == OobeUI::SCREEN_UNKNOWN)
99 return;
100 if (on_hide_)
101 on_hide_->Run();
102 NetworkPortalDetector::Get()->SetStrategy(
103 PortalDetectorStrategy::STRATEGY_ID_LOGIN_SCREEN);
104 if (delegate_)
105 delegate_->OnErrorHide();
106 LOG(WARNING) << "Offline message is hidden";
107 } 49 }
108 50
109 void ErrorScreenHandler::FixCaptivePortal() { 51 void ErrorScreenHandler::Bind(NetworkErrorModel& model) {
110 if (!captive_portal_window_proxy_.get()) { 52 model_ = &model;
111 content::WebContents* web_contents = 53 BaseScreenHandler::SetBaseScreen(model_);
112 LoginDisplayHostImpl::default_host()->GetWebUILoginView()->
113 GetWebContents();
114 captive_portal_window_proxy_.reset(
115 new CaptivePortalWindowProxy(network_state_informer_.get(),
116 web_contents));
117 }
118 captive_portal_window_proxy_->ShowIfRedirected();
119 } 54 }
120 55
121 void ErrorScreenHandler::ShowCaptivePortal() { 56 void ErrorScreenHandler::Unbind() {
122 // This call is an explicit user action 57 model_ = nullptr;
123 // i.e. clicking on link so force dialog show. 58 BaseScreenHandler::SetBaseScreen(nullptr);
124 FixCaptivePortal();
125 captive_portal_window_proxy_->Show();
126 } 59 }
127 60
128 void ErrorScreenHandler::HideCaptivePortal() { 61 void ErrorScreenHandler::ShowScreen(OobeUI::Screen screen) {
129 if (captive_portal_window_proxy_.get()) 62 std::string screen_name;
130 captive_portal_window_proxy_->Close(); 63 if (GetScreenName(screen, &screen_name))
131 } 64 BaseScreenHandler::ShowScreen(screen_name.c_str(), NULL);
132
133 void ErrorScreenHandler::SetUIState(ErrorScreen::UIState ui_state) {
134 show_connecting_indicator_ = false;
135 ui_state_ = ui_state;
136 if (page_is_ready())
137 CallJS("setUIState", static_cast<int>(ui_state_));
138 }
139
140 void ErrorScreenHandler::SetErrorState(ErrorScreen::ErrorState error_state,
141 const std::string& network) {
142 error_state_ = error_state;
143 network_ = network;
144 if (page_is_ready())
145 CallJS("setErrorState", static_cast<int>(error_state_), network);
146 }
147
148 void ErrorScreenHandler::AllowGuestSignin(bool allowed) {
149 guest_signin_allowed_ = allowed;
150 if (page_is_ready())
151 CallJS("allowGuestSignin", allowed);
152 }
153
154 void ErrorScreenHandler::AllowOfflineLogin(bool allowed) {
155 offline_login_allowed_ = allowed;
156 if (page_is_ready())
157 CallJS("allowOfflineLogin", allowed);
158 }
159
160 void ErrorScreenHandler::ShowConnectingIndicator(bool show) {
161 show_connecting_indicator_ = show;
162 if (page_is_ready())
163 CallJS("showConnectingIndicator", show);
164 }
165
166 void ErrorScreenHandler::NetworkErrorShown() {
167 content::NotificationService::current()->Notify(
168 chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN,
169 content::NotificationService::AllSources(),
170 content::NotificationService::NoDetails());
171 } 65 }
172 66
173 bool ErrorScreenHandler::GetScreenName(OobeUI::Screen screen, 67 bool ErrorScreenHandler::GetScreenName(OobeUI::Screen screen,
174 std::string* name) const { 68 std::string* name) const {
175 OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); 69 OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController());
176 if (!oobe_ui) 70 if (!oobe_ui)
177 return false; 71 return false;
178 *name = oobe_ui->GetScreenName(screen); 72 *name = oobe_ui->GetScreenName(screen);
179 return true; 73 return true;
180 } 74 }
181 75
182 void ErrorScreenHandler::HandleShowCaptivePortal() {
183 ShowCaptivePortal();
184 }
185
186 void ErrorScreenHandler::HandleHideCaptivePortal() { 76 void ErrorScreenHandler::HandleHideCaptivePortal() {
187 HideCaptivePortal(); 77 model_->HideCaptivePortal();
188 }
189
190 void ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked() {
191 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->
192 StartDeviceWipe();
193 }
194
195 void ErrorScreenHandler::HandleRebootButtonClicked() {
196 chromeos::DBusThreadManager::Get()->GetPowerManagerClient()->RequestRestart();
197 }
198
199 void ErrorScreenHandler::HandleDiagnoseButtonClicked() {
200 Profile* profile = ProfileManager::GetActiveUserProfile();
201 ExtensionService* extension_service =
202 extensions::ExtensionSystem::Get(profile)->extension_service();
203
204 std::string extension_id =
205 extension_service->component_loader()->Add(
206 IDR_CONNECTIVITY_DIAGNOSTICS_MANIFEST,
207 base::FilePath(extension_misc::kConnectivityDiagnosticsKioskPath));
208
209 const extensions::Extension* extension = extension_service->
210 GetExtensionById(extension_id, true);
211 OpenApplication(
212 AppLaunchParams(profile, extension, extensions::LAUNCH_CONTAINER_WINDOW,
213 NEW_WINDOW, extensions::SOURCE_CHROME_INTERNAL));
214 InitAppSession(profile, extension_id);
215
216 user_manager::UserManager::Get()->SessionStarted();
217
218 LoginDisplayHostImpl::default_host()->Finalize();
219 }
220
221 void ErrorScreenHandler::HandleConfigureCerts() {
222 CertificateManagerDialog* dialog =
223 new CertificateManagerDialog(ProfileManager::GetActiveUserProfile(),
224 NULL,
225 GetNativeWindow());
226 dialog->Show();
227 }
228
229 void ErrorScreenHandler::HandleLaunchOobeGuestSession() {
230 if (delegate_)
231 delegate_->OnLaunchOobeGuestSession();
232 } 78 }
233 79
234 void ErrorScreenHandler::RegisterMessages() { 80 void ErrorScreenHandler::RegisterMessages() {
235 AddCallback("showCaptivePortal",
236 &ErrorScreenHandler::HandleShowCaptivePortal);
237 AddCallback("hideCaptivePortal", 81 AddCallback("hideCaptivePortal",
238 &ErrorScreenHandler::HandleHideCaptivePortal); 82 &ErrorScreenHandler::HandleHideCaptivePortal);
239 AddCallback("localStateErrorPowerwashButtonClicked", 83 BaseScreenHandler::RegisterMessages();
240 &ErrorScreenHandler::HandleLocalStateErrorPowerwashButtonClicked);
241 AddCallback("rebootButtonClicked",
242 &ErrorScreenHandler::HandleRebootButtonClicked);
243 AddCallback("diagnoseButtonClicked",
244 &ErrorScreenHandler::HandleDiagnoseButtonClicked);
245 AddCallback("configureCertsClicked",
246 &ErrorScreenHandler::HandleConfigureCerts);
247 AddCallback("launchOobeGuestSession",
248 &ErrorScreenHandler::HandleLaunchOobeGuestSession);
249 AddCallback("rollbackOkButtonClicked",
250 &ErrorScreenHandler::HandleRebootButtonClicked);
251 } 84 }
252 85
253 void ErrorScreenHandler::DeclareLocalizedValues( 86 void ErrorScreenHandler::DeclareLocalizedValues(
254 ::login::LocalizedValuesBuilder* builder) { 87 ::login::LocalizedValuesBuilder* builder) {
255 builder->Add("loginErrorTitle", IDS_LOGIN_ERROR_TITLE); 88 builder->Add("loginErrorTitle", IDS_LOGIN_ERROR_TITLE);
256 builder->Add("rollbackErrorTitle", IDS_RESET_SCREEN_REVERT_ERROR); 89 builder->Add("rollbackErrorTitle", IDS_RESET_SCREEN_REVERT_ERROR);
257 builder->Add("signinOfflineMessageBody", IDS_LOGIN_OFFLINE_MESSAGE); 90 builder->Add("signinOfflineMessageBody", IDS_LOGIN_OFFLINE_MESSAGE);
258 builder->Add("kioskOfflineMessageBody", IDS_KIOSK_OFFLINE_MESSAGE); 91 builder->Add("kioskOfflineMessageBody", IDS_KIOSK_OFFLINE_MESSAGE);
259 builder->Add("kioskOnlineTitle", IDS_LOGIN_NETWORK_RESTORED_TITLE); 92 builder->Add("kioskOnlineTitle", IDS_LOGIN_NETWORK_RESTORED_TITLE);
260 builder->Add("kioskOnlineMessageBody", IDS_KIOSK_ONLINE_MESSAGE); 93 builder->Add("kioskOnlineMessageBody", IDS_KIOSK_ONLINE_MESSAGE);
(...skipping 21 matching lines...) Expand all
282 builder->Add("rebootButton", IDS_RELAUNCH_BUTTON); 115 builder->Add("rebootButton", IDS_RELAUNCH_BUTTON);
283 builder->Add("diagnoseButton", IDS_DIAGNOSE_BUTTON); 116 builder->Add("diagnoseButton", IDS_DIAGNOSE_BUTTON);
284 builder->Add("configureCertsButton", IDS_MANAGE_CERTIFICATES); 117 builder->Add("configureCertsButton", IDS_MANAGE_CERTIFICATES);
285 builder->Add("continueButton", IDS_NETWORK_SELECTION_CONTINUE_BUTTON); 118 builder->Add("continueButton", IDS_NETWORK_SELECTION_CONTINUE_BUTTON);
286 builder->Add("okButton", IDS_APP_OK); 119 builder->Add("okButton", IDS_APP_OK);
287 } 120 }
288 121
289 void ErrorScreenHandler::Initialize() { 122 void ErrorScreenHandler::Initialize() {
290 if (!page_is_ready()) 123 if (!page_is_ready())
291 return; 124 return;
125
292 if (show_on_init_) { 126 if (show_on_init_) {
293 base::DictionaryValue params; 127 // TODO(nkostylev): Check that context initial state is properly passed.
294 params.SetInteger("uiState", static_cast<int>(ui_state_)); 128 Show();
295 params.SetInteger("errorState", static_cast<int>(error_state_));
296 params.SetString("network", network_);
297 params.SetBoolean("guestSigninAllowed", guest_signin_allowed_);
298 params.SetBoolean("offlineLoginAllowed", offline_login_allowed_);
299 params.SetBoolean("showConnectingIndicator", show_connecting_indicator_);
300 Show(parent_screen_, &params);
301 show_on_init_ = false; 129 show_on_init_ = false;
302 } 130 }
303 } 131 }
304 132
305 } // namespace chromeos 133 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698