tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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__