| Index: remoting/host/security_key/fake_remote_security_key_ipc_server.cc
|
| diff --git a/remoting/host/security_key/fake_remote_security_key_ipc_server.cc b/remoting/host/security_key/fake_remote_security_key_ipc_server.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e7178bd743500f5513d92e3395fc7c3a6144f816
|
| --- /dev/null
|
| +++ b/remoting/host/security_key/fake_remote_security_key_ipc_server.cc
|
| @@ -0,0 +1,127 @@
|
| +// Copyright 2016 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/security_key/fake_remote_security_key_ipc_server.h"
|
| +
|
| +#include <cstdint>
|
| +#include <memory>
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "ipc/ipc_channel.h"
|
| +#include "ipc/ipc_message.h"
|
| +#include "ipc/ipc_message_macros.h"
|
| +#include "remoting/host/chromoting_messages.h"
|
| +#include "remoting/host/security_key/gnubby_auth_handler.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +FakeRemoteSecurityKeyIpcServer::FakeRemoteSecurityKeyIpcServer(
|
| + int connection_id,
|
| + uint32_t peer_session_id,
|
| + base::TimeDelta initial_connect_timeout,
|
| + const GnubbyAuthHandler::SendMessageCallback& send_message_callback,
|
| + const base::Closure& channel_closed_callback)
|
| + : connection_id_(connection_id),
|
| + send_message_callback_(send_message_callback),
|
| + channel_closed_callback_(channel_closed_callback),
|
| + weak_factory_(this) {}
|
| +
|
| +FakeRemoteSecurityKeyIpcServer::~FakeRemoteSecurityKeyIpcServer() {}
|
| +
|
| +void FakeRemoteSecurityKeyIpcServer::SendRequest(
|
| + const std::string& message_data) {
|
| + send_message_callback_.Run(connection_id_, message_data);
|
| +}
|
| +
|
| +void FakeRemoteSecurityKeyIpcServer::CloseChannel() {
|
| + ipc_channel_.reset();
|
| + channel_closed_callback_.Run();
|
| +}
|
| +
|
| +base::WeakPtr<FakeRemoteSecurityKeyIpcServer>
|
| +FakeRemoteSecurityKeyIpcServer::AsWeakPtr() {
|
| + return weak_factory_.GetWeakPtr();
|
| +}
|
| +
|
| +bool FakeRemoteSecurityKeyIpcServer::OnMessageReceived(
|
| + const IPC::Message& message) {
|
| + bool handled = true;
|
| + IPC_BEGIN_MESSAGE_MAP(FakeRemoteSecurityKeyIpcServer, message)
|
| + IPC_MESSAGE_HANDLER(ChromotingRemoteSecurityKeyToNetworkMsg_Request,
|
| + SendRequest)
|
| + IPC_MESSAGE_UNHANDLED(handled = false)
|
| + IPC_END_MESSAGE_MAP()
|
| +
|
| + EXPECT_TRUE(handled);
|
| + return handled;
|
| +}
|
| +
|
| +void FakeRemoteSecurityKeyIpcServer::OnChannelConnected(int32_t peer_pid) {}
|
| +
|
| +void FakeRemoteSecurityKeyIpcServer::OnChannelError() {}
|
| +
|
| +bool FakeRemoteSecurityKeyIpcServer::CreateChannel(
|
| + const std::string& channel_name,
|
| + base::TimeDelta request_timeout) {
|
| + channel_name_ = channel_name;
|
| +
|
| + ipc_channel_ =
|
| + IPC::Channel::CreateNamedServer(IPC::ChannelHandle(channel_name_), this);
|
| + EXPECT_NE(nullptr, ipc_channel_);
|
| + return ipc_channel_->Connect();
|
| +}
|
| +
|
| +bool FakeRemoteSecurityKeyIpcServer::SendResponse(
|
| + const std::string& message_data) {
|
| + last_message_received_ = message_data;
|
| +
|
| + // This class works in two modes: one in which the test wants the IPC channel
|
| + // to be created and used for notification and the second mode where the test
|
| + // wants to notified of a response via a callback. If a callback is set then
|
| + // we use it, otherwise we will use the IPC connection to send a message.
|
| + if (!send_response_callback_.is_null()) {
|
| + send_response_callback_.Run();
|
| + return true;
|
| + }
|
| +
|
| + return ipc_channel_->Send(
|
| + new ChromotingNetworkToRemoteSecurityKeyMsg_Response(message_data));
|
| +}
|
| +
|
| +FakeRemoteSecurityKeyIpcServerFactory::FakeRemoteSecurityKeyIpcServerFactory() {
|
| + RemoteSecurityKeyIpcServer::SetFactoryForTest(this);
|
| +}
|
| +
|
| +FakeRemoteSecurityKeyIpcServerFactory::
|
| + ~FakeRemoteSecurityKeyIpcServerFactory() {
|
| + RemoteSecurityKeyIpcServer::SetFactoryForTest(nullptr);
|
| +}
|
| +
|
| +std::unique_ptr<RemoteSecurityKeyIpcServer>
|
| +FakeRemoteSecurityKeyIpcServerFactory::Create(
|
| + int connection_id,
|
| + uint32_t peer_session_id,
|
| + base::TimeDelta initial_connect_timeout,
|
| + const GnubbyAuthHandler::SendMessageCallback& send_message_callback,
|
| + const base::Closure& done_callback) {
|
| + std::unique_ptr<FakeRemoteSecurityKeyIpcServer> fake_ipc_server(
|
| + new FakeRemoteSecurityKeyIpcServer(connection_id, peer_session_id,
|
| + initial_connect_timeout,
|
| + send_message_callback, done_callback));
|
| +
|
| + ipc_server_map_[connection_id] = fake_ipc_server->AsWeakPtr();
|
| +
|
| + return base::WrapUnique(fake_ipc_server.release());
|
| +}
|
| +
|
| +base::WeakPtr<FakeRemoteSecurityKeyIpcServer>
|
| +FakeRemoteSecurityKeyIpcServerFactory::GetIpcServerObject(int connection_id) {
|
| + return ipc_server_map_[connection_id];
|
| +}
|
| +
|
| +} // namespace remoting
|
|
|