Index: content/browser/renderer_host/java/java_bridge_channel_host.cc |
diff --git a/content/browser/renderer_host/java/java_bridge_channel_host.cc b/content/browser/renderer_host/java/java_bridge_channel_host.cc |
index 1d2141323f60910090605cdcdb9a4d80af08cedc..86bff15a7fd9260847f4d0c4a53d4b527267fc0c 100644 |
--- a/content/browser/renderer_host/java/java_bridge_channel_host.cc |
+++ b/content/browser/renderer_host/java/java_bridge_channel_host.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/renderer_host/java/java_bridge_channel_host.h" |
+#include "base/atomicops.h" |
#include "base/lazy_instance.h" |
#include "base/stringprintf.h" |
#include "base/synchronization/waitable_event.h" |
@@ -23,24 +24,32 @@ base::LazyInstance<WaitableEvent, WaitableEventLazyInstanceTraits> dummy_event = |
LAZY_INSTANCE_INITIALIZER; |
} |
+int RouteIDGenerator::GenerateRouteID() const { |
+ static base::subtle::AtomicWord last_id = 0; |
joth
2011/12/07 14:49:09
strictly, this is not thread-safe, as we disable g
Steve Block
2011/12/07 16:47:44
Done.
|
+ return base::subtle::Barrier_AtomicIncrement(&last_id, 1); |
+} |
+ |
JavaBridgeChannelHost* JavaBridgeChannelHost::GetJavaBridgeChannelHost( |
- int renderer_id, base::MessageLoopProxy* ipc_message_loop) { |
+ int renderer_id, base::MessageLoopProxy* ipc_message_loop, |
+ RouteIDGenerator* route_id_generator) { |
std::string channel_name(StringPrintf("r%d.javabridge", renderer_id)); |
// We don't use a shutdown event because the Java Bridge only sends messages |
// from renderer to browser, so we'll never be waiting for a sync IPC to |
// complete. So we use an event which is never signaled. |
- return static_cast<JavaBridgeChannelHost*>(NPChannelBase::GetChannel( |
- channel_name, |
- IPC::Channel::MODE_SERVER, |
- ClassFactory, |
- ipc_message_loop, |
- false, |
- dummy_event.Pointer())); |
+ JavaBridgeChannelHost* channel = |
+ static_cast<JavaBridgeChannelHost*>(NPChannelBase::GetChannel( |
+ channel_name, |
+ IPC::Channel::MODE_SERVER, |
+ ClassFactory, |
+ ipc_message_loop, |
+ true, |
+ dummy_event.Pointer())); |
+ channel->route_id_generator_ = route_id_generator; |
+ return channel; |
} |
int JavaBridgeChannelHost::GenerateRouteID() { |
- static int last_id = 0; |
- return ++last_id; |
+ return route_id_generator_->GenerateRouteID(); |
} |
bool JavaBridgeChannelHost::Init(base::MessageLoopProxy* ipc_message_loop, |