| Index: media/audio/audio_input_controller.cc
 | 
| diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc
 | 
| index 996b937aac5b15481f50bc059607e0040c13533e..e3d994fe64570ee6aa36e90cca0456f80e5bede1 100644
 | 
| --- a/media/audio/audio_input_controller.cc
 | 
| +++ b/media/audio/audio_input_controller.cc
 | 
| @@ -26,6 +26,7 @@ namespace media {
 | 
|  namespace {
 | 
|  
 | 
|  const int kMaxInputChannels = 3;
 | 
| +constexpr int kCheckMutedStateIntervalSeconds = 1;
 | 
|  
 | 
|  #if defined(AUDIO_POWER_MONITORING)
 | 
|  // Time in seconds between two successive measurements of audio power levels.
 | 
| @@ -199,6 +200,7 @@ AudioInputController::AudioInputController(
 | 
|  AudioInputController::~AudioInputController() {
 | 
|    DCHECK(!audio_callback_);
 | 
|    DCHECK(!stream_);
 | 
| +  DCHECK(!check_muted_state_timer_.IsRunning());
 | 
|  }
 | 
|  
 | 
|  // static
 | 
| @@ -358,6 +360,14 @@ void AudioInputController::DoCreateForStream(
 | 
|    // Finally, keep the stream pointer around, update the state and notify.
 | 
|    stream_ = stream_to_control;
 | 
|    handler_->OnCreated(this);
 | 
| +
 | 
| +  // Check the current muted state and start the repeating timer to keep that
 | 
| +  // updated.
 | 
| +  CheckMutedState();
 | 
| +  check_muted_state_timer_.Start(
 | 
| +      FROM_HERE, base::TimeDelta::FromSeconds(kCheckMutedStateIntervalSeconds),
 | 
| +      this, &AudioInputController::CheckMutedState);
 | 
| +  DCHECK(check_muted_state_timer_.IsRunning());
 | 
|  }
 | 
|  
 | 
|  void AudioInputController::DoRecord() {
 | 
| @@ -387,9 +397,12 @@ void AudioInputController::DoClose() {
 | 
|    if (!stream_)
 | 
|      return;
 | 
|  
 | 
| +  check_muted_state_timer_.Stop();
 | 
| +
 | 
|    std::string log_string;
 | 
|    static const char kLogStringPrefix[] = "AIC::DoClose:";
 | 
|  
 | 
| +  // Allow calling unconditionally and bail if we don't have a stream to close.
 | 
|    if (audio_callback_) {
 | 
|      stream_->Stop();
 | 
|  
 | 
| @@ -665,6 +678,17 @@ bool AudioInputController::CheckAudioPower(const AudioBus* source,
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| +void AudioInputController::CheckMutedState() {
 | 
| +  DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +  DCHECK(stream_);
 | 
| +  const bool new_state = stream_->IsMuted();
 | 
| +  if (new_state != is_muted_) {
 | 
| +    is_muted_ = new_state;
 | 
| +    // We don't log OnMuted here, but leave that for AudioInputRendererHost.
 | 
| +    handler_->OnMuted(this, is_muted_);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  // static
 | 
|  AudioInputController::StreamType AudioInputController::ParamsToStreamType(
 | 
|      const AudioParameters& params) {
 | 
| 
 |