| OLD | NEW |
| 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/oobe_ui.h" | 5 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
| 6 | 6 |
| 7 #include <string> | |
| 8 | |
| 9 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 10 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 11 #include "base/logging.h" | 9 #include "base/logging.h" |
| 12 #include "base/memory/ref_counted_memory.h" | 10 #include "base/memory/ref_counted_memory.h" |
| 13 #include "base/values.h" | 11 #include "base/values.h" |
| 14 #include "chrome/browser/browser_about_handler.h" | 12 #include "chrome/browser/browser_about_handler.h" |
| 15 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" | 13 #include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_settings.h" |
| 16 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_actor.h" | 14 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen_actor.h" |
| 17 #include "chrome/browser/chromeos/login/login_display_host_impl.h" | 15 #include "chrome/browser/chromeos/login/login_display_host_impl.h" |
| 18 #include "chrome/browser/chromeos/login/screen_locker.h" | 16 #include "chrome/browser/chromeos/login/screen_locker.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 47 #include "content/public/browser/web_ui.h" | 45 #include "content/public/browser/web_ui.h" |
| 48 #include "content/public/browser/web_ui_data_source.h" | 46 #include "content/public/browser/web_ui_data_source.h" |
| 49 #include "grit/browser_resources.h" | 47 #include "grit/browser_resources.h" |
| 50 #include "ui/base/resource/resource_bundle.h" | 48 #include "ui/base/resource/resource_bundle.h" |
| 51 #include "ui/webui/web_ui_util.h" | 49 #include "ui/webui/web_ui_util.h" |
| 52 | 50 |
| 53 namespace chromeos { | 51 namespace chromeos { |
| 54 | 52 |
| 55 namespace { | 53 namespace { |
| 56 | 54 |
| 57 // Path for a stripped down login page that does not have OOBE elements. | 55 // List of known types of OobeUI. Type added as path in chrome://oobe url, for |
| 58 const char kLoginPath[] = "login#login"; | 56 // example chrome://oobe/user-adding. |
| 57 const char kOobeDisplay[] = "oobe"; |
| 58 const char kLoginDisplay[] = "login"; |
| 59 const char kLockDisplay[] = "lock"; |
| 60 const char kUserAddingDisplay[] = "user-adding"; |
| 61 |
| 62 const char* kKnownDisplayTypes[] = { |
| 63 kOobeDisplay, |
| 64 kLoginDisplay, |
| 65 kLockDisplay, |
| 66 kUserAddingDisplay |
| 67 }; |
| 59 | 68 |
| 60 const char kStringsJSPath[] = "strings.js"; | 69 const char kStringsJSPath[] = "strings.js"; |
| 61 const char kLoginJSPath[] = "login.js"; | 70 const char kLoginJSPath[] = "login.js"; |
| 62 const char kOobeJSPath[] = "oobe.js"; | 71 const char kOobeJSPath[] = "oobe.js"; |
| 63 const char kKeyboardUtilsJSPath[] = "keyboard_utils.js"; | 72 const char kKeyboardUtilsJSPath[] = "keyboard_utils.js"; |
| 64 const char kDemoUserLoginJSPath[] = "demo_user_login.js"; | 73 const char kDemoUserLoginJSPath[] = "demo_user_login.js"; |
| 65 | 74 |
| 66 // Paths for deferred resource loading. | 75 // Paths for deferred resource loading. |
| 67 const char kEnrollmentHTMLPath[] = "enrollment.html"; | 76 const char kEnrollmentHTMLPath[] = "enrollment.html"; |
| 68 const char kEnrollmentCSSPath[] = "enrollment.css"; | 77 const char kEnrollmentCSSPath[] = "enrollment.css"; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 79 new base::RefCountedBytes(); | 88 new base::RefCountedBytes(); |
| 80 callback.Run(empty_bytes.get()); | 89 callback.Run(empty_bytes.get()); |
| 81 return true; | 90 return true; |
| 82 } | 91 } |
| 83 | 92 |
| 84 return false; | 93 return false; |
| 85 } | 94 } |
| 86 | 95 |
| 87 // Creates a WebUIDataSource for chrome://oobe | 96 // Creates a WebUIDataSource for chrome://oobe |
| 88 content::WebUIDataSource* CreateOobeUIDataSource( | 97 content::WebUIDataSource* CreateOobeUIDataSource( |
| 89 const base::DictionaryValue& localized_strings) { | 98 const base::DictionaryValue& localized_strings, |
| 99 const std::string& display_type) { |
| 90 content::WebUIDataSource* source = | 100 content::WebUIDataSource* source = |
| 91 content::WebUIDataSource::Create(chrome::kChromeUIOobeHost); | 101 content::WebUIDataSource::Create(chrome::kChromeUIOobeHost); |
| 92 source->SetUseJsonJSFormatV2(); | 102 source->SetUseJsonJSFormatV2(); |
| 93 source->AddLocalizedStrings(localized_strings); | 103 source->AddLocalizedStrings(localized_strings); |
| 94 source->SetJsonPath(kStringsJSPath); | 104 source->SetJsonPath(kStringsJSPath); |
| 95 | 105 |
| 96 if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) { | 106 if (chromeos::KioskModeSettings::Get()->IsKioskModeEnabled()) { |
| 97 source->SetDefaultResource(IDR_DEMO_USER_LOGIN_HTML); | 107 source->SetDefaultResource(IDR_DEMO_USER_LOGIN_HTML); |
| 98 source->AddResourcePath(kDemoUserLoginJSPath, | 108 source->AddResourcePath(kDemoUserLoginJSPath, IDR_DEMO_USER_LOGIN_JS); |
| 99 IDR_DEMO_USER_LOGIN_JS); | |
| 100 return source; | 109 return source; |
| 101 } | 110 } |
| 102 | 111 if (display_type == kOobeDisplay) { |
| 103 source->SetDefaultResource(IDR_OOBE_HTML); | 112 source->SetDefaultResource(IDR_OOBE_HTML); |
| 104 source->AddResourcePath(kOobeJSPath, | 113 source->AddResourcePath(kOobeJSPath, IDR_OOBE_JS); |
| 105 IDR_OOBE_JS); | 114 } else { |
| 106 source->AddResourcePath(kLoginPath, | 115 source->SetDefaultResource(IDR_LOGIN_HTML); |
| 107 IDR_LOGIN_HTML); | 116 source->AddResourcePath(kLoginJSPath, IDR_LOGIN_JS); |
| 108 source->AddResourcePath(kLoginJSPath, | 117 } |
| 109 IDR_LOGIN_JS); | 118 source->AddResourcePath(kKeyboardUtilsJSPath, IDR_KEYBOARD_UTILS_JS); |
| 110 source->AddResourcePath(kKeyboardUtilsJSPath, | |
| 111 IDR_KEYBOARD_UTILS_JS); | |
| 112 source->OverrideContentSecurityPolicyFrameSrc( | 119 source->OverrideContentSecurityPolicyFrameSrc( |
| 113 "frame-src chrome://terms/ " | 120 "frame-src chrome://terms/ " |
| 114 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/;"); | 121 "chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/;"); |
| 115 | 122 |
| 116 // Serve deferred resources. | 123 // Serve deferred resources. |
| 117 source->AddResourcePath(kEnrollmentHTMLPath, | 124 source->AddResourcePath(kEnrollmentHTMLPath, IDR_OOBE_ENROLLMENT_HTML); |
| 118 IDR_OOBE_ENROLLMENT_HTML); | 125 source->AddResourcePath(kEnrollmentCSSPath, IDR_OOBE_ENROLLMENT_CSS); |
| 119 source->AddResourcePath(kEnrollmentCSSPath, | 126 source->AddResourcePath(kEnrollmentJSPath, IDR_OOBE_ENROLLMENT_JS); |
| 120 IDR_OOBE_ENROLLMENT_CSS); | |
| 121 source->AddResourcePath(kEnrollmentJSPath, | |
| 122 IDR_OOBE_ENROLLMENT_JS); | |
| 123 | 127 |
| 124 return source; | 128 return source; |
| 125 } | 129 } |
| 126 | 130 |
| 131 std::string GetDisplayType(const GURL& url) { |
| 132 std::string path = url.path().size() ? url.path().substr(1) : ""; |
| 133 if (std::find(kKnownDisplayTypes, |
| 134 kKnownDisplayTypes + arraysize(kKnownDisplayTypes), |
| 135 path) == kKnownDisplayTypes + arraysize(kKnownDisplayTypes)) { |
| 136 LOG(ERROR) << "Unknown display type '" << path << "'. Setting default."; |
| 137 return kLoginDisplay; |
| 138 } |
| 139 return path; |
| 140 } |
| 141 |
| 127 } // namespace | 142 } // namespace |
| 128 | 143 |
| 129 // static | 144 // static |
| 130 const char OobeUI::kScreenOobeNetwork[] = "connect"; | 145 const char OobeUI::kScreenOobeNetwork[] = "connect"; |
| 131 const char OobeUI::kScreenOobeEula[] = "eula"; | 146 const char OobeUI::kScreenOobeEula[] = "eula"; |
| 132 const char OobeUI::kScreenOobeUpdate[] = "update"; | 147 const char OobeUI::kScreenOobeUpdate[] = "update"; |
| 133 const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment"; | 148 const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment"; |
| 134 const char OobeUI::kScreenGaiaSignin[] = "gaia-signin"; | 149 const char OobeUI::kScreenGaiaSignin[] = "gaia-signin"; |
| 135 const char OobeUI::kScreenAccountPicker[] = "account-picker"; | 150 const char OobeUI::kScreenAccountPicker[] = "account-picker"; |
| 136 const char OobeUI::kScreenKioskAutolaunch[] = "autolaunch"; | 151 const char OobeUI::kScreenKioskAutolaunch[] = "autolaunch"; |
| 137 const char OobeUI::kScreenKioskEnable[] = "kiosk-enable"; | 152 const char OobeUI::kScreenKioskEnable[] = "kiosk-enable"; |
| 138 const char OobeUI::kScreenErrorMessage[] = "error-message"; | 153 const char OobeUI::kScreenErrorMessage[] = "error-message"; |
| 139 const char OobeUI::kScreenUserImagePicker[] = "user-image"; | 154 const char OobeUI::kScreenUserImagePicker[] = "user-image"; |
| 140 const char OobeUI::kScreenTpmError[] = "tpm-error-message"; | 155 const char OobeUI::kScreenTpmError[] = "tpm-error-message"; |
| 141 const char OobeUI::kScreenPasswordChanged[] = "password-changed"; | 156 const char OobeUI::kScreenPasswordChanged[] = "password-changed"; |
| 142 const char OobeUI::kScreenManagedUserCreationFlow[] | 157 const char OobeUI::kScreenManagedUserCreationFlow[] |
| 143 = "managed-user-creation"; | 158 = "managed-user-creation"; |
| 144 const char OobeUI::kScreenTermsOfService[] = "terms-of-service"; | 159 const char OobeUI::kScreenTermsOfService[] = "terms-of-service"; |
| 145 const char OobeUI::kScreenWrongHWID[] = "wrong-hwid"; | 160 const char OobeUI::kScreenWrongHWID[] = "wrong-hwid"; |
| 146 | 161 |
| 147 OobeUI::OobeUI(content::WebUI* web_ui) | 162 OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) |
| 148 : WebUIController(web_ui), | 163 : WebUIController(web_ui), |
| 149 core_handler_(NULL), | 164 core_handler_(NULL), |
| 150 network_dropdown_handler_(NULL), | 165 network_dropdown_handler_(NULL), |
| 151 update_screen_handler_(NULL), | 166 update_screen_handler_(NULL), |
| 152 network_screen_actor_(NULL), | 167 network_screen_actor_(NULL), |
| 153 eula_screen_actor_(NULL), | 168 eula_screen_actor_(NULL), |
| 154 reset_screen_actor_(NULL), | 169 reset_screen_actor_(NULL), |
| 155 autolaunch_screen_actor_(NULL), | 170 autolaunch_screen_actor_(NULL), |
| 156 kiosk_enable_screen_actor_(NULL), | 171 kiosk_enable_screen_actor_(NULL), |
| 157 wrong_hwid_screen_actor_(NULL), | 172 wrong_hwid_screen_actor_(NULL), |
| 158 locally_managed_user_creation_screen_actor_(NULL), | 173 locally_managed_user_creation_screen_actor_(NULL), |
| 159 error_screen_handler_(NULL), | 174 error_screen_handler_(NULL), |
| 160 signin_screen_handler_(NULL), | 175 signin_screen_handler_(NULL), |
| 161 terms_of_service_screen_actor_(NULL), | 176 terms_of_service_screen_actor_(NULL), |
| 162 user_image_screen_actor_(NULL), | 177 user_image_screen_actor_(NULL), |
| 163 kiosk_app_menu_handler_(NULL), | 178 kiosk_app_menu_handler_(NULL), |
| 164 current_screen_(SCREEN_UNKNOWN), | 179 current_screen_(SCREEN_UNKNOWN), |
| 165 ready_(false) { | 180 ready_(false) { |
| 181 display_type_ = GetDisplayType(url); |
| 166 InitializeScreenMaps(); | 182 InitializeScreenMaps(); |
| 167 | 183 |
| 168 network_state_informer_ = new NetworkStateInformer(); | 184 network_state_informer_ = new NetworkStateInformer(); |
| 169 network_state_informer_->Init(); | 185 network_state_informer_->Init(); |
| 170 | 186 |
| 171 core_handler_ = new CoreOobeHandler(this); | 187 core_handler_ = new CoreOobeHandler(this); |
| 172 AddScreenHandler(core_handler_); | 188 AddScreenHandler(core_handler_); |
| 173 core_handler_->SetDelegate(this); | 189 core_handler_->SetDelegate(this); |
| 174 | 190 |
| 175 network_dropdown_handler_ = new NetworkDropdownHandler(); | 191 network_dropdown_handler_ = new NetworkDropdownHandler(); |
| 176 AddScreenHandler(network_dropdown_handler_); | 192 AddScreenHandler(network_dropdown_handler_); |
| 177 | 193 |
| 178 update_screen_handler_ = new UpdateScreenHandler(); | 194 update_screen_handler_ = new UpdateScreenHandler(); |
| 179 AddScreenHandler(update_screen_handler_); | 195 AddScreenHandler(update_screen_handler_); |
| 180 network_dropdown_handler_->AddObserver(update_screen_handler_); | 196 network_dropdown_handler_->AddObserver(update_screen_handler_); |
| 181 | 197 |
| 182 NetworkScreenHandler* network_screen_handler = | 198 if (display_type_ == kOobeDisplay) { |
| 183 new NetworkScreenHandler(core_handler_); | 199 NetworkScreenHandler* network_screen_handler = |
| 184 network_screen_actor_ = network_screen_handler; | 200 new NetworkScreenHandler(core_handler_); |
| 185 AddScreenHandler(network_screen_handler); | 201 network_screen_actor_ = network_screen_handler; |
| 202 AddScreenHandler(network_screen_handler); |
| 203 } |
| 186 | 204 |
| 187 EulaScreenHandler* eula_screen_handler = new EulaScreenHandler(core_handler_); | 205 EulaScreenHandler* eula_screen_handler = new EulaScreenHandler(core_handler_); |
| 188 eula_screen_actor_ = eula_screen_handler; | 206 eula_screen_actor_ = eula_screen_handler; |
| 189 AddScreenHandler(eula_screen_handler); | 207 AddScreenHandler(eula_screen_handler); |
| 190 | 208 |
| 191 ResetScreenHandler* reset_screen_handler = new ResetScreenHandler(); | 209 ResetScreenHandler* reset_screen_handler = new ResetScreenHandler(); |
| 192 reset_screen_actor_ = reset_screen_handler; | 210 reset_screen_actor_ = reset_screen_handler; |
| 193 AddScreenHandler(reset_screen_handler); | 211 AddScreenHandler(reset_screen_handler); |
| 194 | 212 |
| 195 KioskAutolaunchScreenHandler* autolaunch_screen_handler = | 213 KioskAutolaunchScreenHandler* autolaunch_screen_handler = |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 ThemeSource* theme = new ThemeSource(profile); | 267 ThemeSource* theme = new ThemeSource(profile); |
| 250 content::URLDataSource::Add(profile, theme); | 268 content::URLDataSource::Add(profile, theme); |
| 251 | 269 |
| 252 // Set up the chrome://terms/ data source, for EULA content. | 270 // Set up the chrome://terms/ data source, for EULA content. |
| 253 AboutUIHTMLSource* about_source = | 271 AboutUIHTMLSource* about_source = |
| 254 new AboutUIHTMLSource(chrome::kChromeUITermsHost, profile); | 272 new AboutUIHTMLSource(chrome::kChromeUITermsHost, profile); |
| 255 content::URLDataSource::Add(profile, about_source); | 273 content::URLDataSource::Add(profile, about_source); |
| 256 | 274 |
| 257 // Set up the chrome://oobe/ source. | 275 // Set up the chrome://oobe/ source. |
| 258 content::WebUIDataSource::Add(profile, | 276 content::WebUIDataSource::Add(profile, |
| 259 CreateOobeUIDataSource(localized_strings)); | 277 CreateOobeUIDataSource(localized_strings, |
| 278 display_type_)); |
| 260 | 279 |
| 261 // Set up the chrome://userimage/ source. | 280 // Set up the chrome://userimage/ source. |
| 262 options::UserImageSource* user_image_source = | 281 options::UserImageSource* user_image_source = |
| 263 new options::UserImageSource(); | 282 new options::UserImageSource(); |
| 264 content::URLDataSource::Add(profile, user_image_source); | 283 content::URLDataSource::Add(profile, user_image_source); |
| 265 } | 284 } |
| 266 | 285 |
| 267 OobeUI::~OobeUI() { | 286 OobeUI::~OobeUI() { |
| 268 core_handler_->SetDelegate(NULL); | 287 core_handler_->SetDelegate(NULL); |
| 269 network_dropdown_handler_->RemoveObserver(update_screen_handler_); | 288 network_dropdown_handler_->RemoveObserver(update_screen_handler_); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 void OobeUI::OnCurrentScreenChanged(const std::string& screen) { | 452 void OobeUI::OnCurrentScreenChanged(const std::string& screen) { |
| 434 if (screen_ids_.count(screen)) { | 453 if (screen_ids_.count(screen)) { |
| 435 current_screen_ = screen_ids_[screen]; | 454 current_screen_ = screen_ids_[screen]; |
| 436 } else { | 455 } else { |
| 437 NOTREACHED() << "Screen should be registered in InitializeScreenMaps()"; | 456 NOTREACHED() << "Screen should be registered in InitializeScreenMaps()"; |
| 438 current_screen_ = SCREEN_UNKNOWN; | 457 current_screen_ = SCREEN_UNKNOWN; |
| 439 } | 458 } |
| 440 } | 459 } |
| 441 | 460 |
| 442 } // namespace chromeos | 461 } // namespace chromeos |
| OLD | NEW |