1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/extensions/api/audio/audio_service.h" 6 7 #include "base/callback.h" 8 #include "base/memory/weak_ptr.h" 9 #include "base/observer_list.h" 10 #include "base/strings/string_number_conversions.h" 11 #include "content/public/browser/browser_thread.h" 12 13 using content::BrowserThread; 14 15 namespace extensions { 16 17 using api::audio::OutputDeviceInfo; 18 using api::audio::InputDeviceInfo; 19 20 class AudioServiceImpl : public AudioService { 21 public: 22 AudioServiceImpl(); 23 virtual ~AudioServiceImpl(); 24 25 // Called by listeners to this service to add/remove themselves as observers. 26 virtual void AddObserver(AudioService::Observer* observer) OVERRIDE; 27 virtual void RemoveObserver(AudioService::Observer* observer) OVERRIDE; 28 29 // Start to query audio device information. 30 virtual void StartGetInfo(const GetInfoCallback& callback) OVERRIDE; 31 virtual void SetActiveDevices(const DeviceIdList& device_list) OVERRIDE; 32 virtual bool SetDeviceProperties(const std::string& device_id, 33 bool muted, 34 int volume, 35 int gain) OVERRIDE; 36 37 // List of observers. 38 ObserverList<AudioService::Observer> observer_list_; 39 40 // Note: This should remain the last member so it'll be destroyed and 41 // invalidate the weak pointers before any other members are destroyed. 42 base::WeakPtrFactory<AudioServiceImpl> weak_ptr_factory_; 43 44 DISALLOW_COPY_AND_ASSIGN(AudioServiceImpl); 45 }; 46 47 AudioServiceImpl::AudioServiceImpl() : weak_ptr_factory_(this) { 48 DCHECK_CURRENTLY_ON(BrowserThread::UI); 49 } 50 51 AudioServiceImpl::~AudioServiceImpl() { 52 DCHECK_CURRENTLY_ON(BrowserThread::UI); 53 } 54 55 void AudioServiceImpl::AddObserver(AudioService::Observer* observer) { 56 DCHECK_CURRENTLY_ON(BrowserThread::UI); 57 observer_list_.AddObserver(observer); 58 } 59 60 void AudioServiceImpl::RemoveObserver(AudioService::Observer* observer) { 61 DCHECK_CURRENTLY_ON(BrowserThread::UI); 62 observer_list_.RemoveObserver(observer); 63 } 64 65 void AudioServiceImpl::StartGetInfo(const GetInfoCallback& callback) { 66 DCHECK_CURRENTLY_ON(BrowserThread::UI); 67 if (!callback.is_null()) 68 callback.Run(OutputInfo(), InputInfo(), false); 69 } 70 71 void AudioServiceImpl::SetActiveDevices(const DeviceIdList& device_list) { 72 DCHECK_CURRENTLY_ON(BrowserThread::UI); 73 } 74 75 bool AudioServiceImpl::SetDeviceProperties(const std::string& device_id, 76 bool muted, 77 int volume, 78 int gain) { 79 DCHECK_CURRENTLY_ON(BrowserThread::UI); 80 return false; 81 } 82 83 AudioService* AudioService::CreateInstance() { 84 return new AudioServiceImpl; 85 } 86 87 } // namespace extensions 88