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#ifndef CHROME_BROWSER_REMOTING_SETUP_FLOW_GET_STATUS_STEP_H_
63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#define CHROME_BROWSER_REMOTING_SETUP_FLOW_GET_STATUS_STEP_H_
73f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
83f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/remoting/setup_flow.h"
93f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/browser/service/service_process_control.h"
103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/common/net/gaia/gaia_auth_consumer.h"
113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "chrome/common/net/gaia/gaia_auth_fetcher.h"
123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsennamespace remoting {
143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// SetupFlowGetStatusStep requests current host information from the service
163f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// process. It also starts service process if necessary.
173f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenclass SetupFlowGetStatusStep : public SetupFlowStepBase,
183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen                               public ServiceProcessControl::MessageHandler {
193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public:
203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  SetupFlowGetStatusStep();
213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual ~SetupFlowGetStatusStep();
223f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
233f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // SetupFlowStep implementation.
243f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void HandleMessage(const std::string& message, const Value* arg);
253f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void Cancel();
263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
273f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // ServiceProcessControl::MessageHandler interface
283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void OnRemotingHostInfo(
293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen      const remoting::ChromotingHostInfo& host_info);
303f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
313f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen protected:
323f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void DoStart();
333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
343f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen private:
353f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  void LaunchServiceProcess();
363f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  void OnServiceProcessLaunched();
373f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  void RequestStatus();
383f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
393f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  ScopedRunnableMethodFactory<SetupFlowGetStatusStep> task_factory_;
403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  ServiceProcessControl* process_control_;
413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  bool status_requested_;
423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(SetupFlowGetStatusStep);
443f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen};
453f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
463f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenclass SetupFlowGetStatusErrorStep : public SetupFlowErrorStepBase {
473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public:
483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  SetupFlowGetStatusErrorStep();
493f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual ~SetupFlowGetStatusErrorStep();
503f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen protected:
523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual string16 GetErrorMessage();
533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void Retry();
543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen private:
563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  DISALLOW_COPY_AND_ASSIGN(SetupFlowGetStatusErrorStep);
573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen};
583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen}  // namespace remoting
603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#endif  // CHROME_BROWSER_REMOTING_SETUP_FLOW_GET_STATUS_STEP_H_
62