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_start_host_step.h" 63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/remoting/setup_flow_get_status_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 MonsenSetupFlowStartHostStep::SetupFlowStartHostStep() 163f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen : ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), 173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen status_requested_(false) { 183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 203f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowStartHostStep::~SetupFlowStartHostStep() { 213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (process_control_) 223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_->RemoveMessageHandler(this); 233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostStep::HandleMessage(const std::string& message, 263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const Value* arg) { 273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostStep::Cancel() { 303f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (process_control_) 313f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_->RemoveMessageHandler(this); 323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostStep::OnRemotingHostInfo( 353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const remoting::ChromotingHostInfo& host_info) { 363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (status_requested_) { 373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen status_requested_ = false; 383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (host_info.enabled) { 393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen FinishStep(new SetupFlowDoneStep()); 403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } else { 413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen FinishStep(new SetupFlowStartHostErrorStep()); 423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } 433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } 443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostStep::DoStart() { 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen flow()->web_ui()->CallJavascriptFunction("showSettingUp"); 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 493f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_ = 503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ServiceProcessControlManager::GetInstance()->GetProcessControl( 513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen flow()->profile()); 523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (!process_control_ || !process_control_->is_connected()) { 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen FinishStep(new SetupFlowStartHostErrorStep()); 543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } 553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_->SetRemotingHostCredentials(flow()->context()->login, 573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen flow()->context()->talk_token); 583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_->EnableRemotingHost(); 593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen RequestStatus(); 603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostStep::RequestStatus() { 633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen DCHECK(!status_requested_); 643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (!process_control_->RequestRemotingHostStatus()) { 663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen FinishStep(new SetupFlowStartHostErrorStep()); 673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen return; 683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen } 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen status_requested_ = true; 713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen process_control_->AddMessageHandler(this); 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 733f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 743f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowStartHostErrorStep::SetupFlowStartHostErrorStep() { } 753f50c38dc070f4bb515c1b64450dae14f316474eKristian MonsenSetupFlowStartHostErrorStep::~SetupFlowStartHostErrorStep() { } 763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenstring16 SetupFlowStartHostErrorStep::GetErrorMessage() { 783f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen return l10n_util::GetStringUTF16(IDS_REMOTING_SERVICE_PROCESS_FAILED_MESSAGE); 793f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 803f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 813f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid SetupFlowStartHostErrorStep::Retry() { 823f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // When retrying we retry from the GetStatus step because it may be 833f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // necessary to start service process. 843f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen FinishStep(new SetupFlowGetStatusStep()); 853f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 863f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 873f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} // namespace remoting 88