| Index: content/browser/renderer_host/media/audio_input_renderer_host.cc
|
| diff --git a/content/browser/renderer_host/media/audio_input_renderer_host.cc b/content/browser/renderer_host/media/audio_input_renderer_host.cc
|
| index aefb4244231883e9dc98317e040b713e4f7bf4f9..661924a6af911544f298605d7216555337909ce5 100644
|
| --- a/content/browser/renderer_host/media/audio_input_renderer_host.cc
|
| +++ b/content/browser/renderer_host/media/audio_input_renderer_host.cc
|
| @@ -16,7 +16,9 @@
|
| #include "base/process/process.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "base/sync_socket.h"
|
| #include "build/build_config.h"
|
| +#include "content/browser/bad_message.h"
|
| #include "content/browser/media/capture/desktop_capture_device_uma_types.h"
|
| #include "content/browser/media/capture/web_contents_audio_input_stream.h"
|
| #include "content/browser/media/media_internals.h"
|
| @@ -48,8 +50,9 @@ void LogMessage(int stream_id, const std::string& msg, bool add_prefix) {
|
| if (add_prefix)
|
| oss << "AIRH::";
|
| oss << msg;
|
| - content::MediaStreamManager::SendMessageToNativeLog(oss.str());
|
| - DVLOG(1) << oss.str();
|
| + const std::string message = oss.str();
|
| + content::MediaStreamManager::SendMessageToNativeLog(message);
|
| + DVLOG(1) << message;
|
| }
|
|
|
| } // namespace
|
| @@ -105,8 +108,7 @@ AudioInputRendererHost::AudioInputRendererHost(
|
| audio_mirroring_manager_(audio_mirroring_manager),
|
| user_input_monitor_(user_input_monitor),
|
| audio_log_(MediaInternals::GetInstance()->CreateAudioLog(
|
| - media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)),
|
| - weak_factory_(this) {}
|
| + media::AudioLogFactory::AUDIO_INPUT_CONTROLLER)) {}
|
|
|
| AudioInputRendererHost::~AudioInputRendererHost() {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| @@ -184,22 +186,9 @@ void AudioInputRendererHost::DoCompleteCreation(
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| AudioEntry* entry = LookupByController(controller);
|
| - if (!entry) {
|
| - NOTREACHED() << "AudioInputController is invalid.";
|
| - return;
|
| - }
|
| -
|
| - if (!PeerHandle()) {
|
| - NOTREACHED() << "Renderer process handle is invalid.";
|
| - DeleteEntryOnError(entry, INVALID_PEER_HANDLE);
|
| - return;
|
| - }
|
| -
|
| - if (!entry->controller->SharedMemoryAndSyncSocketMode()) {
|
| - NOTREACHED() << "Only shared-memory/sync-socket mode is supported.";
|
| - DeleteEntryOnError(entry, INVALID_LATENCY_MODE);
|
| - return;
|
| - }
|
| + DCHECK(entry);
|
| + DCHECK(PeerHandle());
|
| + DCHECK(entry->controller->SharedMemoryAndSyncSocketMode());
|
|
|
| // Once the audio stream is created then complete the creation process by
|
| // mapping shared memory and sharing with the renderer process.
|
| @@ -239,10 +228,7 @@ void AudioInputRendererHost::DoSendRecordingMessage(
|
| // TODO(henrika): See crbug.com/115262 for details on why this method
|
| // should be implemented.
|
| AudioEntry* entry = LookupByController(controller);
|
| - if (!entry) {
|
| - NOTREACHED() << "AudioInputController is invalid.";
|
| - return;
|
| - }
|
| + DCHECK(entry) << "AudioInputController is invalid.";
|
| LogMessage(
|
| entry->stream_id, "DoSendRecordingMessage: stream is now started", true);
|
| }
|
| @@ -252,10 +238,7 @@ void AudioInputRendererHost::DoHandleError(
|
| media::AudioInputController::ErrorCode error_code) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| AudioEntry* entry = LookupByController(controller);
|
| - if (!entry) {
|
| - NOTREACHED() << "AudioInputController is invalid.";
|
| - return;
|
| - }
|
| + DCHECK(entry);
|
|
|
| std::ostringstream oss;
|
| oss << "AIC reports error_code=" << error_code;
|
| @@ -269,10 +252,7 @@ void AudioInputRendererHost::DoLog(media::AudioInputController* controller,
|
| const std::string& message) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
| AudioEntry* entry = LookupByController(controller);
|
| - if (!entry) {
|
| - NOTREACHED() << "AudioInputController is invalid.";
|
| - return;
|
| - }
|
| + DCHECK(entry);
|
|
|
| // Add stream ID and current audio level reported by AIC to native log.
|
| LogMessage(entry->stream_id, message, false);
|
| @@ -320,44 +300,41 @@ void AudioInputRendererHost::DoCreateStream(
|
| const AudioInputHostMsg_CreateStream_Config& config) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| - std::ostringstream oss;
|
| - oss << "[stream_id=" << stream_id << "] "
|
| - << "AIRH::OnCreateStream(render_frame_id=" << render_frame_id
|
| - << ", session_id=" << session_id << ")";
|
| DCHECK_GT(render_frame_id, 0);
|
|
|
| // media::AudioParameters is validated in the deserializer.
|
| - if (LookupById(stream_id) != NULL) {
|
| + if (LookupById(stream_id)) {
|
| SendErrorMessage(stream_id, STREAM_ALREADY_EXISTS);
|
| MaybeUnregisterKeyboardMicStream(config);
|
| return;
|
| }
|
|
|
| + // Check if we have the permission to open the device and which device to use.
|
| + const StreamDeviceInfo* info =
|
| + media_stream_manager_->audio_input_device_manager()
|
| + ->GetOpenedDeviceInfoById(session_id);
|
| + if (!info) {
|
| + SendErrorMessage(stream_id, PERMISSION_DENIED);
|
| + DLOG(WARNING) << "No permission has been granted to input stream with "
|
| + << "session_id=" << session_id;
|
| + MaybeUnregisterKeyboardMicStream(config);
|
| + return;
|
| + }
|
| +
|
| + const MediaStreamType& type = info->device.type;
|
| + const std::string& device_id = info->device.id;
|
| + const std::string& device_name = info->device.name;
|
| media::AudioParameters audio_params(config.params);
|
| if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kUseFakeDeviceForMediaStream)) {
|
| audio_params.set_format(media::AudioParameters::AUDIO_FAKE);
|
| }
|
|
|
| - // Check if we have the permission to open the device and which device to use.
|
| - MediaStreamType type = MEDIA_NO_SERVICE;
|
| - std::string device_name;
|
| - std::string device_id = media::AudioDeviceDescription::kDefaultDeviceId;
|
| - if (audio_params.format() != media::AudioParameters::AUDIO_FAKE) {
|
| - const StreamDeviceInfo* info = media_stream_manager_->
|
| - audio_input_device_manager()->GetOpenedDeviceInfoById(session_id);
|
| - if (!info) {
|
| - SendErrorMessage(stream_id, PERMISSION_DENIED);
|
| - DLOG(WARNING) << "No permission has been granted to input stream with "
|
| - << "session_id=" << session_id;
|
| - MaybeUnregisterKeyboardMicStream(config);
|
| - return;
|
| - }
|
| - type = info->device.type;
|
| - device_id = info->device.id;
|
| - device_name = info->device.name;
|
| - oss << ": device_name=" << device_name;
|
| - }
|
| + std::ostringstream oss;
|
| + oss << "[stream_id=" << stream_id << "] "
|
| + << "AIRH::OnCreateStream(render_frame_id=" << render_frame_id
|
| + << ", session_id=" << session_id << ")"
|
| + << ": device_name=" << device_name;
|
|
|
| // Create a new AudioEntry structure.
|
| std::unique_ptr<AudioEntry> entry(new AudioEntry());
|
| @@ -450,8 +427,9 @@ void AudioInputRendererHost::DoCreateStream(
|
| }
|
| #endif
|
|
|
| - MediaStreamManager::SendMessageToNativeLog(oss.str());
|
| - DVLOG(1) << oss.str();
|
| + const std::string log_message = oss.str();
|
| + MediaStreamManager::SendMessageToNativeLog(log_message);
|
| + DVLOG(1) << log_message;
|
|
|
| // Since the controller was created successfully, create an entry and add it
|
| // to the map.
|
| @@ -499,6 +477,12 @@ void AudioInputRendererHost::OnCloseStream(int stream_id) {
|
| void AudioInputRendererHost::OnSetVolume(int stream_id, double volume) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
|
|
| + if (volume < 0 || volume > 1) {
|
| + bad_message::ReceivedBadMessage(this,
|
| + bad_message::AIRH_VOLUME_OUT_OF_RANGE);
|
| + return;
|
| + }
|
| +
|
| AudioEntry* entry = LookupById(stream_id);
|
| if (!entry) {
|
| SendErrorMessage(stream_id, INVALID_AUDIO_ENTRY);
|
| @@ -575,7 +559,7 @@ AudioInputRendererHost::AudioEntry* AudioInputRendererHost::LookupById(
|
| AudioEntryMap::iterator i = audio_entries_.find(stream_id);
|
| if (i != audio_entries_.end())
|
| return i->second;
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| AudioInputRendererHost::AudioEntry* AudioInputRendererHost::LookupByController(
|
| @@ -589,7 +573,7 @@ AudioInputRendererHost::AudioEntry* AudioInputRendererHost::LookupByController(
|
| if (controller == i->second->controller.get())
|
| return i->second;
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
|
|
| void AudioInputRendererHost::MaybeUnregisterKeyboardMicStream(
|
|
|