| Index: chrome/browser/ui/webui/chromeos/sim_unlock_ui.cc
|
| diff --git a/chrome/browser/ui/webui/chromeos/sim_unlock_ui.cc b/chrome/browser/ui/webui/chromeos/sim_unlock_ui.cc
|
| index 3bbd744ce9f20bc59c2c021c0a9fee334fe74731..67ce7354ec162bd2ecd517cc7caf32294c75a972 100644
|
| --- a/chrome/browser/ui/webui/chromeos/sim_unlock_ui.cc
|
| +++ b/chrome/browser/ui/webui/chromeos/sim_unlock_ui.cc
|
| @@ -97,8 +97,8 @@ class SimUnlockHandler : public WebUIMessageHandler,
|
| virtual void RegisterMessages() OVERRIDE;
|
|
|
| // NetworkLibrary::NetworkDeviceObserver implementation.
|
| - virtual void OnNetworkDeviceChanged(NetworkLibrary* cros,
|
| - const NetworkDevice* device) OVERRIDE;
|
| + virtual void OnNetworkDeviceSimLockChanged(
|
| + NetworkLibrary* cros, const NetworkDevice* device) OVERRIDE;
|
|
|
| // NetworkLibrary::PinOperationObserver implementation.
|
| virtual void OnPinOperationCompleted(NetworkLibrary* cros,
|
| @@ -213,6 +213,8 @@ class SimUnlockHandler : public WebUIMessageHandler,
|
| const std::string& error_msg);
|
|
|
| TabContents* tab_contents_;
|
| +
|
| + // Dialog internal state.
|
| SimUnlockState state_;
|
|
|
| // Path of the Cellular device that we monitor property updates from.
|
| @@ -224,6 +226,12 @@ class SimUnlockHandler : public WebUIMessageHandler,
|
| // New PIN value for the case when we unblock SIM card or change PIN.
|
| std::string new_pin_;
|
|
|
| + // True if there's a pending PIN operation.
|
| + // That means that SIM lock state change will be received 2 times:
|
| + // OnNetworkDeviceSimLockChanged and OnPinOperationCompleted.
|
| + // First one should be ignored.
|
| + bool pending_pin_operation_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(SimUnlockHandler);
|
| };
|
|
|
| @@ -306,7 +314,8 @@ void SimUnlockUIHTMLSource::StartDataRequest(const std::string& path,
|
| SimUnlockHandler::SimUnlockHandler()
|
| : tab_contents_(NULL),
|
| state_(SIM_UNLOCK_LOADING),
|
| - dialog_mode_(SimDialogDelegate::SIM_DIALOG_UNLOCK) {
|
| + dialog_mode_(SimDialogDelegate::SIM_DIALOG_UNLOCK),
|
| + pending_pin_operation_(false) {
|
| const chromeos::NetworkDevice* cellular = GetCellularDevice();
|
| // One could just call us directly via chrome://sim-unlock.
|
| if (cellular) {
|
| @@ -348,17 +357,21 @@ void SimUnlockHandler::RegisterMessages() {
|
| NewCallback(this, &SimUnlockHandler::HandleSimStatusInitialize));
|
| }
|
|
|
| -void SimUnlockHandler::OnNetworkDeviceChanged(NetworkLibrary* cros,
|
| - const NetworkDevice* device) {
|
| +void SimUnlockHandler::OnNetworkDeviceSimLockChanged(
|
| + NetworkLibrary* cros, const NetworkDevice* device) {
|
| chromeos::SimLockState lock_state = device->sim_lock_state();
|
| int retries_left = device->sim_retries_left();
|
| - VLOG(1) << "OnNetworkDeviceChanged, lock: " << lock_state
|
| + VLOG(1) << "OnNetworkDeviceSimLockChanged, lock: " << lock_state
|
| << ", retries: " << retries_left;
|
| - ProcessSimCardState(GetCellularDevice());
|
| + // There's a pending PIN operation.
|
| + // Wait for it to finish and refresh state then.
|
| + if (!pending_pin_operation_)
|
| + ProcessSimCardState(GetCellularDevice());
|
| }
|
|
|
| void SimUnlockHandler::OnPinOperationCompleted(NetworkLibrary* cros,
|
| PinOperationError error) {
|
| + pending_pin_operation_ = false;
|
| DCHECK(cros);
|
| const NetworkDevice* cellular = cros->FindCellularDevice();
|
| DCHECK(cellular);
|
| @@ -408,6 +421,7 @@ void SimUnlockHandler::EnterCode(const std::string& code,
|
|
|
| const NetworkDevice* cellular = GetCellularDevice();
|
| chromeos::SimLockState lock_state = cellular->sim_lock_state();
|
| + pending_pin_operation_ = true;
|
|
|
| switch (code_type) {
|
| case CODE_PIN:
|
|
|