15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector> 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ash/accessibility_delegate.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/ash_switches.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/browser_process.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/ash/volume_controller_chromeos.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/audio/chromeos_sounds.h" 16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chromeos/audio/cras_audio_handler.h" 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chromeos/chromeos_switches.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/audio/sounds/sounds_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class SoundsManagerTestImpl : public media::SoundsManager { 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SoundsManagerTestImpl() 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : is_sound_initialized_(chromeos::SOUND_COUNT), 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) num_play_requests_(chromeos::SOUND_COUNT) { 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~SoundsManagerTestImpl() {} 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool Initialize(SoundKey key, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::StringPiece& /* data */) OVERRIDE { 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_sound_initialized_[key] = true; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool Play(SoundKey key) OVERRIDE { 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ++num_play_requests_[key]; 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual base::TimeDelta GetDuration(SoundKey /* key */) OVERRIDE { 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::TimeDelta(); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_sound_initialized(SoundKey key) const { 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return is_sound_initialized_[key]; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int num_play_requests(SoundKey key) const { 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return num_play_requests_[key]; 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<bool> is_sound_initialized_; 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<int> num_play_requests_; 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SoundsManagerTestImpl); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VolumeControllerTest : public InProcessBrowserTest { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeControllerTest() {} 65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~VolumeControllerTest() {} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) volume_controller_.reset(new VolumeController()); 69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch audio_handler_ = chromeos::CrasAudioHandler::Get(); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VolumeMute() { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) volume_controller_->HandleVolumeMute(ui::Accelerator()); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VolumeUp() { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) volume_controller_->HandleVolumeUp(ui::Accelerator()); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void VolumeDown() { 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) volume_controller_->HandleVolumeDown(ui::Accelerator()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch chromeos::CrasAudioHandler* audio_handler_; // Not owned. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<VolumeController> volume_controller_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(VolumeControllerTest); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VolumeControllerTest, VolumeUpAndDown) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set initial value as 50% 95558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const int kInitVolume = 50; 96558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch audio_handler_->SetOutputVolumePercent(kInitVolume); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(audio_handler_->GetOutputVolumePercent(), kInitVolume); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 101558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_LT(kInitVolume, audio_handler_->GetOutputVolumePercent()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 103558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(kInitVolume, audio_handler_->GetOutputVolumePercent()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_GT(kInitVolume, audio_handler_->GetOutputVolumePercent()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VolumeControllerTest, VolumeDownToZero) { 109558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Setting to very small volume. 110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch audio_handler_->SetOutputVolumePercent(1); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 113558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(0, audio_handler_->GetOutputVolumePercent()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 115558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(0, audio_handler_->GetOutputVolumePercent()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 117558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_LT(0, audio_handler_->GetOutputVolumePercent()); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VolumeControllerTest, VolumeUpTo100) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting to almost max 122558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch audio_handler_->SetOutputVolumePercent(99); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 125558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(100, audio_handler_->GetOutputVolumePercent()); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 127558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(100, audio_handler_->GetOutputVolumePercent()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 129558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_GT(100, audio_handler_->GetOutputVolumePercent()); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VolumeControllerTest, Mutes) { 133558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ASSERT_FALSE(audio_handler_->IsOutputMuted()); 134558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const int initial_volume = audio_handler_->GetOutputVolumePercent(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeMute(); 137558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_TRUE(audio_handler_->IsOutputMuted()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Further mute buttons doesn't have effects. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeMute(); 141558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_TRUE(audio_handler_->IsOutputMuted()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right after the volume up after set_mute recovers to original volume. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 145558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_FALSE(audio_handler_->IsOutputMuted()); 146558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(initial_volume, audio_handler_->GetOutputVolumePercent()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeMute(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After the volume down, the volume goes down to zero explicitly. 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeDown(); 151558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_TRUE(audio_handler_->IsOutputMuted()); 152558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_EQ(0, audio_handler_->GetOutputVolumePercent()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Thus, further VolumeUp doesn't recover the volume, it's just slightly 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bigger than 0. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VolumeUp(); 157558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_LT(0, audio_handler_->GetOutputVolumePercent()); 158558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch EXPECT_GT(initial_volume, audio_handler_->GetOutputVolumePercent()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class VolumeControllerSoundsTest : public VolumeControllerTest { 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeControllerSoundsTest() : sounds_manager_(NULL) {} 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~VolumeControllerSoundsTest() {} 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sounds_manager_ = new SoundsManagerTestImpl(); 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) media::SoundsManager::InitializeForTesting(sounds_manager_); 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void EnableSpokenFeedback(bool enabled) { 172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chromeos::AccessibilityManager* manager = 173effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch chromeos::AccessibilityManager::Get(); 174effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch manager->EnableSpokenFeedback(enabled, ash::A11Y_NOTIFICATION_NONE); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_sound_initialized() const { 178effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return sounds_manager_->is_sound_initialized(chromeos::SOUND_VOLUME_ADJUST); 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int num_play_requests() const { 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return sounds_manager_->num_play_requests(chromeos::SOUND_VOLUME_ADJUST); 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SoundsManagerTestImpl* sounds_manager_; 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(VolumeControllerSoundsTest); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 191effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(VolumeControllerSoundsTest, Simple) { 192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch audio_handler_->SetOutputVolumePercent(50); 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnableSpokenFeedback(false /* enabled */); 195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VolumeUp(); 196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VolumeDown(); 197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(0, num_play_requests()); 198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnableSpokenFeedback(true /* enabled */); 200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VolumeUp(); 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch VolumeDown(); 202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(2, num_play_requests()); 203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 205effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochIN_PROC_BROWSER_TEST_F(VolumeControllerSoundsTest, EdgeCases) { 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(is_sound_initialized()); 207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnableSpokenFeedback(true /* enabled */); 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that sound is played on volume up and volume down. 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_handler_->SetOutputVolumePercent(50); 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeUp(); 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1, num_play_requests()); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeDown(); 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(2, num_play_requests()); 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_handler_->SetOutputVolumePercent(99); 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeUp(); 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, num_play_requests()); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_handler_->SetOutputVolumePercent(100); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeUp(); 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, num_play_requests()); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that sound isn't played when audio is muted. 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_handler_->SetOutputVolumePercent(50); 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeMute(); 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeDown(); 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(audio_handler_->IsOutputMuted()); 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(3, num_play_requests()); 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that audio is unmuted and sound is played. 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeUp(); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_FALSE(audio_handler_->IsOutputMuted()); 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(4, num_play_requests()); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class VolumeControllerSoundsDisabledTest : public VolumeControllerSoundsTest { 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeControllerSoundsDisabledTest() {} 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~VolumeControllerSoundsDisabledTest() {} 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeControllerSoundsTest::SetUpCommandLine(command_line); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) command_line->AppendSwitch(chromeos::switches::kDisableVolumeAdjustSound); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(VolumeControllerSoundsDisabledTest); 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VolumeControllerSoundsDisabledTest, 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeAdjustSounds) { 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(is_sound_initialized()); 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that sound isn't played on volume up and volume down. 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) audio_handler_->SetOutputVolumePercent(50); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeUp(); 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) VolumeDown(); 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0, num_play_requests()); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 263