Bumping gaia.json for 4 gaia revision(s) a=gaia-bump
[gecko.git] / dom / workers / WorkerDebuggerManager.h
blobd28c3aa34968af33099fbb115b27d3af8fa4c10a
1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef mozilla_dom_workers_workerdebuggermanager_h
7 #define mozilla_dom_workers_workerdebuggermanager_h
9 #include "Workers.h"
11 #include "nsIWorkerDebuggerManager.h"
13 #include "nsServiceManagerUtils.h"
14 #include "nsTArray.h"
16 #define WORKERDEBUGGERMANAGER_CID \
17 { 0x62ec8731, 0x55ad, 0x4246, \
18 { 0xb2, 0xea, 0xf2, 0x6c, 0x1f, 0xe1, 0x9d, 0x2d } }
19 #define WORKERDEBUGGERMANAGER_CONTRACTID \
20 "@mozilla.org/dom/workers/workerdebuggermanager;1"
22 class RegisterDebuggerRunnable;
24 BEGIN_WORKERS_NAMESPACE
26 class WorkerDebugger;
28 class WorkerDebuggerManager MOZ_FINAL : public nsIWorkerDebuggerManager
30 friend class ::RegisterDebuggerRunnable;
32 mozilla::Mutex mMutex;
34 // Protected by mMutex.
35 nsTArray<nsCOMPtr<nsIWorkerDebuggerManagerListener>> mListeners;
37 // Only touched on the main thread.
38 nsTArray<WorkerDebugger*> mDebuggers;
40 public:
41 static WorkerDebuggerManager*
42 GetOrCreateService()
44 nsCOMPtr<nsIWorkerDebuggerManager> wdm =
45 do_GetService(WORKERDEBUGGERMANAGER_CONTRACTID);
46 return static_cast<WorkerDebuggerManager*>(wdm.get());
49 WorkerDebuggerManager();
51 NS_DECL_THREADSAFE_ISUPPORTS
52 NS_DECL_NSIWORKERDEBUGGERMANAGER
54 void RegisterDebugger(WorkerDebugger* aDebugger);
56 void UnregisterDebugger(WorkerDebugger* aDebugger);
58 private:
59 virtual ~WorkerDebuggerManager();
61 void RegisterDebuggerOnMainThread(WorkerDebugger* aDebugger,
62 bool aHasListeners);
64 void UnregisterDebuggerOnMainThread(WorkerDebugger* aDebugger);
67 inline nsresult
68 RegisterWorkerDebugger(WorkerDebugger* aDebugger)
70 nsRefPtr<WorkerDebuggerManager> manager =
71 WorkerDebuggerManager::GetOrCreateService();
72 if (!manager) {
73 return NS_ERROR_FAILURE;
76 manager->RegisterDebugger(aDebugger);
77 return NS_OK;
80 inline nsresult
81 UnregisterWorkerDebugger(WorkerDebugger* aDebugger)
83 nsRefPtr<WorkerDebuggerManager> manager =
84 WorkerDebuggerManager::GetOrCreateService();
85 if (!manager) {
86 return NS_ERROR_FAILURE;
89 manager->UnregisterDebugger(aDebugger);
90 return NS_OK;
93 END_WORKERS_NAMESPACE
95 #endif // mozilla_dom_workers_workerdebuggermanager_h