| 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) {
|
|
|