OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" | 5 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h" |
6 | 6 |
7 #include "content/browser/resource_context.h" | 7 #include "content/browser/resource_context.h" |
8 #include "content/common/media/media_stream_messages.h" | 8 #include "content/common/media/media_stream_messages.h" |
9 #include "content/common/media/media_stream_options.h" | 9 #include "content/common/media/media_stream_options.h" |
10 | 10 |
11 using content::BrowserThread; | 11 using content::BrowserThread; |
12 | 12 |
13 namespace media_stream { | 13 namespace media_stream { |
14 | 14 |
| 15 struct MediaStreamDispatcherHost::StreamRequest { |
| 16 StreamRequest() {} |
| 17 StreamRequest(int render_view_id, int page_request_id) |
| 18 : render_view_id(render_view_id), |
| 19 page_request_id(page_request_id ) { |
| 20 } |
| 21 int render_view_id; |
| 22 // Id of the request generated by MediaStreamDispatcher. |
| 23 int page_request_id; |
| 24 }; |
| 25 |
15 MediaStreamDispatcherHost::MediaStreamDispatcherHost( | 26 MediaStreamDispatcherHost::MediaStreamDispatcherHost( |
16 const content::ResourceContext* resource_context, int render_process_id) | 27 const content::ResourceContext* resource_context, int render_process_id) |
17 : resource_context_(resource_context), | 28 : resource_context_(resource_context), |
18 render_process_id_(render_process_id) { | 29 render_process_id_(render_process_id) { |
19 } | 30 } |
20 | 31 |
21 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() { | 32 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() { |
22 } | 33 } |
23 | 34 |
24 MediaStreamManager* MediaStreamDispatcherHost::manager() { | 35 MediaStreamManager* MediaStreamDispatcherHost::manager() { |
25 return resource_context_->media_stream_manager(); | 36 return resource_context_->media_stream_manager(); |
26 } | 37 } |
27 | 38 |
28 bool MediaStreamDispatcherHost::OnMessageReceived( | 39 bool MediaStreamDispatcherHost::OnMessageReceived( |
29 const IPC::Message& message, bool* message_was_ok) { | 40 const IPC::Message& message, bool* message_was_ok) { |
30 bool handled = true; | 41 bool handled = true; |
31 IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamDispatcherHost, message, *message_was_ok) | 42 IPC_BEGIN_MESSAGE_MAP_EX(MediaStreamDispatcherHost, message, *message_was_ok) |
32 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) | 43 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) |
33 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream, | 44 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopGeneratedStream, |
34 OnStopGeneratedStream) | 45 OnStopGeneratedStream) |
35 IPC_MESSAGE_UNHANDLED(handled = false) | 46 IPC_MESSAGE_UNHANDLED(handled = false) |
36 IPC_END_MESSAGE_MAP_EX() | 47 IPC_END_MESSAGE_MAP_EX() |
37 return handled; | 48 return handled; |
38 } | 49 } |
39 | 50 |
40 void MediaStreamDispatcherHost::OnChannelClosing() { | 51 void MediaStreamDispatcherHost::OnChannelClosing() { |
41 BrowserMessageFilter::OnChannelClosing(); | 52 BrowserMessageFilter::OnChannelClosing(); |
42 VLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; | 53 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; |
43 | 54 |
44 // TODO(mflodman) Remove this temporary solution when shut-down issue is | 55 // TODO(mflodman) Remove this temporary solution when shut-down issue is |
45 // resolved, i.e. uncomment the code below. | 56 // resolved, i.e. uncomment the code below. |
46 // Since the IPC channel is gone, close all requested VideCaptureDevices and | 57 // Since the IPC channel is gone, close all requested VideCaptureDevices and |
47 // cancel pending requests. | 58 // cancel pending requests. |
48 // manager()->CancelRequests(this); | 59 // manager()->CancelRequests(this); |
49 // for (StreamMap::iterator it = streams_.begin(); | 60 // for (StreamMap::iterator it = streams_.begin(); |
50 // it != streams_.end(); | 61 // it != streams_.end(); |
51 // it++) { | 62 // it++) { |
52 // std::string label = it->first; | 63 // std::string label = it->first; |
53 // manager()->StopGeneratedStream(label); | 64 // manager()->StopGeneratedStream(label); |
54 // } | 65 // } |
55 } | 66 } |
56 | 67 |
57 void MediaStreamDispatcherHost::OnGenerateStream( | 68 void MediaStreamDispatcherHost::OnGenerateStream( |
58 int render_view_id, | 69 int render_view_id, |
59 int page_request_id, | 70 int page_request_id, |
60 const media_stream::StreamOptions& components, | 71 const media_stream::StreamOptions& components, |
61 const std::string& security_origin) { | 72 const std::string& security_origin) { |
62 VLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" | 73 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" |
63 << render_view_id << ", " | 74 << render_view_id << ", " |
64 << page_request_id << ", [ " | 75 << page_request_id << ", [ " |
65 << (components.audio ? "audio " : "") | 76 << (components.audio ? "audio " : "") |
66 << ((components.video_option & | 77 << ((components.video_option & |
67 StreamOptions::kFacingUser) ? | 78 StreamOptions::kFacingUser) ? |
68 "video_facing_user " : "") | 79 "video_facing_user " : "") |
69 << ((components.video_option & | 80 << ((components.video_option & |
70 StreamOptions::kFacingEnvironment) ? | 81 StreamOptions::kFacingEnvironment) ? |
71 "video_facing_environment " : "") | 82 "video_facing_environment " : "") |
72 << "], " | 83 << "], " |
73 << security_origin << ")"; | 84 << security_origin << ")"; |
74 | 85 |
75 std::string label; | 86 std::string label; |
76 manager()->GenerateStream(this, render_process_id_, render_view_id, | 87 manager()->GenerateStream(this, render_process_id_, render_view_id, |
77 components, security_origin, &label); | 88 components, security_origin, &label); |
78 DCHECK(!label.empty()); | 89 DCHECK(!label.empty()); |
79 streams_[label] = StreamRequest(render_view_id, page_request_id); | 90 streams_[label] = StreamRequest(render_view_id, page_request_id); |
80 } | 91 } |
81 | 92 |
82 void MediaStreamDispatcherHost::OnStopGeneratedStream( | 93 void MediaStreamDispatcherHost::OnStopGeneratedStream( |
83 int render_view_id, const std::string& label) { | 94 int render_view_id, const std::string& label) { |
84 VLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" | 95 DVLOG(1) << "MediaStreamDispatcherHost::OnStopGeneratedStream(" |
85 << ", {label = " << label << "})"; | 96 << ", {label = " << label << "})"; |
86 | 97 |
87 StreamMap::iterator it = streams_.find(label); | 98 StreamMap::iterator it = streams_.find(label); |
88 DCHECK(it != streams_.end()); | 99 DCHECK(it != streams_.end()); |
89 manager()->StopGeneratedStream(label); | 100 manager()->StopGeneratedStream(label); |
90 streams_.erase(it); | 101 streams_.erase(it); |
91 } | 102 } |
92 | 103 |
93 void MediaStreamDispatcherHost::StreamGenerated( | 104 void MediaStreamDispatcherHost::StreamGenerated( |
94 const std::string& label, | 105 const std::string& label, |
95 const StreamDeviceInfoArray& audio_devices, | 106 const StreamDeviceInfoArray& audio_devices, |
96 const StreamDeviceInfoArray& video_devices) { | 107 const StreamDeviceInfoArray& video_devices) { |
97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 108 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
98 VLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" | 109 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" |
99 << ", {label = " << label << "})"; | 110 << ", {label = " << label << "})"; |
100 | 111 |
101 StreamMap::iterator it = streams_.find(label); | 112 StreamMap::iterator it = streams_.find(label); |
102 DCHECK(it != streams_.end()); | 113 DCHECK(it != streams_.end()); |
103 StreamRequest request = it->second; | 114 StreamRequest request = it->second; |
104 | 115 |
105 Send(new MediaStreamMsg_StreamGenerated( | 116 Send(new MediaStreamMsg_StreamGenerated( |
106 request.render_view_id, request.page_request_id, label, audio_devices, | 117 request.render_view_id, request.page_request_id, label, audio_devices, |
107 video_devices)); | 118 video_devices)); |
108 } | 119 } |
109 | 120 |
110 void MediaStreamDispatcherHost::StreamGenerationFailed( | 121 void MediaStreamDispatcherHost::StreamGenerationFailed( |
111 const std::string& label) { | 122 const std::string& label) { |
112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 123 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
113 VLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed(" | 124 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed(" |
114 << ", {label = " << label << "})"; | 125 << ", {label = " << label << "})"; |
115 | 126 |
116 StreamMap::iterator it = streams_.find(label); | 127 StreamMap::iterator it = streams_.find(label); |
117 DCHECK(it != streams_.end()); | 128 DCHECK(it != streams_.end()); |
118 StreamRequest request = it->second; | 129 StreamRequest request = it->second; |
119 streams_.erase(it); | 130 streams_.erase(it); |
120 | 131 |
121 Send(new MediaStreamMsg_StreamGenerationFailed(request.render_view_id, | 132 Send(new MediaStreamMsg_StreamGenerationFailed(request.render_view_id, |
122 request.page_request_id)); | 133 request.page_request_id)); |
123 } | 134 } |
124 | 135 |
125 void MediaStreamDispatcherHost::AudioDeviceFailed(const std::string& label, | 136 void MediaStreamDispatcherHost::AudioDeviceFailed(const std::string& label, |
126 int index) { | 137 int index) { |
127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
128 VLOG(1) << "MediaStreamDispatcherHost::AudioDeviceFailed(" | 139 DVLOG(1) << "MediaStreamDispatcherHost::AudioDeviceFailed(" |
129 << ", {label = " << label << "})"; | 140 << ", {label = " << label << "})"; |
130 | 141 |
131 StreamMap::iterator it = streams_.find(label); | 142 StreamMap::iterator it = streams_.find(label); |
132 DCHECK(it != streams_.end()); | 143 DCHECK(it != streams_.end()); |
133 StreamRequest request = it->second; | 144 StreamRequest request = it->second; |
134 Send(new MediaStreamHostMsg_AudioDeviceFailed(request.render_view_id, | 145 Send(new MediaStreamHostMsg_AudioDeviceFailed(request.render_view_id, |
135 label, | 146 label, |
136 index)); | 147 index)); |
137 } | 148 } |
138 | 149 |
139 void MediaStreamDispatcherHost::VideoDeviceFailed(const std::string& label, | 150 void MediaStreamDispatcherHost::VideoDeviceFailed(const std::string& label, |
140 int index) { | 151 int index) { |
141 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
142 VLOG(1) << "MediaStreamDispatcherHost::VideoDeviceFailed(" | 153 DVLOG(1) << "MediaStreamDispatcherHost::VideoDeviceFailed(" |
143 << ", {label = " << label << "})"; | 154 << ", {label = " << label << "})"; |
144 | 155 |
145 StreamMap::iterator it = streams_.find(label); | 156 StreamMap::iterator it = streams_.find(label); |
146 DCHECK(it != streams_.end()); | 157 DCHECK(it != streams_.end()); |
147 StreamRequest request = it->second; | 158 StreamRequest request = it->second; |
148 Send(new MediaStreamHostMsg_VideoDeviceFailed(request.render_view_id, | 159 Send(new MediaStreamHostMsg_VideoDeviceFailed(request.render_view_id, |
149 label, | 160 label, |
150 index)); | 161 index)); |
151 } | 162 } |
152 | 163 |
153 } // namespace media_stream | 164 } // namespace media_stream |
OLD | NEW |