13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
23f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Use of this source code is governed by a BSD-style license that can be
33f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// found in the LICENSE file.
43f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
53f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/remoting/setup_flow_get_status_step.h"
63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/remoting/setup_flow_register_step.h"
83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/service/service_process_control.h"
93f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/service/service_process_control_manager.h"
103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "grit/generated_resources.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace remoting {
143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
153f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowGetStatusStep::SetupFlowGetStatusStep()
163f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    : ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      status_requested_(false) {
183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
203f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowGetStatusStep::~SetupFlowGetStatusStep() {
213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (process_control_)
223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    process_control_->RemoveMessageHandler(this);
233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::HandleMessage(const std::string& message,
263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                                           const Value* arg) {
273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::Cancel() {
303f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (process_control_)
313f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    process_control_->RemoveMessageHandler(this);
323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::OnRemotingHostInfo(
353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    const remoting::ChromotingHostInfo& host_info) {
363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (status_requested_) {
373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    flow()->context()->host_info = host_info;
383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    status_requested_ = false;
393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    FinishStep(new SetupFlowRegisterStep());
403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  }
413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::DoStart() {
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  flow()->web_ui()->CallJavascriptFunction("showSettingUp");
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  process_control_ =
473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      ServiceProcessControlManager::GetInstance()->GetProcessControl(
483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen          flow()->profile());
493f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (!process_control_->is_connected()) {
503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    LaunchServiceProcess();
513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  } else {
523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    RequestStatus();
533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  }
543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::LaunchServiceProcess() {
573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  Task* done_task = task_factory_.NewRunnableMethod(
583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      &SetupFlowGetStatusStep::OnServiceProcessLaunched);
593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  process_control_->Launch(done_task, done_task);
603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::OnServiceProcessLaunched() {
633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (!process_control_->is_connected()) {
643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    // Failed to start service process.
653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    FinishStep(new SetupFlowGetStatusErrorStep());
663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  } else {
673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    RequestStatus();
683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  }
693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusStep::RequestStatus() {
723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  DCHECK(!status_requested_);
733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (!process_control_->RequestRemotingHostStatus()) {
753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    FinishStep(new SetupFlowGetStatusErrorStep());
763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    return;
773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  }
783f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  status_requested_ = true;
803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  process_control_->AddMessageHandler(this);
813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
823f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
833f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowGetStatusErrorStep::SetupFlowGetStatusErrorStep() { }
843f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowGetStatusErrorStep::~SetupFlowGetStatusErrorStep() { }
853f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
863f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenstring16 SetupFlowGetStatusErrorStep::GetErrorMessage() {
873f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  return l10n_util::GetStringUTF16(IDS_REMOTING_SERVICE_PROCESS_FAILED_MESSAGE);
883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
893f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
903f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowGetStatusErrorStep::Retry() {
913f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  FinishStep(new SetupFlowGetStatusStep());
923f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}
933f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
943f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}  // namespace remoting
95