Bug 1835710 - Cancel off-thread JIT compilation before changing nursery allocation...
[gecko.git] / dom / base / ChromeUtils.h
blobacb2cffdd25798102277f57fc8a61a45aebe543b
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/. */
7 #ifndef mozilla_dom_ChromeUtils__
8 #define mozilla_dom_ChromeUtils__
10 #include "mozilla/AlreadyAddRefed.h"
11 #include "mozilla/dom/BindingDeclarations.h"
12 #include "mozilla/dom/ChromeUtilsBinding.h"
13 #include "mozilla/dom/Exceptions.h"
14 #include "mozilla/dom/Record.h"
15 #include "nsDOMNavigationTiming.h" // for DOMHighResTimeStamp
16 #include "nsIDOMProcessChild.h"
17 #include "nsIDOMProcessParent.h"
19 namespace mozilla {
21 class ErrorResult;
23 namespace devtools {
24 class HeapSnapshot;
25 } // namespace devtools
27 namespace dom {
29 class ArrayBufferViewOrArrayBuffer;
30 class BrowsingContext;
31 class Element;
32 class IdleRequestCallback;
33 struct IdleRequestOptions;
34 struct MediaMetadataInit;
35 class MozQueryInterface;
36 class PrecompiledScript;
37 class Promise;
38 struct ProcessActorOptions;
39 struct WindowActorOptions;
41 class ChromeUtils {
42 private:
43 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
44 static void SaveHeapSnapshotShared(GlobalObject& global,
45 const HeapSnapshotBoundaries& boundaries,
46 nsAString& filePath, nsAString& snapshotId,
47 ErrorResult& rv);
49 public:
50 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
51 static uint64_t GetObjectNodeId(GlobalObject& global,
52 JS::Handle<JSObject*> aVal);
54 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
55 static void SaveHeapSnapshot(GlobalObject& global,
56 const HeapSnapshotBoundaries& boundaries,
57 nsAString& filePath, ErrorResult& rv);
59 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
60 static void SaveHeapSnapshotGetId(GlobalObject& global,
61 const HeapSnapshotBoundaries& boundaries,
62 nsAString& snapshotId, ErrorResult& rv);
64 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
65 static already_AddRefed<devtools::HeapSnapshot> ReadHeapSnapshot(
66 GlobalObject& global, const nsAString& filePath, ErrorResult& rv);
68 static bool IsDevToolsOpened();
69 static bool IsDevToolsOpened(GlobalObject& aGlobal);
70 static void NotifyDevToolsOpened(GlobalObject& aGlobal);
71 static void NotifyDevToolsClosed(GlobalObject& aGlobal);
73 static void NondeterministicGetWeakMapKeys(
74 GlobalObject& aGlobal, JS::Handle<JS::Value> aMap,
75 JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv);
77 static void NondeterministicGetWeakSetKeys(
78 GlobalObject& aGlobal, JS::Handle<JS::Value> aSet,
79 JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv);
81 static void Base64URLEncode(GlobalObject& aGlobal,
82 const ArrayBufferViewOrArrayBuffer& aSource,
83 const Base64URLEncodeOptions& aOptions,
84 nsACString& aResult, ErrorResult& aRv);
86 static void Base64URLDecode(GlobalObject& aGlobal, const nsACString& aString,
87 const Base64URLDecodeOptions& aOptions,
88 JS::MutableHandle<JSObject*> aRetval,
89 ErrorResult& aRv);
91 static void ReleaseAssert(GlobalObject& aGlobal, bool aCondition,
92 const nsAString& aMessage);
94 static void AddProfilerMarker(GlobalObject& aGlobal, const nsACString& aName,
95 const ProfilerMarkerOptionsOrDouble& aOptions,
96 const Optional<nsACString>& text);
98 static void GetXPCOMErrorName(GlobalObject& aGlobal, uint32_t aErrorCode,
99 nsACString& aRetval);
101 static void OriginAttributesToSuffix(
102 GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs,
103 nsCString& aSuffix);
105 static bool OriginAttributesMatchPattern(
106 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs,
107 const dom::OriginAttributesPatternDictionary& aPattern);
109 static void CreateOriginAttributesFromOrigin(
110 dom::GlobalObject& aGlobal, const nsAString& aOrigin,
111 dom::OriginAttributesDictionary& aAttrs, ErrorResult& aRv);
113 static void CreateOriginAttributesFromOriginSuffix(
114 dom::GlobalObject& aGlobal, const nsAString& aSuffix,
115 dom::OriginAttributesDictionary& aAttrs, ErrorResult& aRv);
117 static void FillNonDefaultOriginAttributes(
118 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs,
119 dom::OriginAttributesDictionary& aNewAttrs);
121 static bool IsOriginAttributesEqual(
122 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aA,
123 const dom::OriginAttributesDictionary& aB);
125 static bool IsOriginAttributesEqual(
126 const dom::OriginAttributesDictionary& aA,
127 const dom::OriginAttributesDictionary& aB);
129 static bool IsOriginAttributesEqualIgnoringFPD(
130 const dom::OriginAttributesDictionary& aA,
131 const dom::OriginAttributesDictionary& aB) {
132 return aA.mInIsolatedMozBrowser == aB.mInIsolatedMozBrowser &&
133 aA.mUserContextId == aB.mUserContextId &&
134 aA.mPrivateBrowsingId == aB.mPrivateBrowsingId;
137 static void GetBaseDomainFromPartitionKey(dom::GlobalObject& aGlobal,
138 const nsAString& aPartitionKey,
139 nsAString& aBaseDomain,
140 ErrorResult& aRv);
142 static void GetPartitionKeyFromURL(dom::GlobalObject& aGlobal,
143 const nsAString& aURL,
144 nsAString& aPartitionKey,
145 ErrorResult& aRv);
147 // Implemented in js/xpconnect/loader/ChromeScriptLoader.cpp
148 static already_AddRefed<Promise> CompileScript(
149 GlobalObject& aGlobal, const nsAString& aUrl,
150 const dom::CompileScriptOptionsDictionary& aOptions, ErrorResult& aRv);
152 static MozQueryInterface* GenerateQI(const GlobalObject& global,
153 const Sequence<JS::Value>& interfaces);
155 static void WaiveXrays(GlobalObject& aGlobal, JS::Handle<JS::Value> aVal,
156 JS::MutableHandle<JS::Value> aRetval,
157 ErrorResult& aRv);
159 static void UnwaiveXrays(GlobalObject& aGlobal, JS::Handle<JS::Value> aVal,
160 JS::MutableHandle<JS::Value> aRetval,
161 ErrorResult& aRv);
163 static void GetClassName(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj,
164 bool aUnwrap, nsAString& aRetval);
166 static bool IsDOMObject(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj,
167 bool aUnwrap);
169 static void ShallowClone(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj,
170 JS::Handle<JSObject*> aTarget,
171 JS::MutableHandle<JSObject*> aRetval,
172 ErrorResult& aRv);
174 static void IdleDispatch(const GlobalObject& global,
175 IdleRequestCallback& callback,
176 const IdleRequestOptions& options, ErrorResult& aRv);
178 static void GetRecentJSDevError(GlobalObject& aGlobal,
179 JS::MutableHandle<JS::Value> aRetval,
180 ErrorResult& aRv);
182 static void ClearRecentJSDevError(GlobalObject& aGlobal);
184 static void ClearStyleSheetCacheByPrincipal(GlobalObject&,
185 nsIPrincipal* aForPrincipal);
187 static void ClearStyleSheetCacheByBaseDomain(GlobalObject& aGlobal,
188 const nsACString& aBaseDomain);
190 static void ClearStyleSheetCache(GlobalObject& aGlobal);
192 static already_AddRefed<Promise> RequestPerformanceMetrics(
193 GlobalObject& aGlobal, ErrorResult& aRv);
195 static void SetPerfStatsCollectionMask(GlobalObject& aGlobal, uint64_t aMask);
197 static already_AddRefed<Promise> CollectPerfStats(GlobalObject& aGlobal,
198 ErrorResult& aRv);
200 static already_AddRefed<Promise> RequestProcInfo(GlobalObject& aGlobal,
201 ErrorResult& aRv);
203 static bool VsyncEnabled(GlobalObject& aGlobal);
205 static void Import(const GlobalObject& aGlobal,
206 const nsACString& aResourceURI,
207 const Optional<JS::Handle<JSObject*>>& aTargetObj,
208 JS::MutableHandle<JSObject*> aRetval, ErrorResult& aRv);
210 static void ImportESModule(const GlobalObject& aGlobal,
211 const nsAString& aResourceURI,
212 const ImportESModuleOptionsDictionary& aOptions,
213 JS::MutableHandle<JSObject*> aRetval,
214 ErrorResult& aRv);
216 static void DefineLazyGetter(const GlobalObject& aGlobal,
217 JS::Handle<JSObject*> aTarget,
218 JS::Handle<JS::Value> aName,
219 JS::Handle<JSObject*> aLambda, ErrorResult& aRv);
221 static void DefineModuleGetter(const GlobalObject& global,
222 JS::Handle<JSObject*> target,
223 const nsAString& id,
224 const nsAString& resourceURI,
225 ErrorResult& aRv);
227 static void DefineESModuleGetters(const GlobalObject& global,
228 JS::Handle<JSObject*> target,
229 JS::Handle<JSObject*> modules,
230 ErrorResult& aRv);
232 static void GetCallerLocation(const GlobalObject& global,
233 nsIPrincipal* principal,
234 JS::MutableHandle<JSObject*> aRetval);
236 static void CreateError(const GlobalObject& global, const nsAString& message,
237 JS::Handle<JSObject*> stack,
238 JS::MutableHandle<JSObject*> aRetVal,
239 ErrorResult& aRv);
241 static already_AddRefed<Promise> RequestIOActivity(GlobalObject& aGlobal,
242 ErrorResult& aRv);
244 static bool HasReportingHeaderForOrigin(GlobalObject& global,
245 const nsAString& aOrigin,
246 ErrorResult& aRv);
248 static PopupBlockerState GetPopupControlState(GlobalObject& aGlobal);
250 static double LastExternalProtocolIframeAllowed(GlobalObject& aGlobal);
252 static void ResetLastExternalProtocolIframeAllowed(GlobalObject& aGlobal);
254 static void EndWheelTransaction(GlobalObject& aGlobal);
256 static void RegisterWindowActor(const GlobalObject& aGlobal,
257 const nsACString& aName,
258 const WindowActorOptions& aOptions,
259 ErrorResult& aRv);
261 static void UnregisterWindowActor(const GlobalObject& aGlobal,
262 const nsACString& aName);
264 static void RegisterProcessActor(const GlobalObject& aGlobal,
265 const nsACString& aName,
266 const ProcessActorOptions& aOptions,
267 ErrorResult& aRv);
269 static void UnregisterProcessActor(const GlobalObject& aGlobal,
270 const nsACString& aName);
272 static bool IsClassifierBlockingErrorCode(GlobalObject& aGlobal,
273 uint32_t aError);
275 static void PrivateNoteIntentionalCrash(const GlobalObject& aGlobal,
276 ErrorResult& aError);
278 static nsIDOMProcessChild* GetDomProcessChild(const GlobalObject&);
280 static void GetAllDOMProcesses(
281 GlobalObject& aGlobal, nsTArray<RefPtr<nsIDOMProcessParent>>& aParents,
282 ErrorResult& aRv);
284 static void ConsumeInteractionData(
285 GlobalObject& aGlobal, Record<nsString, InteractionData>& aInteractions,
286 ErrorResult& aRv);
288 static already_AddRefed<Promise> CollectScrollingData(GlobalObject& aGlobal,
289 ErrorResult& aRv);
291 static void GetFormAutofillConfidences(
292 GlobalObject& aGlobal, const Sequence<OwningNonNull<Element>>& aElements,
293 nsTArray<FormAutofillConfidences>& aResults, ErrorResult& aRv);
295 static bool IsDarkBackground(GlobalObject&, Element&);
297 static double DateNow(GlobalObject&);
299 static void EnsureJSOracleStarted(GlobalObject&);
301 static unsigned AliveUtilityProcesses(const GlobalObject&);
303 static void GetAllPossibleUtilityActorNames(GlobalObject& aGlobal,
304 nsTArray<nsCString>& aNames);
306 private:
307 // Number of DevTools session debugging the current process
308 static std::atomic<uint32_t> sDevToolsOpenedCount;
311 } // namespace dom
312 } // namespace mozilla
314 #endif // mozilla_dom_ChromeUtils__