This source file includes following definitions.
- GetJavaBridgeChannelHost
- ThreadsafeGenerateRouteID
- GenerateRouteID
- Init
- OnControlMessageReceived
- OnGenerateRouteID
#include "content/browser/renderer_host/java/java_bridge_channel_host.h"
#include "base/atomicops.h"
#include "base/lazy_instance.h"
#include "base/strings/stringprintf.h"
#include "base/synchronization/waitable_event.h"
#include "content/common/java_bridge_messages.h"
using base::WaitableEvent;
namespace content {
namespace {
struct WaitableEventLazyInstanceTraits
: public base::DefaultLazyInstanceTraits<WaitableEvent> {
static WaitableEvent* New(void* instance) {
return new (instance) WaitableEvent(false, false);
}
};
base::LazyInstance<WaitableEvent, WaitableEventLazyInstanceTraits> dummy_event =
LAZY_INSTANCE_INITIALIZER;
base::subtle::AtomicWord g_last_id = 0;
}
JavaBridgeChannelHost::~JavaBridgeChannelHost() {
#if defined(OS_POSIX)
if (channel_handle_.socket.fd > 0) {
close(channel_handle_.socket.fd);
}
#endif
}
JavaBridgeChannelHost* JavaBridgeChannelHost::GetJavaBridgeChannelHost(
int renderer_id,
base::MessageLoopProxy* ipc_message_loop) {
std::string channel_name(base::StringPrintf("r%d.javabridge", renderer_id));
return static_cast<JavaBridgeChannelHost*>(NPChannelBase::GetChannel(
channel_name,
IPC::Channel::MODE_SERVER,
ClassFactory,
ipc_message_loop,
true,
dummy_event.Pointer()));
}
int JavaBridgeChannelHost::ThreadsafeGenerateRouteID() {
return base::subtle::NoBarrier_AtomicIncrement(&g_last_id, 1);
}
int JavaBridgeChannelHost::GenerateRouteID() {
return ThreadsafeGenerateRouteID();
}
bool JavaBridgeChannelHost::Init(base::MessageLoopProxy* ipc_message_loop,
bool create_pipe_now,
WaitableEvent* shutdown_event) {
if (!NPChannelBase::Init(ipc_message_loop, create_pipe_now, shutdown_event)) {
return false;
}
#if defined(OS_POSIX)
channel_handle_.socket.fd = channel_->TakeClientFileDescriptor();
#endif
return true;
}
bool JavaBridgeChannelHost::OnControlMessageReceived(
const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(JavaBridgeChannelHost, message)
IPC_MESSAGE_HANDLER(JavaBridgeMsg_GenerateRouteID, OnGenerateRouteID)
IPC_END_MESSAGE_MAP()
return handled;
}
void JavaBridgeChannelHost::OnGenerateRouteID(int* route_id) {
*route_id = GenerateRouteID();
}
}