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

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

Powered by Google App Engine
This is Rietveld 408576698