| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/remoting/setup_flow_start_host_step.h" |
| |
| #include "chrome/browser/remoting/setup_flow_get_status_step.h" |
| #include "chrome/browser/service/service_process_control.h" |
| #include "chrome/browser/service/service_process_control_manager.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| |
| namespace remoting { |
| |
| SetupFlowStartHostStep::SetupFlowStartHostStep() |
| : ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), |
| status_requested_(false) { |
| } |
| |
| SetupFlowStartHostStep::~SetupFlowStartHostStep() { |
| if (process_control_) |
| process_control_->RemoveMessageHandler(this); |
| } |
| |
| void SetupFlowStartHostStep::HandleMessage(const std::string& message, |
| const Value* arg) { |
| } |
| |
| void SetupFlowStartHostStep::Cancel() { |
| if (process_control_) |
| process_control_->RemoveMessageHandler(this); |
| } |
| |
| void SetupFlowStartHostStep::OnRemotingHostInfo( |
| const remoting::ChromotingHostInfo& host_info) { |
| if (status_requested_) { |
| status_requested_ = false; |
| if (host_info.enabled) { |
| FinishStep(new SetupFlowDoneStep()); |
| } else { |
| FinishStep(new SetupFlowStartHostErrorStep()); |
| } |
| } |
| } |
| |
| void SetupFlowStartHostStep::DoStart() { |
| flow()->web_ui()->CallJavascriptFunction("showSettingUp"); |
| |
| process_control_ = |
| ServiceProcessControlManager::GetInstance()->GetProcessControl( |
| flow()->profile()); |
| if (!process_control_ || !process_control_->is_connected()) { |
| FinishStep(new SetupFlowStartHostErrorStep()); |
| } |
| |
| process_control_->SetRemotingHostCredentials(flow()->context()->login, |
| flow()->context()->talk_token); |
| process_control_->EnableRemotingHost(); |
| RequestStatus(); |
| } |
| |
| void SetupFlowStartHostStep::RequestStatus() { |
| DCHECK(!status_requested_); |
| |
| if (!process_control_->RequestRemotingHostStatus()) { |
| FinishStep(new SetupFlowStartHostErrorStep()); |
| return; |
| } |
| |
| status_requested_ = true; |
| process_control_->AddMessageHandler(this); |
| } |
| |
| SetupFlowStartHostErrorStep::SetupFlowStartHostErrorStep() { } |
| SetupFlowStartHostErrorStep::~SetupFlowStartHostErrorStep() { } |
| |
| string16 SetupFlowStartHostErrorStep::GetErrorMessage() { |
| return l10n_util::GetStringUTF16(IDS_REMOTING_SERVICE_PROCESS_FAILED_MESSAGE); |
| } |
| |
| void SetupFlowStartHostErrorStep::Retry() { |
| // When retrying we retry from the GetStatus step because it may be |
| // necessary to start service process. |
| FinishStep(new SetupFlowGetStatusStep()); |
| } |
| |
| } // namespace remoting |