tor-browser

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

RealmIterators.h (2893B)


      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 /*
      8 * Various interfaces to iterate over the Realms given various context such as
      9 * principals, compartments and GC zones.
     10 */
     11 
     12 #ifndef js_RealmIterators_h
     13 #define js_RealmIterators_h
     14 
     15 #include "js/GCAPI.h"
     16 #include "js/TypeDecls.h"
     17 
     18 struct JSPrincipals;
     19 
     20 namespace JS {
     21 
     22 class JS_PUBLIC_API AutoRequireNoGC;
     23 
     24 using IterateRealmCallback = void (*)(JSContext* cx, void* data, Realm* realm,
     25                                      const AutoRequireNoGC& nogc);
     26 
     27 /**
     28 * This function calls |realmCallback| on every realm. Beware that there is no
     29 * guarantee that the realm will survive after the callback returns. Also,
     30 * barriers are disabled via the TraceSession.
     31 */
     32 extern JS_PUBLIC_API void IterateRealms(JSContext* cx, void* data,
     33                                        IterateRealmCallback realmCallback);
     34 
     35 /**
     36 * Like IterateRealms, but only call the callback for realms using |principals|.
     37 */
     38 extern JS_PUBLIC_API void IterateRealmsWithPrincipals(
     39    JSContext* cx, JSPrincipals* principals, void* data,
     40    IterateRealmCallback realmCallback);
     41 
     42 /**
     43 * Like IterateRealms, but only iterates realms in |compartment|.
     44 */
     45 extern JS_PUBLIC_API void IterateRealmsInCompartment(
     46    JSContext* cx, JS::Compartment* compartment, void* data,
     47    IterateRealmCallback realmCallback);
     48 
     49 /**
     50 * An enum that JSIterateCompartmentCallback can return to indicate
     51 * whether to keep iterating.
     52 */
     53 enum class CompartmentIterResult { KeepGoing, Stop };
     54 
     55 }  // namespace JS
     56 
     57 using JSIterateCompartmentCallback =
     58    JS::CompartmentIterResult (*)(JSContext*, void*, JS::Compartment*);
     59 
     60 /**
     61 * This function calls |compartmentCallback| on every compartment until either
     62 * all compartments have been iterated or CompartmentIterResult::Stop is
     63 * returned. Beware that there is no guarantee that the compartment will survive
     64 * after the callback returns. Also, barriers are disabled via the TraceSession.
     65 */
     66 extern JS_PUBLIC_API void JS_IterateCompartments(
     67    JSContext* cx, void* data,
     68    JSIterateCompartmentCallback compartmentCallback);
     69 
     70 /**
     71 * This function calls |compartmentCallback| on every compartment in the given
     72 * zone until either all compartments have been iterated or
     73 * CompartmentIterResult::Stop is returned. Beware that there is no guarantee
     74 * that the compartment will survive after the callback returns. Also, barriers
     75 * are disabled via the TraceSession.
     76 */
     77 extern JS_PUBLIC_API void JS_IterateCompartmentsInZone(
     78    JSContext* cx, JS::Zone* zone, void* data,
     79    JSIterateCompartmentCallback compartmentCallback);
     80 
     81 #endif /* js_RealmIterators_h */