diff options
author | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-02 19:46:57 +0000 |
---|---|---|
committer | stevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-02 19:46:57 +0000 |
commit | be0944c44ec9c640c63aebd51651c57544459e59 (patch) | |
tree | bee90acdedda3164458c7b9d3a792f77eb6963db | |
parent | 8b6b5a9fbf4ec07104e8f463515d810b17b6138a (diff) | |
download | chromium_src-be0944c44ec9c640c63aebd51651c57544459e59.zip chromium_src-be0944c44ec9c640c63aebd51651c57544459e59.tar.gz chromium_src-be0944c44ec9c640c63aebd51651c57544459e59.tar.bz2 |
Only trigger audio notifications on change
BUG=225531
Review URL: https://codereview.chromium.org/13144023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@191878 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/audio/audio_handler.cc | 34 | ||||
-rw-r--r-- | chrome/browser/chromeos/audio/audio_handler.h | 4 | ||||
-rw-r--r-- | chrome/browser/policy/policy_browsertest.cc | 1 |
3 files changed, 29 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/audio/audio_handler.cc b/chrome/browser/chromeos/audio/audio_handler.cc index b0f83d8..7e81a12 100644 --- a/chrome/browser/chromeos/audio/audio_handler.cc +++ b/chrome/browser/chromeos/audio/audio_handler.cc @@ -109,7 +109,10 @@ void AudioHandler::SetVolumePercent(double volume_percent) { void AudioHandler::SetVolumePercentInternal(double volume_percent) { mixer_->SetVolumePercent(volume_percent); local_state_->SetDouble(prefs::kAudioVolumePercent, volume_percent); - FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnVolumeChanged()); + if (volume_percent != volume_percent_) { + volume_percent_ = volume_percent; + FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnVolumeChanged()); + } } void AudioHandler::AdjustVolumeByPercent(double adjust_by_percent) { @@ -133,7 +136,10 @@ void AudioHandler::SetMuted(bool mute) { SetVolumePercentInternal(kDefaultUnmuteVolumePercent); } } - FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnMuteToggled()); + if (mute != muted_) { + muted_ = mute; + FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnMuteToggled()); + } } } @@ -156,12 +162,17 @@ void AudioHandler::RemoveVolumeObserver(VolumeObserver* observer) { AudioHandler::AudioHandler(AudioMixer* mixer) : mixer_(mixer), - local_state_(g_browser_process->local_state()) { + local_state_(g_browser_process->local_state()), + volume_percent_(0), + muted_(false) { InitializePrefObservers(); mixer_->Init(); ApplyAudioPolicy(); - SetMuted(local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); - SetVolumePercentInternal(local_state_->GetDouble(prefs::kAudioVolumePercent)); + // Set initial state so that notifications are not triggered. + muted_ = (local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); + volume_percent_ = local_state_->GetDouble(prefs::kAudioVolumePercent); + SetMuted(muted_); + SetVolumePercentInternal(volume_percent_); } AudioHandler::~AudioHandler() { @@ -178,14 +189,19 @@ void AudioHandler::InitializePrefObservers() { void AudioHandler::ApplyAudioPolicy() { mixer_->SetMuteLocked(false); + bool muted = false; if (local_state_->GetBoolean(prefs::kAudioOutputAllowed)) { - mixer_->SetMuted( - local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); + muted = (local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); + mixer_->SetMuted(muted); } else { - mixer_->SetMuted(true); + muted = true; + mixer_->SetMuted(muted); mixer_->SetMuteLocked(true); } - FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnMuteToggled()); + if (muted_ != muted) { + muted_ = muted; + FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnMuteToggled()); + } mixer_->SetCaptureMuteLocked(false); if (local_state_->GetBoolean(prefs::kAudioCaptureAllowed)) { mixer_->SetCaptureMuted(false); diff --git a/chrome/browser/chromeos/audio/audio_handler.h b/chrome/browser/chromeos/audio/audio_handler.h index 36bbb81..b8e318c 100644 --- a/chrome/browser/chromeos/audio/audio_handler.h +++ b/chrome/browser/chromeos/audio/audio_handler.h @@ -100,6 +100,10 @@ class AudioHandler { PrefChangeRegistrar pref_change_registrar_; + // Track state for triggering callbacks + double volume_percent_; + bool muted_; + DISALLOW_COPY_AND_ASSIGN(AudioHandler); }; diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc index 547fd57..8cf7546 100644 --- a/chrome/browser/policy/policy_browsertest.cc +++ b/chrome/browser/policy/policy_browsertest.cc @@ -1658,7 +1658,6 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DisableAudioOutput) { bool prior_state = audio_handler->IsMuted(); // Make sure we are not muted and then toggle the policy and observe if the // trigger was successful. - EXPECT_CALL(*mock, OnMuteToggled()).Times(1); audio_handler->SetMuted(false); EXPECT_FALSE(audio_handler->IsMuted()); EXPECT_CALL(*mock, OnMuteToggled()).Times(1); |