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