Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set sw=2 ts=8 et ft=cpp : */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef mozilla_DeviceChangeCallback_h
8 : #define mozilla_DeviceChangeCallback_h
9 :
10 : #include "mozilla/Mutex.h"
11 :
12 : namespace mozilla {
13 :
14 : class DeviceChangeCallback
15 : {
16 : public:
17 0 : virtual void OnDeviceChange()
18 : {
19 0 : MutexAutoLock lock(mCallbackMutex);
20 0 : for (DeviceChangeCallback* observer : mDeviceChangeCallbackList)
21 : {
22 0 : observer->OnDeviceChange();
23 : }
24 0 : }
25 :
26 0 : virtual int AddDeviceChangeCallback(DeviceChangeCallback* aCallback)
27 : {
28 0 : MutexAutoLock lock(mCallbackMutex);
29 0 : if (mDeviceChangeCallbackList.IndexOf(aCallback) == mDeviceChangeCallbackList.NoIndex)
30 0 : mDeviceChangeCallbackList.AppendElement(aCallback);
31 0 : return 0;
32 : }
33 :
34 0 : virtual int RemoveDeviceChangeCallback(DeviceChangeCallback* aCallback)
35 : {
36 0 : MutexAutoLock lock(mCallbackMutex);
37 0 : return RemoveDeviceChangeCallbackLocked(aCallback);
38 : }
39 :
40 0 : virtual int RemoveDeviceChangeCallbackLocked(DeviceChangeCallback* aCallback)
41 : {
42 0 : mCallbackMutex.AssertCurrentThreadOwns();
43 0 : if (mDeviceChangeCallbackList.IndexOf(aCallback) != mDeviceChangeCallbackList.NoIndex)
44 0 : mDeviceChangeCallbackList.RemoveElement(aCallback);
45 0 : return 0;
46 : }
47 :
48 0 : DeviceChangeCallback() : mCallbackMutex("mozilla::media::DeviceChangeCallback::mCallbackMutex")
49 : {
50 0 : }
51 :
52 0 : virtual ~DeviceChangeCallback()
53 0 : {
54 0 : }
55 :
56 : protected:
57 : nsTArray<DeviceChangeCallback*> mDeviceChangeCallbackList;
58 : Mutex mCallbackMutex;
59 : };
60 :
61 : } // namespace mozilla
62 :
63 : #endif // mozilla_DeviceChangeCallback_h
|