OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/mobile_setup_ui.h" | 5 #include "chrome/browser/ui/webui/chromeos/mobile_setup_ui.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 std::string* error); | 289 std::string* error); |
290 // Sends status updates to WebUI page. | 290 // Sends status updates to WebUI page. |
291 void UpdatePage(chromeos::CellularNetwork* network, | 291 void UpdatePage(chromeos::CellularNetwork* network, |
292 const std::string& error_description); | 292 const std::string& error_description); |
293 // Changes internal state. | 293 // Changes internal state. |
294 void ChangeState(chromeos::CellularNetwork* network, | 294 void ChangeState(chromeos::CellularNetwork* network, |
295 PlanActivationState new_state, | 295 PlanActivationState new_state, |
296 const std::string& error_description); | 296 const std::string& error_description); |
297 // Prepares network devices for cellular activation process. | 297 // Prepares network devices for cellular activation process. |
298 void SetupActivationProcess(chromeos::CellularNetwork* network); | 298 void SetupActivationProcess(chromeos::CellularNetwork* network); |
299 // Disables ethernet and wifi newtorks since they interefere with | |
300 // detection of restricted pool on cellular side. | |
301 void DisableOtherNetworks(); | |
302 // Resets network devices after cellular activation process. | 299 // Resets network devices after cellular activation process. |
303 // |network| should be NULL if the activation process failed. | 300 // |network| should be NULL if the activation process failed. |
304 void CompleteActivation(chromeos::CellularNetwork* network); | 301 void CompleteActivation(chromeos::CellularNetwork* network); |
305 // Control routines for handling other types of connections during | 302 // Disables SSL certificate revocation checking mechanism. In the case |
306 // cellular activation. | 303 // where captive portal connection is the only one present, such revocation |
307 void ReEnableOtherConnections(); | 304 // checks could prevent payment portal page from loading. |
| 305 void DisableCertRevocationChecking(); |
| 306 // Reenables SSL certificate revocation checking mechanism. |
| 307 void ReEnableCertRevocationChecking(); |
308 // Return error message for a given code. | 308 // Return error message for a given code. |
309 std::string GetErrorMessage(const std::string& code); | 309 std::string GetErrorMessage(const std::string& code); |
310 | 310 |
311 // Converts the currently active CellularNetwork device into a JS object. | 311 // Converts the currently active CellularNetwork device into a JS object. |
312 static void GetDeviceInfo(chromeos::CellularNetwork* network, | 312 static void GetDeviceInfo(chromeos::CellularNetwork* network, |
313 DictionaryValue* value); | 313 DictionaryValue* value); |
314 static bool ShouldReportDeviceState(std::string* state, std::string* error); | 314 static bool ShouldReportDeviceState(std::string* state, std::string* error); |
315 | 315 |
316 // Performs activation state cellular device evaluation. | 316 // Performs activation state cellular device evaluation. |
317 // Returns false if device activation failed. In this case |error| | 317 // Returns false if device activation failed. In this case |error| |
318 // will contain error message to be reported to Web UI. | 318 // will contain error message to be reported to Web UI. |
319 static bool EvaluateCellularDeviceState(bool* report_status, | 319 static bool EvaluateCellularDeviceState(bool* report_status, |
320 std::string* state, | 320 std::string* state, |
321 std::string* error); | 321 std::string* error); |
322 | 322 |
323 // Returns next reconnection state based on the current activation phase. | 323 // Returns next reconnection state based on the current activation phase. |
324 static PlanActivationState GetNextReconnectState(PlanActivationState state); | 324 static PlanActivationState GetNextReconnectState(PlanActivationState state); |
325 static const char* GetStateDescription(PlanActivationState state); | 325 static const char* GetStateDescription(PlanActivationState state); |
326 | 326 |
327 scoped_refptr<CellularConfigDocument> cellular_config_; | 327 scoped_refptr<CellularConfigDocument> cellular_config_; |
328 TabContents* tab_contents_; | 328 TabContents* tab_contents_; |
329 // Internal handler state. | 329 // Internal handler state. |
330 PlanActivationState state_; | 330 PlanActivationState state_; |
331 std::string service_path_; | 331 std::string service_path_; |
332 // Flags that control if wifi and ethernet connection needs to be restored | 332 // Flags that controls if cert_checks needs to be restored |
333 // after the activation of cellular network. | 333 // after the activation of cellular network. |
334 bool reenable_wifi_; | |
335 bool reenable_ethernet_; | |
336 bool reenable_cert_check_; | 334 bool reenable_cert_check_; |
337 bool evaluating_; | 335 bool evaluating_; |
338 // True if we think that another tab is already running activation. | 336 // True if we think that another tab is already running activation. |
339 bool already_running_; | 337 bool already_running_; |
340 // Connection retry counter. | 338 // Connection retry counter. |
341 int connection_retry_count_; | 339 int connection_retry_count_; |
342 // Post payment reconnect wait counters. | 340 // Post payment reconnect wait counters. |
343 int reconnect_wait_count_; | 341 int reconnect_wait_count_; |
344 // Payment portal reload/reconnect attempt count. | 342 // Payment portal reload/reconnect attempt count. |
345 int payment_reconnect_count_; | 343 int payment_reconnect_count_; |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 //////////////////////////////////////////////////////////////////////////////// | 483 //////////////////////////////////////////////////////////////////////////////// |
486 // | 484 // |
487 // MobileSetupHandler | 485 // MobileSetupHandler |
488 // | 486 // |
489 //////////////////////////////////////////////////////////////////////////////// | 487 //////////////////////////////////////////////////////////////////////////////// |
490 MobileSetupHandler::MobileSetupHandler(const std::string& service_path) | 488 MobileSetupHandler::MobileSetupHandler(const std::string& service_path) |
491 : cellular_config_(new CellularConfigDocument()), | 489 : cellular_config_(new CellularConfigDocument()), |
492 tab_contents_(NULL), | 490 tab_contents_(NULL), |
493 state_(PLAN_ACTIVATION_PAGE_LOADING), | 491 state_(PLAN_ACTIVATION_PAGE_LOADING), |
494 service_path_(service_path), | 492 service_path_(service_path), |
495 reenable_wifi_(false), | |
496 reenable_ethernet_(false), | |
497 reenable_cert_check_(false), | 493 reenable_cert_check_(false), |
498 evaluating_(false), | 494 evaluating_(false), |
499 already_running_(false), | 495 already_running_(false), |
500 connection_retry_count_(0), | 496 connection_retry_count_(0), |
501 reconnect_wait_count_(0), | 497 reconnect_wait_count_(0), |
502 payment_reconnect_count_(0), | 498 payment_reconnect_count_(0), |
503 activation_attempt_(0) { | 499 activation_attempt_(0) { |
504 } | 500 } |
505 | 501 |
506 MobileSetupHandler::~MobileSetupHandler() { | 502 MobileSetupHandler::~MobileSetupHandler() { |
507 reconnect_timer_.Stop(); | 503 reconnect_timer_.Stop(); |
508 chromeos::NetworkLibrary* lib = | 504 chromeos::NetworkLibrary* lib = |
509 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); | 505 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
510 lib->RemoveNetworkManagerObserver(this); | 506 lib->RemoveNetworkManagerObserver(this); |
511 lib->RemoveObserverForAllNetworks(this); | 507 lib->RemoveObserverForAllNetworks(this); |
512 if (lib->IsLocked()) | 508 if (lib->IsLocked()) |
513 lib->Unlock(); | 509 lib->Unlock(); |
514 ReEnableOtherConnections(); | 510 ReEnableCertRevocationChecking(); |
515 } | 511 } |
516 | 512 |
517 WebUIMessageHandler* MobileSetupHandler::Attach(WebUI* web_ui) { | 513 WebUIMessageHandler* MobileSetupHandler::Attach(WebUI* web_ui) { |
518 return WebUIMessageHandler::Attach(web_ui); | 514 return WebUIMessageHandler::Attach(web_ui); |
519 } | 515 } |
520 | 516 |
521 void MobileSetupHandler::Init(TabContents* contents) { | 517 void MobileSetupHandler::Init(TabContents* contents) { |
522 tab_contents_ = contents; | 518 tab_contents_ = contents; |
523 } | 519 } |
524 | 520 |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
908 break; | 904 break; |
909 default: | 905 default: |
910 break; | 906 break; |
911 } | 907 } |
912 break; | 908 break; |
913 } | 909 } |
914 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: | 910 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: |
915 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: | 911 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: |
916 case PLAN_ACTIVATION_RECONNECTING: { | 912 case PLAN_ACTIVATION_RECONNECTING: { |
917 if (network->connected()) { | 913 if (network->connected()) { |
918 // Make sure other networks are not interfering with our detection of | |
919 // restricted pool. | |
920 DisableOtherNetworks(); | |
921 // Wait until the service shows up and gets activated. | 914 // Wait until the service shows up and gets activated. |
922 switch (network->activation_state()) { | 915 switch (network->activation_state()) { |
923 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: | 916 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: |
924 case chromeos::ACTIVATION_STATE_ACTIVATED: | 917 case chromeos::ACTIVATION_STATE_ACTIVATED: |
925 if (network->restricted_pool()) { | 918 if (network->restricted_pool()) { |
926 if (network->error() == chromeos::ERROR_DNS_LOOKUP_FAILED) { | 919 if (network->error() == chromeos::ERROR_DNS_LOOKUP_FAILED) { |
927 LOG(WARNING) << "No connectivity for device " | 920 LOG(WARNING) << "No connectivity for device " |
928 << network->service_path().c_str(); | 921 << network->service_path().c_str(); |
929 // If we are connected but there is no connectivity at all, | 922 // If we are connected but there is no connectivity at all, |
930 // restart the whole process again. | 923 // restart the whole process again. |
(...skipping 24 matching lines...) Expand all Loading... |
955 break; | 948 break; |
956 } | 949 } |
957 } else if (NeedsReconnecting(network, &new_state, &error_description)) { | 950 } else if (NeedsReconnecting(network, &new_state, &error_description)) { |
958 evaluating_ = false; | 951 evaluating_ = false; |
959 return; | 952 return; |
960 } | 953 } |
961 break; | 954 break; |
962 } | 955 } |
963 case PLAN_ACTIVATION_RECONNECTING_OTASP: { | 956 case PLAN_ACTIVATION_RECONNECTING_OTASP: { |
964 if (network->connected()) { | 957 if (network->connected()) { |
965 // Make sure other networks are not interfering with our detection of | |
966 // restricted pool. | |
967 DisableOtherNetworks(); | |
968 // Wait until the service shows up and gets activated. | 958 // Wait until the service shows up and gets activated. |
969 switch (network->activation_state()) { | 959 switch (network->activation_state()) { |
970 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: | 960 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: |
971 case chromeos::ACTIVATION_STATE_ACTIVATED: | 961 case chromeos::ACTIVATION_STATE_ACTIVATED: |
972 if (network->restricted_pool()) { | 962 if (network->restricted_pool()) { |
973 LOG(WARNING) << "Still no connectivity after OTASP for device " | 963 LOG(WARNING) << "Still no connectivity after OTASP for device " |
974 << network->service_path().c_str(); | 964 << network->service_path().c_str(); |
975 // If we have already received payment, don't show the payment | 965 // If we have already received payment, don't show the payment |
976 // page again. We should try to reconnect after some time instead. | 966 // page again. We should try to reconnect after some time instead. |
977 if (reconnect_wait_count_ < kMaxReconnectAttemptOTASP) { | 967 if (reconnect_wait_count_ < kMaxReconnectAttemptOTASP) { |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1127 GetNetworkLibrary(); | 1117 GetNetworkLibrary(); |
1128 lib->RemoveNetworkManagerObserver(this); | 1118 lib->RemoveNetworkManagerObserver(this); |
1129 lib->RemoveObserverForAllNetworks(this); | 1119 lib->RemoveObserverForAllNetworks(this); |
1130 if (lib->IsLocked()) | 1120 if (lib->IsLocked()) |
1131 lib->Unlock(); | 1121 lib->Unlock(); |
1132 // If we have successfully activated the connection, set autoconnect flag. | 1122 // If we have successfully activated the connection, set autoconnect flag. |
1133 if (network) | 1123 if (network) |
1134 network->SetAutoConnect(true); | 1124 network->SetAutoConnect(true); |
1135 // Reactivate other types of connections if we have | 1125 // Reactivate other types of connections if we have |
1136 // shut them down previously. | 1126 // shut them down previously. |
1137 ReEnableOtherConnections(); | 1127 ReEnableCertRevocationChecking(); |
1138 } | 1128 } |
1139 | 1129 |
1140 void MobileSetupHandler::UpdatePage( | 1130 void MobileSetupHandler::UpdatePage( |
1141 chromeos::CellularNetwork* network, | 1131 chromeos::CellularNetwork* network, |
1142 const std::string& error_description) { | 1132 const std::string& error_description) { |
1143 DictionaryValue device_dict; | 1133 DictionaryValue device_dict; |
1144 if (network) | 1134 if (network) |
1145 GetDeviceInfo(network, &device_dict); | 1135 GetDeviceInfo(network, &device_dict); |
1146 device_dict.SetInteger("state", state_); | 1136 device_dict.SetInteger("state", state_); |
1147 if (error_description.length()) | 1137 if (error_description.length()) |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 break; | 1229 break; |
1240 case PLAN_ACTIVATION_ERROR: | 1230 case PLAN_ACTIVATION_ERROR: |
1241 CompleteActivation(NULL); | 1231 CompleteActivation(NULL); |
1242 UMA_HISTOGRAM_COUNTS("Cellular.PlanFailed", 1); | 1232 UMA_HISTOGRAM_COUNTS("Cellular.PlanFailed", 1); |
1243 break; | 1233 break; |
1244 default: | 1234 default: |
1245 break; | 1235 break; |
1246 } | 1236 } |
1247 } | 1237 } |
1248 | 1238 |
1249 void MobileSetupHandler::ReEnableOtherConnections() { | 1239 void MobileSetupHandler::ReEnableCertRevocationChecking() { |
1250 chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()-> | |
1251 GetNetworkLibrary(); | |
1252 if (reenable_ethernet_) { | |
1253 reenable_ethernet_ = false; | |
1254 lib->EnableEthernetNetworkDevice(true); | |
1255 } | |
1256 if (reenable_wifi_) { | |
1257 reenable_wifi_ = false; | |
1258 lib->EnableWifiNetworkDevice(true); | |
1259 } | |
1260 | |
1261 PrefService* prefs = g_browser_process->local_state(); | 1240 PrefService* prefs = g_browser_process->local_state(); |
1262 if (reenable_cert_check_) { | 1241 if (reenable_cert_check_) { |
1263 prefs->SetBoolean(prefs::kCertRevocationCheckingEnabled, | 1242 prefs->SetBoolean(prefs::kCertRevocationCheckingEnabled, |
1264 true); | 1243 true); |
1265 reenable_cert_check_ = false; | 1244 reenable_cert_check_ = false; |
1266 } | 1245 } |
1267 } | 1246 } |
1268 | 1247 |
1269 void MobileSetupHandler::SetupActivationProcess( | 1248 void MobileSetupHandler::DisableCertRevocationChecking() { |
1270 chromeos::CellularNetwork* network) { | 1249 // Disable SSL cert checks since we might be performin activation in the |
1271 if (!network) | |
1272 return; | |
1273 | |
1274 // Disable SSL cert checks since we will be doing this in | |
1275 // restricted pool. | 1250 // restricted pool. |
1276 PrefService* prefs = g_browser_process->local_state(); | 1251 PrefService* prefs = g_browser_process->local_state(); |
1277 if (!reenable_cert_check_ && | 1252 if (!reenable_cert_check_ && |
1278 prefs->GetBoolean( | 1253 prefs->GetBoolean( |
1279 prefs::kCertRevocationCheckingEnabled)) { | 1254 prefs::kCertRevocationCheckingEnabled)) { |
1280 reenable_cert_check_ = true; | 1255 reenable_cert_check_ = true; |
1281 prefs->SetBoolean(prefs::kCertRevocationCheckingEnabled, false); | 1256 prefs->SetBoolean(prefs::kCertRevocationCheckingEnabled, false); |
1282 } | 1257 } |
| 1258 } |
1283 | 1259 |
| 1260 void MobileSetupHandler::SetupActivationProcess( |
| 1261 chromeos::CellularNetwork* network) { |
| 1262 if (!network) |
| 1263 return; |
| 1264 |
| 1265 DisableCertRevocationChecking(); |
1284 chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()-> | 1266 chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()-> |
1285 GetNetworkLibrary(); | 1267 GetNetworkLibrary(); |
1286 // Disable autoconnect to cellular network. | 1268 // Disable autoconnect to cellular network. |
1287 network->SetAutoConnect(false); | 1269 network->SetAutoConnect(false); |
1288 | 1270 |
1289 // Prevent any other network interference. | |
1290 DisableOtherNetworks(); | |
1291 lib->Lock(); | 1271 lib->Lock(); |
1292 } | 1272 } |
1293 | 1273 |
1294 void MobileSetupHandler::DisableOtherNetworks() { | |
1295 chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()-> | |
1296 GetNetworkLibrary(); | |
1297 // Disable ethernet and wifi. | |
1298 if (lib->ethernet_enabled()) { | |
1299 reenable_ethernet_ = true; | |
1300 lib->EnableEthernetNetworkDevice(false); | |
1301 } | |
1302 if (lib->wifi_enabled()) { | |
1303 reenable_wifi_ = true; | |
1304 lib->EnableWifiNetworkDevice(false); | |
1305 } | |
1306 } | |
1307 | |
1308 bool MobileSetupHandler::GotActivationError( | 1274 bool MobileSetupHandler::GotActivationError( |
1309 chromeos::CellularNetwork* network, std::string* error) { | 1275 chromeos::CellularNetwork* network, std::string* error) { |
1310 DCHECK(network); | 1276 DCHECK(network); |
1311 bool got_error = false; | 1277 bool got_error = false; |
1312 const char* error_code = kErrorDefault; | 1278 const char* error_code = kErrorDefault; |
1313 | 1279 |
1314 // This is the magic for detection of errors in during activation process. | 1280 // This is the magic for detection of errors in during activation process. |
1315 if (network->state() == chromeos::STATE_FAILURE && | 1281 if (network->state() == chromeos::STATE_FAILURE && |
1316 network->error() == chromeos::ERROR_AAA_FAILED) { | 1282 network->error() == chromeos::ERROR_AAA_FAILED) { |
1317 if (network->activation_state() == | 1283 if (network->activation_state() == |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 // Set up the chrome://mobilesetup/ source. | 1372 // Set up the chrome://mobilesetup/ source. |
1407 Profile* profile = Profile::FromBrowserContext(contents->browser_context()); | 1373 Profile* profile = Profile::FromBrowserContext(contents->browser_context()); |
1408 profile->GetChromeURLDataManager()->AddDataSource(html_source); | 1374 profile->GetChromeURLDataManager()->AddDataSource(html_source); |
1409 } | 1375 } |
1410 | 1376 |
1411 void MobileSetupUI::RenderViewCreated(RenderViewHost* host) { | 1377 void MobileSetupUI::RenderViewCreated(RenderViewHost* host) { |
1412 ChromeWebUI::RenderViewCreated(host); | 1378 ChromeWebUI::RenderViewCreated(host); |
1413 // Destroyed by the corresponding RenderViewHost. | 1379 // Destroyed by the corresponding RenderViewHost. |
1414 new PortalFrameLoadObserver(host, tab_contents()->web_ui()); | 1380 new PortalFrameLoadObserver(host, tab_contents()->web_ui()); |
1415 } | 1381 } |
OLD | NEW |