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_get_status_step.h"
      6 
      7 #include "chrome/browser/remoting/setup_flow_register_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 SetupFlowGetStatusStep::SetupFlowGetStatusStep()
     16     : ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
     17       status_requested_(false) {
     18 }
     19 
     20 SetupFlowGetStatusStep::~SetupFlowGetStatusStep() {
     21   if (process_control_)
     22     process_control_->RemoveMessageHandler(this);
     23 }
     24 
     25 void SetupFlowGetStatusStep::HandleMessage(const std::string& message,
     26                                            const Value* arg) {
     27 }
     28 
     29 void SetupFlowGetStatusStep::Cancel() {
     30   if (process_control_)
     31     process_control_->RemoveMessageHandler(this);
     32 }
     33 
     34 void SetupFlowGetStatusStep::OnRemotingHostInfo(
     35     const remoting::ChromotingHostInfo& host_info) {
     36   if (status_requested_) {
     37     flow()->context()->host_info = host_info;
     38     status_requested_ = false;
     39     FinishStep(new SetupFlowRegisterStep());
     40   }
     41 }
     42 
     43 void SetupFlowGetStatusStep::DoStart() {
     44   flow()->web_ui()->CallJavascriptFunction("showSettingUp");
     45 
     46   process_control_ =
     47       ServiceProcessControlManager::GetInstance()->GetProcessControl(
     48           flow()->profile());
     49   if (!process_control_->is_connected()) {
     50     LaunchServiceProcess();
     51   } else {
     52     RequestStatus();
     53   }
     54 }
     55 
     56 void SetupFlowGetStatusStep::LaunchServiceProcess() {
     57   Task* done_task = task_factory_.NewRunnableMethod(
     58       &SetupFlowGetStatusStep::OnServiceProcessLaunched);
     59   process_control_->Launch(done_task, done_task);
     60 }
     61 
     62 void SetupFlowGetStatusStep::OnServiceProcessLaunched() {
     63   if (!process_control_->is_connected()) {
     64     // Failed to start service process.
     65     FinishStep(new SetupFlowGetStatusErrorStep());
     66   } else {
     67     RequestStatus();
     68   }
     69 }
     70 
     71 void SetupFlowGetStatusStep::RequestStatus() {
     72   DCHECK(!status_requested_);
     73 
     74   if (!process_control_->RequestRemotingHostStatus()) {
     75     FinishStep(new SetupFlowGetStatusErrorStep());
     76     return;
     77   }
     78 
     79   status_requested_ = true;
     80   process_control_->AddMessageHandler(this);
     81 }
     82 
     83 SetupFlowGetStatusErrorStep::SetupFlowGetStatusErrorStep() { }
     84 SetupFlowGetStatusErrorStep::~SetupFlowGetStatusErrorStep() { }
     85 
     86 string16 SetupFlowGetStatusErrorStep::GetErrorMessage() {
     87   return l10n_util::GetStringUTF16(IDS_REMOTING_SERVICE_PROCESS_FAILED_MESSAGE);
     88 }
     89 
     90 void SetupFlowGetStatusErrorStep::Retry() {
     91   FinishStep(new SetupFlowGetStatusStep());
     92 }
     93 
     94 }  // namespace remoting
     95