| 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 13 matching lines...) Expand all Loading... |
| 24 #include "base/values.h" | 24 #include "base/values.h" |
| 25 #include "chrome/browser/browser_process.h" | 25 #include "chrome/browser/browser_process.h" |
| 26 #include "chrome/browser/chromeos/cros/cros_library.h" | 26 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 27 #include "chrome/browser/chromeos/cros/network_library.h" | 27 #include "chrome/browser/chromeos/cros/network_library.h" |
| 28 #include "chrome/browser/prefs/pref_service.h" | 28 #include "chrome/browser/prefs/pref_service.h" |
| 29 #include "chrome/browser/profiles/profile.h" | 29 #include "chrome/browser/profiles/profile.h" |
| 30 #include "chrome/browser/ui/browser_list.h" | 30 #include "chrome/browser/ui/browser_list.h" |
| 31 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" | 31 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
| 32 #include "chrome/common/jstemplate_builder.h" | 32 #include "chrome/common/jstemplate_builder.h" |
| 33 #include "chrome/common/pref_names.h" | 33 #include "chrome/common/pref_names.h" |
| 34 #include "chrome/common/render_messages.h" |
| 34 #include "chrome/common/url_constants.h" | 35 #include "chrome/common/url_constants.h" |
| 35 #include "content/browser/browser_thread.h" | 36 #include "content/browser/browser_thread.h" |
| 37 #include "content/browser/renderer_host/render_view_host_observer.h" |
| 36 #include "content/browser/tab_contents/tab_contents.h" | 38 #include "content/browser/tab_contents/tab_contents.h" |
| 37 #include "googleurl/src/gurl.h" | 39 #include "googleurl/src/gurl.h" |
| 38 #include "grit/browser_resources.h" | 40 #include "grit/browser_resources.h" |
| 39 #include "grit/chromium_strings.h" | 41 #include "grit/chromium_strings.h" |
| 40 #include "grit/generated_resources.h" | 42 #include "grit/generated_resources.h" |
| 41 #include "grit/locale_settings.h" | 43 #include "grit/locale_settings.h" |
| 42 #include "ui/base/l10n/l10n_util.h" | 44 #include "ui/base/l10n/l10n_util.h" |
| 43 #include "ui/base/resource/resource_bundle.h" | 45 #include "ui/base/resource/resource_bundle.h" |
| 44 | 46 |
| 45 namespace { | 47 namespace { |
| 46 | 48 |
| 47 // Host page JS API function names. | 49 // Host page JS API function names. |
| 48 const char kJsApiStartActivation[] = "startActivation"; | 50 const char kJsApiStartActivation[] = "startActivation"; |
| 49 const char kJsApiSetTransactionStatus[] = "setTransactionStatus"; | 51 const char kJsApiSetTransactionStatus[] = "setTransactionStatus"; |
| 52 const char kJsApiPaymentPortalLoad[] = "paymentPortalLoad"; |
| 53 const char kJsApiResultOK[] = "ok"; |
| 50 | 54 |
| 51 const char kJsDeviceStatusChangedHandler[] = | 55 const char kJsDeviceStatusChangedCallback[] = |
| 52 "mobile.MobileSetup.deviceStateChanged"; | 56 "mobile.MobileSetup.deviceStateChanged"; |
| 57 const char kJsPortalFrameLoadFailedCallback[] = |
| 58 "mobile.MobileSetup.portalFrameLoadError"; |
| 59 const char kJsPortalFrameLoadCompletedCallback[] = |
| 60 "mobile.MobileSetup.portalFrameLoadCompleted"; |
| 53 | 61 |
| 54 // Error codes matching codes defined in the cellular config file. | 62 // Error codes matching codes defined in the cellular config file. |
| 55 const char kErrorDefault[] = "default"; | 63 const char kErrorDefault[] = "default"; |
| 56 const char kErrorBadConnectionPartial[] = "bad_connection_partial"; | 64 const char kErrorBadConnectionPartial[] = "bad_connection_partial"; |
| 57 const char kErrorBadConnectionActivated[] = "bad_connection_activated"; | 65 const char kErrorBadConnectionActivated[] = "bad_connection_activated"; |
| 58 const char kErrorRoamingOnConnection[] = "roaming_connection"; | 66 const char kErrorRoamingOnConnection[] = "roaming_connection"; |
| 59 const char kErrorNoEVDO[] = "no_evdo"; | 67 const char kErrorNoEVDO[] = "no_evdo"; |
| 60 const char kErrorRoamingActivation[] = "roaming_activation"; | 68 const char kErrorRoamingActivation[] = "roaming_activation"; |
| 61 const char kErrorRoamingPartiallyActivated[] = "roaming_partially_activated"; | 69 const char kErrorRoamingPartiallyActivated[] = "roaming_partially_activated"; |
| 62 const char kErrorNoService[] = "no_service"; | 70 const char kErrorNoService[] = "no_service"; |
| 63 const char kErrorDisabled[] = "disabled"; | 71 const char kErrorDisabled[] = "disabled"; |
| 64 const char kErrorNoDevice[] = "no_device"; | 72 const char kErrorNoDevice[] = "no_device"; |
| 65 const char kFailedPaymentError[] = "failed_payment"; | 73 const char kFailedPaymentError[] = "failed_payment"; |
| 66 const char kFailedConnectivity[] = "connectivity"; | 74 const char kFailedConnectivity[] = "connectivity"; |
| 67 const char kErrorAlreadyRunning[] = "already_running"; | 75 const char kErrorAlreadyRunning[] = "already_running"; |
| 68 | 76 |
| 69 // Cellular configuration file path. | 77 // Cellular configuration file path. |
| 70 const char kCellularConfigPath[] = | 78 const char kCellularConfigPath[] = |
| 71 "/usr/share/chromeos-assets/mobile/mobile_config.json"; | 79 "/usr/share/chromeos-assets/mobile/mobile_config.json"; |
| 72 | 80 |
| 73 // Cellular config file field names. | 81 // Cellular config file field names. |
| 74 const char kVersionField[] = "version"; | 82 const char kVersionField[] = "version"; |
| 75 const char kErrorsField[] = "errors"; | 83 const char kErrorsField[] = "errors"; |
| 76 | 84 |
| 77 // Number of times we will retry to restart the activation process in case | 85 // Number of times we will retry to restart the activation process in case |
| 78 // there is no connectivity in the restricted pool. | 86 // there is no connectivity in the restricted pool. |
| 79 const int kMaxActivationAttempt = 3; | 87 const int kMaxActivationAttempt = 3; |
| 80 // Number of times we will retry to reconnect if connection fails. | 88 // Number of times we will retry to reconnect if connection fails. |
| 81 const int kMaxConnectionRetry = 10; | 89 const int kMaxConnectionRetry = 10; |
| 90 // Number of times we will retry to reconnect and reload payment portal page. |
| 91 const int kMaxPortalReconnectCount = 5; |
| 82 // Number of times we will retry to reconnect if connection fails. | 92 // Number of times we will retry to reconnect if connection fails. |
| 83 const int kMaxConnectionRetryOTASP = 30; | 93 const int kMaxConnectionRetryOTASP = 30; |
| 84 // Number of times we will retry to reconnect after payment is processed. | 94 // Number of times we will retry to reconnect after payment is processed. |
| 85 const int kMaxReconnectAttemptOTASP = 30; | 95 const int kMaxReconnectAttemptOTASP = 30; |
| 86 // Reconnect retry delay (after payment is processed). | 96 // Reconnect retry delay (after payment is processed). |
| 87 const int kPostPaymentReconnectDelayMS = 30000; // 30s. | 97 const int kPostPaymentReconnectDelayMS = 30000; // 30s. |
| 88 // Connection timeout in seconds. | 98 // Connection timeout in seconds. |
| 89 const int kConnectionTimeoutSeconds = 45; | 99 const int kConnectionTimeoutSeconds = 45; |
| 90 // Reconnect delay. | 100 // Reconnect delay. |
| 91 const int kReconnectDelayMS = 3000; | 101 const int kReconnectDelayMS = 3000; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 106 } | 116 } |
| 107 | 117 |
| 108 chromeos::CellularNetwork* GetCellularNetwork( | 118 chromeos::CellularNetwork* GetCellularNetwork( |
| 109 const std::string& service_path) { | 119 const std::string& service_path) { |
| 110 return chromeos::CrosLibrary::Get()-> | 120 return chromeos::CrosLibrary::Get()-> |
| 111 GetNetworkLibrary()->FindCellularNetworkByPath(service_path); | 121 GetNetworkLibrary()->FindCellularNetworkByPath(service_path); |
| 112 } | 122 } |
| 113 | 123 |
| 114 } // namespace | 124 } // namespace |
| 115 | 125 |
| 126 // Observes IPC messages from the rederer and notifies JS if frame loading error |
| 127 // appears. |
| 128 class PortalFrameLoadObserver : public RenderViewHostObserver { |
| 129 public: |
| 130 PortalFrameLoadObserver(RenderViewHost* host, WebUI* webui) |
| 131 : RenderViewHostObserver(host), webui_(webui) { |
| 132 DCHECK(webui_); |
| 133 Send(new ChromeViewMsg_StartFrameSniffer(routing_id(), |
| 134 UTF8ToUTF16("paymentForm"))); |
| 135 } |
| 136 |
| 137 virtual ~PortalFrameLoadObserver() {} |
| 138 |
| 139 // IPC::Channel::Listener implementation. |
| 140 virtual bool OnMessageReceived(const IPC::Message& message) { |
| 141 bool handled = true; |
| 142 IPC_BEGIN_MESSAGE_MAP(PortalFrameLoadObserver, message) |
| 143 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FrameLoadingError, OnFrameLoadError) |
| 144 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FrameLoadingCompleted, |
| 145 OnFrameLoadCompleted) |
| 146 IPC_MESSAGE_UNHANDLED(handled = false) |
| 147 IPC_END_MESSAGE_MAP() |
| 148 return handled; |
| 149 } |
| 150 |
| 151 private: |
| 152 void OnFrameLoadError(int error) { |
| 153 base::FundamentalValue result_value(error); |
| 154 webui_->CallJavascriptFunction( |
| 155 kJsPortalFrameLoadFailedCallback, result_value); |
| 156 } |
| 157 |
| 158 void OnFrameLoadCompleted() { |
| 159 webui_->CallJavascriptFunction(kJsPortalFrameLoadCompletedCallback); |
| 160 } |
| 161 |
| 162 WebUI* webui_; |
| 163 DISALLOW_COPY_AND_ASSIGN(PortalFrameLoadObserver); |
| 164 }; |
| 165 |
| 116 class CellularConfigDocument { | 166 class CellularConfigDocument { |
| 117 public: | 167 public: |
| 118 CellularConfigDocument() {} | 168 CellularConfigDocument() {} |
| 119 | 169 |
| 120 // Return error message for a given code. | 170 // Return error message for a given code. |
| 121 std::string GetErrorMessage(const std::string& code); | 171 std::string GetErrorMessage(const std::string& code); |
| 122 const std::string& version() { return version_; } | 172 const std::string& version() { return version_; } |
| 123 | 173 |
| 124 bool LoadFromFile(const FilePath& config_path); | 174 bool LoadFromFile(const FilePath& config_path); |
| 125 | 175 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 const chromeos::Network* network) OVERRIDE; | 226 const chromeos::Network* network) OVERRIDE; |
| 177 | 227 |
| 178 private: | 228 private: |
| 179 typedef enum PlanActivationState { | 229 typedef enum PlanActivationState { |
| 180 PLAN_ACTIVATION_PAGE_LOADING = -1, | 230 PLAN_ACTIVATION_PAGE_LOADING = -1, |
| 181 PLAN_ACTIVATION_START = 0, | 231 PLAN_ACTIVATION_START = 0, |
| 182 PLAN_ACTIVATION_TRYING_OTASP = 1, | 232 PLAN_ACTIVATION_TRYING_OTASP = 1, |
| 183 PLAN_ACTIVATION_RECONNECTING_OTASP_TRY = 2, | 233 PLAN_ACTIVATION_RECONNECTING_OTASP_TRY = 2, |
| 184 PLAN_ACTIVATION_INITIATING_ACTIVATION = 3, | 234 PLAN_ACTIVATION_INITIATING_ACTIVATION = 3, |
| 185 PLAN_ACTIVATION_RECONNECTING = 4, | 235 PLAN_ACTIVATION_RECONNECTING = 4, |
| 186 PLAN_ACTIVATION_SHOWING_PAYMENT = 5, | 236 PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING = 5, |
| 187 PLAN_ACTIVATION_DELAY_OTASP = 6, | 237 PLAN_ACTIVATION_SHOWING_PAYMENT = 6, |
| 188 PLAN_ACTIVATION_START_OTASP = 7, | 238 PLAN_ACTIVATION_RECONNECTING_PAYMENT = 7, |
| 189 PLAN_ACTIVATION_OTASP = 8, | 239 PLAN_ACTIVATION_DELAY_OTASP = 8, |
| 190 PLAN_ACTIVATION_RECONNECTING_OTASP = 9, | 240 PLAN_ACTIVATION_START_OTASP = 9, |
| 191 PLAN_ACTIVATION_DONE = 10, | 241 PLAN_ACTIVATION_OTASP = 10, |
| 242 PLAN_ACTIVATION_RECONNECTING_OTASP = 11, |
| 243 PLAN_ACTIVATION_DONE = 12, |
| 192 PLAN_ACTIVATION_ERROR = 0xFF, | 244 PLAN_ACTIVATION_ERROR = 0xFF, |
| 193 } PlanActivationState; | 245 } PlanActivationState; |
| 194 | 246 |
| 195 class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> { | 247 class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> { |
| 196 public: | 248 public: |
| 197 TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler, int delay) | 249 TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler, int delay) |
| 198 : handler_(handler), delay_(delay) { | 250 : handler_(handler), delay_(delay) { |
| 199 } | 251 } |
| 200 TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler, | 252 TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler, |
| 201 const std::string& status) | 253 const std::string& status) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 220 private: | 272 private: |
| 221 base::WeakPtr<MobileSetupHandler> handler_; | 273 base::WeakPtr<MobileSetupHandler> handler_; |
| 222 std::string status_; | 274 std::string status_; |
| 223 int delay_; | 275 int delay_; |
| 224 DISALLOW_COPY_AND_ASSIGN(TaskProxy); | 276 DISALLOW_COPY_AND_ASSIGN(TaskProxy); |
| 225 }; | 277 }; |
| 226 | 278 |
| 227 // Handlers for JS WebUI messages. | 279 // Handlers for JS WebUI messages. |
| 228 void HandleSetTransactionStatus(const ListValue* args); | 280 void HandleSetTransactionStatus(const ListValue* args); |
| 229 void HandleStartActivation(const ListValue* args); | 281 void HandleStartActivation(const ListValue* args); |
| 282 void HandlePaymentPortalLoad(const ListValue* args); |
| 230 void SetTransactionStatus(const std::string& status); | 283 void SetTransactionStatus(const std::string& status); |
| 231 // Schedules activation process via task proxy. | 284 // Schedules activation process via task proxy. |
| 232 void InitiateActivation(); | 285 void InitiateActivation(); |
| 233 // Starts activation. | 286 // Starts activation. |
| 234 void StartActivation(); | 287 void StartActivation(); |
| 235 // Retried OTASP. | 288 // Retried OTASP. |
| 236 void RetryOTASP(); | 289 void RetryOTASP(); |
| 237 // Continues activation process. This method is called after we disconnect | 290 // Continues activation process. This method is called after we disconnect |
| 238 // due to detected connectivity issue to kick off reconnection. | 291 // due to detected connectivity issue to kick off reconnection. |
| 239 void ContinueConnecting(int delay); | 292 void ContinueConnecting(int delay); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 bool reenable_wifi_; | 365 bool reenable_wifi_; |
| 313 bool reenable_ethernet_; | 366 bool reenable_ethernet_; |
| 314 bool reenable_cert_check_; | 367 bool reenable_cert_check_; |
| 315 bool evaluating_; | 368 bool evaluating_; |
| 316 // True if we think that another tab is already running activation. | 369 // True if we think that another tab is already running activation. |
| 317 bool already_running_; | 370 bool already_running_; |
| 318 // Connection retry counter. | 371 // Connection retry counter. |
| 319 int connection_retry_count_; | 372 int connection_retry_count_; |
| 320 // Post payment reconnect wait counters. | 373 // Post payment reconnect wait counters. |
| 321 int reconnect_wait_count_; | 374 int reconnect_wait_count_; |
| 375 // Payment portal reload/reconnect attempt count. |
| 376 int payment_reconnect_count_; |
| 322 // Activation retry attempt count; | 377 // Activation retry attempt count; |
| 323 int activation_attempt_; | 378 int activation_attempt_; |
| 324 // Connection start time. | 379 // Connection start time. |
| 325 base::Time connection_start_time_; | 380 base::Time connection_start_time_; |
| 326 // Timer that monitors reconnection timeouts. | 381 // Timer that monitors reconnection timeouts. |
| 327 base::RepeatingTimer<MobileSetupHandler> reconnect_timer_; | 382 base::RepeatingTimer<MobileSetupHandler> reconnect_timer_; |
| 328 | 383 |
| 329 DISALLOW_COPY_AND_ASSIGN(MobileSetupHandler); | 384 DISALLOW_COPY_AND_ASSIGN(MobileSetupHandler); |
| 330 }; | 385 }; |
| 331 | 386 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 : tab_contents_(NULL), | 508 : tab_contents_(NULL), |
| 454 state_(PLAN_ACTIVATION_PAGE_LOADING), | 509 state_(PLAN_ACTIVATION_PAGE_LOADING), |
| 455 service_path_(service_path), | 510 service_path_(service_path), |
| 456 reenable_wifi_(false), | 511 reenable_wifi_(false), |
| 457 reenable_ethernet_(false), | 512 reenable_ethernet_(false), |
| 458 reenable_cert_check_(false), | 513 reenable_cert_check_(false), |
| 459 evaluating_(false), | 514 evaluating_(false), |
| 460 already_running_(false), | 515 already_running_(false), |
| 461 connection_retry_count_(0), | 516 connection_retry_count_(0), |
| 462 reconnect_wait_count_(0), | 517 reconnect_wait_count_(0), |
| 518 payment_reconnect_count_(0), |
| 463 activation_attempt_(0) { | 519 activation_attempt_(0) { |
| 464 } | 520 } |
| 465 | 521 |
| 466 MobileSetupHandler::~MobileSetupHandler() { | 522 MobileSetupHandler::~MobileSetupHandler() { |
| 467 reconnect_timer_.Stop(); | 523 reconnect_timer_.Stop(); |
| 468 chromeos::NetworkLibrary* lib = | 524 chromeos::NetworkLibrary* lib = |
| 469 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); | 525 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| 470 lib->RemoveNetworkManagerObserver(this); | 526 lib->RemoveNetworkManagerObserver(this); |
| 471 lib->RemoveObserverForAllNetworks(this); | 527 lib->RemoveObserverForAllNetworks(this); |
| 472 if (lib->IsLocked()) | 528 if (lib->IsLocked()) |
| (...skipping 17 matching lines...) Expand all Loading... |
| 490 already_running_ = true; | 546 already_running_ = true; |
| 491 } | 547 } |
| 492 | 548 |
| 493 void MobileSetupHandler::RegisterMessages() { | 549 void MobileSetupHandler::RegisterMessages() { |
| 494 web_ui_->RegisterMessageCallback(kJsApiStartActivation, | 550 web_ui_->RegisterMessageCallback(kJsApiStartActivation, |
| 495 base::Bind(&MobileSetupHandler::HandleStartActivation, | 551 base::Bind(&MobileSetupHandler::HandleStartActivation, |
| 496 base::Unretained(this))); | 552 base::Unretained(this))); |
| 497 web_ui_->RegisterMessageCallback(kJsApiSetTransactionStatus, | 553 web_ui_->RegisterMessageCallback(kJsApiSetTransactionStatus, |
| 498 base::Bind(&MobileSetupHandler::HandleSetTransactionStatus, | 554 base::Bind(&MobileSetupHandler::HandleSetTransactionStatus, |
| 499 base::Unretained(this))); | 555 base::Unretained(this))); |
| 556 web_ui_->RegisterMessageCallback(kJsApiPaymentPortalLoad, |
| 557 base::Bind(&MobileSetupHandler::HandlePaymentPortalLoad, |
| 558 base::Unretained(this))); |
| 500 } | 559 } |
| 501 | 560 |
| 502 void MobileSetupHandler::OnNetworkManagerChanged( | 561 void MobileSetupHandler::OnNetworkManagerChanged( |
| 503 chromeos::NetworkLibrary* cros) { | 562 chromeos::NetworkLibrary* cros) { |
| 504 if (state_ == PLAN_ACTIVATION_PAGE_LOADING) | 563 if (state_ == PLAN_ACTIVATION_PAGE_LOADING) |
| 505 return; | 564 return; |
| 506 // Note that even though we get here when the service has | 565 // Note that even though we get here when the service has |
| 507 // reappeared after disappearing earlier in the activation | 566 // reappeared after disappearing earlier in the activation |
| 508 // process, there's no need to re-establish the NetworkObserver, | 567 // process, there's no need to re-establish the NetworkObserver, |
| 509 // because the service path remains the same. | 568 // because the service path remains the same. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 529 return; | 588 return; |
| 530 // Get change callback function name. | 589 // Get change callback function name. |
| 531 std::string status; | 590 std::string status; |
| 532 if (!args->GetString(0, &status)) | 591 if (!args->GetString(0, &status)) |
| 533 return; | 592 return; |
| 534 scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr(), status); | 593 scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr(), status); |
| 535 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 594 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 536 base::Bind(&TaskProxy::HandleSetTransactionStatus, task.get())); | 595 base::Bind(&TaskProxy::HandleSetTransactionStatus, task.get())); |
| 537 } | 596 } |
| 538 | 597 |
| 598 void MobileSetupHandler::HandlePaymentPortalLoad(const ListValue* args) { |
| 599 const size_t kPaymentPortalLoadParamCount = 1; |
| 600 if (args->GetSize() != kPaymentPortalLoadParamCount) |
| 601 return; |
| 602 // Get change callback function name. |
| 603 std::string result; |
| 604 if (!args->GetString(0, &result)) |
| 605 return; |
| 606 chromeos::CellularNetwork* network = GetCellularNetwork(service_path_); |
| 607 if (!network) { |
| 608 ChangeState(NULL, PLAN_ACTIVATION_ERROR, |
| 609 GetErrorMessage(kErrorNoService)); |
| 610 return; |
| 611 } |
| 612 if (state_ == PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING || |
| 613 state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) { |
| 614 if (LowerCaseEqualsASCII(result, kJsApiResultOK)) { |
| 615 payment_reconnect_count_ = 0; |
| 616 ChangeState(network, PLAN_ACTIVATION_SHOWING_PAYMENT, std::string()); |
| 617 } else { |
| 618 payment_reconnect_count_++; |
| 619 if (payment_reconnect_count_ > kMaxPortalReconnectCount) { |
| 620 ChangeState(NULL, PLAN_ACTIVATION_ERROR, |
| 621 GetErrorMessage(kErrorNoService)); |
| 622 return; |
| 623 } |
| 624 // Disconnect now, this should force reconnection and we will retry to |
| 625 // load the frame containing payment portal again. |
| 626 DisconnectFromNetwork(network); |
| 627 } |
| 628 } else { |
| 629 NOTREACHED() << "Called paymentPortalLoad while in unexpected state: " |
| 630 << GetStateDescription(state_); |
| 631 } |
| 632 } |
| 633 |
| 539 void MobileSetupHandler::InitiateActivation() { | 634 void MobileSetupHandler::InitiateActivation() { |
| 540 scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr(), 0); | 635 scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr(), 0); |
| 541 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 636 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 542 base::Bind(&TaskProxy::HandleStartActivation, task.get())); | 637 base::Bind(&TaskProxy::HandleStartActivation, task.get())); |
| 543 } | 638 } |
| 544 | 639 |
| 545 void MobileSetupHandler::StartActivation() { | 640 void MobileSetupHandler::StartActivation() { |
| 546 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 641 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 547 chromeos::NetworkLibrary* lib = | 642 chromeos::NetworkLibrary* lib = |
| 548 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); | 643 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 EvaluateCellularNetwork(network); | 681 EvaluateCellularNetwork(network); |
| 587 } else { | 682 } else { |
| 588 ConnectToNetwork(network, delay); | 683 ConnectToNetwork(network, delay); |
| 589 } | 684 } |
| 590 } | 685 } |
| 591 | 686 |
| 592 void MobileSetupHandler::SetTransactionStatus(const std::string& status) { | 687 void MobileSetupHandler::SetTransactionStatus(const std::string& status) { |
| 593 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 688 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 594 // The payment is received, try to reconnect and check the status all over | 689 // The payment is received, try to reconnect and check the status all over |
| 595 // again. | 690 // again. |
| 596 if (LowerCaseEqualsASCII(status, "ok") && | 691 if (LowerCaseEqualsASCII(status, kJsApiResultOK) && |
| 597 state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) { | 692 state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) { |
| 598 chromeos::NetworkLibrary* lib = | 693 chromeos::NetworkLibrary* lib = |
| 599 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); | 694 chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
| 600 lib->SignalCellularPlanPayment(); | 695 lib->SignalCellularPlanPayment(); |
| 601 UMA_HISTOGRAM_COUNTS("Cellular.PaymentReceived", 1); | 696 UMA_HISTOGRAM_COUNTS("Cellular.PaymentReceived", 1); |
| 602 StartOTASP(); | 697 StartOTASP(); |
| 603 } else { | 698 } else { |
| 604 UMA_HISTOGRAM_COUNTS("Cellular.PaymentFailed", 1); | 699 UMA_HISTOGRAM_COUNTS("Cellular.PaymentFailed", 1); |
| 605 } | 700 } |
| 606 } | 701 } |
| 607 | 702 |
| 608 void MobileSetupHandler::StartOTASP() { | 703 void MobileSetupHandler::StartOTASP() { |
| 609 state_ = PLAN_ACTIVATION_START_OTASP; | 704 state_ = PLAN_ACTIVATION_START_OTASP; |
| 610 chromeos::CellularNetwork* network = GetCellularNetwork(); | 705 chromeos::CellularNetwork* network = GetCellularNetwork(); |
| 611 if (network && | 706 if (network && |
| 612 network->connected() && | 707 network->connected() && |
| 613 network->activation_state() == chromeos::ACTIVATION_STATE_ACTIVATED) { | 708 network->activation_state() == chromeos::ACTIVATION_STATE_ACTIVATED) { |
| 614 chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> | 709 chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> |
| 615 DisconnectFromNetwork(network); | 710 DisconnectFromNetwork(network); |
| 616 } else { | 711 } else { |
| 617 EvaluateCellularNetwork(network); | 712 EvaluateCellularNetwork(network); |
| 618 } | 713 } |
| 619 } | 714 } |
| 620 | 715 |
| 621 void MobileSetupHandler::ReconnectTimerFired() { | 716 void MobileSetupHandler::ReconnectTimerFired() { |
| 622 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 717 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 623 // Permit network connection changes only in reconnecting states. | 718 // Permit network connection changes only in reconnecting states. |
| 624 if (state_ != PLAN_ACTIVATION_RECONNECTING_OTASP_TRY && | 719 if (state_ != PLAN_ACTIVATION_RECONNECTING_OTASP_TRY && |
| 625 state_ != PLAN_ACTIVATION_RECONNECTING && | 720 state_ != PLAN_ACTIVATION_RECONNECTING && |
| 721 state_ != PLAN_ACTIVATION_RECONNECTING_PAYMENT && |
| 626 state_ != PLAN_ACTIVATION_RECONNECTING_OTASP) | 722 state_ != PLAN_ACTIVATION_RECONNECTING_OTASP) |
| 627 return; | 723 return; |
| 628 chromeos::CellularNetwork* network = GetCellularNetwork(service_path_); | 724 chromeos::CellularNetwork* network = GetCellularNetwork(service_path_); |
| 629 if (!network) { | 725 if (!network) { |
| 630 // No service, try again since this is probably just transient condition. | 726 // No service, try again since this is probably just transient condition. |
| 631 LOG(WARNING) << "Service not present at reconnect attempt."; | 727 LOG(WARNING) << "Service not present at reconnect attempt."; |
| 632 } | 728 } |
| 633 EvaluateCellularNetwork(network); | 729 EvaluateCellularNetwork(network); |
| 634 } | 730 } |
| 635 | 731 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 } | 765 } |
| 670 | 766 |
| 671 bool MobileSetupHandler::ConnectToNetwork( | 767 bool MobileSetupHandler::ConnectToNetwork( |
| 672 chromeos::CellularNetwork* network, | 768 chromeos::CellularNetwork* network, |
| 673 int delay) { | 769 int delay) { |
| 674 if (network && network->connecting_or_connected()) | 770 if (network && network->connecting_or_connected()) |
| 675 return true; | 771 return true; |
| 676 // Permit network connection changes only in reconnecting states. | 772 // Permit network connection changes only in reconnecting states. |
| 677 if (state_ != PLAN_ACTIVATION_RECONNECTING_OTASP_TRY && | 773 if (state_ != PLAN_ACTIVATION_RECONNECTING_OTASP_TRY && |
| 678 state_ != PLAN_ACTIVATION_RECONNECTING && | 774 state_ != PLAN_ACTIVATION_RECONNECTING && |
| 775 state_ != PLAN_ACTIVATION_RECONNECTING_PAYMENT && |
| 679 state_ != PLAN_ACTIVATION_RECONNECTING_OTASP) | 776 state_ != PLAN_ACTIVATION_RECONNECTING_OTASP) |
| 680 return false; | 777 return false; |
| 681 if (network) | 778 if (network) |
| 682 LOG(INFO) << "Connecting to: " << network->service_path(); | 779 LOG(INFO) << "Connecting to: " << network->service_path(); |
| 683 connection_retry_count_++; | 780 connection_retry_count_++; |
| 684 connection_start_time_ = base::Time::Now(); | 781 connection_start_time_ = base::Time::Now(); |
| 685 if (!network) { | 782 if (!network) { |
| 686 LOG(WARNING) << "Connect failed." | 783 LOG(WARNING) << "Connect failed." |
| 687 << (network ? network->service_path().c_str() : "no service"); | 784 << (network ? network->service_path().c_str() : "no service"); |
| 688 // If we coudn't connect during reconnection phase, try to reconnect | 785 // If we coudn't connect during reconnection phase, try to reconnect |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 void MobileSetupHandler::EvaluateCellularNetwork( | 822 void MobileSetupHandler::EvaluateCellularNetwork( |
| 726 chromeos::CellularNetwork* network) { | 823 chromeos::CellularNetwork* network) { |
| 727 if (!web_ui_) | 824 if (!web_ui_) |
| 728 return; | 825 return; |
| 729 | 826 |
| 730 PlanActivationState new_state = state_; | 827 PlanActivationState new_state = state_; |
| 731 if (!network) { | 828 if (!network) { |
| 732 LOG(WARNING) << "Cellular service lost"; | 829 LOG(WARNING) << "Cellular service lost"; |
| 733 if (state_ == PLAN_ACTIVATION_RECONNECTING_OTASP_TRY || | 830 if (state_ == PLAN_ACTIVATION_RECONNECTING_OTASP_TRY || |
| 734 state_ == PLAN_ACTIVATION_RECONNECTING || | 831 state_ == PLAN_ACTIVATION_RECONNECTING || |
| 832 state_ == PLAN_ACTIVATION_RECONNECTING_PAYMENT || |
| 735 state_ == PLAN_ACTIVATION_RECONNECTING_OTASP) { | 833 state_ == PLAN_ACTIVATION_RECONNECTING_OTASP) { |
| 736 // This might be the legit case when service is lost after activation. | 834 // This might be the legit case when service is lost after activation. |
| 737 // We need to make sure we force reconnection as soon as it shows up. | 835 // We need to make sure we force reconnection as soon as it shows up. |
| 738 LOG(INFO) << "Force service reconnection"; | 836 LOG(INFO) << "Force service reconnection"; |
| 739 connection_start_time_ = base::Time(); | 837 connection_start_time_ = base::Time(); |
| 740 } | 838 } |
| 741 return; | 839 return; |
| 742 } | 840 } |
| 743 | 841 |
| 744 // Prevent this method from being called if it is already on the stack. | 842 // Prevent this method from being called if it is already on the stack. |
| 745 // This might happen on some state transitions (ie. connect, disconnect). | 843 // This might happen on some state transitions (ie. connect, disconnect). |
| 746 if (evaluating_) | 844 if (evaluating_) |
| 747 return; | 845 return; |
| 748 evaluating_ = true; | 846 evaluating_ = true; |
| 749 std::string error_description; | 847 std::string error_description; |
| 750 | 848 |
| 751 LOG(WARNING) << "Cellular:\n service=" << network->GetStateString().c_str() | 849 LOG(WARNING) << "Cellular:\n service=" << network->GetStateString().c_str() |
| 752 << "\n ui=" << GetStateDescription(state_) | 850 << "\n ui=" << GetStateDescription(state_) |
| 753 << "\n activation=" << network->GetActivationStateString().c_str() | 851 << "\n activation=" << network->GetActivationStateString().c_str() |
| 754 << "\n error=" << network->GetErrorString().c_str() | 852 << "\n error=" << network->GetErrorString().c_str() |
| 755 << "\n setvice_path=" << network->service_path().c_str(); | 853 << "\n setvice_path=" << network->service_path().c_str(); |
| 756 switch (state_) { | 854 switch (state_) { |
| 757 case PLAN_ACTIVATION_START: { | 855 case PLAN_ACTIVATION_START: { |
| 758 switch (network->activation_state()) { | 856 switch (network->activation_state()) { |
| 759 case chromeos::ACTIVATION_STATE_ACTIVATED: { | 857 case chromeos::ACTIVATION_STATE_ACTIVATED: { |
| 760 if (network->disconnected()) { | 858 if (network->disconnected()) { |
| 761 new_state = PLAN_ACTIVATION_RECONNECTING; | 859 new_state = PLAN_ACTIVATION_RECONNECTING; |
| 762 } else if (network->connected()) { | 860 } else if (network->connected()) { |
| 763 if (network->restricted_pool()) { | 861 if (network->restricted_pool()) { |
| 764 new_state = PLAN_ACTIVATION_SHOWING_PAYMENT; | 862 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING; |
| 765 } else { | 863 } else { |
| 766 new_state = PLAN_ACTIVATION_DONE; | 864 new_state = PLAN_ACTIVATION_DONE; |
| 767 } | 865 } |
| 768 } | 866 } |
| 769 break; | 867 break; |
| 770 } | 868 } |
| 771 default: { | 869 default: { |
| 772 if (network->disconnected() || | 870 if (network->disconnected() || |
| 773 network->state() == chromeos::STATE_ACTIVATION_FAILURE) { | 871 network->state() == chromeos::STATE_ACTIVATION_FAILURE) { |
| 774 new_state = (network->activation_state() == | 872 new_state = (network->activation_state() == |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 return; | 910 return; |
| 813 case PLAN_ACTIVATION_INITIATING_ACTIVATION: | 911 case PLAN_ACTIVATION_INITIATING_ACTIVATION: |
| 814 case PLAN_ACTIVATION_OTASP: | 912 case PLAN_ACTIVATION_OTASP: |
| 815 case PLAN_ACTIVATION_TRYING_OTASP: { | 913 case PLAN_ACTIVATION_TRYING_OTASP: { |
| 816 switch (network->activation_state()) { | 914 switch (network->activation_state()) { |
| 817 case chromeos::ACTIVATION_STATE_ACTIVATED: | 915 case chromeos::ACTIVATION_STATE_ACTIVATED: |
| 818 if (network->disconnected()) { | 916 if (network->disconnected()) { |
| 819 new_state = GetNextReconnectState(state_); | 917 new_state = GetNextReconnectState(state_); |
| 820 } else if (network->connected()) { | 918 } else if (network->connected()) { |
| 821 if (network->restricted_pool()) { | 919 if (network->restricted_pool()) { |
| 822 new_state = PLAN_ACTIVATION_SHOWING_PAYMENT; | 920 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING; |
| 823 } else { | 921 } else { |
| 824 new_state = PLAN_ACTIVATION_DONE; | 922 new_state = PLAN_ACTIVATION_DONE; |
| 825 } | 923 } |
| 826 } | 924 } |
| 827 break; | 925 break; |
| 828 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: | 926 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: |
| 829 if (network->connected()) { | 927 if (network->connected()) { |
| 830 if (network->restricted_pool()) | 928 if (network->restricted_pool()) |
| 831 new_state = PLAN_ACTIVATION_SHOWING_PAYMENT; | 929 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING; |
| 832 } else { | 930 } else { |
| 833 new_state = GetNextReconnectState(state_); | 931 new_state = GetNextReconnectState(state_); |
| 834 } | 932 } |
| 835 break; | 933 break; |
| 836 case chromeos::ACTIVATION_STATE_NOT_ACTIVATED: | 934 case chromeos::ACTIVATION_STATE_NOT_ACTIVATED: |
| 837 case chromeos::ACTIVATION_STATE_ACTIVATING: | 935 case chromeos::ACTIVATION_STATE_ACTIVATING: |
| 838 // Wait in this state until activation state changes. | 936 // Wait in this state until activation state changes. |
| 839 break; | 937 break; |
| 840 default: | 938 default: |
| 841 break; | 939 break; |
| 842 } | 940 } |
| 843 break; | 941 break; |
| 844 } | 942 } |
| 845 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: | 943 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: |
| 944 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: |
| 846 case PLAN_ACTIVATION_RECONNECTING: { | 945 case PLAN_ACTIVATION_RECONNECTING: { |
| 847 if (network->connected()) { | 946 if (network->connected()) { |
| 848 // Make sure other networks are not interfering with our detection of | 947 // Make sure other networks are not interfering with our detection of |
| 849 // restricted pool. | 948 // restricted pool. |
| 850 DisableOtherNetworks(); | 949 DisableOtherNetworks(); |
| 851 // Wait until the service shows up and gets activated. | 950 // Wait until the service shows up and gets activated. |
| 852 switch (network->activation_state()) { | 951 switch (network->activation_state()) { |
| 853 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: | 952 case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED: |
| 854 case chromeos::ACTIVATION_STATE_ACTIVATED: | 953 case chromeos::ACTIVATION_STATE_ACTIVATED: |
| 855 if (network->restricted_pool()) { | 954 if (network->restricted_pool()) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 867 return; | 966 return; |
| 868 } else { | 967 } else { |
| 869 new_state = PLAN_ACTIVATION_ERROR; | 968 new_state = PLAN_ACTIVATION_ERROR; |
| 870 UMA_HISTOGRAM_COUNTS("Cellular.ActivationRetryFailure", 1); | 969 UMA_HISTOGRAM_COUNTS("Cellular.ActivationRetryFailure", 1); |
| 871 error_description = GetErrorMessage(kFailedConnectivity); | 970 error_description = GetErrorMessage(kFailedConnectivity); |
| 872 } | 971 } |
| 873 } else { | 972 } else { |
| 874 // If we have already received payment, don't show the payment | 973 // If we have already received payment, don't show the payment |
| 875 // page again. We should try to reconnect after some | 974 // page again. We should try to reconnect after some |
| 876 // time instead. | 975 // time instead. |
| 877 new_state = PLAN_ACTIVATION_SHOWING_PAYMENT; | 976 new_state = PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING; |
| 878 } | 977 } |
| 879 } else if (network->activation_state() == | 978 } else if (network->activation_state() == |
| 880 chromeos::ACTIVATION_STATE_ACTIVATED) { | 979 chromeos::ACTIVATION_STATE_ACTIVATED) { |
| 881 new_state = PLAN_ACTIVATION_DONE; | 980 new_state = PLAN_ACTIVATION_DONE; |
| 882 } | 981 } |
| 883 break; | 982 break; |
| 884 default: | 983 default: |
| 885 break; | 984 break; |
| 886 } | 985 } |
| 887 } else if (NeedsReconnecting(network, &new_state, &error_description)) { | 986 } else if (NeedsReconnecting(network, &new_state, &error_description)) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 } | 1024 } |
| 926 } else if (NeedsReconnecting(network, &new_state, &error_description)) { | 1025 } else if (NeedsReconnecting(network, &new_state, &error_description)) { |
| 927 evaluating_ = false; | 1026 evaluating_ = false; |
| 928 return; | 1027 return; |
| 929 } | 1028 } |
| 930 break; | 1029 break; |
| 931 } | 1030 } |
| 932 case PLAN_ACTIVATION_PAGE_LOADING: | 1031 case PLAN_ACTIVATION_PAGE_LOADING: |
| 933 break; | 1032 break; |
| 934 // Just ignore all signals until the site confirms payment. | 1033 // Just ignore all signals until the site confirms payment. |
| 935 case PLAN_ACTIVATION_SHOWING_PAYMENT: | 1034 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: |
| 1035 case PLAN_ACTIVATION_SHOWING_PAYMENT: { |
| 1036 if (network->disconnected()) |
| 1037 new_state = PLAN_ACTIVATION_RECONNECTING_PAYMENT; |
| 1038 break; |
| 1039 } |
| 936 // Activation completed/failed, ignore network changes. | 1040 // Activation completed/failed, ignore network changes. |
| 937 case PLAN_ACTIVATION_DONE: | 1041 case PLAN_ACTIVATION_DONE: |
| 938 case PLAN_ACTIVATION_ERROR: | 1042 case PLAN_ACTIVATION_ERROR: |
| 939 break; | 1043 break; |
| 940 } | 1044 } |
| 941 | 1045 |
| 942 if (new_state != PLAN_ACTIVATION_ERROR && | 1046 if (new_state != PLAN_ACTIVATION_ERROR && |
| 943 GotActivationError(network, &error_description)) { | 1047 GotActivationError(network, &error_description)) { |
| 944 // Check for this special case when we try to do activate partially | 1048 // Check for this special case when we try to do activate partially |
| 945 // activated device. If that attempt failed, try to disconnect to clear the | 1049 // activated device. If that attempt failed, try to disconnect to clear the |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 case PLAN_ACTIVATION_START: | 1119 case PLAN_ACTIVATION_START: |
| 1016 return "ACTIVATION_START"; | 1120 return "ACTIVATION_START"; |
| 1017 case PLAN_ACTIVATION_TRYING_OTASP: | 1121 case PLAN_ACTIVATION_TRYING_OTASP: |
| 1018 return "TRYING_OTASP"; | 1122 return "TRYING_OTASP"; |
| 1019 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: | 1123 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: |
| 1020 return "RECONNECTING_OTASP_TRY"; | 1124 return "RECONNECTING_OTASP_TRY"; |
| 1021 case PLAN_ACTIVATION_INITIATING_ACTIVATION: | 1125 case PLAN_ACTIVATION_INITIATING_ACTIVATION: |
| 1022 return "INITIATING_ACTIVATION"; | 1126 return "INITIATING_ACTIVATION"; |
| 1023 case PLAN_ACTIVATION_RECONNECTING: | 1127 case PLAN_ACTIVATION_RECONNECTING: |
| 1024 return "RECONNECTING"; | 1128 return "RECONNECTING"; |
| 1129 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: |
| 1130 return "PAYMENT_PORTAL_LOADING"; |
| 1025 case PLAN_ACTIVATION_SHOWING_PAYMENT: | 1131 case PLAN_ACTIVATION_SHOWING_PAYMENT: |
| 1026 return "SHOWING_PAYMENT"; | 1132 return "SHOWING_PAYMENT"; |
| 1133 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: |
| 1134 return "RECONNECTING_PAYMENT"; |
| 1027 case PLAN_ACTIVATION_START_OTASP: | 1135 case PLAN_ACTIVATION_START_OTASP: |
| 1028 return "START_OTASP"; | 1136 return "START_OTASP"; |
| 1029 case PLAN_ACTIVATION_DELAY_OTASP: | 1137 case PLAN_ACTIVATION_DELAY_OTASP: |
| 1030 return "DELAY_OTASP"; | 1138 return "DELAY_OTASP"; |
| 1031 case PLAN_ACTIVATION_OTASP: | 1139 case PLAN_ACTIVATION_OTASP: |
| 1032 return "OTASP"; | 1140 return "OTASP"; |
| 1033 case PLAN_ACTIVATION_RECONNECTING_OTASP: | 1141 case PLAN_ACTIVATION_RECONNECTING_OTASP: |
| 1034 return "RECONNECTING_OTASP"; | 1142 return "RECONNECTING_OTASP"; |
| 1035 case PLAN_ACTIVATION_DONE: | 1143 case PLAN_ACTIVATION_DONE: |
| 1036 return "DONE"; | 1144 return "DONE"; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1061 void MobileSetupHandler::UpdatePage( | 1169 void MobileSetupHandler::UpdatePage( |
| 1062 chromeos::CellularNetwork* network, | 1170 chromeos::CellularNetwork* network, |
| 1063 const std::string& error_description) { | 1171 const std::string& error_description) { |
| 1064 DictionaryValue device_dict; | 1172 DictionaryValue device_dict; |
| 1065 if (network) | 1173 if (network) |
| 1066 GetDeviceInfo(network, &device_dict); | 1174 GetDeviceInfo(network, &device_dict); |
| 1067 device_dict.SetInteger("state", state_); | 1175 device_dict.SetInteger("state", state_); |
| 1068 if (error_description.length()) | 1176 if (error_description.length()) |
| 1069 device_dict.SetString("error", error_description); | 1177 device_dict.SetString("error", error_description); |
| 1070 web_ui_->CallJavascriptFunction( | 1178 web_ui_->CallJavascriptFunction( |
| 1071 kJsDeviceStatusChangedHandler, device_dict); | 1179 kJsDeviceStatusChangedCallback, device_dict); |
| 1072 } | 1180 } |
| 1073 | 1181 |
| 1074 | 1182 |
| 1075 void MobileSetupHandler::ChangeState(chromeos::CellularNetwork* network, | 1183 void MobileSetupHandler::ChangeState(chromeos::CellularNetwork* network, |
| 1076 PlanActivationState new_state, | 1184 PlanActivationState new_state, |
| 1077 const std::string& error_description) { | 1185 const std::string& error_description) { |
| 1078 static bool first_time = true; | 1186 static bool first_time = true; |
| 1079 if (state_ == new_state && !first_time) | 1187 if (state_ == new_state && !first_time) |
| 1080 return; | 1188 return; |
| 1081 LOG(WARNING) << "Activation state flip old = " | 1189 LOG(WARNING) << "Activation state flip old = " |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 if (new_state == PLAN_ACTIVATION_OTASP) { | 1230 if (new_state == PLAN_ACTIVATION_OTASP) { |
| 1123 ChangeState(network, PLAN_ACTIVATION_DELAY_OTASP, std::string()); | 1231 ChangeState(network, PLAN_ACTIVATION_DELAY_OTASP, std::string()); |
| 1124 } else { | 1232 } else { |
| 1125 ChangeState(network, PLAN_ACTIVATION_ERROR, | 1233 ChangeState(network, PLAN_ACTIVATION_ERROR, |
| 1126 GetErrorMessage(kFailedConnectivity)); | 1234 GetErrorMessage(kFailedConnectivity)); |
| 1127 } | 1235 } |
| 1128 } | 1236 } |
| 1129 break; | 1237 break; |
| 1130 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: | 1238 case PLAN_ACTIVATION_RECONNECTING_OTASP_TRY: |
| 1131 case PLAN_ACTIVATION_RECONNECTING: | 1239 case PLAN_ACTIVATION_RECONNECTING: |
| 1240 case PLAN_ACTIVATION_RECONNECTING_PAYMENT: |
| 1132 case PLAN_ACTIVATION_RECONNECTING_OTASP: { | 1241 case PLAN_ACTIVATION_RECONNECTING_OTASP: { |
| 1133 // Start reconnect timer. This will ensure that we are not left in | 1242 // Start reconnect timer. This will ensure that we are not left in |
| 1134 // limbo by the network library. | 1243 // limbo by the network library. |
| 1135 if (!reconnect_timer_.IsRunning()) { | 1244 if (!reconnect_timer_.IsRunning()) { |
| 1136 reconnect_timer_.Start( | 1245 reconnect_timer_.Start( |
| 1137 FROM_HERE, | 1246 FROM_HERE, |
| 1138 base::TimeDelta::FromMilliseconds(kReconnectTimerDelayMS), | 1247 base::TimeDelta::FromMilliseconds(kReconnectTimerDelayMS), |
| 1139 this, &MobileSetupHandler::ReconnectTimerFired); | 1248 this, &MobileSetupHandler::ReconnectTimerFired); |
| 1140 } | 1249 } |
| 1141 // Reset connection metrics and try to connect. | 1250 // Reset connection metrics and try to connect. |
| 1142 reconnect_wait_count_ = 0; | 1251 reconnect_wait_count_ = 0; |
| 1143 connection_retry_count_ = 0; | 1252 connection_retry_count_ = 0; |
| 1144 connection_start_time_ = base::Time::Now(); | 1253 connection_start_time_ = base::Time::Now(); |
| 1145 ConnectToNetwork(network, kReconnectDelayMS); | 1254 ConnectToNetwork(network, kReconnectDelayMS); |
| 1146 break; | 1255 break; |
| 1147 } | 1256 } |
| 1148 case PLAN_ACTIVATION_PAGE_LOADING: | 1257 case PLAN_ACTIVATION_PAGE_LOADING: |
| 1149 return; | 1258 return; |
| 1259 case PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING: |
| 1150 case PLAN_ACTIVATION_SHOWING_PAYMENT: | 1260 case PLAN_ACTIVATION_SHOWING_PAYMENT: |
| 1151 // Fix for fix SSL for the walled gardens where cert chain verification | 1261 // Fix for fix SSL for the walled gardens where cert chain verification |
| 1152 // might not work. | 1262 // might not work. |
| 1153 break; | 1263 break; |
| 1154 case PLAN_ACTIVATION_DONE: | 1264 case PLAN_ACTIVATION_DONE: |
| 1155 DCHECK(network); | 1265 DCHECK(network); |
| 1156 CompleteActivation(network); | 1266 CompleteActivation(network); |
| 1157 UMA_HISTOGRAM_COUNTS("Cellular.MobileSetupSucceeded", 1); | 1267 UMA_HISTOGRAM_COUNTS("Cellular.MobileSetupSucceeded", 1); |
| 1158 break; | 1268 break; |
| 1159 case PLAN_ACTIVATION_ERROR: | 1269 case PLAN_ACTIVATION_ERROR: |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1336 MobileSetupHandler* handler = new MobileSetupHandler(service_path); | 1446 MobileSetupHandler* handler = new MobileSetupHandler(service_path); |
| 1337 AddMessageHandler((handler)->Attach(this)); | 1447 AddMessageHandler((handler)->Attach(this)); |
| 1338 handler->Init(contents); | 1448 handler->Init(contents); |
| 1339 MobileSetupUIHTMLSource* html_source = | 1449 MobileSetupUIHTMLSource* html_source = |
| 1340 new MobileSetupUIHTMLSource(service_path); | 1450 new MobileSetupUIHTMLSource(service_path); |
| 1341 | 1451 |
| 1342 // Set up the chrome://mobilesetup/ source. | 1452 // Set up the chrome://mobilesetup/ source. |
| 1343 Profile* profile = Profile::FromBrowserContext(contents->browser_context()); | 1453 Profile* profile = Profile::FromBrowserContext(contents->browser_context()); |
| 1344 profile->GetChromeURLDataManager()->AddDataSource(html_source); | 1454 profile->GetChromeURLDataManager()->AddDataSource(html_source); |
| 1345 } | 1455 } |
| 1456 |
| 1457 void MobileSetupUI::RenderViewCreated(RenderViewHost* host) { |
| 1458 ChromeWebUI::RenderViewCreated(host); |
| 1459 // Destroyed by the corresponding RenderViewHost. |
| 1460 new PortalFrameLoadObserver(host, tab_contents()->web_ui()); |
| 1461 } |
| OLD | NEW |