Index: content/renderer/media/rtc_peer_connection_handler.cc |
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc |
index 0c5c3737cf153f2ca680d981e502701bb4301220..3230946834774c2e851983dd07d3f7149f53502b 100644 |
--- a/content/renderer/media/rtc_peer_connection_handler.cc |
+++ b/content/renderer/media/rtc_peer_connection_handler.cc |
@@ -10,6 +10,7 @@ |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
+#include "base/lazy_instance.h" |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/metrics/histogram.h" |
@@ -316,6 +317,13 @@ void LocalRTCStatsResponse::addStatistic(size_t report, |
impl_.addStatistic(report, name, value); |
} |
+namespace { |
+ |
+base::LazyInstance<std::set<RTCPeerConnectionHandler*> >::Leaky |
+ g_peer_connection_handlers = LAZY_INSTANCE_INITIALIZER; |
+ |
+} // namespace |
+ |
RTCPeerConnectionHandler::RTCPeerConnectionHandler( |
blink::WebRTCPeerConnectionHandlerClient* client, |
PeerConnectionDependencyFactory* dependency_factory) |
@@ -324,9 +332,11 @@ RTCPeerConnectionHandler::RTCPeerConnectionHandler( |
frame_(NULL), |
peer_connection_tracker_(NULL), |
num_data_channels_created_(0) { |
+ g_peer_connection_handlers.Get().insert(this); |
} |
RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { |
+ g_peer_connection_handlers.Get().erase(this); |
if (peer_connection_tracker_) |
peer_connection_tracker_->UnregisterPeerConnection(this); |
STLDeleteValues(&remote_streams_); |
@@ -335,6 +345,18 @@ RTCPeerConnectionHandler::~RTCPeerConnectionHandler() { |
"WebRTC.NumDataChannelsPerPeerConnection", num_data_channels_created_); |
} |
+// static |
+void RTCPeerConnectionHandler::DestructAllHandlers() { |
+ std::set<RTCPeerConnectionHandler*> handlers( |
+ g_peer_connection_handlers.Get().begin(), |
+ g_peer_connection_handlers.Get().end()); |
+ for (std::set<RTCPeerConnectionHandler*>::iterator handler = handlers.begin(); |
+ handler != handlers.end(); |
+ ++handler) { |
+ (*handler)->client_->releasePeerConnectionHandler(); |
+ } |
+} |
+ |
void RTCPeerConnectionHandler::associateWithFrame(blink::WebFrame* frame) { |
DCHECK(frame); |
frame_ = frame; |