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

Side by Side Diff: chrome/browser/chromeos/mobile/mobile_activator.cc

Issue 12597010: Update activation flow for lte devices not to show 3G loading page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 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 | Annotate | Revision Log
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/chromeos/mobile/mobile_activator.h" 5 #include "chrome/browser/chromeos/mobile/mobile_activator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 10
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 iccid_.clear(); 182 iccid_.clear();
183 service_path_.clear(); 183 service_path_.clear();
184 state_ = PLAN_ACTIVATION_PAGE_LOADING; 184 state_ = PLAN_ACTIVATION_PAGE_LOADING;
185 reenable_cert_check_ = false; 185 reenable_cert_check_ = false;
186 terminated_ = true; 186 terminated_ = true;
187 // Release the previous cellular config and setup a new empty one. 187 // Release the previous cellular config and setup a new empty one.
188 cellular_config_ = new CellularConfigDocument(); 188 cellular_config_ = new CellularConfigDocument();
189 } 189 }
190 190
191 void MobileActivator::OnNetworkManagerChanged(NetworkLibrary* cros) { 191 void MobileActivator::OnNetworkManagerChanged(NetworkLibrary* cros) {
192 if (state_ == PLAN_ACTIVATION_PAGE_LOADING) 192 if (state_ == PLAN_ACTIVATION_PAGE_LOADING ||
193 state_ == PLAN_ACTIVATION_DONE ||
194 state_ == PLAN_ACTIVATION_ERROR) {
193 return; 195 return;
194 EvaluateCellularNetwork(FindMatchingCellularNetwork(true)); 196 }
197
198 CellularNetwork* network = FindMatchingCellularNetwork(true);
199 if (network && network->activate_over_non_cellular_network()) {
200 bool waiting = (state_ == PLAN_ACTIVATION_WAITING_FOR_CONNECTION);
201 bool is_online =
202 cros->connected_network() && cros->connected_network()->online();
203 if (waiting && is_online) {
204 ChangeState(network, post_reconnect_state_, "");
205 } else if (!waiting && !is_online) {
206 ChangeState(network, PLAN_ACTIVATION_WAITING_FOR_CONNECTION, "");
207 }
208 }
209
210 EvaluateCellularNetwork(network);
195 } 211 }
196 212
197 void MobileActivator::OnNetworkChanged(NetworkLibrary* cros, 213 void MobileActivator::OnNetworkChanged(NetworkLibrary* cros,
198 const Network* network) { 214 const Network* network) {
199 if (state_ == PLAN_ACTIVATION_PAGE_LOADING) 215 if (state_ == PLAN_ACTIVATION_PAGE_LOADING)
200 return; 216 return;
201 217
202 if (!network || network->type() != TYPE_CELLULAR) { 218 if (!network || network->type() != TYPE_CELLULAR) {
203 NOTREACHED(); 219 NOTREACHED();
204 return; 220 return;
(...skipping 26 matching lines...) Expand all
231 lib->FindNetworkDeviceByPath(network->device_path()); 247 lib->FindNetworkDeviceByPath(network->device_path());
232 if (!device) { 248 if (!device) {
233 LOG(ERROR) << "Cellular device can't be found: " << network->device_path(); 249 LOG(ERROR) << "Cellular device can't be found: " << network->device_path();
234 return; 250 return;
235 } 251 }
236 252
237 terminated_ = false; 253 terminated_ = false;
238 meid_ = device->meid(); 254 meid_ = device->meid();
239 iccid_ = device->iccid(); 255 iccid_ = device->iccid();
240 service_path_ = service_path; 256 service_path_ = service_path;
257
258 ChangeState(network, PLAN_ACTIVATION_PAGE_LOADING, "");
259
241 BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE, 260 BrowserThread::PostTaskAndReply(BrowserThread::FILE, FROM_HERE,
242 base::Bind(&CellularConfigDocument::LoadCellularConfigFile, 261 base::Bind(&CellularConfigDocument::LoadCellularConfigFile,
243 cellular_config_.get()), 262 cellular_config_.get()),
244 base::Bind(&MobileActivator::ContinueActivation, AsWeakPtr())); 263 base::Bind(&MobileActivator::ContinueActivation, AsWeakPtr()));
245 } 264 }
246 265
247 void MobileActivator::ContinueActivation() { 266 void MobileActivator::ContinueActivation() {
248 CellularNetwork* network = FindMatchingCellularNetwork(false); 267 CellularNetwork* network = FindMatchingCellularNetwork(false);
249 if (!network || !network->SupportsActivation()) 268 if (!network || !network->SupportsActivation())
250 return; 269 return;
(...skipping 20 matching lines...) Expand all
271 // The payment is received, try to reconnect and check the status all over 290 // The payment is received, try to reconnect and check the status all over
272 // again. 291 // again.
273 if (success && state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) { 292 if (success && state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) {
274 NetworkLibrary* lib = GetNetworkLibrary(); 293 NetworkLibrary* lib = GetNetworkLibrary();
275 lib->SignalCellularPlanPayment(); 294 lib->SignalCellularPlanPayment();
276 UMA_HISTOGRAM_COUNTS("Cellular.PaymentReceived", 1); 295 UMA_HISTOGRAM_COUNTS("Cellular.PaymentReceived", 1);
277 CellularNetwork* network = FindMatchingCellularNetwork(true); 296 CellularNetwork* network = FindMatchingCellularNetwork(true);
278 if (network && network->activate_over_non_cellular_network()) { 297 if (network && network->activate_over_non_cellular_network()) {
279 state_ = PLAN_ACTIVATION_DONE; 298 state_ = PLAN_ACTIVATION_DONE;
280 network->CompleteActivation(); 299 network->CompleteActivation();
281 EvaluateCellularNetwork(network);
282 } else { 300 } else {
283 StartOTASP(); 301 StartOTASP();
284 } 302 }
285 } else { 303 } else {
286 UMA_HISTOGRAM_COUNTS("Cellular.PaymentFailed", 1); 304 UMA_HISTOGRAM_COUNTS("Cellular.PaymentFailed", 1);
287 } 305 }
288 } 306 }
289 307
290 void MobileActivator::OnPortalLoaded(bool success) { 308 void MobileActivator::OnPortalLoaded(bool success) {
291 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 309 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
292 base::Bind(&MobileActivator::HandlePortalLoaded, 310 base::Bind(&MobileActivator::HandlePortalLoaded,
293 AsWeakPtr(), success)); 311 AsWeakPtr(), success));
294 } 312 }
295 313
296 void MobileActivator::HandlePortalLoaded(bool success) { 314 void MobileActivator::HandlePortalLoaded(bool success) {
297 CellularNetwork* network = FindMatchingCellularNetwork(true); 315 CellularNetwork* network = FindMatchingCellularNetwork(true);
298 if (!network) { 316 if (!network) {
299 ChangeState(NULL, PLAN_ACTIVATION_ERROR, 317 ChangeState(NULL, PLAN_ACTIVATION_ERROR,
300 GetErrorMessage(kErrorNoService)); 318 GetErrorMessage(kErrorNoService));
301 return; 319 return;
302 } 320 }
303 if (state_ == PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING || 321 if (state_ == PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING ||
304 state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) { 322 state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) {
305 if (success) { 323 if (success) {
306 payment_reconnect_count_ = 0; 324 payment_reconnect_count_ = 0;
307 ChangeState(network, PLAN_ACTIVATION_SHOWING_PAYMENT, std::string()); 325 ChangeState(network, PLAN_ACTIVATION_SHOWING_PAYMENT, std::string());
308 } else { 326 } else {
327 // There is no point in forcing reconnecting the cellular network if the
328 // activation should not be done over it.
329 if (network->activate_over_non_cellular_network())
330 return;
331
309 payment_reconnect_count_++; 332 payment_reconnect_count_++;
310 if (payment_reconnect_count_ > kMaxPortalReconnectCount) { 333 if (payment_reconnect_count_ > kMaxPortalReconnectCount) {
311 ChangeState(NULL, PLAN_ACTIVATION_ERROR, 334 ChangeState(NULL, PLAN_ACTIVATION_ERROR,
312 GetErrorMessage(kErrorNoService)); 335 GetErrorMessage(kErrorNoService));
313 return; 336 return;
314 } 337 }
315 338
316 // Reconnect and try and load the frame again. 339 // Reconnect and try and load the frame again.
317 ChangeState(network, 340 ChangeState(network,
318 PLAN_ACTIVATION_RECONNECTING, 341 PLAN_ACTIVATION_RECONNECTING,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 // Start monitoring network property changes. 398 // Start monitoring network property changes.
376 lib->AddNetworkManagerObserver(this); 399 lib->AddNetworkManagerObserver(this);
377 if (network->activate_over_non_cellular_network()) { 400 if (network->activate_over_non_cellular_network()) {
378 // Fast forward to payment portal loading if the activation is performed 401 // Fast forward to payment portal loading if the activation is performed
379 // over a non-cellular network. 402 // over a non-cellular network.
380 ChangeState(network, 403 ChangeState(network,
381 (network->activation_state() == ACTIVATION_STATE_ACTIVATED) ? 404 (network->activation_state() == ACTIVATION_STATE_ACTIVATED) ?
382 PLAN_ACTIVATION_DONE : 405 PLAN_ACTIVATION_DONE :
383 PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING, 406 PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING,
384 ""); 407 "");
385 } else if (lib->HasRecentCellularPlanPayment() && 408 // Verify that there is no need to wait for the connection. This will also
386 network->activation_state() == 409 // evaluate the network.
387 ACTIVATION_STATE_PARTIALLY_ACTIVATED) { 410 OnNetworkManagerChanged(lib);
411 return;
412 }
413
414 if (lib->HasRecentCellularPlanPayment() &&
415 network->activation_state() == ACTIVATION_STATE_PARTIALLY_ACTIVATED) {
388 // Try to start with OTASP immediately if we have received payment recently. 416 // Try to start with OTASP immediately if we have received payment recently.
389 state_ = PLAN_ACTIVATION_START_OTASP; 417 state_ = PLAN_ACTIVATION_START_OTASP;
390 } else { 418 } else {
391 state_ = PLAN_ACTIVATION_START; 419 state_ = PLAN_ACTIVATION_START;
392 } 420 }
393 421
394 EvaluateCellularNetwork(network); 422 EvaluateCellularNetwork(network);
395 } 423 }
396 424
397 void MobileActivator::RetryOTASP() { 425 void MobileActivator::RetryOTASP() {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 return; 540 return;
513 } 541 }
514 542
515 LOG(WARNING) << "Cellular:\n service=" << network->GetStateString() 543 LOG(WARNING) << "Cellular:\n service=" << network->GetStateString()
516 << "\n ui=" << GetStateDescription(state_) 544 << "\n ui=" << GetStateDescription(state_)
517 << "\n activation=" << network->GetActivationStateString() 545 << "\n activation=" << network->GetActivationStateString()
518 << "\n error=" << network->GetErrorString() 546 << "\n error=" << network->GetErrorString()
519 << "\n setvice_path=" << network->service_path() 547 << "\n setvice_path=" << network->service_path()
520 << "\n connected=" << network->connected(); 548 << "\n connected=" << network->connected();
521 549
550 // If the network is activated over non cellular network, the activator state
551 // does not depend on the network's own state.
552 if (network->activate_over_non_cellular_network())
553 return;
554
522 std::string error_description; 555 std::string error_description;
523 PlanActivationState new_state = PickNextState(network, &error_description); 556 PlanActivationState new_state = PickNextState(network, &error_description);
524 557
525 ChangeState(network, new_state, error_description); 558 ChangeState(network, new_state, error_description);
526 } 559 }
527 560
528 MobileActivator::PlanActivationState MobileActivator::PickNextState( 561 MobileActivator::PlanActivationState MobileActivator::PickNextState(
529 CellularNetwork* network, std::string* error_description) const { 562 CellularNetwork* network, std::string* error_description) const {
530 PlanActivationState new_state = state_; 563 PlanActivationState new_state = state_;
531 if (!network->connected()) 564 if (!network->connected())
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 new_state = PLAN_ACTIVATION_DONE; 715 new_state = PLAN_ACTIVATION_DONE;
683 else 716 else
684 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING; 717 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING;
685 break; 718 break;
686 // Initial state 719 // Initial state
687 case PLAN_ACTIVATION_PAGE_LOADING: 720 case PLAN_ACTIVATION_PAGE_LOADING:
688 break; 721 break;
689 // Just ignore all signals until the site confirms payment. 722 // Just ignore all signals until the site confirms payment.
690 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: 723 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING:
691 case PLAN_ACTIVATION_SHOWING_PAYMENT: 724 case PLAN_ACTIVATION_SHOWING_PAYMENT:
725 case PLAN_ACTIVATION_WAITING_FOR_CONNECTION:
692 break; 726 break;
693 // Go where we decided earlier. 727 // Go where we decided earlier.
694 case PLAN_ACTIVATION_RECONNECTING: 728 case PLAN_ACTIVATION_RECONNECTING:
695 new_state = post_reconnect_state_; 729 new_state = post_reconnect_state_;
696 break; 730 break;
697 // Activation completed/failed, ignore network changes. 731 // Activation completed/failed, ignore network changes.
698 case PLAN_ACTIVATION_DONE: 732 case PLAN_ACTIVATION_DONE:
699 case PLAN_ACTIVATION_ERROR: 733 case PLAN_ACTIVATION_ERROR:
700 break; 734 break;
701 } 735 }
(...skipping 23 matching lines...) Expand all
725 case PLAN_ACTIVATION_START_OTASP: 759 case PLAN_ACTIVATION_START_OTASP:
726 return "START_OTASP"; 760 return "START_OTASP";
727 case PLAN_ACTIVATION_OTASP: 761 case PLAN_ACTIVATION_OTASP:
728 return "OTASP"; 762 return "OTASP";
729 case PLAN_ACTIVATION_DONE: 763 case PLAN_ACTIVATION_DONE:
730 return "DONE"; 764 return "DONE";
731 case PLAN_ACTIVATION_ERROR: 765 case PLAN_ACTIVATION_ERROR:
732 return "ERROR"; 766 return "ERROR";
733 case PLAN_ACTIVATION_RECONNECTING: 767 case PLAN_ACTIVATION_RECONNECTING:
734 return "RECONNECTING"; 768 return "RECONNECTING";
769 case PLAN_ACTIVATION_WAITING_FOR_CONNECTION:
770 return "WAITING FOR CONNECTION";
735 } 771 }
736 return "UNKNOWN"; 772 return "UNKNOWN";
737 } 773 }
738 774
739 775
740 void MobileActivator::CompleteActivation( 776 void MobileActivator::CompleteActivation(
741 CellularNetwork* network) { 777 CellularNetwork* network) {
742 // Remove observers, we are done with this page. 778 // Remove observers, we are done with this page.
743 NetworkLibrary* lib = GetNetworkLibrary(); 779 NetworkLibrary* lib = GetNetworkLibrary();
744 lib->RemoveNetworkManagerObserver(this); 780 lib->RemoveNetworkManagerObserver(this);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 } 849 }
814 break; 850 break;
815 case PLAN_ACTIVATION_PAGE_LOADING: 851 case PLAN_ACTIVATION_PAGE_LOADING:
816 return; 852 return;
817 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: 853 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING:
818 case PLAN_ACTIVATION_SHOWING_PAYMENT: 854 case PLAN_ACTIVATION_SHOWING_PAYMENT:
819 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: 855 case PLAN_ACTIVATION_RECONNECTING_PAYMENT:
820 // Fix for fix SSL for the walled gardens where cert chain verification 856 // Fix for fix SSL for the walled gardens where cert chain verification
821 // might not work. 857 // might not work.
822 break; 858 break;
859 case PLAN_ACTIVATION_WAITING_FOR_CONNECTION:
860 post_reconnect_state_ = old_state;
861 break;
823 case PLAN_ACTIVATION_RECONNECTING: { 862 case PLAN_ACTIVATION_RECONNECTING: {
824 PlanActivationState next_state = old_state; 863 PlanActivationState next_state = old_state;
825 // Pick where we want to return to after we reconnect. 864 // Pick where we want to return to after we reconnect.
826 switch (old_state) { 865 switch (old_state) {
827 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: 866 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING:
828 case PLAN_ACTIVATION_SHOWING_PAYMENT: 867 case PLAN_ACTIVATION_SHOWING_PAYMENT:
829 // We decide here what to do next based on the state of the modem. 868 // We decide here what to do next based on the state of the modem.
830 next_state = PLAN_ACTIVATION_RECONNECTING_PAYMENT; 869 next_state = PLAN_ACTIVATION_RECONNECTING_PAYMENT;
831 break; 870 break;
832 case PLAN_ACTIVATION_INITIATING_ACTIVATION: 871 case PLAN_ACTIVATION_INITIATING_ACTIVATION:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 990
952 std::string MobileActivator::GetErrorMessage(const std::string& code) const { 991 std::string MobileActivator::GetErrorMessage(const std::string& code) const {
953 return cellular_config_->GetErrorMessage(code); 992 return cellular_config_->GetErrorMessage(code);
954 } 993 }
955 994
956 NetworkLibrary* MobileActivator::GetNetworkLibrary() const { 995 NetworkLibrary* MobileActivator::GetNetworkLibrary() const {
957 return CrosLibrary::Get()->GetNetworkLibrary(); 996 return CrosLibrary::Get()->GetNetworkLibrary();
958 } 997 }
959 998
960 } // namespace chromeos 999 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/mobile/mobile_activator.h ('k') | chrome/browser/resources/chromeos/mobile_setup.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698