mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1081255 - Rewrite comments in jsproxy.h; reclassify the methods a bit. No change in behavior. r=efaust, r=bz, r=jwalden.
--HG-- extra : rebase_source : b3440548322d65b2bd01862fb863e6197eb263c6
This commit is contained in:
parent
0e80063f2b
commit
2999d4406e
@ -599,20 +599,7 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const char *className(JSContext *cx,
|
// Standard internal methods
|
||||||
JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
|
|
||||||
virtual void finalize(JSFreeOp *fop, JSObject *proxy) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
// Fundamental traps
|
|
||||||
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible)
|
|
||||||
const MOZ_OVERRIDE;
|
|
||||||
virtual bool preventExtensions(JSContext *cx,
|
|
||||||
JS::Handle<JSObject*> proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext* cx,
|
|
||||||
JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc)
|
|
||||||
const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext* cx,
|
virtual bool getOwnPropertyDescriptor(JSContext* cx,
|
||||||
JS::Handle<JSObject*> proxy,
|
JS::Handle<JSObject*> proxy,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
@ -631,23 +618,12 @@ public:
|
|||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible)
|
||||||
virtual bool watch(JSContext *cx, JS::Handle<JSObject*> proxy,
|
const MOZ_OVERRIDE;
|
||||||
JS::Handle<jsid> id, JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
|
virtual bool preventExtensions(JSContext *cx,
|
||||||
virtual bool unwatch(JSContext *cx, JS::Handle<JSObject*> proxy,
|
JS::Handle<JSObject*> proxy) const MOZ_OVERRIDE;
|
||||||
JS::Handle<jsid> id) const MOZ_OVERRIDE;
|
|
||||||
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
virtual bool isConstructor(JSObject *obj) const MOZ_OVERRIDE {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Derived traps
|
|
||||||
virtual bool has(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool has(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::Handle<JSObject*> receiver,
|
JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
@ -657,11 +633,36 @@ public:
|
|||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
bool strict,
|
bool strict,
|
||||||
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
// SpiderMonkey extensions
|
||||||
|
virtual bool getPropertyDescriptor(JSContext* cx,
|
||||||
|
JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc)
|
||||||
|
const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
unsigned flags,
|
unsigned flags,
|
||||||
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
|
virtual const char *className(JSContext *cx,
|
||||||
|
JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual void finalize(JSFreeOp *fop, JSObject *proxy) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
virtual bool isConstructor(JSObject *obj) const MOZ_OVERRIDE {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool watch(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id, JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
|
||||||
|
virtual bool unwatch(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
static void ObjectMoved(JSObject *obj, const JSObject *old);
|
static void ObjectMoved(JSObject *obj, const JSObject *old);
|
||||||
|
|
||||||
|
@ -50,23 +50,20 @@ public:
|
|||||||
: js::BaseProxyHandler(aProxyFamily, aHasPrototype)
|
: js::BaseProxyHandler(aProxyFamily, aHasPrototype)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// Implementations of traps that can be implemented in terms of
|
// Implementations of methods that can be implemented in terms of
|
||||||
// fundamental traps.
|
// other lower-level methods.
|
||||||
bool enumerate(JSContext* cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::AutoIdVector& props) const MOZ_OVERRIDE;
|
|
||||||
bool getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
bool getOwnPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy,
|
bool getOwnPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
bool watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
|
||||||
JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
|
|
||||||
bool unwatch(JSContext* cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id) const MOZ_OVERRIDE;
|
|
||||||
virtual bool ownPropertyKeys(JSContext* cx, JS::Handle<JSObject*> proxy,
|
virtual bool ownPropertyKeys(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
bool enumerate(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::AutoIdVector& props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
bool getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
// We override keys() and implement it directly instead of using the
|
// We override keys() and implement it directly instead of using the
|
||||||
// default implementation, which would getOwnPropertyNames and then
|
// default implementation, which would getOwnPropertyNames and then
|
||||||
// filter out the non-enumerable ones. This avoids doing
|
// filter out the non-enumerable ones. This avoids doing
|
||||||
@ -74,6 +71,11 @@ public:
|
|||||||
virtual bool keys(JSContext* cx, JS::Handle<JSObject*> proxy,
|
virtual bool keys(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
bool watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
|
JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
|
||||||
|
bool unwatch(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Hook for subclasses to implement shared ownPropertyKeys()/keys()
|
// Hook for subclasses to implement shared ownPropertyKeys()/keys()
|
||||||
// functionality. The "flags" argument is either JSITER_OWNONLY (for keys())
|
// functionality. The "flags" argument is either JSITER_OWNONLY (for keys())
|
||||||
@ -100,7 +102,6 @@ public:
|
|||||||
: BaseDOMProxyHandler(&family)
|
: BaseDOMProxyHandler(&family)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> proxy) const MOZ_OVERRIDE;
|
|
||||||
bool defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
bool defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE
|
||||||
{
|
{
|
||||||
@ -110,15 +111,16 @@ public:
|
|||||||
virtual bool defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
virtual bool defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc, bool* defined)
|
JS::MutableHandle<JSPropertyDescriptor> desc, bool* defined)
|
||||||
const;
|
const;
|
||||||
|
bool delete_(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id, bool* bp) const MOZ_OVERRIDE;
|
||||||
|
bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible)
|
||||||
|
const MOZ_OVERRIDE;
|
||||||
|
bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> proxy) const MOZ_OVERRIDE;
|
||||||
|
bool has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
|
bool* bp) const MOZ_OVERRIDE;
|
||||||
bool set(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
bool set(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp)
|
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp)
|
||||||
const MOZ_OVERRIDE;
|
const MOZ_OVERRIDE;
|
||||||
bool delete_(JSContext* cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id, bool* bp) const MOZ_OVERRIDE;
|
|
||||||
bool has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
|
||||||
bool* bp) const MOZ_OVERRIDE;
|
|
||||||
bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible)
|
|
||||||
const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If assigning to proxy[id] hits a named setter with OverrideBuiltins or
|
* If assigning to proxy[id] hits a named setter with OverrideBuiltins or
|
||||||
|
@ -63,9 +63,6 @@ class CPOWProxyHandler : public BaseProxyHandler
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
@ -74,18 +71,20 @@ class CPOWProxyHandler : public BaseProxyHandler
|
|||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||||
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||||
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
virtual bool set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
||||||
JS::HandleId id, bool strict, JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
JS::HandleId id, bool strict, JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool hasInstance(JSContext *cx, HandleObject proxy,
|
virtual bool hasInstance(JSContext *cx, HandleObject proxy,
|
||||||
MutableHandleValue v, bool *bp) const MOZ_OVERRIDE;
|
MutableHandleValue v, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool objectClassIs(HandleObject obj, js::ESClassValue classValue,
|
virtual bool objectClassIs(HandleObject obj, js::ESClassValue classValue,
|
||||||
|
@ -31,11 +31,8 @@ class WrapperOwner : public virtual JavaScriptShared
|
|||||||
explicit WrapperOwner(JSRuntime *rt);
|
explicit WrapperOwner(JSRuntime *rt);
|
||||||
bool init();
|
bool init();
|
||||||
|
|
||||||
// Fundamental proxy traps. These are required.
|
// Standard internal methods.
|
||||||
// (The traps should be in the same order like js/src/jsproxy.h)
|
// (The traps should be in the same order like js/src/jsproxy.h)
|
||||||
bool preventExtensions(JSContext *cx, JS::HandleObject proxy);
|
|
||||||
bool getPropertyDescriptor(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc);
|
|
||||||
bool getOwnPropertyDescriptor(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
bool getOwnPropertyDescriptor(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc);
|
JS::MutableHandle<JSPropertyDescriptor> desc);
|
||||||
bool defineProperty(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
bool defineProperty(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
||||||
@ -43,25 +40,26 @@ class WrapperOwner : public virtual JavaScriptShared
|
|||||||
bool ownPropertyKeys(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
bool ownPropertyKeys(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
||||||
bool delete_(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
bool delete_(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
||||||
bool enumerate(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
bool enumerate(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
||||||
|
bool isExtensible(JSContext *cx, JS::HandleObject proxy, bool *extensible);
|
||||||
// Derived proxy traps. Implementing these is useful for perfomance.
|
bool preventExtensions(JSContext *cx, JS::HandleObject proxy);
|
||||||
bool has(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
bool has(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
||||||
bool hasOwn(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
|
||||||
bool get(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
bool get(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
||||||
JS::HandleId id, JS::MutableHandleValue vp);
|
JS::HandleId id, JS::MutableHandleValue vp);
|
||||||
bool set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
bool set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver,
|
||||||
JS::HandleId id, bool strict, JS::MutableHandleValue vp);
|
JS::HandleId id, bool strict, JS::MutableHandleValue vp);
|
||||||
bool keys(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
|
||||||
// We use "iterate" provided by the base class here.
|
|
||||||
|
|
||||||
// SpiderMonkey Extensions.
|
|
||||||
bool isExtensible(JSContext *cx, JS::HandleObject proxy, bool *extensible);
|
|
||||||
bool regexp_toShared(JSContext *cx, JS::HandleObject proxy, js::RegExpGuard *g);
|
|
||||||
bool callOrConstruct(JSContext *cx, JS::HandleObject proxy, const JS::CallArgs &args,
|
bool callOrConstruct(JSContext *cx, JS::HandleObject proxy, const JS::CallArgs &args,
|
||||||
bool construct);
|
bool construct);
|
||||||
|
|
||||||
|
// SpiderMonkey extensions.
|
||||||
|
bool getPropertyDescriptor(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc);
|
||||||
|
bool hasOwn(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp);
|
||||||
|
bool keys(JSContext *cx, JS::HandleObject proxy, JS::AutoIdVector &props);
|
||||||
|
// We use "iterate" provided by the base class here.
|
||||||
bool hasInstance(JSContext *cx, JS::HandleObject proxy, JS::MutableHandleValue v, bool *bp);
|
bool hasInstance(JSContext *cx, JS::HandleObject proxy, JS::MutableHandleValue v, bool *bp);
|
||||||
bool objectClassIs(JSContext *cx, JS::HandleObject obj, js::ESClassValue classValue);
|
bool objectClassIs(JSContext *cx, JS::HandleObject obj, js::ESClassValue classValue);
|
||||||
const char* className(JSContext *cx, JS::HandleObject proxy);
|
const char* className(JSContext *cx, JS::HandleObject proxy);
|
||||||
|
bool regexp_toShared(JSContext *cx, JS::HandleObject proxy, js::RegExpGuard *g);
|
||||||
bool isCallable(JSObject *obj);
|
bool isCallable(JSObject *obj);
|
||||||
bool isConstructor(JSObject *obj);
|
bool isConstructor(JSObject *obj);
|
||||||
|
|
||||||
|
263
js/src/jsproxy.h
263
js/src/jsproxy.h
@ -33,57 +33,120 @@ class RegExpGuard;
|
|||||||
class JS_FRIEND_API(Wrapper);
|
class JS_FRIEND_API(Wrapper);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A proxy is a JSObject that implements generic behavior by providing custom
|
* A proxy is a JSObject with highly customizable behavior. ES6 specifies a
|
||||||
* implementations for each object trap. The implementation for each trap is
|
* single kind of proxy, but the customization mechanisms we use to implement
|
||||||
* provided by a C++ object stored on the proxy, known as its handler.
|
* ES6 Proxy objects are also useful wherever an object with weird behavior is
|
||||||
|
* wanted. Proxies are used to implement:
|
||||||
*
|
*
|
||||||
* A major use case for proxies is to forward each trap to another object,
|
* - the scope objects used by the Debugger's frame.eval() method
|
||||||
* known as its target. The target can be an arbitrary C++ object. Not every
|
* (see js::GetDebugScopeForFunction)
|
||||||
* proxy has the notion of a target, however.
|
|
||||||
*
|
*
|
||||||
* Proxy traps are grouped into fundamental and derived traps. Every proxy has
|
* - the khuey hack, whereby a whole compartment can be blown away
|
||||||
* to at least provide implementations for the fundamental traps, but the
|
* even if other compartments hold references to objects in it
|
||||||
* derived traps can be implemented in terms of the fundamental ones
|
* (see js::NukeCrossCompartmentWrappers)
|
||||||
* BaseProxyHandler provides implementations of the derived traps in terms of
|
|
||||||
* the (pure virtual) fundamental traps.
|
|
||||||
*
|
*
|
||||||
* In addition to the normal traps, there are two models for proxy prototype
|
* - XPConnect security wrappers, which protect chrome from malicious content
|
||||||
* chains. First, proxies may opt to use the standard prototype mechanism used
|
* (js/xpconnect/wrappers)
|
||||||
* throughout the engine. To do so, simply pass a prototype to NewProxyObject()
|
|
||||||
* at creation time. All prototype accesses will then "just work" to treat the
|
|
||||||
* proxy as a "normal" object. Alternatively, if instead the proxy wishes to
|
|
||||||
* implement more complicated prototype semantics (if, for example, it wants to
|
|
||||||
* delegate the prototype lookup to a wrapped object), it may pass Proxy::LazyProto
|
|
||||||
* as the prototype at create time and opt in to the trapped prototype system,
|
|
||||||
* which guarantees that their trap will be called on any and every prototype
|
|
||||||
* chain access of the object.
|
|
||||||
*
|
*
|
||||||
* This system is implemented with two traps: {get,set}PrototypeOf. The default
|
* - DOM objects with special property behavior, like named getters
|
||||||
* implementation of setPrototypeOf throws a TypeError. Since it is not possible
|
* (dom/bindings/Codegen.py generates these proxies from WebIDL)
|
||||||
* to create an object without a sense of prototype chain, handler implementors
|
*
|
||||||
* must provide a getPrototypeOf trap if opting in to the dynamic prototype system.
|
* - semi-transparent use of objects that live in other processes
|
||||||
|
* (CPOWs, implemented in js/ipc)
|
||||||
|
*
|
||||||
|
* ### Proxies and internal methods
|
||||||
|
*
|
||||||
|
* ES6 draft rev 27 (24 August 2014) specifies 14 internal methods. The runtime
|
||||||
|
* semantics of just about everything a script can do to an object is specified
|
||||||
|
* in terms of these internal methods. For example:
|
||||||
|
*
|
||||||
|
* JS code ES6 internal method that gets called
|
||||||
|
* --------------------------- --------------------------------
|
||||||
|
* obj.prop obj.[[Get]](obj, "prop")
|
||||||
|
* "prop" in obj obj.[[HasProperty]]("prop")
|
||||||
|
* new obj() obj.[[Construct]](<empty argument List>)
|
||||||
|
* for (k in obj) {} obj.[[Enumerate]]()
|
||||||
|
*
|
||||||
|
* With regard to the implementation of these internal methods, there are three
|
||||||
|
* very different kinds of object in SpiderMonkey.
|
||||||
|
*
|
||||||
|
* 1. Native objects' internal methods are implemented in js::baseops in
|
||||||
|
* vm/NativeObject.cpp, with duplicate (but functionally identical)
|
||||||
|
* implementations scattered through the ICs and JITs.
|
||||||
|
*
|
||||||
|
* 2. Certain non-native objects have internal methods that are implemented as
|
||||||
|
* magical js::ObjectOps hooks. We're trying to get rid of these.
|
||||||
|
*
|
||||||
|
* 3. All other objects are proxies. A proxy's internal methods are
|
||||||
|
* implemented in C++, as the virtual methods of a C++ object stored on the
|
||||||
|
* proxy, known as its handler.
|
||||||
|
*
|
||||||
|
* This means that just about anything you do to a proxy will end up going
|
||||||
|
* through a C++ virtual method call. Possibly several. There's no reason the
|
||||||
|
* JITs and ICs can't specialize for particular proxies, based on the handler;
|
||||||
|
* but currently we don't do much of this, so the virtual method overhead
|
||||||
|
* typically is actually incurred.
|
||||||
|
*
|
||||||
|
* ### The proxy handler hierarchy
|
||||||
|
*
|
||||||
|
* A major use case for proxies is to forward each internal method call to
|
||||||
|
* another object, known as its target. The target can be an arbitrary JS
|
||||||
|
* object. Not every proxy has the notion of a target, however.
|
||||||
*
|
*
|
||||||
* To minimize code duplication, a set of abstract proxy handler classes is
|
* To minimize code duplication, a set of abstract proxy handler classes is
|
||||||
* provided, from which other handlers may inherit. These abstract classes
|
* provided, from which other handlers may inherit. These abstract classes are
|
||||||
* are organized in the following hierarchy:
|
* organized in the following hierarchy:
|
||||||
*
|
*
|
||||||
* BaseProxyHandler
|
* BaseProxyHandler
|
||||||
* |
|
* |
|
||||||
* DirectProxyHandler
|
* DirectProxyHandler // has a target
|
||||||
* |
|
* |
|
||||||
* Wrapper
|
* Wrapper // can be unwrapped, revealing target
|
||||||
|
* | // (see js::CheckedUnwrap)
|
||||||
|
* |
|
||||||
|
* CrossCompartmentWrapper // target is in another compartment;
|
||||||
|
* // implements membrane between compartments
|
||||||
|
*
|
||||||
|
* Example: Some DOM objects (including all the arraylike DOM objects) are
|
||||||
|
* implemented as proxies. Since these objects don't need to forward operations
|
||||||
|
* to any underlying JS object, DOMJSProxyHandler directly subclasses
|
||||||
|
* BaseProxyHandler.
|
||||||
|
*
|
||||||
|
* Gecko's security wrappers are examples of cross-compartment wrappers.
|
||||||
|
*
|
||||||
|
* ### Proxy prototype chains
|
||||||
|
*
|
||||||
|
* In addition to the normal methods, there are two models for proxy prototype
|
||||||
|
* chains.
|
||||||
|
*
|
||||||
|
* 1. Proxies can use the standard prototype mechanism used throughout the
|
||||||
|
* engine. To do so, simply pass a prototype to NewProxyObject() at
|
||||||
|
* creation time. All prototype accesses will then "just work" to treat the
|
||||||
|
* proxy as a "normal" object.
|
||||||
|
*
|
||||||
|
* 2. A proxy can implement more complicated prototype semantics (if, for
|
||||||
|
* example, it wants to delegate the prototype lookup to a wrapped object)
|
||||||
|
* by passing Proxy::LazyProto as the prototype at create time. This
|
||||||
|
* guarantees that the getPrototypeOf() handler method will be called every
|
||||||
|
* time the object's prototype chain is accessed.
|
||||||
|
*
|
||||||
|
* This system is implemented with two methods: {get,set}PrototypeOf. The
|
||||||
|
* default implementation of setPrototypeOf throws a TypeError. Since it is
|
||||||
|
* not possible to create an object without a sense of prototype chain,
|
||||||
|
* handlers must implement getPrototypeOf if opting in to the dynamic
|
||||||
|
* prototype system.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BaseProxyHandler is the most generic kind of proxy handler. It does not make
|
* BaseProxyHandler is the most generic kind of proxy handler. It does not make
|
||||||
* any assumptions about the target. Consequently, it does not provide any
|
* any assumptions about the target. Consequently, it does not provide any
|
||||||
* default implementation for the fundamental traps. It does, however, implement
|
* default implementation for most methods. As a convenience, a few high-level
|
||||||
* the derived traps in terms of the fundamental ones. This allows consumers of
|
* methods, like get() and set(), are given default implementations that work by
|
||||||
* this class to define any custom behavior they want.
|
* calling the low-level methods, like getOwnPropertyDescriptor().
|
||||||
*
|
*
|
||||||
* Important: If you add a trap here, you should probably also add a Proxy::foo
|
* Important: If you add a method here, you should probably also add a
|
||||||
* entry point with an AutoEnterPolicy. If you don't, you need an explicit
|
* Proxy::foo entry point with an AutoEnterPolicy. If you don't, you need an
|
||||||
* override for the trap in SecurityWrapper. See bug 945826 comment 0.
|
* explicit override for the method in SecurityWrapper. See bug 945826 comment 0.
|
||||||
*/
|
*/
|
||||||
class JS_FRIEND_API(BaseProxyHandler)
|
class JS_FRIEND_API(BaseProxyHandler)
|
||||||
{
|
{
|
||||||
@ -103,7 +166,7 @@ class JS_FRIEND_API(BaseProxyHandler)
|
|||||||
*
|
*
|
||||||
* - When mHasPrototype is true, the engine never calls these methods:
|
* - When mHasPrototype is true, the engine never calls these methods:
|
||||||
* getPropertyDescriptor, has, set, enumerate, iterate. Instead, for
|
* getPropertyDescriptor, has, set, enumerate, iterate. Instead, for
|
||||||
* these operations, it calls the "own" traps like
|
* these operations, it calls the "own" methods like
|
||||||
* getOwnPropertyDescriptor, hasOwn, defineProperty, keys, etc., and
|
* getOwnPropertyDescriptor, hasOwn, defineProperty, keys, etc., and
|
||||||
* consults the prototype chain if needed.
|
* consults the prototype chain if needed.
|
||||||
*
|
*
|
||||||
@ -155,14 +218,14 @@ class JS_FRIEND_API(BaseProxyHandler)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Policy enforcement traps.
|
/* Policy enforcement methods.
|
||||||
*
|
*
|
||||||
* enter() allows the policy to specify whether the caller may perform |act|
|
* enter() allows the policy to specify whether the caller may perform |act|
|
||||||
* on the proxy's |id| property. In the case when |act| is CALL, |id| is
|
* on the proxy's |id| property. In the case when |act| is CALL, |id| is
|
||||||
* generally JSID_VOID.
|
* generally JSID_VOID.
|
||||||
*
|
*
|
||||||
* The |act| parameter to enter() specifies the action being performed.
|
* The |act| parameter to enter() specifies the action being performed.
|
||||||
* If |bp| is false, the trap suggests that the caller throw (though it
|
* If |bp| is false, the method suggests that the caller throw (though it
|
||||||
* may still decide to squelch the error).
|
* may still decide to squelch the error).
|
||||||
*
|
*
|
||||||
* We make these OR-able so that assertEnteredPolicy can pass a union of them.
|
* We make these OR-able so that assertEnteredPolicy can pass a union of them.
|
||||||
@ -183,34 +246,62 @@ class JS_FRIEND_API(BaseProxyHandler)
|
|||||||
virtual bool enter(JSContext *cx, HandleObject wrapper, HandleId id, Action act,
|
virtual bool enter(JSContext *cx, HandleObject wrapper, HandleId id, Action act,
|
||||||
bool *bp) const;
|
bool *bp) const;
|
||||||
|
|
||||||
/* ES5 Harmony fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const = 0;
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy,
|
|
||||||
HandleId id, MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
||||||
virtual bool ownPropertyKeys(JSContext *cx, HandleObject proxy,
|
virtual bool ownPropertyKeys(JSContext *cx, HandleObject proxy,
|
||||||
AutoIdVector &props) const = 0;
|
AutoIdVector &props) const = 0;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const = 0;
|
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const = 0;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const = 0;
|
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const = 0;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const = 0;
|
||||||
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const = 0;
|
||||||
|
|
||||||
/* ES5 Harmony derived proxy traps. */
|
/*
|
||||||
|
* These methods are standard, but the engine does not normally call them.
|
||||||
|
* They're opt-in. See "Proxy prototype chains" above.
|
||||||
|
*
|
||||||
|
* getPrototypeOf() crashes if called. setPrototypeOf() throws a TypeError.
|
||||||
|
*/
|
||||||
|
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const;
|
||||||
|
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These standard internal methods are implemented, as a convenience, so
|
||||||
|
* that ProxyHandler subclasses don't have to provide every single method.
|
||||||
|
*
|
||||||
|
* The base-class implementations work by calling getPropertyDescriptor().
|
||||||
|
* They do not follow any standard. When in doubt, override them.
|
||||||
|
*/
|
||||||
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const;
|
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const;
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const;
|
|
||||||
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||||
HandleId id, MutableHandleValue vp) const;
|
HandleId id, MutableHandleValue vp) const;
|
||||||
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||||
HandleId id, bool strict, MutableHandleValue vp) const;
|
HandleId id, bool strict, MutableHandleValue vp) const;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* [[Call]] and [[Construct]] are standard internal methods but according
|
||||||
|
* to the spec, they are not present on every object.
|
||||||
|
*
|
||||||
|
* SpiderMonkey never calls a proxy's call()/construct() internal method
|
||||||
|
* unless isCallable()/isConstructor() returns true for that proxy.
|
||||||
|
*
|
||||||
|
* BaseProxyHandler::isCallable()/isConstructor() always return false, and
|
||||||
|
* BaseProxyHandler::call()/construct() crash if called. So if you're
|
||||||
|
* creating a kind of that is never callable, you don't have to override
|
||||||
|
* anything, but otherwise you probably want to override all four.
|
||||||
|
*/
|
||||||
|
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
|
||||||
|
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const = 0;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const;
|
||||||
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const;
|
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const;
|
||||||
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
||||||
MutableHandleValue vp) const;
|
MutableHandleValue vp) const;
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const = 0;
|
|
||||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
|
|
||||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
|
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args) const;
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args) const;
|
||||||
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) const;
|
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) const;
|
||||||
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) const;
|
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) const;
|
||||||
@ -221,8 +312,6 @@ class JS_FRIEND_API(BaseProxyHandler)
|
|||||||
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp) const;
|
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp) const;
|
||||||
virtual void finalize(JSFreeOp *fop, JSObject *proxy) const;
|
virtual void finalize(JSFreeOp *fop, JSObject *proxy) const;
|
||||||
virtual void objectMoved(JSObject *proxy, const JSObject *old) const;
|
virtual void objectMoved(JSObject *proxy, const JSObject *old) const;
|
||||||
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const;
|
|
||||||
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp) const;
|
|
||||||
|
|
||||||
// Allow proxies, wrappers in particular, to specify callability at runtime.
|
// Allow proxies, wrappers in particular, to specify callability at runtime.
|
||||||
// Note: These do not take const JSObject *, but they do in spirit.
|
// Note: These do not take const JSObject *, but they do in spirit.
|
||||||
@ -246,13 +335,13 @@ class JS_FRIEND_API(BaseProxyHandler)
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DirectProxyHandler includes a notion of a target object. All traps are
|
* DirectProxyHandler includes a notion of a target object. All methods are
|
||||||
* reimplemented such that they forward their behavior to the target. This
|
* reimplemented such that they forward their behavior to the target. This
|
||||||
* allows consumers of this class to forward to another object as transparently
|
* allows consumers of this class to forward to another object as transparently
|
||||||
* and efficiently as possible.
|
* and efficiently as possible.
|
||||||
*
|
*
|
||||||
* Important: If you add a trap implementation here, you probably also need to
|
* Important: If you add a method implementation here, you probably also need
|
||||||
* add an override in CrossCompartmentWrapper. If you don't, you risk
|
* to add an override in CrossCompartmentWrapper. If you don't, you risk
|
||||||
* compartment mismatches. See bug 945826 comment 0.
|
* compartment mismatches. See bug 945826 comment 0.
|
||||||
*/
|
*/
|
||||||
class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
|
class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
|
||||||
@ -263,10 +352,7 @@ class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
|
|||||||
: BaseProxyHandler(aFamily, aHasPrototype, aHasSecurityPolicy)
|
: BaseProxyHandler(aFamily, aHasPrototype, aHasSecurityPolicy)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/* ES5 Harmony fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
@ -277,33 +363,34 @@ class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
|
|||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject proxy,
|
virtual bool enumerate(JSContext *cx, HandleObject proxy,
|
||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
/* ES5 Harmony derived proxy traps. */
|
|
||||||
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
|
||||||
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
|
||||||
HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool keys(JSContext *cx, HandleObject proxy,
|
|
||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
|
||||||
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
|
||||||
CallArgs args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
|
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
||||||
MutableHandleObject protop) const MOZ_OVERRIDE;
|
MutableHandleObject protop) const MOZ_OVERRIDE;
|
||||||
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||||
|
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver,
|
||||||
|
HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool keys(JSContext *cx, HandleObject proxy,
|
||||||
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
||||||
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
||||||
|
CallArgs args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
|
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
|
||||||
JSContext *cx) const MOZ_OVERRIDE;
|
JSContext *cx) const MOZ_OVERRIDE;
|
||||||
virtual const char *className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
virtual const char *className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
@ -312,8 +399,8 @@ class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
|
|||||||
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy,
|
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy,
|
||||||
RegExpGuard *g) const MOZ_OVERRIDE;
|
RegExpGuard *g) const MOZ_OVERRIDE;
|
||||||
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const;
|
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const;
|
||||||
virtual JSObject *weakmapKeyDelegate(JSObject *proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE;
|
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE;
|
||||||
|
virtual JSObject *weakmapKeyDelegate(JSObject *proxy) const MOZ_OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern JS_FRIEND_DATA(const js::Class* const) ProxyClassPtr;
|
extern JS_FRIEND_DATA(const js::Class* const) ProxyClassPtr;
|
||||||
@ -469,8 +556,8 @@ class JS_FRIEND_API(AutoEnterPolicy)
|
|||||||
Action enteredAction;
|
Action enteredAction;
|
||||||
|
|
||||||
// NB: We explicitly don't track the entered action here, because sometimes
|
// NB: We explicitly don't track the entered action here, because sometimes
|
||||||
// SET traps do an implicit GET during their implementation, leading to
|
// set() methods do an implicit get() during their implementation, leading
|
||||||
// spurious assertions.
|
// to spurious assertions.
|
||||||
AutoEnterPolicy *prev;
|
AutoEnterPolicy *prev;
|
||||||
void recordEnter(JSContext *cx, HandleObject proxy, HandleId id, Action act);
|
void recordEnter(JSContext *cx, HandleObject proxy, HandleId id, Action act);
|
||||||
void recordLeave();
|
void recordLeave();
|
||||||
|
@ -46,12 +46,13 @@ class MOZ_STACK_CLASS WrapperOptions : public ProxyOptions {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* A wrapper is a proxy with a target object to which it generally forwards
|
* A wrapper is a proxy with a target object to which it generally forwards
|
||||||
* operations, but may restrict access to certain operations or instrument
|
* operations, but may restrict access to certain operations or instrument the
|
||||||
* the trap operations in various ways. A wrapper is distinct from a Direct Proxy
|
* methods in various ways. A wrapper is distinct from a Direct Proxy Handler
|
||||||
* Handler in the sense that it can be "unwrapped" in C++, exposing the underlying
|
* in the sense that it can be "unwrapped" in C++, exposing the underlying
|
||||||
* object (Direct Proxy Handlers have an underlying target object, but don't
|
* object (Direct Proxy Handlers have an underlying target object, but don't
|
||||||
* expect to expose this object via any kind of unwrapping operation). Callers
|
* expect to expose this object via any kind of unwrapping operation). Callers
|
||||||
* should be careful to avoid unwrapping security wrappers in the wrong context.
|
* should be careful to avoid unwrapping security wrappers in the wrong
|
||||||
|
* context.
|
||||||
*/
|
*/
|
||||||
class JS_FRIEND_API(Wrapper) : public DirectProxyHandler
|
class JS_FRIEND_API(Wrapper) : public DirectProxyHandler
|
||||||
{
|
{
|
||||||
@ -112,10 +113,7 @@ class JS_FRIEND_API(CrossCompartmentWrapper) : public Wrapper
|
|||||||
: Wrapper(CROSS_COMPARTMENT | aFlags, aHasPrototype, aHasSecurityPolicy)
|
: Wrapper(CROSS_COMPARTMENT | aFlags, aHasPrototype, aHasSecurityPolicy)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/* ES5 Harmony fundamental wrapper traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
@ -124,22 +122,27 @@ class JS_FRIEND_API(CrossCompartmentWrapper) : public Wrapper
|
|||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
|
||||||
/* ES5 Harmony derived wrapper traps. */
|
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) const MOZ_OVERRIDE;
|
||||||
|
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
||||||
|
MutableHandleObject protop) const MOZ_OVERRIDE;
|
||||||
|
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool has(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool has(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, HandleObject wrapper, HandleObject receiver,
|
virtual bool get(JSContext *cx, HandleObject wrapper, HandleObject receiver,
|
||||||
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, HandleObject wrapper, HandleObject receiver,
|
virtual bool set(JSContext *cx, HandleObject wrapper, HandleObject receiver,
|
||||||
HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool call(JSContext *cx, HandleObject wrapper, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool keys(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, HandleObject wrapper, unsigned flags,
|
virtual bool iterate(JSContext *cx, HandleObject wrapper, unsigned flags,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
virtual bool call(JSContext *cx, HandleObject wrapper, const CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
||||||
CallArgs args) const MOZ_OVERRIDE;
|
CallArgs args) const MOZ_OVERRIDE;
|
||||||
virtual bool hasInstance(JSContext *cx, HandleObject wrapper, MutableHandleValue v,
|
virtual bool hasInstance(JSContext *cx, HandleObject wrapper, MutableHandleValue v,
|
||||||
@ -151,10 +154,6 @@ class JS_FRIEND_API(CrossCompartmentWrapper) : public Wrapper
|
|||||||
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const MOZ_OVERRIDE;
|
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
|
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
|
||||||
MutableHandleObject protop) const MOZ_OVERRIDE;
|
|
||||||
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
static const CrossCompartmentWrapper singleton;
|
static const CrossCompartmentWrapper singleton;
|
||||||
static const CrossCompartmentWrapper singletonWithPrototype;
|
static const CrossCompartmentWrapper singletonWithPrototype;
|
||||||
@ -177,31 +176,32 @@ class JS_FRIEND_API(SecurityWrapper) : public Base
|
|||||||
: Base(flags, hasPrototype, /* hasSecurityPolicy = */ true)
|
: Base(flags, hasPrototype, /* hasSecurityPolicy = */ true)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) const MOZ_OVERRIDE;
|
|
||||||
virtual bool enter(JSContext *cx, HandleObject wrapper, HandleId id, Wrapper::Action act,
|
virtual bool enter(JSContext *cx, HandleObject wrapper, HandleId id, Wrapper::Action act,
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
|
||||||
|
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) const MOZ_OVERRIDE;
|
||||||
|
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
||||||
CallArgs args) const MOZ_OVERRIDE;
|
CallArgs args) const MOZ_OVERRIDE;
|
||||||
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
|
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
|
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
|
||||||
JSContext *cx) const MOZ_OVERRIDE;
|
JSContext *cx) const MOZ_OVERRIDE;
|
||||||
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
|
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
|
||||||
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const MOZ_OVERRIDE;
|
virtual bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
|
// Allow isCallable and isConstructor. They used to be class-level, and so could not be guarded
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
// against.
|
||||||
|
|
||||||
virtual bool watch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
virtual bool watch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
||||||
JS::HandleObject callable) const MOZ_OVERRIDE;
|
JS::HandleObject callable) const MOZ_OVERRIDE;
|
||||||
virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id) const MOZ_OVERRIDE;
|
virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
// Allow isCallable and isConstructor. They used to be class-level, and so could not be guarded
|
|
||||||
// against.
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allow our subclasses to select the superclass behavior they want without
|
* Allow our subclasses to select the superclass behavior they want without
|
||||||
* needing to specify an exact superclass.
|
* needing to specify an exact superclass.
|
||||||
|
@ -18,10 +18,7 @@ class DeadObjectProxy : public BaseProxyHandler
|
|||||||
: BaseProxyHandler(&family)
|
: BaseProxyHandler(&family)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/* ES5 Harmony fundamental wrapper traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
@ -30,11 +27,16 @@ class DeadObjectProxy : public BaseProxyHandler
|
|||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||||
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
|
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
||||||
|
MutableHandleObject protop) const MOZ_OVERRIDE;
|
||||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
||||||
CallArgs args) const MOZ_OVERRIDE;
|
CallArgs args) const MOZ_OVERRIDE;
|
||||||
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
|
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
|
||||||
@ -46,8 +48,6 @@ class DeadObjectProxy : public BaseProxyHandler
|
|||||||
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
|
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
|
||||||
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint,
|
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
|
|
||||||
MutableHandleObject protop) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
static const char family;
|
static const char family;
|
||||||
static const DeadObjectProxy singleton;
|
static const DeadObjectProxy singleton;
|
||||||
|
@ -18,19 +18,14 @@ class RegExpGuard;
|
|||||||
/*
|
/*
|
||||||
* Dispatch point for handlers that executes the appropriate C++ or scripted traps.
|
* Dispatch point for handlers that executes the appropriate C++ or scripted traps.
|
||||||
*
|
*
|
||||||
* Important: All proxy traps need either (a) an AutoEnterPolicy in their
|
* Important: All proxy methods need either (a) an AutoEnterPolicy in their
|
||||||
* Proxy::foo entry point below or (b) an override in SecurityWrapper. See bug
|
* Proxy::foo entry point below or (b) an override in SecurityWrapper. See bug
|
||||||
* 945826 comment 0.
|
* 945826 comment 0.
|
||||||
*/
|
*/
|
||||||
class Proxy
|
class Proxy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/* ES5 Harmony fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
static bool preventExtensions(JSContext *cx, HandleObject proxy);
|
|
||||||
static bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc);
|
|
||||||
static bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandleValue vp);
|
|
||||||
static bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
static bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc);
|
MutableHandle<JSPropertyDescriptor> desc);
|
||||||
static bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
static bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
@ -40,21 +35,26 @@ class Proxy
|
|||||||
static bool ownPropertyKeys(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
static bool ownPropertyKeys(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
||||||
static bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
static bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
||||||
static bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
static bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
||||||
|
static bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible);
|
||||||
/* ES5 Harmony derived proxy traps. */
|
static bool preventExtensions(JSContext *cx, HandleObject proxy);
|
||||||
|
static bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop);
|
||||||
|
static bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp);
|
||||||
static bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
static bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
||||||
static bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
|
||||||
static bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
static bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
MutableHandleValue vp);
|
MutableHandleValue vp);
|
||||||
static bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
static bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
bool strict, MutableHandleValue vp);
|
bool strict, MutableHandleValue vp);
|
||||||
static bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
|
||||||
static bool iterate(JSContext *cx, HandleObject proxy, unsigned flags, MutableHandleValue vp);
|
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
static bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible);
|
|
||||||
static bool call(JSContext *cx, HandleObject proxy, const CallArgs &args);
|
static bool call(JSContext *cx, HandleObject proxy, const CallArgs &args);
|
||||||
static bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args);
|
static bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args);
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
static bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc);
|
||||||
|
static bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandleValue vp);
|
||||||
|
static bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp);
|
||||||
|
static bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props);
|
||||||
|
static bool iterate(JSContext *cx, HandleObject proxy, unsigned flags, MutableHandleValue vp);
|
||||||
static bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args);
|
static bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args);
|
||||||
static bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp);
|
static bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp);
|
||||||
static bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx);
|
static bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx);
|
||||||
@ -63,8 +63,6 @@ class Proxy
|
|||||||
static bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g);
|
static bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g);
|
||||||
static bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp);
|
static bool boxedValue_unbox(JSContext *cx, HandleObject proxy, MutableHandleValue vp);
|
||||||
static bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp);
|
static bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp);
|
||||||
static bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop);
|
|
||||||
static bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp);
|
|
||||||
|
|
||||||
static bool watch(JSContext *cx, HandleObject proxy, HandleId id, HandleObject callable);
|
static bool watch(JSContext *cx, HandleObject proxy, HandleId id, HandleObject callable);
|
||||||
static bool unwatch(JSContext *cx, HandleObject proxy, HandleId id);
|
static bool unwatch(JSContext *cx, HandleObject proxy, HandleId id);
|
||||||
|
@ -18,10 +18,7 @@ class ScriptedDirectProxyHandler : public DirectProxyHandler {
|
|||||||
: DirectProxyHandler(&family)
|
: DirectProxyHandler(&family)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/* ES5 Harmony fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
@ -30,16 +27,23 @@ class ScriptedDirectProxyHandler : public DirectProxyHandler {
|
|||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||||
/* ES5 Harmony derived proxy traps. */
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE {
|
|
||||||
return BaseProxyHandler::hasOwn(cx, proxy, id, bp);
|
|
||||||
}
|
|
||||||
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE {
|
||||||
|
return BaseProxyHandler::hasOwn(cx, proxy, id, bp);
|
||||||
|
}
|
||||||
|
|
||||||
// Kick keys out to getOwnPropertyName and then filter. [[GetOwnProperty]] could potentially
|
// Kick keys out to getOwnPropertyName and then filter. [[GetOwnProperty]] could potentially
|
||||||
// change the enumerability of the target's properties.
|
// change the enumerability of the target's properties.
|
||||||
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE {
|
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE {
|
||||||
@ -48,12 +52,6 @@ class ScriptedDirectProxyHandler : public DirectProxyHandler {
|
|||||||
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
/* ES6 Harmony traps */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE;
|
virtual bool isCallable(JSObject *obj) const MOZ_OVERRIDE;
|
||||||
virtual bool isConstructor(JSObject *obj) const MOZ_OVERRIDE {
|
virtual bool isConstructor(JSObject *obj) const MOZ_OVERRIDE {
|
||||||
// For now we maintain the broken behavior that a scripted proxy is constructable if it's
|
// For now we maintain the broken behavior that a scripted proxy is constructable if it's
|
||||||
|
@ -19,10 +19,7 @@ class ScriptedIndirectProxyHandler : public BaseProxyHandler
|
|||||||
: BaseProxyHandler(&family)
|
: BaseProxyHandler(&family)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
/* ES5 Harmony fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
@ -31,20 +28,21 @@ class ScriptedIndirectProxyHandler : public BaseProxyHandler
|
|||||||
AutoIdVector &props) const MOZ_OVERRIDE;
|
AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
||||||
/* ES5 Harmony derived proxy traps. */
|
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
virtual bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
|
||||||
bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
|
||||||
|
MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
|
||||||
MutableHandleValue vp) const MOZ_OVERRIDE;
|
MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
/* Spidermonkey extensions. */
|
|
||||||
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
|
||||||
CallArgs args) const MOZ_OVERRIDE;
|
CallArgs args) const MOZ_OVERRIDE;
|
||||||
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const MOZ_OVERRIDE;
|
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const MOZ_OVERRIDE;
|
||||||
|
@ -91,7 +91,7 @@ class ProxyObject : public JSObject
|
|||||||
// friend api exposure.
|
// friend api exposure.
|
||||||
|
|
||||||
// Proxy classes are not allowed to have call or construct hooks directly. Their
|
// Proxy classes are not allowed to have call or construct hooks directly. Their
|
||||||
// callability is instead decided by a trap call
|
// callability is instead decided by handler()->isCallable().
|
||||||
return clasp->isProxy() &&
|
return clasp->isProxy() &&
|
||||||
(clasp->flags & JSCLASS_IMPLEMENTS_BARRIERS) &&
|
(clasp->flags & JSCLASS_IMPLEMENTS_BARRIERS) &&
|
||||||
clasp->trace == proxy_Trace &&
|
clasp->trace == proxy_Trace &&
|
||||||
|
@ -24,21 +24,20 @@ class AddonWrapper : public Base {
|
|||||||
public:
|
public:
|
||||||
explicit MOZ_CONSTEXPR AddonWrapper(unsigned flags) : Base(flags) { }
|
explicit MOZ_CONSTEXPR AddonWrapper(unsigned flags) : Base(flags) { }
|
||||||
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool defineProperty(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool delete_(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, JS::HandleObject wrapper, JS::HandleObject receiver,
|
virtual bool set(JSContext *cx, JS::HandleObject wrapper, JS::HandleObject receiver,
|
||||||
JS::HandleId id, bool strict, JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
JS::HandleId id, bool strict, JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool defineProperty(JSContext *cx, JS::HandleObject proxy, JS::HandleId id,
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id,
|
||||||
virtual bool delete_(JSContext *cx, JS::HandleObject proxy, JS::HandleId id, bool *bp) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
static const AddonWrapper singleton;
|
static const AddonWrapper singleton;
|
||||||
};
|
};
|
||||||
|
@ -28,33 +28,30 @@ class ChromeObjectWrapper : public ChromeObjectWrapperBase
|
|||||||
public:
|
public:
|
||||||
MOZ_CONSTEXPR ChromeObjectWrapper() : ChromeObjectWrapperBase(0) {}
|
MOZ_CONSTEXPR ChromeObjectWrapper() : ChromeObjectWrapperBase(0) {}
|
||||||
|
|
||||||
/* Custom traps. */
|
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
js::Wrapper::Action act, bool *bp) const MOZ_OVERRIDE;
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
JS::Handle<JSObject*> receiver, JS::Handle<jsid> id,
|
|
||||||
bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
virtual bool has(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool has(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool set(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::Handle<JSObject*> receiver, JS::Handle<jsid> id,
|
||||||
|
bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool objectClassIs(JS::Handle<JSObject*> obj, js::ESClassValue classValue,
|
virtual bool objectClassIs(JS::Handle<JSObject*> obj, js::ESClassValue classValue,
|
||||||
JSContext *cx) const MOZ_OVERRIDE;
|
JSContext *cx) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
|
||||||
js::Wrapper::Action act, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
// NB: One might think we'd need to implement enumerate(), keys(), iterate(),
|
// NB: One might think we'd need to implement enumerate(), keys(), iterate(),
|
||||||
// and getPropertyKeys() here. However, ES5 built-in properties aren't
|
// and getPropertyKeys() here. However, ES5 built-in properties aren't
|
||||||
// enumerable (and SpiderMonkey's implementation seems to match the spec
|
// enumerable (and SpiderMonkey's implementation seems to match the spec
|
||||||
|
@ -25,9 +25,9 @@ class FilteringWrapper : public Base {
|
|||||||
public:
|
public:
|
||||||
MOZ_CONSTEXPR explicit FilteringWrapper(unsigned flags) : Base(flags) {}
|
MOZ_CONSTEXPR explicit FilteringWrapper(unsigned flags) : Base(flags) {}
|
||||||
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
JS::Handle<jsid> id,
|
js::Wrapper::Action act, bool *bp) const MOZ_OVERRIDE;
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
@ -35,6 +35,10 @@ class FilteringWrapper : public Base {
|
|||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags,
|
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags,
|
||||||
@ -45,9 +49,6 @@ class FilteringWrapper : public Base {
|
|||||||
virtual bool defaultValue(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint,
|
virtual bool defaultValue(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint,
|
||||||
JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
JS::MutableHandleValue vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
|
||||||
js::Wrapper::Action act, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
static const FilteringWrapper singleton;
|
static const FilteringWrapper singleton;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,27 +61,24 @@ class CrossOriginXrayWrapper : public SecurityXrayDOM {
|
|||||||
public:
|
public:
|
||||||
explicit CrossOriginXrayWrapper(unsigned flags);
|
explicit CrossOriginXrayWrapper(unsigned flags);
|
||||||
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool ownPropertyKeys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool ownPropertyKeys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
||||||
JS::MutableHandleObject protop) const MOZ_OVERRIDE;
|
JS::MutableHandleObject protop) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,28 +17,25 @@ class WaiveXrayWrapper : public js::CrossCompartmentWrapper {
|
|||||||
public:
|
public:
|
||||||
explicit MOZ_CONSTEXPR WaiveXrayWrapper(unsigned flags) : js::CrossCompartmentWrapper(flags) { }
|
explicit MOZ_CONSTEXPR WaiveXrayWrapper(unsigned flags) : js::CrossCompartmentWrapper(flags) { }
|
||||||
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool getPrototypeOf(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
JS::MutableHandle<JSObject*> protop) const MOZ_OVERRIDE;
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy, unsigned flags,
|
|
||||||
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
|
|
||||||
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy, unsigned flags,
|
||||||
|
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool nativeCall(JSContext *cx, JS::IsAcceptableThis test,
|
virtual bool nativeCall(JSContext *cx, JS::IsAcceptableThis test,
|
||||||
JS::NativeImpl impl, JS::CallArgs args) const MOZ_OVERRIDE;
|
JS::NativeImpl impl, JS::CallArgs args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
virtual bool getPrototypeOf(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSObject*> protop) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
static const WaiveXrayWrapper singleton;
|
static const WaiveXrayWrapper singleton;
|
||||||
};
|
};
|
||||||
|
@ -404,11 +404,7 @@ class XrayWrapper : public Base {
|
|||||||
: Base(flags | WrapperFactory::IS_XRAY_WRAPPER_FLAG, Traits::HasPrototype)
|
: Base(flags | WrapperFactory::IS_XRAY_WRAPPER_FLAG, Traits::HasPrototype)
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
/* Fundamental proxy traps. */
|
/* Standard internal methods. */
|
||||||
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper, bool *extensible) const MOZ_OVERRIDE;
|
|
||||||
virtual bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
virtual bool defineProperty(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
@ -418,14 +414,26 @@ class XrayWrapper : public Base {
|
|||||||
virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
|
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper, bool *extensible) const MOZ_OVERRIDE;
|
||||||
/* Derived proxy traps. */
|
virtual bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
|
||||||
|
virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
||||||
|
JS::MutableHandleObject protop) const MOZ_OVERRIDE;
|
||||||
|
virtual bool setPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
||||||
|
JS::HandleObject proto, bool *bp) const MOZ_OVERRIDE;
|
||||||
|
virtual bool has(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
virtual bool set(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool has(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
|
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
/* SpiderMonkey extensions. */
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
||||||
@ -433,21 +441,11 @@ class XrayWrapper : public Base {
|
|||||||
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags,
|
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags,
|
||||||
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool call(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
virtual bool construct(JSContext *cx, JS::Handle<JSObject*> wrapper,
|
|
||||||
const JS::CallArgs &args) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
virtual const char *className(JSContext *cx, JS::HandleObject proxy) const MOZ_OVERRIDE;
|
virtual const char *className(JSContext *cx, JS::HandleObject proxy) const MOZ_OVERRIDE;
|
||||||
virtual bool defaultValue(JSContext *cx, JS::HandleObject wrapper,
|
virtual bool defaultValue(JSContext *cx, JS::HandleObject wrapper,
|
||||||
JSType hint, JS::MutableHandleValue vp)
|
JSType hint, JS::MutableHandleValue vp)
|
||||||
const MOZ_OVERRIDE;
|
const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
|
||||||
JS::MutableHandleObject protop) const MOZ_OVERRIDE;
|
|
||||||
virtual bool setPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
|
|
||||||
JS::HandleObject proto, bool *bp) const MOZ_OVERRIDE;
|
|
||||||
|
|
||||||
static const XrayWrapper singleton;
|
static const XrayWrapper singleton;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -491,23 +489,24 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy,
|
|
||||||
JS::Handle<jsid> id,
|
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
|
||||||
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool getOwnPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::Handle<jsid> id,
|
JS::Handle<jsid> id,
|
||||||
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
// We just forward the derived traps to the BaseProxyHandler versions which
|
// We just forward the high-level methods to the BaseProxyHandler versions
|
||||||
// implement them in terms of the fundamental traps.
|
// which implement them in terms of lower-level methods.
|
||||||
virtual bool has(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
virtual bool has(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
|
||||||
bool *bp) const MOZ_OVERRIDE;
|
|
||||||
virtual bool get(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
virtual bool get(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
virtual bool set(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
virtual bool set(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> receiver,
|
||||||
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
|
||||||
|
|
||||||
|
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
|
JS::Handle<jsid> id,
|
||||||
|
JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
|
||||||
|
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
|
||||||
|
bool *bp) const MOZ_OVERRIDE;
|
||||||
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
|
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
|
||||||
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
JS::AutoIdVector &props) const MOZ_OVERRIDE;
|
||||||
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy, unsigned flags,
|
virtual bool iterate(JSContext *cx, JS::Handle<JSObject*> proxy, unsigned flags,
|
||||||
|
Loading…
Reference in New Issue
Block a user