trusted_plugin_channel.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/nacl/renderer/trusted_plugin_channel.h"
6
7#include "base/callback_helpers.h"
8#include "content/public/renderer/render_thread.h"
9#include "ipc/ipc_channel.h"
10#include "ipc/ipc_sync_channel.h"
11#include "ppapi/c/pp_errors.h"
12
13namespace nacl {
14
15TrustedPluginChannel::TrustedPluginChannel(
16    const IPC::ChannelHandle& handle,
17    const base::Callback<void(int32_t)>& connected_callback,
18    base::WaitableEvent* waitable_event)
19    : connected_callback_(connected_callback),
20      channel_(new IPC::SyncChannel(
21          handle, IPC::Channel::MODE_CLIENT, this,
22          content::RenderThread::Get()->GetIOMessageLoopProxy(), true,
23          waitable_event)) {
24}
25
26TrustedPluginChannel::~TrustedPluginChannel() {
27  if (!connected_callback_.is_null())
28    base::ResetAndReturn(&connected_callback_).Run(PP_ERROR_FAILED);
29}
30
31bool TrustedPluginChannel::Send(IPC::Message* message) {
32  return channel_->Send(message);
33}
34
35bool TrustedPluginChannel::OnMessageReceived(const IPC::Message& message) {
36  return false;
37}
38
39void TrustedPluginChannel::OnChannelConnected(int32 peer_pid) {
40  if (!connected_callback_.is_null())
41    base::ResetAndReturn(&connected_callback_).Run(PP_OK);
42}
43
44void TrustedPluginChannel::OnChannelError() {
45  if (!connected_callback_.is_null())
46    base::ResetAndReturn(&connected_callback_).Run(PP_ERROR_FAILED);
47}
48
49}  // namespace nacl
50