| Index: content/renderer/media/media_stream_audio_processor_unittest.cc | 
| diff --git a/content/renderer/media/media_stream_audio_processor_unittest.cc b/content/renderer/media/media_stream_audio_processor_unittest.cc | 
| index ba938a6d019adcf101f9d03f4df938520dff8d2b..efa9b2b33f271ef05b3531b8f1572c21af2d0574 100644 | 
| --- a/content/renderer/media/media_stream_audio_processor_unittest.cc | 
| +++ b/content/renderer/media/media_stream_audio_processor_unittest.cc | 
| @@ -11,6 +11,7 @@ | 
| #include "content/public/common/content_switches.h" | 
| #include "content/public/common/media_stream_request.h" | 
| #include "content/renderer/media/media_stream_audio_processor.h" | 
| +#include "content/renderer/media/media_stream_audio_processor_options.h" | 
| #include "content/renderer/media/mock_media_constraint_factory.h" | 
| #include "media/audio/audio_parameters.h" | 
| #include "media/base/audio_bus.h" | 
| @@ -153,12 +154,12 @@ class MediaStreamAudioProcessorTest : public ::testing::Test { | 
|  | 
| TEST_F(MediaStreamAudioProcessorTest, WithoutAudioProcessing) { | 
| // Setup the audio processor without enabling the flag. | 
| -  blink::WebMediaConstraints constraints; | 
| +  MockMediaConstraintFactory constraint_factory; | 
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 
| new WebRtcAudioDeviceImpl()); | 
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( | 
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| -          constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE, | 
| +          constraint_factory.CreateWebMediaConstraints(), 0, | 
| webrtc_audio_device.get())); | 
| EXPECT_FALSE(audio_processor->has_audio_processing()); | 
| audio_processor->OnCaptureFormatChanged(params_); | 
| @@ -176,12 +177,12 @@ TEST_F(MediaStreamAudioProcessorTest, WithAudioProcessing) { | 
| // Setup the audio processor with the flag enabled. | 
| CommandLine::ForCurrentProcess()->AppendSwitch( | 
| switches::kEnableAudioTrackProcessing); | 
| -  blink::WebMediaConstraints constraints; | 
| +  MockMediaConstraintFactory constraint_factory; | 
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 
| new WebRtcAudioDeviceImpl()); | 
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( | 
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| -          constraints, 0, MEDIA_DEVICE_AUDIO_CAPTURE, | 
| +          constraint_factory.CreateWebMediaConstraints(), 0, | 
| webrtc_audio_device.get())); | 
| EXPECT_TRUE(audio_processor->has_audio_processing()); | 
| audio_processor->OnCaptureFormatChanged(params_); | 
| @@ -200,13 +201,16 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) { | 
| // Setup the audio processor with enabling the flag. | 
| CommandLine::ForCurrentProcess()->AppendSwitch( | 
| switches::kEnableAudioTrackProcessing); | 
| -  blink::WebMediaConstraints constraints; | 
| scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( | 
| new WebRtcAudioDeviceImpl()); | 
| -  // Create MediaStreamAudioProcessor instance for MEDIA_TAB_AUDIO_CAPTURE type. | 
| +  // Create MediaStreamAudioProcessor instance for kMediaStreamSourceTab source. | 
| +  MockMediaConstraintFactory tab_constraint_factory; | 
| +  const std::string tab_string = kMediaStreamSourceTab; | 
| +  tab_constraint_factory.AddMandatory(kMediaStreamSource, | 
| +                                      tab_string); | 
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( | 
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| -          constraints, 0, MEDIA_TAB_AUDIO_CAPTURE, | 
| +          tab_constraint_factory.CreateWebMediaConstraints(), 0, | 
| webrtc_audio_device.get())); | 
| EXPECT_FALSE(audio_processor->has_audio_processing()); | 
| audio_processor->OnCaptureFormatChanged(params_); | 
| @@ -216,11 +220,15 @@ TEST_F(MediaStreamAudioProcessorTest, VerifyTabCaptureWithoutAudioProcessing) { | 
| params_.channels(), | 
| params_.sample_rate() / 100); | 
|  | 
| -  // Create MediaStreamAudioProcessor instance for MEDIA_LOOPBACK_AUDIO_CAPTURE. | 
| -  audio_processor = | 
| -      new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| -          constraints, 0, MEDIA_LOOPBACK_AUDIO_CAPTURE, | 
| -          webrtc_audio_device.get()); | 
| +  // Create MediaStreamAudioProcessor instance for kMediaStreamSourceSystem | 
| +  // source. | 
| +  MockMediaConstraintFactory system_constraint_factory; | 
| +  const std::string system_string = kMediaStreamSourceSystem; | 
| +  system_constraint_factory.AddMandatory(kMediaStreamSource, | 
| +                                         system_string); | 
| +  audio_processor = new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| +      system_constraint_factory.CreateWebMediaConstraints(), 0, | 
| +      webrtc_audio_device.get()); | 
| EXPECT_FALSE(audio_processor->has_audio_processing()); | 
|  | 
| // Set |audio_processor| to NULL to make sure |webrtc_audio_device| outlives | 
| @@ -241,7 +249,7 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) { | 
| scoped_refptr<MediaStreamAudioProcessor> audio_processor( | 
| new talk_base::RefCountedObject<MediaStreamAudioProcessor>( | 
| constraint_factory.CreateWebMediaConstraints(), 0, | 
| -          MEDIA_DEVICE_AUDIO_CAPTURE, webrtc_audio_device.get())); | 
| +          webrtc_audio_device.get())); | 
| EXPECT_FALSE(audio_processor->has_audio_processing()); | 
| audio_processor->OnCaptureFormatChanged(params_); | 
|  | 
| @@ -254,4 +262,60 @@ TEST_F(MediaStreamAudioProcessorTest, TurnOffDefaultConstraints) { | 
| audio_processor = NULL; | 
| } | 
|  | 
| +TEST_F(MediaStreamAudioProcessorTest, VerifyConstraints) { | 
| +  // Setup the audio processor with enabling the flag. | 
| +  CommandLine::ForCurrentProcess()->AppendSwitch( | 
| +      switches::kEnableAudioTrackProcessing); | 
| + | 
| +  static const char* kDefaultAudioConstraints[] = { | 
| +    MediaAudioConstraints::kEchoCancellation, | 
| +    MediaAudioConstraints::kGoogAudioMirroring, | 
| +    MediaAudioConstraints::kGoogAutoGainControl, | 
| +    MediaAudioConstraints::kGoogEchoCancellation, | 
| +    MediaAudioConstraints::kGoogExperimentalEchoCancellation, | 
| +    MediaAudioConstraints::kGoogExperimentalAutoGainControl, | 
| +    MediaAudioConstraints::kGoogExperimentalNoiseSuppression, | 
| +    MediaAudioConstraints::kGoogHighpassFilter, | 
| +    MediaAudioConstraints::kGoogNoiseSuppression, | 
| +    MediaAudioConstraints::kGoogTypingNoiseDetection | 
| +  }; | 
| + | 
| +  // Verify mandatory constraints. | 
| +  for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) { | 
| +    MockMediaConstraintFactory constraint_factory; | 
| +    constraint_factory.AddMandatory(kDefaultAudioConstraints[i], false); | 
| +    blink::WebMediaConstraints constraints = | 
| +        constraint_factory.CreateWebMediaConstraints(); | 
| +    MediaAudioConstraints audio_constraints(constraints, 0); | 
| +    EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i])); | 
| +  } | 
| + | 
| +  // Verify optional constraints. | 
| +  for (size_t i = 0; i < arraysize(kDefaultAudioConstraints); ++i) { | 
| +    MockMediaConstraintFactory constraint_factory; | 
| +    constraint_factory.AddOptional(kDefaultAudioConstraints[i], false); | 
| +    blink::WebMediaConstraints constraints = | 
| +        constraint_factory.CreateWebMediaConstraints(); | 
| +    MediaAudioConstraints audio_constraints(constraints, 0); | 
| +    EXPECT_FALSE(audio_constraints.GetProperty(kDefaultAudioConstraints[i])); | 
| +  } | 
| + | 
| + // Verify echo cancellation is off when platform aec effect is on. | 
| +  MockMediaConstraintFactory constraint_factory; | 
| +  MediaAudioConstraints audio_constraints( | 
| +      constraint_factory.CreateWebMediaConstraints(), | 
| +      media::AudioParameters::ECHO_CANCELLER); | 
| +  EXPECT_FALSE(audio_constraints.GetProperty( | 
| +      MediaAudioConstraints::kGoogEchoCancellation)); | 
| +} | 
| + | 
| +TEST_F(MediaStreamAudioProcessorTest, ValidateConstraints) { | 
| +  MockMediaConstraintFactory constraint_factory; | 
| +  const std::string dummy_constraint = "dummy"; | 
| +  constraint_factory.AddMandatory(dummy_constraint, true); | 
| +  MediaAudioConstraints audio_constraints( | 
| +      constraint_factory.CreateWebMediaConstraints(), 0); | 
| +  EXPECT_FALSE(audio_constraints.IsValid()); | 
| +} | 
| + | 
| }  // namespace content | 
|  |