// Copyright 2014 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.

#include "remoting/host/fake_host_extension.h"

#include <string>

#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "remoting/host/client_session_details.h"
#include "remoting/host/host_extension_session.h"
#include "remoting/proto/control.pb.h"

namespace remoting {

class FakeExtension::Session : public HostExtensionSession {
 public:
  Session(FakeExtension* extension, const std::string& message_type);
  ~Session() override {}

  // HostExtensionSession interface.
  bool OnExtensionMessage(ClientSessionDetails* client_session_details,
                          protocol::ClientStub* client_stub,
                          const protocol::ExtensionMessage& message) override;

 private:
  FakeExtension* extension_;
  std::string message_type_;

  DISALLOW_COPY_AND_ASSIGN(Session);
};

FakeExtension::Session::Session(FakeExtension* extension,
                                const std::string& message_type)
    : extension_(extension), message_type_(message_type) {}

bool FakeExtension::Session::OnExtensionMessage(
    ClientSessionDetails* client_session_details,
    protocol::ClientStub* client_stub,
    const protocol::ExtensionMessage& message) {
  if (message.type() == message_type_) {
    extension_->has_handled_message_ = true;
    return true;
  }
  return false;
}

FakeExtension::FakeExtension(const std::string& message_type,
                             const std::string& capability)
    : message_type_(message_type), capability_(capability) {}

FakeExtension::~FakeExtension() {}

std::string FakeExtension::capability() const {
  return capability_;
}

std::unique_ptr<HostExtensionSession> FakeExtension::CreateExtensionSession(
    ClientSessionDetails* client_session_details,
    protocol::ClientStub* client_stub) {
  DCHECK(!was_instantiated());
  was_instantiated_ = true;
  return base::MakeUnique<Session>(this, message_type_);
}

} // namespace remoting
