ChromeUtils.h (16306B)
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_ChromeUtils__ 8 #define mozilla_dom_ChromeUtils__ 9 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" 18 19 class nsIRFPTargetSetIDL; 20 21 namespace mozilla { 22 23 class ErrorResult; 24 25 namespace devtools { 26 class HeapSnapshot; 27 } // namespace devtools 28 29 namespace dom { 30 31 class ArrayBufferViewOrArrayBuffer; 32 class BrowsingContext; 33 class Element; 34 class IdleRequestCallback; 35 struct IdleRequestOptions; 36 struct MediaMetadataInit; 37 class MozQueryInterface; 38 class PrecompiledScript; 39 class Promise; 40 struct ProcessActorOptions; 41 struct WindowActorOptions; 42 class WindowProxyHolder; 43 44 class ChromeUtils { 45 private: 46 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp 47 static void SaveHeapSnapshotShared(GlobalObject& global, 48 const HeapSnapshotBoundaries& boundaries, 49 nsAString& filePath, nsAString& snapshotId, 50 ErrorResult& rv); 51 52 public: 53 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp 54 static uint64_t GetObjectNodeId(GlobalObject& global, 55 JS::Handle<JSObject*> aVal); 56 57 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp 58 static void SaveHeapSnapshot(GlobalObject& global, 59 const HeapSnapshotBoundaries& boundaries, 60 nsAString& filePath, ErrorResult& rv); 61 62 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp 63 static void SaveHeapSnapshotGetId(GlobalObject& global, 64 const HeapSnapshotBoundaries& boundaries, 65 nsAString& snapshotId, ErrorResult& rv); 66 67 // Implemented in devtools/shared/heapsnapshot/HeapSnapshot.cpp 68 static already_AddRefed<devtools::HeapSnapshot> ReadHeapSnapshot( 69 GlobalObject& global, const nsAString& filePath, ErrorResult& rv); 70 71 static bool IsDevToolsOpened(); 72 static bool IsDevToolsOpened(GlobalObject& aGlobal); 73 static void NotifyDevToolsOpened(GlobalObject& aGlobal); 74 static void NotifyDevToolsClosed(GlobalObject& aGlobal); 75 76 static void NondeterministicGetWeakMapKeys( 77 GlobalObject& aGlobal, JS::Handle<JS::Value> aMap, 78 JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv); 79 80 static void NondeterministicGetWeakSetKeys( 81 GlobalObject& aGlobal, JS::Handle<JS::Value> aSet, 82 JS::MutableHandle<JS::Value> aRetval, ErrorResult& aRv); 83 84 static void Base64URLEncode(GlobalObject& aGlobal, 85 const ArrayBufferViewOrArrayBuffer& aSource, 86 const Base64URLEncodeOptions& aOptions, 87 nsACString& aResult, ErrorResult& aRv); 88 89 static void Base64URLDecode(GlobalObject& aGlobal, const nsACString& aString, 90 const Base64URLDecodeOptions& aOptions, 91 JS::MutableHandle<JSObject*> aRetval, 92 ErrorResult& aRv); 93 94 static void ReleaseAssert(GlobalObject& aGlobal, bool aCondition, 95 const nsAString& aMessage); 96 97 static void AddProfilerMarker(GlobalObject& aGlobal, const nsACString& aName, 98 const ProfilerMarkerOptionsOrDouble& aOptions, 99 const Optional<nsACString>& text); 100 101 static void GetXPCOMErrorName(GlobalObject& aGlobal, uint32_t aErrorCode, 102 nsACString& aRetval); 103 104 static void OriginAttributesToSuffix( 105 GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs, 106 nsCString& aSuffix); 107 108 static bool OriginAttributesMatchPattern( 109 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs, 110 const dom::OriginAttributesPatternDictionary& aPattern); 111 112 static void CreateOriginAttributesFromOrigin( 113 dom::GlobalObject& aGlobal, const nsAString& aOrigin, 114 dom::OriginAttributesDictionary& aAttrs, ErrorResult& aRv); 115 116 static void CreateOriginAttributesFromOriginSuffix( 117 dom::GlobalObject& aGlobal, const nsAString& aSuffix, 118 dom::OriginAttributesDictionary& aAttrs, ErrorResult& aRv); 119 120 static void FillNonDefaultOriginAttributes( 121 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aAttrs, 122 dom::OriginAttributesDictionary& aNewAttrs); 123 124 static bool IsOriginAttributesEqual( 125 dom::GlobalObject& aGlobal, const dom::OriginAttributesDictionary& aA, 126 const dom::OriginAttributesDictionary& aB); 127 128 static bool IsOriginAttributesEqual( 129 const dom::OriginAttributesDictionary& aA, 130 const dom::OriginAttributesDictionary& aB); 131 132 static bool IsOriginAttributesEqualIgnoringFPD( 133 const dom::OriginAttributesDictionary& aA, 134 const dom::OriginAttributesDictionary& aB) { 135 return aA.mUserContextId == aB.mUserContextId && 136 aA.mPrivateBrowsingId == aB.mPrivateBrowsingId; 137 } 138 139 static void GetBaseDomainFromPartitionKey(dom::GlobalObject& aGlobal, 140 const nsAString& aPartitionKey, 141 nsAString& aBaseDomain, 142 ErrorResult& aRv); 143 144 static void GetPartitionKeyFromURL(dom::GlobalObject& aGlobal, 145 const nsAString& aTopLevelUrl, 146 const nsAString& aSubresourceUrl, 147 const Optional<bool>& aForeignContext, 148 nsAString& aPartitionKey, 149 ErrorResult& aRv); 150 151 // Implemented in js/xpconnect/loader/ChromeScriptLoader.cpp 152 static already_AddRefed<Promise> CompileScript( 153 GlobalObject& aGlobal, const nsAString& aUrl, 154 const dom::CompileScriptOptionsDictionary& aOptions, ErrorResult& aRv); 155 156 static UniquePtr<MozQueryInterface> GenerateQI( 157 const GlobalObject& global, const Sequence<JS::Value>& interfaces); 158 159 static void WaiveXrays(GlobalObject& aGlobal, JS::Handle<JS::Value> aVal, 160 JS::MutableHandle<JS::Value> aRetval, 161 ErrorResult& aRv); 162 163 static void UnwaiveXrays(GlobalObject& aGlobal, JS::Handle<JS::Value> aVal, 164 JS::MutableHandle<JS::Value> aRetval, 165 ErrorResult& aRv); 166 167 static void GetClassName(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj, 168 bool aUnwrap, nsAString& aRetval); 169 170 static bool IsDOMObject(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj, 171 bool aUnwrap); 172 173 static bool IsISOStyleDate(GlobalObject& aGlobal, const nsACString& aStr); 174 175 static void ShallowClone(GlobalObject& aGlobal, JS::Handle<JSObject*> aObj, 176 JS::Handle<JSObject*> aTarget, 177 JS::MutableHandle<JSObject*> aRetval, 178 ErrorResult& aRv); 179 180 static void IdleDispatch(const GlobalObject& global, 181 IdleRequestCallback& callback, 182 const IdleRequestOptions& options, ErrorResult& aRv); 183 184 static void GetRecentJSDevError(GlobalObject& aGlobal, 185 JS::MutableHandle<JS::Value> aRetval, 186 ErrorResult& aRv); 187 188 static void ClearRecentJSDevError(GlobalObject& aGlobal); 189 190 static void ClearMessagingLayerSecurityStateByPrincipal( 191 GlobalObject&, nsIPrincipal* aPrincipal, ErrorResult& aRv); 192 193 static void ClearMessagingLayerSecurityStateBySite( 194 GlobalObject& aGlobal, const nsACString& aSchemelessSite, 195 const dom::OriginAttributesPatternDictionary& aPattern, ErrorResult& aRv); 196 197 static void ClearMessagingLayerSecurityState(GlobalObject& aGlobal, 198 ErrorResult& aRv); 199 200 static void ClearResourceCache(GlobalObject& aGlobal, 201 const dom::ClearResourceCacheOptions& aOptions, 202 ErrorResult& aRv); 203 204 static void InvalidateResourceCache(GlobalObject& aGlobal, ErrorResult& aRv); 205 206 static void ClearBfcacheByPrincipal(GlobalObject& aGlobal, 207 nsIPrincipal* aPrincipal, 208 ErrorResult& aRv); 209 210 static void EnableAllPerfStatsFeatures(GlobalObject& aGlobal); 211 212 static void SetPerfStatsFeatures(GlobalObject& aGlobal, 213 const Sequence<nsString>& aMetrics); 214 215 static already_AddRefed<Promise> CollectPerfStats(GlobalObject& aGlobal, 216 ErrorResult& aRv); 217 218 static already_AddRefed<Promise> RequestProcInfo(GlobalObject& aGlobal, 219 ErrorResult& aRv); 220 221 static uint64_t GetCurrentProcessMemoryUsage(GlobalObject& aGlobal, 222 ErrorResult& aRv); 223 static uint64_t GetCpuTimeSinceProcessStart(GlobalObject& aGlobal, 224 ErrorResult& aRv); 225 226 static bool VsyncEnabled(GlobalObject& aGlobal); 227 228 static void Import(const GlobalObject& aGlobal, 229 const nsACString& aResourceURI, 230 const Optional<JS::Handle<JSObject*>>& aTargetObj, 231 JS::MutableHandle<JSObject*> aRetval, ErrorResult& aRv); 232 233 static void ImportESModule(const GlobalObject& aGlobal, 234 const nsAString& aResourceURI, 235 const ImportESModuleOptionsDictionary& aOptions, 236 JS::MutableHandle<JSObject*> aRetval, 237 ErrorResult& aRv); 238 239 static void DefineLazyGetter(const GlobalObject& aGlobal, 240 JS::Handle<JSObject*> aTarget, 241 JS::Handle<JS::Value> aName, 242 JS::Handle<JSObject*> aLambda, ErrorResult& aRv); 243 244 static void DefineModuleGetter(const GlobalObject& global, 245 JS::Handle<JSObject*> target, 246 const nsAString& id, 247 const nsAString& resourceURI, 248 ErrorResult& aRv); 249 250 static void DefineESModuleGetters( 251 const GlobalObject& global, JS::Handle<JSObject*> target, 252 JS::Handle<JSObject*> modules, 253 const ImportESModuleOptionsDictionary& aOptions, ErrorResult& aRv); 254 255 #ifdef XP_UNIX 256 static void GetLibcConstants(const GlobalObject&, LibcConstants& aConsts); 257 #endif 258 259 static void GetCallerLocation(const GlobalObject& global, 260 nsIPrincipal* principal, 261 JS::MutableHandle<JSObject*> aRetval); 262 263 static void CreateError(const GlobalObject& global, const nsAString& message, 264 JS::Handle<JSObject*> stack, 265 JS::MutableHandle<JSObject*> aRetVal, 266 ErrorResult& aRv); 267 268 static bool HasReportingHeaderForOrigin(GlobalObject& global, 269 const nsAString& aOrigin, 270 ErrorResult& aRv); 271 272 static PopupBlockerState GetPopupControlState(GlobalObject& aGlobal); 273 274 static double LastExternalProtocolIframeAllowed(GlobalObject& aGlobal); 275 276 static void ResetLastExternalProtocolIframeAllowed(GlobalObject& aGlobal); 277 278 static already_AddRefed<Promise> EndWheelTransaction( 279 GlobalObject& aGlobal, WindowProxyHolder& aWindow, ErrorResult& aRv); 280 281 static void RegisterWindowActor(const GlobalObject& aGlobal, 282 const nsACString& aName, 283 const WindowActorOptions& aOptions, 284 ErrorResult& aRv); 285 286 static void UnregisterWindowActor(const GlobalObject& aGlobal, 287 const nsACString& aName, ErrorResult& aRv); 288 289 static void RegisterProcessActor(const GlobalObject& aGlobal, 290 const nsACString& aName, 291 const ProcessActorOptions& aOptions, 292 ErrorResult& aRv); 293 294 static void UnregisterProcessActor(const GlobalObject& aGlobal, 295 const nsACString& aName, ErrorResult& aRv); 296 297 static already_AddRefed<Promise> EnsureHeadlessContentProcess( 298 const GlobalObject& aGlobal, const nsACString& aRemoteType, 299 ErrorResult& aRv); 300 301 static bool IsClassifierBlockingErrorCode(GlobalObject& aGlobal, 302 uint32_t aError); 303 304 static void PrivateNoteIntentionalCrash(const GlobalObject& aGlobal, 305 ErrorResult& aError); 306 307 static nsIDOMProcessChild* GetDomProcessChild(const GlobalObject&); 308 309 static void GetAllDOMProcesses( 310 GlobalObject& aGlobal, nsTArray<RefPtr<nsIDOMProcessParent>>& aParents, 311 ErrorResult& aRv); 312 313 static void ConsumeInteractionData( 314 GlobalObject& aGlobal, Record<nsString, InteractionData>& aInteractions, 315 ErrorResult& aRv); 316 317 static already_AddRefed<Promise> CollectScrollingData(GlobalObject& aGlobal, 318 ErrorResult& aRv); 319 320 static void GetFormAutofillConfidences( 321 GlobalObject& aGlobal, const Sequence<OwningNonNull<Element>>& aElements, 322 nsTArray<FormAutofillConfidences>& aResults, ErrorResult& aRv); 323 324 static bool IsDarkBackground(GlobalObject&, Element&); 325 326 static double DateNow(GlobalObject&); 327 328 static double Now(GlobalObject&); 329 330 static void EnsureJSOracleStarted(GlobalObject&); 331 332 static unsigned AliveUtilityProcesses(const GlobalObject&); 333 334 static void GetAllPossibleUtilityActorNames(GlobalObject& aGlobal, 335 nsTArray<nsCString>& aNames); 336 337 static bool ShouldResistFingerprinting( 338 GlobalObject& aGlobal, JSRFPTarget aTarget, 339 nsIRFPTargetSetIDL* aOverriddenFingerprintingSettings, 340 const Optional<bool>& aIsPBM); 341 342 static void CallFunctionAndLogException(GlobalObject& aGlobal, 343 JS::Handle<JS::Value> aTargetGlobal, 344 JS::Handle<JS::Value> aFunction, 345 JS::MutableHandle<JS::Value> aRetval, 346 ErrorResult& aRv); 347 348 static Nullable<bool> GetGlobalWindowCommandEnabled(GlobalObject&, 349 const nsACString& aName); 350 static void GetLastOOMStackTrace(GlobalObject& aGlobal, nsAString& aRetval); 351 352 static void EncodeURIForSrcset(GlobalObject&, const nsACString& aIn, 353 nsACString& aOut); 354 355 #ifdef MOZ_WMF_CDM 356 static already_AddRefed<Promise> GetWMFContentDecryptionModuleInformation( 357 GlobalObject& aGlobal, ErrorResult& aRv); 358 #endif 359 360 static already_AddRefed<Promise> GetGMPContentDecryptionModuleInformation( 361 GlobalObject& aGlobal, ErrorResult& aRv); 362 363 static void AndroidMoveTaskToBack(GlobalObject& aGlobal); 364 365 static already_AddRefed<nsIContentSecurityPolicy> CreateCSPFromHeader( 366 GlobalObject& aGlobal, const nsAString& aHeader, nsIURI* aSelfURI, 367 nsIPrincipal* aLoadingPrincipal, ErrorResult& aRv); 368 369 static bool IsJSIdentifier(GlobalObject& aGlobal, const nsAString& aStr); 370 371 static already_AddRefed<Promise> FetchDecodedImage(GlobalObject& aGlobal, 372 nsIURI* aURI, 373 nsIChannel* aChannel, 374 ErrorResult& aRv); 375 }; 376 377 } // namespace dom 378 } // namespace mozilla 379 380 #endif // mozilla_dom_ChromeUtils__