Index: content/browser/media/webrtc_internals.cc |
diff --git a/content/browser/media/webrtc_internals.cc b/content/browser/media/webrtc_internals.cc |
index ce5028af256fa952376d227ea84395f9cc12e62f..1669df813346503415fe439b6ef4a2c985686444 100644 |
--- a/content/browser/media/webrtc_internals.cc |
+++ b/content/browser/media/webrtc_internals.cc |
@@ -35,11 +35,12 @@ static ListValue* EnsureLogList(DictionaryValue* dict) { |
WebRTCInternals::WebRTCInternals() { |
registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
NotificationService::AllBrowserContextsAndSources()); |
- registrar_.Add(this, NOTIFICATION_CHILD_PROCESS_CRASHED, |
- NotificationService::AllBrowserContextsAndSources()); |
+ |
+ BrowserChildProcessObserver::Add(this); |
} |
WebRTCInternals::~WebRTCInternals() { |
+ BrowserChildProcessObserver::Remove(this); |
} |
WebRTCInternals* WebRTCInternals::GetInstance() { |
@@ -170,6 +171,12 @@ void WebRTCInternals::SendAllUpdates() { |
SendUpdate("updateAllPeerConnections", &peer_connection_data_); |
} |
+void WebRTCInternals::BrowserChildProcessCrashed( |
+ const ChildProcessData& data) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ OnRendererExit(data.id); |
+} |
+ |
void WebRTCInternals::SendUpdate(const string& command, Value* value) { |
DCHECK_GT(observers_.size(), (size_t)0); |
@@ -182,20 +189,11 @@ void WebRTCInternals::Observe(int type, |
const NotificationSource& source, |
const NotificationDetails& details) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- int render_process_id = -1; |
- |
- switch (type) { |
- case NOTIFICATION_RENDERER_PROCESS_TERMINATED: |
- render_process_id = Source<RenderProcessHost>(source)->GetID(); |
- break; |
- case NOTIFICATION_CHILD_PROCESS_CRASHED: |
- render_process_id = Details<ChildProcessData>(details).ptr()->id; |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
+ DCHECK_EQ(type, NOTIFICATION_RENDERER_PROCESS_TERMINATED); |
+ OnRendererExit(Source<RenderProcessHost>(source)->GetID()); |
+} |
+void WebRTCInternals::OnRendererExit(int render_process_id) { |
// Iterates from the end of the list to remove the PeerConnections created |
// by the exitting renderer. |
for (int i = peer_connection_data_.GetSize() - 1; i >= 0; --i) { |