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 "base/threading/thread_checker.h" 12#include "content/public/browser/browser_thread.h" 13 14using content::BrowserThread; 15 16namespace extensions { 17 18using api::audio::OutputDeviceInfo; 19using api::audio::InputDeviceInfo; 20 21class AudioServiceImpl : public AudioService { 22 public: 23 AudioServiceImpl(); 24 virtual ~AudioServiceImpl(); 25 26 private: 27 // Called by listeners to this service to add/remove themselves as observers. 28 virtual void AddObserver(AudioService::Observer* observer) OVERRIDE; 29 virtual void RemoveObserver(AudioService::Observer* observer) OVERRIDE; 30 31 // Start to query audio device information. 32 virtual void StartGetInfo(const GetInfoCallback& callback) OVERRIDE; 33 virtual void SetActiveDevices(const DeviceIdList& device_list) OVERRIDE; 34 virtual bool SetDeviceProperties(const std::string& device_id, 35 bool muted, 36 int volume, 37 int gain) OVERRIDE; 38 39 // List of observers. 40 ObserverList<AudioService::Observer> observer_list_; 41 42 base::ThreadChecker thread_checker_; 43 44 // Note: This should remain the last member so it'll be destroyed and 45 // invalidate the weak pointers before any other members are destroyed. 46 base::WeakPtrFactory<AudioServiceImpl> weak_ptr_factory_; 47 48 DISALLOW_COPY_AND_ASSIGN(AudioServiceImpl); 49}; 50 51AudioServiceImpl::AudioServiceImpl() : weak_ptr_factory_(this) { 52 DCHECK(thread_checker_.CalledOnValidThread()); 53} 54 55AudioServiceImpl::~AudioServiceImpl() { 56 DCHECK(thread_checker_.CalledOnValidThread()); 57} 58 59void AudioServiceImpl::AddObserver(AudioService::Observer* observer) { 60 DCHECK(thread_checker_.CalledOnValidThread()); 61 observer_list_.AddObserver(observer); 62} 63 64void AudioServiceImpl::RemoveObserver(AudioService::Observer* observer) { 65 DCHECK(thread_checker_.CalledOnValidThread()); 66 observer_list_.RemoveObserver(observer); 67} 68 69void AudioServiceImpl::StartGetInfo(const GetInfoCallback& callback) { 70 DCHECK(thread_checker_.CalledOnValidThread()); 71 if (!callback.is_null()) 72 callback.Run(OutputInfo(), InputInfo(), false); 73} 74 75void AudioServiceImpl::SetActiveDevices(const DeviceIdList& device_list) { 76 DCHECK(thread_checker_.CalledOnValidThread()); 77} 78 79bool AudioServiceImpl::SetDeviceProperties(const std::string& device_id, 80 bool muted, 81 int volume, 82 int gain) { 83 DCHECK(thread_checker_.CalledOnValidThread()); 84 return false; 85} 86 87AudioService* AudioService::CreateInstance() { 88 return new AudioServiceImpl; 89} 90 91} // namespace extensions 92