• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
AudioServiceImpl()47 AudioServiceImpl::AudioServiceImpl() : weak_ptr_factory_(this) {
48   DCHECK_CURRENTLY_ON(BrowserThread::UI);
49 }
50 
~AudioServiceImpl()51 AudioServiceImpl::~AudioServiceImpl() {
52   DCHECK_CURRENTLY_ON(BrowserThread::UI);
53 }
54 
AddObserver(AudioService::Observer * observer)55 void AudioServiceImpl::AddObserver(AudioService::Observer* observer) {
56   DCHECK_CURRENTLY_ON(BrowserThread::UI);
57   observer_list_.AddObserver(observer);
58 }
59 
RemoveObserver(AudioService::Observer * observer)60 void AudioServiceImpl::RemoveObserver(AudioService::Observer* observer) {
61   DCHECK_CURRENTLY_ON(BrowserThread::UI);
62   observer_list_.RemoveObserver(observer);
63 }
64 
StartGetInfo(const GetInfoCallback & callback)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 
SetActiveDevices(const DeviceIdList & device_list)71 void AudioServiceImpl::SetActiveDevices(const DeviceIdList& device_list) {
72   DCHECK_CURRENTLY_ON(BrowserThread::UI);
73 }
74 
SetDeviceProperties(const std::string & device_id,bool muted,int volume,int gain)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 
CreateInstance()83 AudioService* AudioService::CreateInstance() {
84   return new AudioServiceImpl;
85 }
86 
87 }  // namespace extensions
88