Home | History | Annotate | Download | only in audio
      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