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"
25 } // namespace devtools
29 class ArrayBufferViewOrArrayBuffer
;
30 class BrowsingContext
;
32 class IdleRequestCallback
;
33 struct IdleRequestOptions
;
34 struct MediaMetadataInit
;
35 class MozQueryInterface
;
36 class PrecompiledScript
;
38 struct ProcessActorOptions
;
39 struct WindowActorOptions
;
43 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp
44 static void SaveHeapSnapshotShared(GlobalObject
& global
,
45 const HeapSnapshotBoundaries
& boundaries
,
46 nsAString
& filePath
, nsAString
& snapshotId
,
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
,
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
,
101 static void OriginAttributesToSuffix(
102 GlobalObject
& aGlobal
, const dom::OriginAttributesDictionary
& aAttrs
,
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
,
142 static void GetPartitionKeyFromURL(dom::GlobalObject
& aGlobal
,
143 const nsAString
& aURL
,
144 nsAString
& aPartitionKey
,
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
,
159 static void UnwaiveXrays(GlobalObject
& aGlobal
, JS::Handle
<JS::Value
> aVal
,
160 JS::MutableHandle
<JS::Value
> aRetval
,
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
,
169 static void ShallowClone(GlobalObject
& aGlobal
, JS::Handle
<JSObject
*> aObj
,
170 JS::Handle
<JSObject
*> aTarget
,
171 JS::MutableHandle
<JSObject
*> aRetval
,
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
,
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
,
200 static already_AddRefed
<Promise
> RequestProcInfo(GlobalObject
& aGlobal
,
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
,
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
,
224 const nsAString
& resourceURI
,
227 static void DefineESModuleGetters(const GlobalObject
& global
,
228 JS::Handle
<JSObject
*> target
,
229 JS::Handle
<JSObject
*> modules
,
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
,
241 static already_AddRefed
<Promise
> RequestIOActivity(GlobalObject
& aGlobal
,
244 static bool HasReportingHeaderForOrigin(GlobalObject
& global
,
245 const nsAString
& aOrigin
,
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
,
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
,
269 static void UnregisterProcessActor(const GlobalObject
& aGlobal
,
270 const nsACString
& aName
);
272 static bool IsClassifierBlockingErrorCode(GlobalObject
& aGlobal
,
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
,
284 static void ConsumeInteractionData(
285 GlobalObject
& aGlobal
, Record
<nsString
, InteractionData
>& aInteractions
,
288 static already_AddRefed
<Promise
> CollectScrollingData(GlobalObject
& aGlobal
,
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
);
307 // Number of DevTools session debugging the current process
308 static std::atomic
<uint32_t> sDevToolsOpenedCount
;
312 } // namespace mozilla
314 #endif // mozilla_dom_ChromeUtils__