зеркало из https://github.com/mozilla/gecko-dev.git
82 строки
2.8 KiB
C++
82 строки
2.8 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* vim: set ts=8 sts=2 et sw=2 tw=80:
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/*
|
|
* Various interfaces to iterate over the Realms given various context such as
|
|
* principals, compartments and GC zones.
|
|
*/
|
|
|
|
#ifndef js_RealmIterators_h
|
|
#define js_RealmIterators_h
|
|
|
|
#include "js/GCAPI.h"
|
|
#include "js/TypeDecls.h"
|
|
|
|
struct JSPrincipals;
|
|
|
|
namespace JS {
|
|
|
|
class JS_PUBLIC_API AutoRequireNoGC;
|
|
|
|
using IterateRealmCallback = void (*)(JSContext* cx, void* data, Realm* realm,
|
|
const AutoRequireNoGC& nogc);
|
|
|
|
/**
|
|
* This function calls |realmCallback| on every realm. Beware that there is no
|
|
* guarantee that the realm will survive after the callback returns. Also,
|
|
* barriers are disabled via the TraceSession.
|
|
*/
|
|
extern JS_PUBLIC_API void IterateRealms(JSContext* cx, void* data,
|
|
IterateRealmCallback realmCallback);
|
|
|
|
/**
|
|
* Like IterateRealms, but only call the callback for realms using |principals|.
|
|
*/
|
|
extern JS_PUBLIC_API void IterateRealmsWithPrincipals(
|
|
JSContext* cx, JSPrincipals* principals, void* data,
|
|
IterateRealmCallback realmCallback);
|
|
|
|
/**
|
|
* Like IterateRealms, but only iterates realms in |compartment|.
|
|
*/
|
|
extern JS_PUBLIC_API void IterateRealmsInCompartment(
|
|
JSContext* cx, JS::Compartment* compartment, void* data,
|
|
IterateRealmCallback realmCallback);
|
|
|
|
/**
|
|
* An enum that JSIterateCompartmentCallback can return to indicate
|
|
* whether to keep iterating.
|
|
*/
|
|
enum class CompartmentIterResult { KeepGoing, Stop };
|
|
|
|
} // namespace JS
|
|
|
|
using JSIterateCompartmentCallback =
|
|
JS::CompartmentIterResult (*)(JSContext*, void*, JS::Compartment*);
|
|
|
|
/**
|
|
* This function calls |compartmentCallback| on every compartment until either
|
|
* all compartments have been iterated or CompartmentIterResult::Stop is
|
|
* returned. Beware that there is no guarantee that the compartment will survive
|
|
* after the callback returns. Also, barriers are disabled via the TraceSession.
|
|
*/
|
|
extern JS_PUBLIC_API void JS_IterateCompartments(
|
|
JSContext* cx, void* data,
|
|
JSIterateCompartmentCallback compartmentCallback);
|
|
|
|
/**
|
|
* This function calls |compartmentCallback| on every compartment in the given
|
|
* zone until either all compartments have been iterated or
|
|
* CompartmentIterResult::Stop is returned. Beware that there is no guarantee
|
|
* that the compartment will survive after the callback returns. Also, barriers
|
|
* are disabled via the TraceSession.
|
|
*/
|
|
extern JS_PUBLIC_API void JS_IterateCompartmentsInZone(
|
|
JSContext* cx, JS::Zone* zone, void* data,
|
|
JSIterateCompartmentCallback compartmentCallback);
|
|
|
|
#endif /* js_RealmIterators_h */
|