Index: mojo/edk/system/node_controller.cc |
diff --git a/mojo/edk/system/node_controller.cc b/mojo/edk/system/node_controller.cc |
index 7c49bde1222188942e10f917e87bd9c31d318d62..818c7701b399494e4de2759fc8026bcfe967ddd2 100644 |
--- a/mojo/edk/system/node_controller.cc |
+++ b/mojo/edk/system/node_controller.cc |
@@ -562,6 +562,16 @@ void NodeController::ForwardMessage(const ports::NodeName& node, |
} |
} |
+void NodeController::BroadcastMessage(ports::ScopedMessage message) { |
+ Channel::MessagePtr channel_message = |
+ static_cast<PortsMessage*>(message.get())->TakeChannelMessage(); |
+ scoped_refptr<NodeChannel> broker = GetBrokerChannel(); |
+ if (broker) |
+ broker->Broadcast(std::move(channel_message)); |
+ else |
+ OnBroadcast(std::move(channel_message)); |
+} |
+ |
void NodeController::PortStatusChanged(const ports::PortRef& port) { |
scoped_refptr<ports::UserData> user_data; |
node_->GetUserData(port, &user_data); |
@@ -884,6 +894,20 @@ void NodeController::OnIntroduce(const ports::NodeName& from_node, |
AddPeer(name, channel, true /* start_channel */); |
} |
+void NodeController::OnBroadcast(Channel::MessagePtr message) { |
+ { |
+ DCHECK(!message->has_handles()); |
+ base::AutoLock lock(peers_lock_); |
+ for (auto iter : peers_) { |
Anand Mistry (off Chromium)
2016/05/16 04:03:57
auto&
Ken Rockot(use gerrit already)
2016/05/16 04:42:36
Done
|
+ Channel::MessagePtr peer_message( |
+ new Channel::Message(message->payload_size(), 0)); |
+ memcpy(peer_message->mutable_payload(), message->payload(), |
+ message->payload_size()); |
+ iter.second->PortsMessage(std::move(peer_message)); |
+ } |
+ } |
+} |
+ |
#if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) |
void NodeController::OnRelayPortsMessage(const ports::NodeName& from_node, |
base::ProcessHandle from_process, |