Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/workers/WorkerDebuggerManager.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
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
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef mozilla_dom_workers_workerdebuggermanager_h
8
#define mozilla_dom_workers_workerdebuggermanager_h
9
10
#include "mozilla/dom/WorkerCommon.h"
11
12
#include "nsIObserver.h"
13
#include "nsIWorkerDebuggerManager.h"
14
15
#include "nsServiceManagerUtils.h"
16
#include "nsTArray.h"
17
#include "nsThreadUtils.h"
18
19
#define WORKERDEBUGGERMANAGER_CID \
20
  { 0x62ec8731, 0x55ad, 0x4246, \
21
    { 0xb2, 0xea, 0xf2, 0x6c, 0x1f, 0xe1, 0x9d, 0x2d } }
22
#define WORKERDEBUGGERMANAGER_CONTRACTID \
23
  "@mozilla.org/dom/workers/workerdebuggermanager;1"
24
25
namespace mozilla {
26
namespace dom {
27
28
class WorkerDebugger;
29
class WorkerPrivate;
30
31
class WorkerDebuggerManager final : public nsIObserver,
32
                                    public nsIWorkerDebuggerManager
33
{
34
  Mutex mMutex;
35
36
  // Protected by mMutex.
37
  nsTArray<nsCOMPtr<nsIWorkerDebuggerManagerListener>> mListeners;
38
39
  // Only touched on the main thread.
40
  nsTArray<RefPtr<WorkerDebugger>> mDebuggers;
41
42
public:
43
  static already_AddRefed<WorkerDebuggerManager>
44
  GetInstance();
45
46
  static WorkerDebuggerManager*
47
  GetOrCreate();
48
49
  static WorkerDebuggerManager*
50
  Get();
51
52
  WorkerDebuggerManager();
53
54
  NS_DECL_ISUPPORTS
55
  NS_DECL_NSIOBSERVER
56
  NS_DECL_NSIWORKERDEBUGGERMANAGER
57
58
  nsresult
59
  Init();
60
61
  void
62
  Shutdown();
63
64
  void
65
  RegisterDebugger(WorkerPrivate* aWorkerPrivate);
66
67
  void
68
  RegisterDebuggerMainThread(WorkerPrivate* aWorkerPrivate,
69
                             bool aNotifyListeners);
70
71
  void
72
  UnregisterDebugger(WorkerPrivate* aWorkerPrivate);
73
74
  void
75
  UnregisterDebuggerMainThread(WorkerPrivate* aWorkerPrivate);
76
77
  uint32_t
78
  GetDebuggersLength() const;
79
80
  WorkerDebugger*
81
  GetDebuggerAt(uint32_t aIndex) const;
82
83
private:
84
  virtual ~WorkerDebuggerManager();
85
};
86
87
inline nsresult
88
RegisterWorkerDebugger(WorkerPrivate* aWorkerPrivate)
89
0
{
90
0
  WorkerDebuggerManager* manager;
91
0
92
0
  if (NS_IsMainThread()) {
93
0
    manager = WorkerDebuggerManager::GetOrCreate();
94
0
    if (!manager) {
95
0
      NS_WARNING("Failed to create worker debugger manager!");
96
0
      return NS_ERROR_FAILURE;
97
0
    }
98
0
  }
99
0
  else {
100
0
    manager = WorkerDebuggerManager::Get();
101
0
  }
102
0
103
0
  manager->RegisterDebugger(aWorkerPrivate);
104
0
  return NS_OK;
105
0
}
106
107
inline nsresult
108
UnregisterWorkerDebugger(WorkerPrivate* aWorkerPrivate)
109
0
{
110
0
  WorkerDebuggerManager* manager;
111
0
112
0
  if (NS_IsMainThread()) {
113
0
    manager = WorkerDebuggerManager::GetOrCreate();
114
0
    if (!manager) {
115
0
      NS_WARNING("Failed to create worker debugger manager!");
116
0
      return NS_ERROR_FAILURE;
117
0
    }
118
0
  }
119
0
  else {
120
0
    manager = WorkerDebuggerManager::Get();
121
0
  }
122
0
123
0
  manager->UnregisterDebugger(aWorkerPrivate);
124
0
  return NS_OK;
125
0
}
126
127
} // dom namespace
128
} // mozilla namespace
129
130
#endif // mozilla_dom_workers_workerdebuggermanager_h