blob: 6d9002c9a91c38dc046a51e07d8d53f1a9d62f0c [file] [log] [blame]
// 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 "cc/test/remote_proto_channel_bridge.h"
#include <memory>
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "cc/proto/compositor_message.pb.h"
namespace cc {
FakeRemoteProtoChannel::FakeRemoteProtoChannel(RemoteProtoChannelBridge* bridge)
: bridge_(bridge), receiver_(nullptr) {
DCHECK(bridge_);
}
FakeRemoteProtoChannel::~FakeRemoteProtoChannel() {}
void FakeRemoteProtoChannel::SetProtoReceiver(ProtoReceiver* receiver) {
receiver_ = receiver;
}
void FakeRemoteProtoChannel::OnProtoReceived(
std::unique_ptr<proto::CompositorMessage> proto) {
DCHECK(receiver_);
receiver_->OnProtoReceived(std::move(proto));
}
bool FakeRemoteProtoChannel::HasReceiver() const {
return receiver_ != nullptr;
}
FakeRemoteProtoChannelMain::FakeRemoteProtoChannelMain(
RemoteProtoChannelBridge* bridge,
TestHooks* test_hooks)
: FakeRemoteProtoChannel(bridge), test_hooks_(test_hooks) {}
void FakeRemoteProtoChannelMain::SendCompositorProto(
const proto::CompositorMessage& proto) {
DCHECK(proto.has_to_impl());
// Check for CompositorMessageToImpl::InitializeImpl and CloseImpl message
// types to create and destroy the remote client LayerTreeHost.
proto::CompositorMessageToImpl to_impl_proto = proto.to_impl();
switch (to_impl_proto.message_type()) {
case proto::CompositorMessageToImpl::UNKNOWN:
return;
case proto::CompositorMessageToImpl::INITIALIZE_IMPL:
test_hooks_->CreateRemoteClientHost(to_impl_proto);
return;
case proto::CompositorMessageToImpl::CLOSE_IMPL:
test_hooks_->DestroyRemoteClientHost();
return;
default:
bridge_->channel_impl.OnProtoReceived(
base::MakeUnique<proto::CompositorMessage>(proto));
}
}
FakeRemoteProtoChannelImpl::FakeRemoteProtoChannelImpl(
RemoteProtoChannelBridge* bridge)
: FakeRemoteProtoChannel(bridge) {}
void FakeRemoteProtoChannelImpl::SendCompositorProto(
const proto::CompositorMessage& proto) {
bridge_->channel_main.OnProtoReceived(
base::MakeUnique<proto::CompositorMessage>(proto));
}
RemoteProtoChannelBridge::RemoteProtoChannelBridge(TestHooks* test_hooks)
: channel_main(this, test_hooks), channel_impl(this) {}
RemoteProtoChannelBridge::~RemoteProtoChannelBridge() {}
} // namespace cc