OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/audio_renderer_host.h" | 5 #include "content/browser/renderer_host/media/audio_renderer_host.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 reader_.get())), | 187 reader_.get())), |
188 playing_(false) { | 188 playing_(false) { |
189 DCHECK(controller_.get()); | 189 DCHECK(controller_.get()); |
190 } | 190 } |
191 | 191 |
192 AudioRendererHost::AudioEntry::~AudioEntry() {} | 192 AudioRendererHost::AudioEntry::~AudioEntry() {} |
193 | 193 |
194 /////////////////////////////////////////////////////////////////////////////// | 194 /////////////////////////////////////////////////////////////////////////////// |
195 // AudioRendererHost implementations. | 195 // AudioRendererHost implementations. |
196 | 196 |
197 AudioRendererHost::AudioRendererHost(int render_process_id, | 197 AudioRendererHost::AudioRendererHost( |
198 media::AudioManager* audio_manager, | 198 int render_process_id, |
199 AudioMirroringManager* mirroring_manager, | 199 media::AudioManager* audio_manager, |
200 MediaInternals* media_internals, | 200 AudioMirroringManager* mirroring_manager, |
201 MediaStreamManager* media_stream_manager, | 201 MediaInternals* media_internals, |
202 const std::string& salt) | 202 MediaStreamManager* media_stream_manager, |
| 203 const ResourceContext::SaltCallback& salt_callback) |
203 : BrowserMessageFilter(AudioMsgStart), | 204 : BrowserMessageFilter(AudioMsgStart), |
204 render_process_id_(render_process_id), | 205 render_process_id_(render_process_id), |
205 audio_manager_(audio_manager), | 206 audio_manager_(audio_manager), |
206 mirroring_manager_(mirroring_manager), | 207 mirroring_manager_(mirroring_manager), |
207 audio_log_(media_internals->CreateAudioLog( | 208 audio_log_(media_internals->CreateAudioLog( |
208 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER)), | 209 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER)), |
209 media_stream_manager_(media_stream_manager), | 210 media_stream_manager_(media_stream_manager), |
210 num_playing_streams_(0), | 211 num_playing_streams_(0), |
211 salt_(salt), | 212 salt_callback_(salt_callback), |
212 max_simultaneous_streams_(0) { | 213 max_simultaneous_streams_(0) { |
213 DCHECK(audio_manager_); | 214 DCHECK(audio_manager_); |
214 DCHECK(media_stream_manager_); | 215 DCHECK(media_stream_manager_); |
215 } | 216 } |
216 | 217 |
217 AudioRendererHost::~AudioRendererHost() { | 218 AudioRendererHost::~AudioRendererHost() { |
218 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 219 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
219 CHECK(audio_entries_.empty()); | 220 CHECK(audio_entries_.empty()); |
220 | 221 |
221 // If we had any streams, report UMA stats for the maximum number of | 222 // If we had any streams, report UMA stats for the maximum number of |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 info->device.matched_output.channel_layout), | 429 info->device.matched_output.channel_layout), |
429 info->device.matched_output.sample_rate, 16, | 430 info->device.matched_output.sample_rate, 16, |
430 info->device.matched_output.frames_per_buffer); | 431 info->device.matched_output.frames_per_buffer); |
431 output_params.set_effects(info->device.matched_output.effects); | 432 output_params.set_effects(info->device.matched_output.effects); |
432 authorizations_.insert(MakeAuthorizationData( | 433 authorizations_.insert(MakeAuthorizationData( |
433 stream_id, true, info->device.matched_output_device_id)); | 434 stream_id, true, info->device.matched_output_device_id)); |
434 MaybeFixAudioParameters(&output_params); | 435 MaybeFixAudioParameters(&output_params); |
435 // Hash matched device id and pass it to the renderer | 436 // Hash matched device id and pass it to the renderer |
436 Send(new AudioMsg_NotifyDeviceAuthorized( | 437 Send(new AudioMsg_NotifyDeviceAuthorized( |
437 stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params, | 438 stream_id, media::OUTPUT_DEVICE_STATUS_OK, output_params, |
438 GetHMACForMediaDeviceID(salt_, security_origin, | 439 GetHMACForMediaDeviceID(salt_callback_, security_origin, |
439 info->device.matched_output_device_id))); | 440 info->device.matched_output_device_id))); |
440 return; | 441 return; |
441 } | 442 } |
442 } | 443 } |
443 | 444 |
444 authorizations_.insert( | 445 authorizations_.insert( |
445 MakeAuthorizationData(stream_id, false, std::string())); | 446 MakeAuthorizationData(stream_id, false, std::string())); |
446 CheckOutputDeviceAccess( | 447 CheckOutputDeviceAccess( |
447 render_frame_id, device_id, security_origin, | 448 render_frame_id, device_id, security_origin, |
448 base::Bind(&AudioRendererHost::OnDeviceAuthorized, this, stream_id, | 449 base::Bind(&AudioRendererHost::OnDeviceAuthorized, this, stream_id, |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 const OutputDeviceInfoCB& callback, | 788 const OutputDeviceInfoCB& callback, |
788 const AudioOutputDeviceEnumeration& enumeration) { | 789 const AudioOutputDeviceEnumeration& enumeration) { |
789 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 790 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
790 for (const AudioOutputDeviceInfo& device_info : enumeration.devices) { | 791 for (const AudioOutputDeviceInfo& device_info : enumeration.devices) { |
791 if (device_id.empty()) { | 792 if (device_id.empty()) { |
792 if (device_info.unique_id == | 793 if (device_info.unique_id == |
793 media::AudioDeviceDescription::kDefaultDeviceId) { | 794 media::AudioDeviceDescription::kDefaultDeviceId) { |
794 callback.Run(true, device_info); | 795 callback.Run(true, device_info); |
795 return; | 796 return; |
796 } | 797 } |
797 } else if (content::DoesMediaDeviceIDMatchHMAC( | 798 } else if (content::DoesMediaDeviceIDMatchHMAC(salt_callback_, |
798 salt_, security_origin, device_id, device_info.unique_id)) { | 799 security_origin, device_id, |
| 800 device_info.unique_id)) { |
799 callback.Run(true, device_info); | 801 callback.Run(true, device_info); |
800 return; | 802 return; |
801 } | 803 } |
802 } | 804 } |
803 DCHECK(!device_id.empty()); // Default device must always be found | 805 DCHECK(!device_id.empty()); // Default device must always be found |
804 AudioOutputDeviceInfo device_info = { | 806 AudioOutputDeviceInfo device_info = { |
805 std::string(), std::string(), | 807 std::string(), std::string(), |
806 media::AudioParameters::UnavailableDeviceParams()}; | 808 media::AudioParameters::UnavailableDeviceParams()}; |
807 callback.Run(false, device_info); | 809 callback.Run(false, device_info); |
808 } | 810 } |
809 | 811 |
810 bool AudioRendererHost::IsAuthorizationStarted(int stream_id) { | 812 bool AudioRendererHost::IsAuthorizationStarted(int stream_id) { |
811 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 813 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
812 const auto& i = authorizations_.find(stream_id); | 814 const auto& i = authorizations_.find(stream_id); |
813 return i != authorizations_.end(); | 815 return i != authorizations_.end(); |
814 } | 816 } |
815 | 817 |
816 } // namespace content | 818 } // namespace content |
OLD | NEW |