Home | History | Annotate | Download | only in remoting
      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
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/remoting/setup_flow_start_host_step.h"
      6 
      7 #include "chrome/browser/remoting/setup_flow_get_status_step.h"
      8 #include "chrome/browser/service/service_process_control.h"
      9 #include "chrome/browser/service/service_process_control_manager.h"
     10 #include "grit/generated_resources.h"
     11 #include "ui/base/l10n/l10n_util.h"
     12 
     13 namespace remoting {
     14 
     15 SetupFlowStartHostStep::SetupFlowStartHostStep()
     16     : ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
     17       status_requested_(false) {
     18 }
     19 
     20 SetupFlowStartHostStep::~SetupFlowStartHostStep() {
     21   if (process_control_)
     22     process_control_->RemoveMessageHandler(this);
     23 }
     24 
     25 void SetupFlowStartHostStep::HandleMessage(const std::string& message,
     26                                            const Value* arg) {
     27 }
     28 
     29 void SetupFlowStartHostStep::Cancel() {
     30   if (process_control_)
     31     process_control_->RemoveMessageHandler(this);
     32 }
     33 
     34 void SetupFlowStartHostStep::OnRemotingHostInfo(
     35     const remoting::ChromotingHostInfo& host_info) {
     36   if (status_requested_) {
     37     status_requested_ = false;
     38     if (host_info.enabled) {
     39       FinishStep(new SetupFlowDoneStep());
     40     } else {
     41       FinishStep(new SetupFlowStartHostErrorStep());
     42     }
     43   }
     44 }
     45 
     46 void SetupFlowStartHostStep::DoStart() {
     47   flow()->web_ui()->CallJavascriptFunction("showSettingUp");
     48 
     49   process_control_ =
     50       ServiceProcessControlManager::GetInstance()->GetProcessControl(
     51           flow()->profile());
     52   if (!process_control_ || !process_control_->is_connected()) {
     53     FinishStep(new SetupFlowStartHostErrorStep());
     54   }
     55 
     56   process_control_->SetRemotingHostCredentials(flow()->context()->login,
     57                                                flow()->context()->talk_token);
     58   process_control_->EnableRemotingHost();
     59   RequestStatus();
     60 }
     61 
     62 void SetupFlowStartHostStep::RequestStatus() {
     63   DCHECK(!status_requested_);
     64 
     65   if (!process_control_->RequestRemotingHostStatus()) {
     66     FinishStep(new SetupFlowStartHostErrorStep());
     67     return;
     68   }
     69 
     70   status_requested_ = true;
     71   process_control_->AddMessageHandler(this);
     72 }
     73 
     74 SetupFlowStartHostErrorStep::SetupFlowStartHostErrorStep() { }
     75 SetupFlowStartHostErrorStep::~SetupFlowStartHostErrorStep() { }
     76 
     77 string16 SetupFlowStartHostErrorStep::GetErrorMessage() {
     78   return l10n_util::GetStringUTF16(IDS_REMOTING_SERVICE_PROCESS_FAILED_MESSAGE);
     79 }
     80 
     81 void SetupFlowStartHostErrorStep::Retry() {
     82   // When retrying we retry from the GetStatus step because it may be
     83   // necessary to start service process.
     84   FinishStep(new SetupFlowGetStatusStep());
     85 }
     86 
     87 }  // namespace remoting
     88