Index: content/renderer/video_capture_message_filter.cc |
diff --git a/content/renderer/video_capture_message_filter.cc b/content/renderer/video_capture_message_filter.cc |
index c679e2b83e65442f91fdb6954e532b56c53b3e32..f9db7e51a30b0904cef1538053d594d346afb203 100644 |
--- a/content/renderer/video_capture_message_filter.cc |
+++ b/content/renderer/video_capture_message_filter.cc |
@@ -54,6 +54,13 @@ void VideoCaptureMessageFilter::OnFilterAdded(IPC::Channel* channel) { |
// Captures the message loop proxy for IPC. |
message_loop_proxy_ = base::MessageLoopProxy::CreateForCurrentThread(); |
channel_ = channel; |
+ |
+ for (Delegates::iterator it = pending_delegates_.begin(); |
+ it != pending_delegates_.end(); it++) { |
+ it->second->OnDelegateAdded(it->first); |
+ delegates_[it->first] = it->second; |
+ } |
+ pending_delegates_.clear(); |
} |
void VideoCaptureMessageFilter::OnFilterRemoved() { |
@@ -114,14 +121,18 @@ void VideoCaptureMessageFilter::OnDeviceInfoReceived( |
delegate->OnDeviceInfoReceived(params); |
} |
-int32 VideoCaptureMessageFilter::AddDelegate(Delegate* delegate) { |
+void VideoCaptureMessageFilter::AddDelegate(Delegate* delegate) { |
if (++last_device_id_ <= 0) |
last_device_id_ = 1; |
while (delegates_.find(last_device_id_) != delegates_.end()) |
last_device_id_++; |
- delegates_[last_device_id_] = delegate; |
- return last_device_id_; |
+ if (channel_) { |
+ delegates_[last_device_id_] = delegate; |
+ delegate->OnDelegateAdded(last_device_id_); |
+ } else { |
+ pending_delegates_[last_device_id_] = delegate; |
+ } |
} |
void VideoCaptureMessageFilter::RemoveDelegate(Delegate* delegate) { |
@@ -132,6 +143,13 @@ void VideoCaptureMessageFilter::RemoveDelegate(Delegate* delegate) { |
break; |
} |
} |
+ for (Delegates::iterator it = pending_delegates_.begin(); |
+ it != pending_delegates_.end(); it++) { |
+ if (it->second == delegate) { |
+ pending_delegates_.erase(it); |
+ break; |
+ } |
+ } |
} |
void VideoCaptureMessageFilter::AddFilter() { |