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