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..34703f5ac52491779a4746bff16d4a1e1da4551a 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() { |
@@ -178,24 +179,21 @@ void WebRTCInternals::SendUpdate(const string& command, Value* value) { |
OnUpdate(command, value)); |
} |
+void WebRTCInternals::BrowserChildProcessCrashed( |
+ const ChildProcessData& data) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ OnRendererExit(data.id); |
+} |
+ |
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) { |