summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-02 19:46:57 +0000
committerstevenjb@chromium.org <stevenjb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-02 19:46:57 +0000
commitbe0944c44ec9c640c63aebd51651c57544459e59 (patch)
treebee90acdedda3164458c7b9d3a792f77eb6963db
parent8b6b5a9fbf4ec07104e8f463515d810b17b6138a (diff)
downloadchromium_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.cc34
-rw-r--r--chrome/browser/chromeos/audio/audio_handler.h4
-rw-r--r--chrome/browser/policy/policy_browsertest.cc1
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);