// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef REMOTING_TEST_REMOTE_CONNECTION_OBSERVER_H_
#define REMOTING_TEST_REMOTE_CONNECTION_OBSERVER_H_

#include <string>

#include "remoting/proto/control.pb.h"
#include "remoting/protocol/connection_to_host.h"
#include "remoting/protocol/errors.h"
#include "remoting/protocol/transport.h"

namespace remoting {
namespace test {

// Interface for a remote connection observer which will be notified when
// certain connection status changes occur or events from the remote host
// are received. Observers must not tear-down the object they have registered
// while in a callback. The callbacks should be used for informational
// purposes only.
class RemoteConnectionObserver {
 public:
  RemoteConnectionObserver() {}
  virtual ~RemoteConnectionObserver() {}

  // Called when the connection state has changed.
  virtual void ConnectionStateChanged(protocol::ConnectionToHost::State state,
                                      protocol::ErrorCode error_code) {}

  // Called when the connection is ready to be used, |ready| will be true once
  // the video channel has been established.
  virtual void ConnectionReady(bool ready) {}

  // Called when a channel changes the type of route it is using.
  virtual void RouteChanged(const std::string& channel_name,
                            const protocol::TransportRoute& route) {}

  // Called when the host sends its list of capabilities to the client.
  virtual void CapabilitiesSet(const std::string& capabilities) {}

  // Called when a pairing response has been set.
  virtual void PairingResponseSet(
      const protocol::PairingResponse& pairing_response) {}

  // Called when we have received an ExtensionMessage from the host.
  virtual void HostMessageReceived(const protocol::ExtensionMessage& message) {}

 private:
  DISALLOW_COPY_AND_ASSIGN(RemoteConnectionObserver);
};

}  // namespace test
}  // namespace remoting

#endif  // REMOTING_TEST_REMOTE_CONNECTION_OBSERVER_H_
