Bug 1027402 - Part 3: Mark all Proxy Handler methods const. (r=jorendorff, r=bz)

This commit is contained in:
Eric Faust 2014-06-27 04:44:06 -07:00
Родитель 992c8dde5a
Коммит 04ec29520a
21 изменённых файлов: 576 добавлений и 545 удалений

Просмотреть файл

@ -87,6 +87,7 @@ WindowNamedPropertiesHandler::getOwnPropertyDescriptor(JSContext* aCx,
JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aProxy,
JS::Handle<jsid> aId, JS::Handle<jsid> aId,
JS::MutableHandle<JSPropertyDescriptor> aDesc) JS::MutableHandle<JSPropertyDescriptor> aDesc)
const
{ {
// Note: The infallibleInit call below depends on this check. // Note: The infallibleInit call below depends on this check.
if (!JSID_IS_STRING(aId)) { if (!JSID_IS_STRING(aId)) {
@ -160,7 +161,7 @@ bool
WindowNamedPropertiesHandler::defineProperty(JSContext* aCx, WindowNamedPropertiesHandler::defineProperty(JSContext* aCx,
JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aProxy,
JS::Handle<jsid> aId, JS::Handle<jsid> aId,
JS::MutableHandle<JSPropertyDescriptor> aDesc) JS::MutableHandle<JSPropertyDescriptor> aDesc) const
{ {
ErrorResult rv; ErrorResult rv;
rv.ThrowTypeError(MSG_DEFINEPROPERTY_ON_GSP); rv.ThrowTypeError(MSG_DEFINEPROPERTY_ON_GSP);
@ -172,7 +173,7 @@ bool
WindowNamedPropertiesHandler::ownPropNames(JSContext* aCx, WindowNamedPropertiesHandler::ownPropNames(JSContext* aCx,
JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aProxy,
unsigned flags, unsigned flags,
JS::AutoIdVector& aProps) JS::AutoIdVector& aProps) const
{ {
// Grab the DOM window. // Grab the DOM window.
nsGlobalWindow* win = GetWindowFromGlobal(JS_GetGlobalForObject(aCx, aProxy)); nsGlobalWindow* win = GetWindowFromGlobal(JS_GetGlobalForObject(aCx, aProxy));
@ -210,7 +211,7 @@ WindowNamedPropertiesHandler::ownPropNames(JSContext* aCx,
bool bool
WindowNamedPropertiesHandler::delete_(JSContext* aCx, WindowNamedPropertiesHandler::delete_(JSContext* aCx,
JS::Handle<JSObject*> aProxy, JS::Handle<JSObject*> aProxy,
JS::Handle<jsid> aId, bool* aBp) JS::Handle<jsid> aId, bool* aBp) const
{ {
*aBp = false; *aBp = false;
return true; return true;

Просмотреть файл

@ -20,7 +20,7 @@ public:
{ {
} }
virtual bool virtual bool
preventExtensions(JSContext* aCx, JS::Handle<JSObject*> aProxy) MOZ_OVERRIDE preventExtensions(JSContext* aCx, JS::Handle<JSObject*> aProxy) const MOZ_OVERRIDE
{ {
// Throw a TypeError, per WebIDL. // Throw a TypeError, per WebIDL.
JS_ReportErrorNumber(aCx, js_GetErrorMessage, nullptr, JS_ReportErrorNumber(aCx, js_GetErrorMessage, nullptr,
@ -30,26 +30,27 @@ public:
virtual bool virtual bool
getOwnPropertyDescriptor(JSContext* aCx, JS::Handle<JSObject*> aProxy, getOwnPropertyDescriptor(JSContext* aCx, JS::Handle<JSObject*> aProxy,
JS::Handle<jsid> aId, JS::Handle<jsid> aId,
JS::MutableHandle<JSPropertyDescriptor> aDesc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> aDesc)
const MOZ_OVERRIDE;
virtual bool virtual bool
defineProperty(JSContext* aCx, JS::Handle<JSObject*> aProxy, defineProperty(JSContext* aCx, JS::Handle<JSObject*> aProxy,
JS::Handle<jsid> aId, JS::Handle<jsid> aId,
JS::MutableHandle<JSPropertyDescriptor> aDesc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> aDesc) const MOZ_OVERRIDE;
virtual bool virtual bool
ownPropNames(JSContext* aCx, JS::Handle<JSObject*> aProxy, unsigned flags, ownPropNames(JSContext* aCx, JS::Handle<JSObject*> aProxy, unsigned flags,
JS::AutoIdVector& aProps) MOZ_OVERRIDE; JS::AutoIdVector& aProps) const MOZ_OVERRIDE;
virtual bool virtual bool
delete_(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<jsid> aId, delete_(JSContext* aCx, JS::Handle<JSObject*> aProxy, JS::Handle<jsid> aId,
bool* aBp) MOZ_OVERRIDE; bool* aBp) const MOZ_OVERRIDE;
virtual bool virtual bool
isExtensible(JSContext* aCx, JS::Handle<JSObject*> aProxy, isExtensible(JSContext* aCx, JS::Handle<JSObject*> aProxy,
bool* aIsExtensible) MOZ_OVERRIDE bool* aIsExtensible) const MOZ_OVERRIDE
{ {
*aIsExtensible = true; *aIsExtensible = true;
return true; return true;
} }
virtual const char* virtual const char*
className(JSContext *aCx, JS::Handle<JSObject*> aProxy) MOZ_OVERRIDE className(JSContext *aCx, JS::Handle<JSObject*> aProxy) const MOZ_OVERRIDE
{ {
return "WindowProperties"; return "WindowProperties";
} }

Просмотреть файл

@ -601,69 +601,72 @@ class nsOuterWindowProxy : public js::Wrapper
public: public:
nsOuterWindowProxy() : js::Wrapper(0) { } nsOuterWindowProxy() : js::Wrapper(0) { }
virtual bool finalizeInBackground(JS::Value priv) { virtual bool finalizeInBackground(JS::Value priv) const MOZ_OVERRIDE {
return false; return false;
} }
virtual const char *className(JSContext *cx, virtual const char *className(JSContext *cx,
JS::Handle<JSObject*> wrapper) MOZ_OVERRIDE; JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
virtual void finalize(JSFreeOp *fop, JSObject *proxy) MOZ_OVERRIDE; virtual void finalize(JSFreeOp *fop, JSObject *proxy) const MOZ_OVERRIDE;
// Fundamental traps // Fundamental traps
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible) virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible)
MOZ_OVERRIDE; const MOZ_OVERRIDE;
virtual bool preventExtensions(JSContext *cx, virtual bool preventExtensions(JSContext *cx,
JS::Handle<JSObject*> proxy) MOZ_OVERRIDE; JS::Handle<JSObject*> proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext* cx, virtual bool getPropertyDescriptor(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc)
const MOZ_OVERRIDE;
virtual bool defineProperty(JSContext* cx, virtual bool defineProperty(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc)
const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, virtual bool getOwnPropertyNames(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) MOZ_OVERRIDE; JS::AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool delete_(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
bool *bp) 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) MOZ_OVERRIDE; JS::AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool watch(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool watch(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<JSObject*> callable) MOZ_OVERRIDE; JS::Handle<jsid> id, JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
virtual bool unwatch(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool unwatch(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id) MOZ_OVERRIDE; JS::Handle<jsid> id) const MOZ_OVERRIDE;
// Derived traps // 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) MOZ_OVERRIDE; JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) MOZ_OVERRIDE; 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,
JS::MutableHandle<JS::Value> vp) MOZ_OVERRIDE; JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
virtual bool set(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool set(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<JSObject*> receiver, JS::Handle<JSObject*> receiver,
JS::Handle<jsid> id, JS::Handle<jsid> id,
bool strict, bool strict,
JS::MutableHandle<JS::Value> vp) MOZ_OVERRIDE; JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) 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) MOZ_OVERRIDE; JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
static const nsOuterWindowProxy singleton; static const nsOuterWindowProxy singleton;
protected: protected:
nsGlobalWindow* GetWindow(JSObject *proxy) nsGlobalWindow* GetWindow(JSObject *proxy) const
{ {
return nsGlobalWindow::FromSupports( return nsGlobalWindow::FromSupports(
static_cast<nsISupports*>(js::GetProxyExtra(proxy, 0).toPrivate())); static_cast<nsISupports*>(js::GetProxyExtra(proxy, 0).toPrivate()));
@ -674,16 +677,16 @@ protected:
bool GetSubframeWindow(JSContext *cx, JS::Handle<JSObject*> proxy, bool GetSubframeWindow(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JS::Value> vp, JS::MutableHandle<JS::Value> vp,
bool &found); bool &found) const;
// Returns a non-null window only if id is an index and we have a // Returns a non-null window only if id is an index and we have a
// window at that index. // window at that index.
already_AddRefed<nsIDOMWindow> GetSubframeWindow(JSContext *cx, already_AddRefed<nsIDOMWindow> GetSubframeWindow(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id); JS::Handle<jsid> id) const;
bool AppendIndexedPropertyNames(JSContext *cx, JSObject *proxy, bool AppendIndexedPropertyNames(JSContext *cx, JSObject *proxy,
JS::AutoIdVector &props); JS::AutoIdVector &props) const;
}; };
const js::Class OuterWindowProxyClass = const js::Class OuterWindowProxyClass =
@ -702,7 +705,7 @@ const js::Class OuterWindowProxyClass =
bool bool
nsOuterWindowProxy::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy,
bool *extensible) bool *extensible) const
{ {
// If [[Extensible]] could be false, then navigating a window could navigate // If [[Extensible]] could be false, then navigating a window could navigate
// to a window that's [[Extensible]] after being at one that wasn't: an // to a window that's [[Extensible]] after being at one that wasn't: an
@ -713,7 +716,7 @@ nsOuterWindowProxy::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::preventExtensions(JSContext *cx, nsOuterWindowProxy::preventExtensions(JSContext *cx,
JS::Handle<JSObject*> proxy) JS::Handle<JSObject*> proxy) const
{ {
// See above. // See above.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
@ -722,7 +725,7 @@ nsOuterWindowProxy::preventExtensions(JSContext *cx,
} }
const char * const char *
nsOuterWindowProxy::className(JSContext *cx, JS::Handle<JSObject*> proxy) nsOuterWindowProxy::className(JSContext *cx, JS::Handle<JSObject*> proxy) const
{ {
MOZ_ASSERT(js::IsProxy(proxy)); MOZ_ASSERT(js::IsProxy(proxy));
@ -730,7 +733,7 @@ nsOuterWindowProxy::className(JSContext *cx, JS::Handle<JSObject*> proxy)
} }
void void
nsOuterWindowProxy::finalize(JSFreeOp *fop, JSObject *proxy) nsOuterWindowProxy::finalize(JSFreeOp *fop, JSObject *proxy) const
{ {
nsGlobalWindow* global = GetWindow(proxy); nsGlobalWindow* global = GetWindow(proxy);
if (global) { if (global) {
@ -748,7 +751,7 @@ bool
nsOuterWindowProxy::getPropertyDescriptor(JSContext* cx, nsOuterWindowProxy::getPropertyDescriptor(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc) const
{ {
// The only thing we can do differently from js::Wrapper is shadow stuff with // The only thing we can do differently from js::Wrapper is shadow stuff with
// our indexed properties, so we can just try getOwnPropertyDescriptor and if // our indexed properties, so we can just try getOwnPropertyDescriptor and if
@ -770,6 +773,7 @@ nsOuterWindowProxy::getOwnPropertyDescriptor(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
bool found; bool found;
if (!GetSubframeWindow(cx, proxy, id, desc.value(), found)) { if (!GetSubframeWindow(cx, proxy, id, desc.value(), found)) {
@ -789,6 +793,7 @@ nsOuterWindowProxy::defineProperty(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
int32_t index = GetArrayIndexFromId(cx, id); int32_t index = GetArrayIndexFromId(cx, id);
if (IsArrayIndex(index)) { if (IsArrayIndex(index)) {
@ -805,7 +810,7 @@ nsOuterWindowProxy::defineProperty(JSContext* cx,
bool bool
nsOuterWindowProxy::getOwnPropertyNames(JSContext *cx, nsOuterWindowProxy::getOwnPropertyNames(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) JS::AutoIdVector &props) const
{ {
// Just our indexed stuff followed by our "normal" own property names. // Just our indexed stuff followed by our "normal" own property names.
if (!AppendIndexedPropertyNames(cx, proxy, props)) { if (!AppendIndexedPropertyNames(cx, proxy, props)) {
@ -821,7 +826,7 @@ nsOuterWindowProxy::getOwnPropertyNames(JSContext *cx,
bool bool
nsOuterWindowProxy::delete_(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::delete_(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) JS::Handle<jsid> id, bool *bp) const
{ {
if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) { if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) {
// Reject (which means throw if strict, else return false) the delete. // Reject (which means throw if strict, else return false) the delete.
@ -842,7 +847,7 @@ nsOuterWindowProxy::delete_(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::enumerate(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::enumerate(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) JS::AutoIdVector &props) const
{ {
// Just our indexed stuff followed by our "normal" own property names. // Just our indexed stuff followed by our "normal" own property names.
if (!AppendIndexedPropertyNames(cx, proxy, props)) { if (!AppendIndexedPropertyNames(cx, proxy, props)) {
@ -858,7 +863,7 @@ nsOuterWindowProxy::enumerate(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::has(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::has(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) JS::Handle<jsid> id, bool *bp) const
{ {
if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) { if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) {
*bp = true; *bp = true;
@ -870,7 +875,7 @@ nsOuterWindowProxy::has(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) JS::Handle<jsid> id, bool *bp) const
{ {
if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) { if (nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id)) {
*bp = true; *bp = true;
@ -884,7 +889,7 @@ bool
nsOuterWindowProxy::get(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::get(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<JSObject*> receiver, JS::Handle<JSObject*> receiver,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JS::Value> vp) JS::MutableHandle<JS::Value> vp) const
{ {
if (id == nsDOMClassInfo::sWrappedJSObject_id && if (id == nsDOMClassInfo::sWrappedJSObject_id &&
xpc::AccessCheck::isChrome(js::GetContextCompartment(cx))) { xpc::AccessCheck::isChrome(js::GetContextCompartment(cx))) {
@ -909,7 +914,7 @@ nsOuterWindowProxy::set(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<JSObject*> receiver, JS::Handle<JSObject*> receiver,
JS::Handle<jsid> id, JS::Handle<jsid> id,
bool strict, bool strict,
JS::MutableHandle<JS::Value> vp) JS::MutableHandle<JS::Value> vp) const
{ {
int32_t index = GetArrayIndexFromId(cx, id); int32_t index = GetArrayIndexFromId(cx, id);
if (IsArrayIndex(index)) { if (IsArrayIndex(index)) {
@ -925,7 +930,7 @@ nsOuterWindowProxy::set(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::keys(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::keys(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) JS::AutoIdVector &props) const
{ {
// BaseProxyHandler::keys seems to do what we want here: call // BaseProxyHandler::keys seems to do what we want here: call
// getOwnPropertyNames and then filter out the non-enumerable properties. // getOwnPropertyNames and then filter out the non-enumerable properties.
@ -934,7 +939,7 @@ nsOuterWindowProxy::keys(JSContext *cx, JS::Handle<JSObject*> proxy,
bool bool
nsOuterWindowProxy::iterate(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::iterate(JSContext *cx, JS::Handle<JSObject*> proxy,
unsigned flags, JS::MutableHandle<JS::Value> vp) unsigned flags, JS::MutableHandle<JS::Value> vp) const
{ {
// BaseProxyHandler::iterate seems to do what we want here: fall // BaseProxyHandler::iterate seems to do what we want here: fall
// back on the property names returned from keys() and enumerate(). // back on the property names returned from keys() and enumerate().
@ -946,7 +951,7 @@ nsOuterWindowProxy::GetSubframeWindow(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JS::Value> vp, JS::MutableHandle<JS::Value> vp,
bool& found) bool& found) const
{ {
nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id); nsCOMPtr<nsIDOMWindow> frame = GetSubframeWindow(cx, proxy, id);
if (!frame) { if (!frame) {
@ -973,7 +978,7 @@ nsOuterWindowProxy::GetSubframeWindow(JSContext *cx,
already_AddRefed<nsIDOMWindow> already_AddRefed<nsIDOMWindow>
nsOuterWindowProxy::GetSubframeWindow(JSContext *cx, nsOuterWindowProxy::GetSubframeWindow(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id) JS::Handle<jsid> id) const
{ {
int32_t index = GetArrayIndexFromId(cx, id); int32_t index = GetArrayIndexFromId(cx, id);
if (!IsArrayIndex(index)) { if (!IsArrayIndex(index)) {
@ -987,7 +992,7 @@ nsOuterWindowProxy::GetSubframeWindow(JSContext *cx,
bool bool
nsOuterWindowProxy::AppendIndexedPropertyNames(JSContext *cx, JSObject *proxy, nsOuterWindowProxy::AppendIndexedPropertyNames(JSContext *cx, JSObject *proxy,
JS::AutoIdVector &props) JS::AutoIdVector &props) const
{ {
uint32_t length = GetWindow(proxy)->Length(); uint32_t length = GetWindow(proxy)->Length();
MOZ_ASSERT(int32_t(length) >= 0); MOZ_ASSERT(int32_t(length) >= 0);
@ -1003,14 +1008,14 @@ nsOuterWindowProxy::AppendIndexedPropertyNames(JSContext *cx, JSObject *proxy,
bool bool
nsOuterWindowProxy::watch(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::watch(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<JSObject*> callable) JS::Handle<jsid> id, JS::Handle<JSObject*> callable) const
{ {
return js::WatchGuts(cx, proxy, id, callable); return js::WatchGuts(cx, proxy, id, callable);
} }
bool bool
nsOuterWindowProxy::unwatch(JSContext *cx, JS::Handle<JSObject*> proxy, nsOuterWindowProxy::unwatch(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id) JS::Handle<jsid> id) const
{ {
return js::UnwatchGuts(cx, proxy, id); return js::UnwatchGuts(cx, proxy, id);
} }
@ -1023,14 +1028,14 @@ class nsChromeOuterWindowProxy : public nsOuterWindowProxy
public: public:
nsChromeOuterWindowProxy() : nsOuterWindowProxy() {} nsChromeOuterWindowProxy() : nsOuterWindowProxy() {}
virtual const char *className(JSContext *cx, JS::Handle<JSObject*> wrapper) MOZ_OVERRIDE; virtual const char *className(JSContext *cx, JS::Handle<JSObject*> wrapper) const MOZ_OVERRIDE;
static const nsChromeOuterWindowProxy singleton; static const nsChromeOuterWindowProxy singleton;
}; };
const char * const char *
nsChromeOuterWindowProxy::className(JSContext *cx, nsChromeOuterWindowProxy::className(JSContext *cx,
JS::Handle<JSObject*> proxy) JS::Handle<JSObject*> proxy) const
{ {
MOZ_ASSERT(js::IsProxy(proxy)); MOZ_ASSERT(js::IsProxy(proxy));

Просмотреть файл

@ -9487,7 +9487,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('JS::MutableHandle<JSPropertyDescriptor>', 'desc')] Argument('JS::MutableHandle<JSPropertyDescriptor>', 'desc')]
ClassMethod.__init__(self, "getOwnPropertyDescriptor", "bool", args, ClassMethod.__init__(self, "getOwnPropertyDescriptor", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -9598,7 +9598,7 @@ class CGDOMJSProxyHandler_defineProperty(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('JS::MutableHandle<JSPropertyDescriptor>', 'desc'), Argument('JS::MutableHandle<JSPropertyDescriptor>', 'desc'),
Argument('bool*', 'defined')] Argument('bool*', 'defined')]
ClassMethod.__init__(self, "defineProperty", "bool", args, virtual=True, override=True) ClassMethod.__init__(self, "defineProperty", "bool", args, virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -9679,7 +9679,7 @@ class CGDOMJSProxyHandler_delete(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('bool*', 'bp')] Argument('bool*', 'bp')]
ClassMethod.__init__(self, "delete_", "bool", args, ClassMethod.__init__(self, "delete_", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -9778,7 +9778,7 @@ class CGDOMJSProxyHandler_ownPropNames(ClassMethod):
Argument('unsigned', 'flags'), Argument('unsigned', 'flags'),
Argument('JS::AutoIdVector&', 'props')] Argument('JS::AutoIdVector&', 'props')]
ClassMethod.__init__(self, "ownPropNames", "bool", args, ClassMethod.__init__(self, "ownPropNames", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -9854,7 +9854,7 @@ class CGDOMJSProxyHandler_hasOwn(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('bool*', 'bp')] Argument('bool*', 'bp')]
ClassMethod.__init__(self, "hasOwn", "bool", args, ClassMethod.__init__(self, "hasOwn", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -9936,7 +9936,7 @@ class CGDOMJSProxyHandler_get(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('JS::MutableHandle<JS::Value>', 'vp')] Argument('JS::MutableHandle<JS::Value>', 'vp')]
ClassMethod.__init__(self, "get", "bool", args, ClassMethod.__init__(self, "get", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -10038,7 +10038,7 @@ class CGDOMJSProxyHandler_setCustom(ClassMethod):
Argument('JS::Handle<jsid>', 'id'), Argument('JS::Handle<jsid>', 'id'),
Argument('JS::MutableHandle<JS::Value>', 'vp'), Argument('JS::MutableHandle<JS::Value>', 'vp'),
Argument('bool*', 'done')] Argument('bool*', 'done')]
ClassMethod.__init__(self, "setCustom", "bool", args, virtual=True, override=True) ClassMethod.__init__(self, "setCustom", "bool", args, virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -10101,7 +10101,7 @@ class CGDOMJSProxyHandler_className(ClassMethod):
args = [Argument('JSContext*', 'cx'), args = [Argument('JSContext*', 'cx'),
Argument('JS::Handle<JSObject*>', 'proxy')] Argument('JS::Handle<JSObject*>', 'proxy')]
ClassMethod.__init__(self, "className", "const char*", args, ClassMethod.__init__(self, "className", "const char*", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -10112,7 +10112,7 @@ class CGDOMJSProxyHandler_finalizeInBackground(ClassMethod):
def __init__(self, descriptor): def __init__(self, descriptor):
args = [Argument('JS::Value', 'priv')] args = [Argument('JS::Value', 'priv')]
ClassMethod.__init__(self, "finalizeInBackground", "bool", args, ClassMethod.__init__(self, "finalizeInBackground", "bool", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -10123,7 +10123,7 @@ class CGDOMJSProxyHandler_finalize(ClassMethod):
def __init__(self, descriptor): def __init__(self, descriptor):
args = [Argument('JSFreeOp*', 'fop'), Argument('JSObject*', 'proxy')] args = [Argument('JSFreeOp*', 'fop'), Argument('JSObject*', 'proxy')]
ClassMethod.__init__(self, "finalize", "void", args, ClassMethod.__init__(self, "finalize", "void", args,
virtual=True, override=True) virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):
@ -10140,7 +10140,7 @@ class CGDOMJSProxyHandler_slice(ClassMethod):
Argument('uint32_t', 'begin'), Argument('uint32_t', 'begin'),
Argument('uint32_t', 'end'), Argument('uint32_t', 'end'),
Argument('JS::Handle<JSObject*>', 'array')] Argument('JS::Handle<JSObject*>', 'array')]
ClassMethod.__init__(self, "slice", "bool", args, virtual=True, override=True) ClassMethod.__init__(self, "slice", "bool", args, virtual=True, override=True, const=True)
self.descriptor = descriptor self.descriptor = descriptor
def getBody(self): def getBody(self):

Просмотреть файл

@ -146,7 +146,7 @@ DOMProxyHandler::EnsureExpandoObject(JSContext* cx, JS::Handle<JSObject*> obj)
} }
bool bool
DOMProxyHandler::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible) DOMProxyHandler::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible) const
{ {
// always extensible per WebIDL // always extensible per WebIDL
*extensible = true; *extensible = true;
@ -154,7 +154,7 @@ DOMProxyHandler::isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *
} }
bool bool
DOMProxyHandler::preventExtensions(JSContext *cx, JS::Handle<JSObject*> proxy) DOMProxyHandler::preventExtensions(JSContext *cx, JS::Handle<JSObject*> proxy) const
{ {
// Throw a TypeError, per WebIDL. // Throw a TypeError, per WebIDL.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
@ -166,7 +166,7 @@ bool
BaseDOMProxyHandler::getPropertyDescriptor(JSContext* cx, BaseDOMProxyHandler::getPropertyDescriptor(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc) const
{ {
if (!getOwnPropertyDescriptor(cx, proxy, id, desc)) { if (!getOwnPropertyDescriptor(cx, proxy, id, desc)) {
return false; return false;
@ -189,7 +189,7 @@ BaseDOMProxyHandler::getPropertyDescriptor(JSContext* cx,
bool bool
DOMProxyHandler::defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, DOMProxyHandler::defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
MutableHandle<JSPropertyDescriptor> desc, bool* defined) MutableHandle<JSPropertyDescriptor> desc, bool* defined) const
{ {
if (desc.hasGetterObject() && desc.setter() == JS_StrictPropertyStub) { if (desc.hasGetterObject() && desc.setter() == JS_StrictPropertyStub) {
return JS_ReportErrorFlagsAndNumber(cx, return JS_ReportErrorFlagsAndNumber(cx,
@ -214,7 +214,7 @@ DOMProxyHandler::defineProperty(JSContext* cx, JS::Handle<JSObject*> proxy, JS::
bool bool
DOMProxyHandler::set(JSContext *cx, Handle<JSObject*> proxy, Handle<JSObject*> receiver, DOMProxyHandler::set(JSContext *cx, Handle<JSObject*> proxy, Handle<JSObject*> receiver,
Handle<jsid> id, bool strict, MutableHandle<JS::Value> vp) Handle<jsid> id, bool strict, MutableHandle<JS::Value> vp) const
{ {
MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy), MOZ_ASSERT(!xpc::WrapperFactory::IsXrayWrapper(proxy),
"Should not have a XrayWrapper here"); "Should not have a XrayWrapper here");
@ -230,7 +230,7 @@ DOMProxyHandler::set(JSContext *cx, Handle<JSObject*> proxy, Handle<JSObject*> r
bool bool
DOMProxyHandler::delete_(JSContext* cx, JS::Handle<JSObject*> proxy, DOMProxyHandler::delete_(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool* bp) JS::Handle<jsid> id, bool* bp) const
{ {
JS::Rooted<JSObject*> expando(cx); JS::Rooted<JSObject*> expando(cx);
if (!xpc::WrapperFactory::IsXrayWrapper(proxy) && (expando = GetExpandoObject(proxy))) { if (!xpc::WrapperFactory::IsXrayWrapper(proxy) && (expando = GetExpandoObject(proxy))) {
@ -243,7 +243,7 @@ DOMProxyHandler::delete_(JSContext* cx, JS::Handle<JSObject*> proxy,
bool bool
BaseDOMProxyHandler::enumerate(JSContext* cx, JS::Handle<JSObject*> proxy, BaseDOMProxyHandler::enumerate(JSContext* cx, JS::Handle<JSObject*> proxy,
AutoIdVector& props) AutoIdVector& props) const
{ {
JS::Rooted<JSObject*> proto(cx); JS::Rooted<JSObject*> proto(cx);
if (!JS_GetPrototype(cx, proxy, &proto)) { if (!JS_GetPrototype(cx, proxy, &proto)) {
@ -255,13 +255,13 @@ BaseDOMProxyHandler::enumerate(JSContext* cx, JS::Handle<JSObject*> proxy,
bool bool
BaseDOMProxyHandler::watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, BaseDOMProxyHandler::watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
JS::Handle<JSObject*> callable) JS::Handle<JSObject*> callable) const
{ {
return js::WatchGuts(cx, proxy, id, callable); return js::WatchGuts(cx, proxy, id, callable);
} }
bool bool
BaseDOMProxyHandler::unwatch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id) BaseDOMProxyHandler::unwatch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id) const
{ {
return js::UnwatchGuts(cx, proxy, id); return js::UnwatchGuts(cx, proxy, id);
} }
@ -269,7 +269,7 @@ BaseDOMProxyHandler::unwatch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Han
bool bool
BaseDOMProxyHandler::getOwnPropertyNames(JSContext* cx, BaseDOMProxyHandler::getOwnPropertyNames(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::AutoIdVector& props) JS::AutoIdVector& props) const
{ {
return ownPropNames(cx, proxy, JSITER_OWNONLY | JSITER_HIDDEN, props); return ownPropNames(cx, proxy, JSITER_OWNONLY | JSITER_HIDDEN, props);
} }
@ -277,13 +277,13 @@ BaseDOMProxyHandler::getOwnPropertyNames(JSContext* cx,
bool bool
BaseDOMProxyHandler::keys(JSContext* cx, BaseDOMProxyHandler::keys(JSContext* cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::AutoIdVector& props) JS::AutoIdVector& props) const
{ {
return ownPropNames(cx, proxy, JSITER_OWNONLY, props); return ownPropNames(cx, proxy, JSITER_OWNONLY, props);
} }
bool bool
DOMProxyHandler::has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool* bp) DOMProxyHandler::has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool* bp) const
{ {
if (!hasOwn(cx, proxy, id, bp)) { if (!hasOwn(cx, proxy, id, bp)) {
return false; return false;
@ -328,7 +328,7 @@ IdToInt32(JSContext* cx, JS::Handle<jsid> id)
bool bool
DOMProxyHandler::setCustom(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, DOMProxyHandler::setCustom(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
JS::MutableHandle<JS::Value> vp, bool *done) JS::MutableHandle<JS::Value> vp, bool *done) const
{ {
*done = false; *done = false;
return true; return true;

Просмотреть файл

@ -45,23 +45,23 @@ public:
// Implementations of traps that can be implemented in terms of // Implementations of traps that can be implemented in terms of
// fundamental traps. // fundamental traps.
bool enumerate(JSContext* cx, JS::Handle<JSObject*> proxy, bool enumerate(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector& props) MOZ_OVERRIDE; JS::AutoIdVector& props) const MOZ_OVERRIDE;
bool getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy, bool getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
bool watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool watch(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
JS::Handle<JSObject*> callable) MOZ_OVERRIDE; JS::Handle<JSObject*> callable) const MOZ_OVERRIDE;
bool unwatch(JSContext* cx, JS::Handle<JSObject*> proxy, bool unwatch(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id) MOZ_OVERRIDE; JS::Handle<jsid> id) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext* cx, JS::Handle<JSObject*> proxy, virtual bool getOwnPropertyNames(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) MOZ_OVERRIDE; JS::AutoIdVector &props) 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
// unnecessary work during enumeration. // unnecessary work during enumeration.
virtual bool keys(JSContext* cx, JS::Handle<JSObject*> proxy, virtual bool keys(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) MOZ_OVERRIDE; JS::AutoIdVector &props) const MOZ_OVERRIDE;
protected: protected:
// Hook for subclasses to implement shared getOwnPropertyNames()/keys() // Hook for subclasses to implement shared getOwnPropertyNames()/keys()
@ -69,7 +69,7 @@ protected:
// or JSITER_OWNONLY | JSITER_HIDDEN (for getOwnPropertyNames()). // or JSITER_OWNONLY | JSITER_HIDDEN (for getOwnPropertyNames()).
virtual bool ownPropNames(JSContext* cx, JS::Handle<JSObject*> proxy, virtual bool ownPropNames(JSContext* cx, JS::Handle<JSObject*> proxy,
unsigned flags, unsigned flags,
JS::AutoIdVector& props) = 0; JS::AutoIdVector& props) const = 0;
}; };
class DOMProxyHandler : public BaseDOMProxyHandler class DOMProxyHandler : public BaseDOMProxyHandler
@ -80,21 +80,25 @@ public:
{ {
} }
bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> proxy) MOZ_OVERRIDE; 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) MOZ_OVERRIDE JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE
{ {
bool unused; bool unused;
return defineProperty(cx, proxy, id, desc, &unused); return defineProperty(cx, proxy, id, desc, &unused);
} }
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;
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) MOZ_OVERRIDE; JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp)
const MOZ_OVERRIDE;
bool delete_(JSContext* cx, JS::Handle<JSObject*> proxy, bool delete_(JSContext* cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool* bp) MOZ_OVERRIDE; JS::Handle<jsid> id, bool* bp) const MOZ_OVERRIDE;
bool has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, bool* bp) MOZ_OVERRIDE; bool has(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
bool isExtensible(JSContext *cx, JS::Handle<JSObject*> proxy, bool *extensible) MOZ_OVERRIDE; 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
@ -102,7 +106,7 @@ public:
* *done to false. * *done to false.
*/ */
virtual bool setCustom(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, virtual bool setCustom(JSContext* cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
JS::MutableHandle<JS::Value> vp, bool *done); JS::MutableHandle<JS::Value> vp, bool *done) const;
static JSObject* GetExpandoObject(JSObject* obj) static JSObject* GetExpandoObject(JSObject* obj)
{ {

Просмотреть файл

@ -54,35 +54,36 @@ class CPOWProxyHandler : public BaseProxyHandler
: BaseProxyHandler(&sCPOWProxyHandler) {} : BaseProxyHandler(&sCPOWProxyHandler) {}
virtual ~CPOWProxyHandler() {} virtual ~CPOWProxyHandler() {}
virtual bool finalizeInBackground(Value priv) MOZ_OVERRIDE { virtual bool finalizeInBackground(Value priv) const MOZ_OVERRIDE {
return false; return false;
} }
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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) 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,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) 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) MOZ_OVERRIDE; virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) 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) 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) 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) MOZ_OVERRIDE; JS::HandleId id, bool strict, JS::MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) MOZ_OVERRIDE; virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) MOZ_OVERRIDE; virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
virtual bool objectClassIs(HandleObject obj, js::ESClassValue classValue, JSContext *cx) MOZ_OVERRIDE; virtual bool objectClassIs(HandleObject obj, js::ESClassValue classValue,
virtual const char* className(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; JSContext *cx) const MOZ_OVERRIDE;
virtual void finalize(JSFreeOp *fop, JSObject *proxy) MOZ_OVERRIDE; virtual const char* className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual void finalize(JSFreeOp *fop, JSObject *proxy) const MOZ_OVERRIDE;
static const CPOWProxyHandler singleton; static const CPOWProxyHandler singleton;
}; };
@ -98,7 +99,7 @@ const CPOWProxyHandler CPOWProxyHandler::singleton;
return owner->call args; return owner->call args;
bool bool
CPOWProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) CPOWProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) const
{ {
FORWARD(preventExtensions, (cx, proxy)); FORWARD(preventExtensions, (cx, proxy));
} }
@ -119,7 +120,7 @@ WrapperOwner::preventExtensions(JSContext *cx, HandleObject proxy)
bool bool
CPOWProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, CPOWProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc) const
{ {
FORWARD(getPropertyDescriptor, (cx, proxy, id, desc)); FORWARD(getPropertyDescriptor, (cx, proxy, id, desc));
} }
@ -149,7 +150,7 @@ WrapperOwner::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId
bool bool
CPOWProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, CPOWProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc) const
{ {
FORWARD(getOwnPropertyDescriptor, (cx, proxy, id, desc)); FORWARD(getOwnPropertyDescriptor, (cx, proxy, id, desc));
} }
@ -179,7 +180,7 @@ WrapperOwner::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, Handle
bool bool
CPOWProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id, CPOWProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc) const
{ {
FORWARD(defineProperty, (cx, proxy, id, desc)); FORWARD(defineProperty, (cx, proxy, id, desc));
} }
@ -208,7 +209,8 @@ WrapperOwner::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
} }
bool bool
CPOWProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props) CPOWProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) const
{ {
FORWARD(getOwnPropertyNames, (cx, proxy, props)); FORWARD(getOwnPropertyNames, (cx, proxy, props));
} }
@ -220,7 +222,7 @@ WrapperOwner::getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVecto
} }
bool bool
CPOWProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) CPOWProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
FORWARD(delete_, (cx, proxy, id, bp)); FORWARD(delete_, (cx, proxy, id, bp));
} }
@ -244,7 +246,7 @@ WrapperOwner::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
} }
bool bool
CPOWProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) CPOWProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
FORWARD(enumerate, (cx, proxy, props)); FORWARD(enumerate, (cx, proxy, props));
} }
@ -256,7 +258,7 @@ WrapperOwner::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props)
} }
bool bool
CPOWProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) CPOWProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
FORWARD(has, (cx, proxy, id, bp)); FORWARD(has, (cx, proxy, id, bp));
} }
@ -280,7 +282,7 @@ WrapperOwner::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
} }
bool bool
CPOWProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) CPOWProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
FORWARD(hasOwn, (cx, proxy, id, bp)); FORWARD(hasOwn, (cx, proxy, id, bp));
} }
@ -305,7 +307,7 @@ WrapperOwner::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
bool bool
CPOWProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver, CPOWProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
FORWARD(get, (cx, proxy, receiver, id, vp)); FORWARD(get, (cx, proxy, receiver, id, vp));
} }
@ -406,7 +408,7 @@ WrapperOwner::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
bool bool
CPOWProxyHandler::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiver, CPOWProxyHandler::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) const
{ {
FORWARD(set, (cx, proxy, receiver, id, strict, vp)); FORWARD(set, (cx, proxy, receiver, id, strict, vp));
} }
@ -440,7 +442,7 @@ WrapperOwner::set(JSContext *cx, JS::HandleObject proxy, JS::HandleObject receiv
} }
bool bool
CPOWProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) CPOWProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
FORWARD(keys, (cx, proxy, props)); FORWARD(keys, (cx, proxy, props));
} }
@ -452,7 +454,7 @@ WrapperOwner::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props)
} }
bool bool
CPOWProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) CPOWProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const
{ {
FORWARD(isExtensible, (cx, proxy, extensible)); FORWARD(isExtensible, (cx, proxy, extensible));
} }
@ -472,7 +474,7 @@ WrapperOwner::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible)
} }
bool bool
CPOWProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) CPOWProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
FORWARD(call, (cx, proxy, args)); FORWARD(call, (cx, proxy, args));
} }
@ -550,7 +552,7 @@ WrapperOwner::call(JSContext *cx, HandleObject proxy, const CallArgs &args)
bool bool
CPOWProxyHandler::objectClassIs(HandleObject proxy, js::ESClassValue classValue, JSContext *cx) CPOWProxyHandler::objectClassIs(HandleObject proxy, js::ESClassValue classValue, JSContext *cx) const
{ {
FORWARD(objectClassIs, (cx, proxy, classValue)); FORWARD(objectClassIs, (cx, proxy, classValue));
} }
@ -572,7 +574,7 @@ WrapperOwner::objectClassIs(JSContext *cx, HandleObject proxy, js::ESClassValue
} }
const char * const char *
CPOWProxyHandler::className(JSContext *cx, HandleObject proxy) CPOWProxyHandler::className(JSContext *cx, HandleObject proxy) const
{ {
WrapperOwner *parent = OwnerOf(proxy); WrapperOwner *parent = OwnerOf(proxy);
if (!parent->active()) if (!parent->active())
@ -595,7 +597,7 @@ WrapperOwner::className(JSContext *cx, HandleObject proxy)
} }
void void
CPOWProxyHandler::finalize(JSFreeOp *fop, JSObject *proxy) CPOWProxyHandler::finalize(JSFreeOp *fop, JSObject *proxy) const
{ {
OwnerOf(proxy)->drop(proxy); OwnerOf(proxy)->drop(proxy);
} }

Просмотреть файл

@ -92,14 +92,14 @@ BaseProxyHandler::~BaseProxyHandler()
bool bool
BaseProxyHandler::enter(JSContext *cx, HandleObject wrapper, HandleId id, Action act, BaseProxyHandler::enter(JSContext *cx, HandleObject wrapper, HandleId id, Action act,
bool *bp) bool *bp) const
{ {
*bp = true; *bp = true;
return true; return true;
} }
bool bool
BaseProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) BaseProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
assertEnteredPolicy(cx, proxy, id, GET); assertEnteredPolicy(cx, proxy, id, GET);
Rooted<PropertyDescriptor> desc(cx); Rooted<PropertyDescriptor> desc(cx);
@ -110,7 +110,7 @@ BaseProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp)
} }
bool bool
BaseProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) BaseProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
// Note: Proxy::set needs to invoke hasOwn to determine where the setter // Note: Proxy::set needs to invoke hasOwn to determine where the setter
// lives, so we allow SET operations to invoke us. // lives, so we allow SET operations to invoke us.
@ -124,7 +124,7 @@ BaseProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *b
bool bool
BaseProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver, BaseProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, id, GET); assertEnteredPolicy(cx, proxy, id, GET);
@ -154,7 +154,7 @@ BaseProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
bool bool
BaseProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver, BaseProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) HandleId id, bool strict, MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, id, SET); assertEnteredPolicy(cx, proxy, id, SET);
@ -224,7 +224,7 @@ BaseProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver,
} }
bool bool
BaseProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) BaseProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
JS_ASSERT(props.length() == 0); JS_ASSERT(props.length() == 0);
@ -256,7 +256,8 @@ BaseProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props)
} }
bool bool
BaseProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags, MutableHandleValue vp) BaseProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags,
MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
@ -271,25 +272,25 @@ BaseProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags, Mut
} }
bool bool
BaseProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) BaseProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
MOZ_ASSUME_UNREACHABLE("callable proxies should implement call trap"); MOZ_ASSUME_UNREACHABLE("callable proxies should implement call trap");
} }
bool bool
BaseProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) BaseProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
MOZ_ASSUME_UNREACHABLE("callable proxies should implement construct trap"); MOZ_ASSUME_UNREACHABLE("callable proxies should implement construct trap");
} }
const char * const char *
BaseProxyHandler::className(JSContext *cx, HandleObject proxy) BaseProxyHandler::className(JSContext *cx, HandleObject proxy) const
{ {
return proxy->isCallable() ? "Function" : "Object"; return proxy->isCallable() ? "Function" : "Object";
} }
JSString * JSString *
BaseProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) BaseProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const
{ {
if (proxy->isCallable()) if (proxy->isCallable())
return JS_NewStringCopyZ(cx, "function () {\n [native code]\n}"); return JS_NewStringCopyZ(cx, "function () {\n [native code]\n}");
@ -300,27 +301,29 @@ BaseProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned inden
bool bool
BaseProxyHandler::regexp_toShared(JSContext *cx, HandleObject proxy, BaseProxyHandler::regexp_toShared(JSContext *cx, HandleObject proxy,
RegExpGuard *g) RegExpGuard *g) const
{ {
MOZ_ASSUME_UNREACHABLE("This should have been a wrapped regexp"); MOZ_ASSUME_UNREACHABLE("This should have been a wrapped regexp");
} }
bool bool
BaseProxyHandler::defaultValue(JSContext *cx, HandleObject proxy, JSType hint, BaseProxyHandler::defaultValue(JSContext *cx, HandleObject proxy, JSType hint,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
return DefaultValue(cx, proxy, hint, vp); return DefaultValue(cx, proxy, hint, vp);
} }
bool bool
BaseProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args) BaseProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs args) const
{ {
ReportIncompatible(cx, args); ReportIncompatible(cx, args);
return false; return false;
} }
bool bool
BaseProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) BaseProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
bool *bp) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
RootedValue val(cx, ObjectValue(*proxy.get())); RootedValue val(cx, ObjectValue(*proxy.get()));
@ -330,30 +333,30 @@ BaseProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleVa
} }
bool bool
BaseProxyHandler::objectClassIs(HandleObject proxy, ESClassValue classValue, JSContext *cx) BaseProxyHandler::objectClassIs(HandleObject proxy, ESClassValue classValue, JSContext *cx) const
{ {
return false; return false;
} }
void void
BaseProxyHandler::finalize(JSFreeOp *fop, JSObject *proxy) BaseProxyHandler::finalize(JSFreeOp *fop, JSObject *proxy) const
{ {
} }
JSObject * JSObject *
BaseProxyHandler::weakmapKeyDelegate(JSObject *proxy) BaseProxyHandler::weakmapKeyDelegate(JSObject *proxy) const
{ {
return nullptr; return nullptr;
} }
bool bool
BaseProxyHandler::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) BaseProxyHandler::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const
{ {
MOZ_ASSUME_UNREACHABLE("Must override getPrototypeOf with lazy prototype."); MOZ_ASSUME_UNREACHABLE("Must override getPrototypeOf with lazy prototype.");
} }
bool bool
BaseProxyHandler::setPrototypeOf(JSContext *cx, HandleObject, HandleObject, bool *) BaseProxyHandler::setPrototypeOf(JSContext *cx, HandleObject, HandleObject, bool *) const
{ {
// Disallow sets of protos on proxies with lazy protos, but no hook. // Disallow sets of protos on proxies with lazy protos, but no hook.
// This keeps us away from the footgun of having the first proto set opt // This keeps us away from the footgun of having the first proto set opt
@ -364,7 +367,7 @@ BaseProxyHandler::setPrototypeOf(JSContext *cx, HandleObject, HandleObject, bool
} }
bool bool
BaseProxyHandler::watch(JSContext *cx, HandleObject proxy, HandleId id, HandleObject callable) BaseProxyHandler::watch(JSContext *cx, HandleObject proxy, HandleId id, HandleObject callable) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_WATCH, JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_WATCH,
proxy->getClass()->name); proxy->getClass()->name);
@ -372,14 +375,14 @@ BaseProxyHandler::watch(JSContext *cx, HandleObject proxy, HandleId id, HandleOb
} }
bool bool
BaseProxyHandler::unwatch(JSContext *cx, HandleObject proxy, HandleId id) BaseProxyHandler::unwatch(JSContext *cx, HandleObject proxy, HandleId id) const
{ {
return true; return true;
} }
bool bool
BaseProxyHandler::slice(JSContext *cx, HandleObject proxy, uint32_t begin, uint32_t end, BaseProxyHandler::slice(JSContext *cx, HandleObject proxy, uint32_t begin, uint32_t end,
HandleObject result) HandleObject result) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
@ -388,7 +391,7 @@ BaseProxyHandler::slice(JSContext *cx, HandleObject proxy, uint32_t begin, uint3
bool bool
DirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, DirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, proxy, id, GET | SET); assertEnteredPolicy(cx, proxy, id, GET | SET);
JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype. JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype.
@ -398,7 +401,7 @@ DirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, Han
bool bool
DirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, DirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, proxy, id, GET | SET); assertEnteredPolicy(cx, proxy, id, GET | SET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -407,7 +410,7 @@ DirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy,
bool bool
DirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id, DirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, proxy, id, SET); assertEnteredPolicy(cx, proxy, id, SET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -418,7 +421,7 @@ DirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId i
bool bool
DirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy, DirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -426,7 +429,7 @@ DirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy,
} }
bool bool
DirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) DirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
assertEnteredPolicy(cx, proxy, id, SET); assertEnteredPolicy(cx, proxy, id, SET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -435,7 +438,7 @@ DirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool
bool bool
DirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, DirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype. JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype.
@ -444,7 +447,7 @@ DirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy,
} }
bool bool
DirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) DirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, CALL); assertEnteredPolicy(cx, proxy, JSID_VOID, CALL);
RootedValue target(cx, proxy->as<ProxyObject>().private_()); RootedValue target(cx, proxy->as<ProxyObject>().private_());
@ -452,7 +455,7 @@ DirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args
} }
bool bool
DirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) DirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, CALL); assertEnteredPolicy(cx, proxy, JSID_VOID, CALL);
RootedValue target(cx, proxy->as<ProxyObject>().private_()); RootedValue target(cx, proxy->as<ProxyObject>().private_());
@ -461,7 +464,7 @@ DirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs
bool bool
DirectProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, DirectProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs args) CallArgs args) const
{ {
args.setThis(ObjectValue(*args.thisv().toObject().as<ProxyObject>().target())); args.setThis(ObjectValue(*args.thisv().toObject().as<ProxyObject>().target()));
if (!test(args.thisv())) { if (!test(args.thisv())) {
@ -474,7 +477,7 @@ DirectProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl
bool bool
DirectProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, DirectProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
bool *bp) bool *bp) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
bool b; bool b;
@ -486,14 +489,14 @@ DirectProxyHandler::hasInstance(JSContext *cx, HandleObject proxy, MutableHandle
} }
bool bool
DirectProxyHandler::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) DirectProxyHandler::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return JSObject::getProto(cx, target, protop); return JSObject::getProto(cx, target, protop);
} }
bool bool
DirectProxyHandler::setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp) DirectProxyHandler::setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return JSObject::setProto(cx, target, proto, bp); return JSObject::setProto(cx, target, proto, bp);
@ -501,14 +504,14 @@ DirectProxyHandler::setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObje
bool bool
DirectProxyHandler::objectClassIs(HandleObject proxy, ESClassValue classValue, DirectProxyHandler::objectClassIs(HandleObject proxy, ESClassValue classValue,
JSContext *cx) JSContext *cx) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return ObjectClassIs(target, classValue, cx); return ObjectClassIs(target, classValue, cx);
} }
const char * const char *
DirectProxyHandler::className(JSContext *cx, HandleObject proxy) DirectProxyHandler::className(JSContext *cx, HandleObject proxy) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -517,7 +520,7 @@ DirectProxyHandler::className(JSContext *cx, HandleObject proxy)
JSString * JSString *
DirectProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, DirectProxyHandler::fun_toString(JSContext *cx, HandleObject proxy,
unsigned indent) unsigned indent) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -526,14 +529,14 @@ DirectProxyHandler::fun_toString(JSContext *cx, HandleObject proxy,
bool bool
DirectProxyHandler::regexp_toShared(JSContext *cx, HandleObject proxy, DirectProxyHandler::regexp_toShared(JSContext *cx, HandleObject proxy,
RegExpGuard *g) RegExpGuard *g) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return RegExpToShared(cx, target, g); return RegExpToShared(cx, target, g);
} }
JSObject * JSObject *
DirectProxyHandler::weakmapKeyDelegate(JSObject *proxy) DirectProxyHandler::weakmapKeyDelegate(JSObject *proxy) const
{ {
return UncheckedUnwrap(proxy); return UncheckedUnwrap(proxy);
} }
@ -545,7 +548,7 @@ DirectProxyHandler::DirectProxyHandler(const void *family, bool hasPrototype,
} }
bool bool
DirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) DirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
assertEnteredPolicy(cx, proxy, id, GET); assertEnteredPolicy(cx, proxy, id, GET);
JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype. JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype.
@ -558,7 +561,7 @@ DirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp
} }
bool bool
DirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) DirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
// Note: Proxy::set needs to invoke hasOwn to determine where the setter // Note: Proxy::set needs to invoke hasOwn to determine where the setter
// lives, so we allow SET operations to invoke us. // lives, so we allow SET operations to invoke us.
@ -573,7 +576,7 @@ DirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool
bool bool
DirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver, DirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, id, GET); assertEnteredPolicy(cx, proxy, id, GET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -582,7 +585,7 @@ DirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver
bool bool
DirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver, DirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) HandleId id, bool strict, MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, id, SET); assertEnteredPolicy(cx, proxy, id, SET);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -590,7 +593,7 @@ DirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver
} }
bool bool
DirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) DirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
@ -599,7 +602,7 @@ DirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props)
bool bool
DirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags, DirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE); assertEnteredPolicy(cx, proxy, JSID_VOID, ENUMERATE);
JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype. JS_ASSERT(!hasPrototype()); // Should never be called if there's a prototype.
@ -608,14 +611,14 @@ DirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags,
} }
bool bool
DirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) DirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return JSObject::isExtensible(cx, target, extensible); return JSObject::isExtensible(cx, target, extensible);
} }
bool bool
DirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) DirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) const
{ {
RootedObject target(cx, proxy->as<ProxyObject>().target()); RootedObject target(cx, proxy->as<ProxyObject>().target());
return JSObject::preventExtensions(cx, target); return JSObject::preventExtensions(cx, target);
@ -738,36 +741,37 @@ class ScriptedIndirectProxyHandler : public BaseProxyHandler
virtual ~ScriptedIndirectProxyHandler(); virtual ~ScriptedIndirectProxyHandler();
/* ES5 Harmony fundamental proxy traps. */ /* ES5 Harmony fundamental proxy traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id, virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props); virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy,
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) 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;
/* ES5 Harmony derived proxy traps. */ /* ES5 Harmony derived proxy traps. */
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) 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) 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) 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) MOZ_OVERRIDE; bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) 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) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) 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) MOZ_OVERRIDE; virtual bool construct(JSContext *cx, HandleObject proxy, 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) MOZ_OVERRIDE; CallArgs args) const MOZ_OVERRIDE;
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) MOZ_OVERRIDE; virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const MOZ_OVERRIDE;
virtual bool isScripted() MOZ_OVERRIDE { return true; } virtual bool isScripted() const MOZ_OVERRIDE { return true; }
static const ScriptedIndirectProxyHandler singleton; static const ScriptedIndirectProxyHandler singleton;
}; };
@ -802,7 +806,8 @@ ScriptedIndirectProxyHandler::~ScriptedIndirectProxyHandler()
} }
bool bool
ScriptedIndirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) ScriptedIndirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy,
bool *extensible) const
{ {
// Scripted indirect proxies don't support extensibility changes. // Scripted indirect proxies don't support extensibility changes.
*extensible = true; *extensible = true;
@ -810,7 +815,7 @@ ScriptedIndirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bo
} }
bool bool
ScriptedIndirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) ScriptedIndirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) const
{ {
// See above. // See above.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY);
@ -840,7 +845,7 @@ GetIndirectProxyHandlerObject(JSObject *proxy)
bool bool
ScriptedIndirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, ScriptedIndirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -853,7 +858,7 @@ ScriptedIndirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject
bool bool
ScriptedIndirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, ScriptedIndirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -866,7 +871,7 @@ ScriptedIndirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObje
bool bool
ScriptedIndirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id, ScriptedIndirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -877,7 +882,7 @@ ScriptedIndirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy,
bool bool
ScriptedIndirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy, ScriptedIndirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) AutoIdVector &props) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -887,7 +892,7 @@ ScriptedIndirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject pr
} }
bool bool
ScriptedIndirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) ScriptedIndirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -897,7 +902,7 @@ ScriptedIndirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleI
} }
bool bool
ScriptedIndirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) ScriptedIndirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -907,7 +912,7 @@ ScriptedIndirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoI
} }
bool bool
ScriptedIndirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) ScriptedIndirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -920,7 +925,7 @@ ScriptedIndirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id
} }
bool bool
ScriptedIndirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) ScriptedIndirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue fval(cx), value(cx); RootedValue fval(cx), value(cx);
@ -934,7 +939,7 @@ ScriptedIndirectProxyHandler::hasOwn(JSContext *cx, HandleObject proxy, HandleId
bool bool
ScriptedIndirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver, ScriptedIndirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue idv(cx); RootedValue idv(cx);
@ -953,7 +958,7 @@ ScriptedIndirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObjec
bool bool
ScriptedIndirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver, ScriptedIndirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) HandleId id, bool strict, MutableHandleValue vp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue idv(cx); RootedValue idv(cx);
@ -972,7 +977,7 @@ ScriptedIndirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObjec
} }
bool bool
ScriptedIndirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) ScriptedIndirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue value(cx); RootedValue value(cx);
@ -986,7 +991,7 @@ ScriptedIndirectProxyHandler::keys(JSContext *cx, HandleObject proxy, AutoIdVect
bool bool
ScriptedIndirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags, ScriptedIndirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetIndirectProxyHandlerObject(proxy));
RootedValue value(cx); RootedValue value(cx);
@ -999,7 +1004,7 @@ ScriptedIndirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigne
} }
bool bool
ScriptedIndirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) ScriptedIndirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, CALL); assertEnteredPolicy(cx, proxy, JSID_VOID, CALL);
RootedObject ccHolder(cx, &proxy->as<ProxyObject>().extra(0).toObject()); RootedObject ccHolder(cx, &proxy->as<ProxyObject>().extra(0).toObject());
@ -1010,7 +1015,7 @@ ScriptedIndirectProxyHandler::call(JSContext *cx, HandleObject proxy, const Call
} }
bool bool
ScriptedIndirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) ScriptedIndirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, CALL); assertEnteredPolicy(cx, proxy, JSID_VOID, CALL);
RootedObject ccHolder(cx, &proxy->as<ProxyObject>().extra(0).toObject()); RootedObject ccHolder(cx, &proxy->as<ProxyObject>().extra(0).toObject());
@ -1023,13 +1028,13 @@ ScriptedIndirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const
bool bool
ScriptedIndirectProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, ScriptedIndirectProxyHandler::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs args) CallArgs args) const
{ {
return BaseProxyHandler::nativeCall(cx, test, impl, args); return BaseProxyHandler::nativeCall(cx, test, impl, args);
} }
JSString * JSString *
ScriptedIndirectProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) ScriptedIndirectProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const
{ {
assertEnteredPolicy(cx, proxy, JSID_VOID, GET); assertEnteredPolicy(cx, proxy, JSID_VOID, GET);
if (!proxy->isCallable()) { if (!proxy->isCallable()) {
@ -1052,42 +1057,42 @@ class ScriptedDirectProxyHandler : public DirectProxyHandler {
virtual ~ScriptedDirectProxyHandler(); virtual ~ScriptedDirectProxyHandler();
/* ES5 Harmony fundamental proxy traps. */ /* ES5 Harmony fundamental proxy traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id, virtual bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props) virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy,
MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) 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) MOZ_OVERRIDE; virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE;
/* ES5 Harmony derived proxy traps. */ /* ES5 Harmony derived proxy traps. */
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) 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) MOZ_OVERRIDE { virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE {
return BaseProxyHandler::hasOwn(cx, proxy, id, bp); 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) 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) MOZ_OVERRIDE; bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
// 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) MOZ_OVERRIDE { virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE {
return BaseProxyHandler::keys(cx, proxy, props); return BaseProxyHandler::keys(cx, proxy, props);
} }
virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags, virtual bool iterate(JSContext *cx, HandleObject proxy, unsigned flags,
MutableHandleValue vp) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
/* ES6 Harmony traps */ /* ES6 Harmony traps */
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) 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) MOZ_OVERRIDE; virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const MOZ_OVERRIDE;
virtual bool isScripted() MOZ_OVERRIDE { return true; } virtual bool isScripted() const MOZ_OVERRIDE { return true; }
static const ScriptedDirectProxyHandler singleton; static const ScriptedDirectProxyHandler singleton;
}; };
@ -1364,7 +1369,7 @@ ScriptedDirectProxyHandler::~ScriptedDirectProxyHandler()
} }
bool bool
ScriptedDirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) ScriptedDirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy) const
{ {
// step a // step a
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1411,7 +1416,7 @@ ScriptedDirectProxyHandler::preventExtensions(JSContext *cx, HandleObject proxy)
// FIXME: Move to Proxy::getPropertyDescriptor once ScriptedIndirectProxy is removed // FIXME: Move to Proxy::getPropertyDescriptor once ScriptedIndirectProxy is removed
bool bool
ScriptedDirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, ScriptedDirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
JS_CHECK_RECURSION(cx, return false); JS_CHECK_RECURSION(cx, return false);
@ -1432,7 +1437,7 @@ ScriptedDirectProxyHandler::getPropertyDescriptor(JSContext *cx, HandleObject pr
// ES6 (5 April 2014) Proxy.[[GetOwnProperty]](P) // ES6 (5 April 2014) Proxy.[[GetOwnProperty]](P)
bool bool
ScriptedDirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, ScriptedDirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
// step 2 // step 2
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1548,7 +1553,7 @@ ScriptedDirectProxyHandler::getOwnPropertyDescriptor(JSContext *cx, HandleObject
// ES6 (5 April 2014) Proxy.[[DefineOwnProperty]](O,P) // ES6 (5 April 2014) Proxy.[[DefineOwnProperty]](O,P)
bool bool
ScriptedDirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id, ScriptedDirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
// step 2 // step 2
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1634,7 +1639,7 @@ ScriptedDirectProxyHandler::defineProperty(JSContext *cx, HandleObject proxy, Ha
// ES6 (5 April 2014) Proxy.[[OwnPropertyKeys]](O) // ES6 (5 April 2014) Proxy.[[OwnPropertyKeys]](O)
bool bool
ScriptedDirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy, ScriptedDirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) AutoIdVector &props) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1676,7 +1681,7 @@ ScriptedDirectProxyHandler::getOwnPropertyNames(JSContext *cx, HandleObject prox
// ES6 (5 April 2014) Proxy.[[Delete]](P) // ES6 (5 April 2014) Proxy.[[Delete]](P)
bool bool
ScriptedDirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) ScriptedDirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
// step 2 // step 2
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1733,7 +1738,7 @@ ScriptedDirectProxyHandler::delete_(JSContext *cx, HandleObject proxy, HandleId
// 12.6.4 The for-in Statement, step 6 // 12.6.4 The for-in Statement, step 6
bool bool
ScriptedDirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) ScriptedDirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const
{ {
// step a // step a
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1776,7 +1781,7 @@ ScriptedDirectProxyHandler::enumerate(JSContext *cx, HandleObject proxy, AutoIdV
// Proxy.[[HasProperty]](P) // Proxy.[[HasProperty]](P)
bool bool
ScriptedDirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) ScriptedDirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1838,7 +1843,7 @@ ScriptedDirectProxyHandler::has(JSContext *cx, HandleObject proxy, HandleId id,
// Proxy.[[GetP]](P, Receiver) // Proxy.[[GetP]](P, Receiver)
bool bool
ScriptedDirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver, ScriptedDirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1901,7 +1906,7 @@ ScriptedDirectProxyHandler::get(JSContext *cx, HandleObject proxy, HandleObject
// Proxy.[[SetP]](P, V, Receiver) // Proxy.[[SetP]](P, V, Receiver)
bool bool
ScriptedDirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver, ScriptedDirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) HandleId id, bool strict, MutableHandleValue vp) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -1966,7 +1971,7 @@ ScriptedDirectProxyHandler::set(JSContext *cx, HandleObject proxy, HandleObject
// ES6 (5 April, 2014) 9.5.3 Proxy.[[IsExtensible]](P) // ES6 (5 April, 2014) 9.5.3 Proxy.[[IsExtensible]](P)
bool bool
ScriptedDirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) ScriptedDirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const
{ {
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -2002,14 +2007,14 @@ ScriptedDirectProxyHandler::isExtensible(JSContext *cx, HandleObject proxy, bool
bool bool
ScriptedDirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags, ScriptedDirectProxyHandler::iterate(JSContext *cx, HandleObject proxy, unsigned flags,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
// FIXME: Provide a proper implementation for this trap, see bug 787004 // FIXME: Provide a proper implementation for this trap, see bug 787004
return DirectProxyHandler::iterate(cx, proxy, flags, vp); return DirectProxyHandler::iterate(cx, proxy, flags, vp);
} }
bool bool
ScriptedDirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) ScriptedDirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));
@ -2047,7 +2052,7 @@ ScriptedDirectProxyHandler::call(JSContext *cx, HandleObject proxy, const CallAr
} }
bool bool
ScriptedDirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) ScriptedDirectProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const
{ {
// step 1 // step 1
RootedObject handler(cx, GetDirectProxyHandlerObject(proxy)); RootedObject handler(cx, GetDirectProxyHandlerObject(proxy));

Просмотреть файл

@ -136,7 +136,7 @@ class JS_FRIEND_API(BaseProxyHandler)
return offsetof(BaseProxyHandler, mFamily); return offsetof(BaseProxyHandler, mFamily);
} }
virtual bool finalizeInBackground(Value priv) { virtual bool finalizeInBackground(Value priv) const {
/* /*
* Called on creation of a proxy to determine whether its finalize * Called on creation of a proxy to determine whether its finalize
* method can be finalized on the background thread. * method can be finalized on the background thread.
@ -169,59 +169,59 @@ 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); bool *bp) const;
/* ES5 Harmony fundamental proxy traps. */ /* ES5 Harmony fundamental proxy traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) = 0; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const = 0;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) = 0; MutableHandle<JSPropertyDescriptor> desc) const = 0;
virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, virtual bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy,
HandleId id, MutableHandle<JSPropertyDescriptor> desc) = 0; 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) = 0; MutableHandle<JSPropertyDescriptor> desc) const = 0;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) = 0; AutoIdVector &props) const = 0;
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) = 0; virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const = 0;
virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) = 0; virtual bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const = 0;
/* ES5 Harmony derived proxy traps. */ /* ES5 Harmony derived proxy traps. */
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp); virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const;
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, bool *bp); 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); 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); HandleId id, bool strict, MutableHandleValue vp) const;
virtual bool keys(JSContext *cx, HandleObject proxy, AutoIdVector &props); 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); MutableHandleValue vp) const;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) = 0; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const = 0;
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args); virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args); virtual bool construct(JSContext *cx, HandleObject proxy, const CallArgs &args) const;
virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args); virtual bool nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args) const;
virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp); virtual bool hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) const;
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx); virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) const;
virtual const char *className(JSContext *cx, HandleObject proxy); virtual const char *className(JSContext *cx, HandleObject proxy) const;
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent); virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const;
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g); virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const;
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp); virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp) const;
virtual void finalize(JSFreeOp *fop, JSObject *proxy); virtual void finalize(JSFreeOp *fop, JSObject *proxy) const;
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop); virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const;
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp); virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp) const;
// These two hooks must be overridden, or not overridden, in tandem -- no // These two hooks must be overridden, or not overridden, in tandem -- no
// overriding just one! // overriding just one!
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); JS::HandleObject callable) const;
virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id); virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id) const;
virtual bool slice(JSContext *cx, HandleObject proxy, uint32_t begin, uint32_t end, virtual bool slice(JSContext *cx, HandleObject proxy, uint32_t begin, uint32_t end,
HandleObject result); HandleObject result) const;
/* See comment for weakmapKeyDelegateOp in js/Class.h. */ /* See comment for weakmapKeyDelegateOp in js/Class.h. */
virtual JSObject *weakmapKeyDelegate(JSObject *proxy); virtual JSObject *weakmapKeyDelegate(JSObject *proxy) const;
virtual bool isScripted() { return false; } virtual bool isScripted() const { return false; }
}; };
/* /*
@ -241,52 +241,54 @@ class JS_PUBLIC_API(DirectProxyHandler) : public BaseProxyHandler
bool hasSecurityPolicy = false); bool hasSecurityPolicy = false);
/* ES5 Harmony fundamental proxy traps. */ /* ES5 Harmony fundamental proxy traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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) 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,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, virtual bool getOwnPropertyNames(JSContext *cx, HandleObject proxy,
AutoIdVector &props) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id, virtual bool delete_(JSContext *cx, HandleObject proxy, HandleId id,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual bool enumerate(JSContext *cx, HandleObject proxy, virtual bool enumerate(JSContext *cx, HandleObject proxy,
AutoIdVector &props) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
/* ES5 Harmony derived proxy traps. */ /* ES5 Harmony derived proxy traps. */
virtual bool has(JSContext *cx, HandleObject proxy, HandleId id, virtual bool has(JSContext *cx, HandleObject proxy, HandleId id,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id, virtual bool hasOwn(JSContext *cx, HandleObject proxy, HandleId id,
bool *bp) MOZ_OVERRIDE; 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) MOZ_OVERRIDE; HandleId id, MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, virtual bool set(JSContext *cx, HandleObject proxy, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) MOZ_OVERRIDE; HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, HandleObject proxy, virtual bool keys(JSContext *cx, HandleObject proxy,
AutoIdVector &props) MOZ_OVERRIDE; 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) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) 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) MOZ_OVERRIDE; virtual bool construct(JSContext *cx, HandleObject proxy, 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) 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,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop); virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, bool *bp); MutableHandleObject protop) const MOZ_OVERRIDE;
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
bool *bp) const MOZ_OVERRIDE;
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
JSContext *cx) MOZ_OVERRIDE; JSContext *cx) const MOZ_OVERRIDE;
virtual const char *className(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual const char *className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, virtual JSString *fun_toString(JSContext *cx, HandleObject proxy,
unsigned indent) MOZ_OVERRIDE; unsigned indent) const MOZ_OVERRIDE;
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, virtual bool regexp_toShared(JSContext *cx, HandleObject proxy,
RegExpGuard *g) MOZ_OVERRIDE; RegExpGuard *g) const MOZ_OVERRIDE;
virtual JSObject *weakmapKeyDelegate(JSObject *proxy); virtual JSObject *weakmapKeyDelegate(JSObject *proxy) const MOZ_OVERRIDE;
}; };
/* /*

Просмотреть файл

@ -30,7 +30,7 @@ const char js::sWrapperFamily = 0;
* 720619. * 720619.
*/ */
bool bool
Wrapper::defaultValue(JSContext *cx, HandleObject proxy, JSType hint, MutableHandleValue vp) Wrapper::defaultValue(JSContext *cx, HandleObject proxy, JSType hint, MutableHandleValue vp) const
{ {
vp.set(ObjectValue(*proxy->as<ProxyObject>().target())); vp.set(ObjectValue(*proxy->as<ProxyObject>().target()));
if (hint == JSTYPE_VOID) if (hint == JSTYPE_VOID)
@ -180,7 +180,7 @@ CrossCompartmentWrapper::~CrossCompartmentWrapper()
{ {
} }
bool Wrapper::finalizeInBackground(Value priv) bool Wrapper::finalizeInBackground(Value priv) const
{ {
if (!priv.isObject()) if (!priv.isObject())
return true; return true;
@ -210,7 +210,7 @@ bool Wrapper::finalizeInBackground(Value priv)
#define NOTHING (true) #define NOTHING (true)
bool bool
CrossCompartmentWrapper::isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) CrossCompartmentWrapper::isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -219,7 +219,7 @@ CrossCompartmentWrapper::isExtensible(JSContext *cx, HandleObject wrapper, bool
} }
bool bool
CrossCompartmentWrapper::preventExtensions(JSContext *cx, HandleObject wrapper) CrossCompartmentWrapper::preventExtensions(JSContext *cx, HandleObject wrapper) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -229,7 +229,7 @@ CrossCompartmentWrapper::preventExtensions(JSContext *cx, HandleObject wrapper)
bool bool
CrossCompartmentWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, CrossCompartmentWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -239,7 +239,7 @@ CrossCompartmentWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapp
bool bool
CrossCompartmentWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, CrossCompartmentWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -249,7 +249,7 @@ CrossCompartmentWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wr
bool bool
CrossCompartmentWrapper::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id, CrossCompartmentWrapper::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
Rooted<PropertyDescriptor> desc2(cx, desc); Rooted<PropertyDescriptor> desc2(cx, desc);
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
@ -260,7 +260,7 @@ CrossCompartmentWrapper::defineProperty(JSContext *cx, HandleObject wrapper, Han
bool bool
CrossCompartmentWrapper::getOwnPropertyNames(JSContext *cx, HandleObject wrapper, CrossCompartmentWrapper::getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -269,7 +269,7 @@ CrossCompartmentWrapper::getOwnPropertyNames(JSContext *cx, HandleObject wrapper
} }
bool bool
CrossCompartmentWrapper::delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) CrossCompartmentWrapper::delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -278,7 +278,7 @@ CrossCompartmentWrapper::delete_(JSContext *cx, HandleObject wrapper, HandleId i
} }
bool bool
CrossCompartmentWrapper::enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) CrossCompartmentWrapper::enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -287,7 +287,7 @@ CrossCompartmentWrapper::enumerate(JSContext *cx, HandleObject wrapper, AutoIdVe
} }
bool bool
CrossCompartmentWrapper::has(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) CrossCompartmentWrapper::has(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -296,7 +296,7 @@ CrossCompartmentWrapper::has(JSContext *cx, HandleObject wrapper, HandleId id, b
} }
bool bool
CrossCompartmentWrapper::hasOwn(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) CrossCompartmentWrapper::hasOwn(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -306,7 +306,7 @@ CrossCompartmentWrapper::hasOwn(JSContext *cx, HandleObject wrapper, HandleId id
bool bool
CrossCompartmentWrapper::get(JSContext *cx, HandleObject wrapper, HandleObject receiver, CrossCompartmentWrapper::get(JSContext *cx, HandleObject wrapper, HandleObject receiver,
HandleId id, MutableHandleValue vp) HandleId id, MutableHandleValue vp) const
{ {
RootedObject receiverCopy(cx, receiver); RootedObject receiverCopy(cx, receiver);
{ {
@ -322,7 +322,7 @@ CrossCompartmentWrapper::get(JSContext *cx, HandleObject wrapper, HandleObject r
bool bool
CrossCompartmentWrapper::set(JSContext *cx, HandleObject wrapper, HandleObject receiver, CrossCompartmentWrapper::set(JSContext *cx, HandleObject wrapper, HandleObject receiver,
HandleId id, bool strict, MutableHandleValue vp) HandleId id, bool strict, MutableHandleValue vp) const
{ {
RootedObject receiverCopy(cx, receiver); RootedObject receiverCopy(cx, receiver);
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
@ -333,7 +333,7 @@ CrossCompartmentWrapper::set(JSContext *cx, HandleObject wrapper, HandleObject r
} }
bool bool
CrossCompartmentWrapper::keys(JSContext *cx, HandleObject wrapper, AutoIdVector &props) CrossCompartmentWrapper::keys(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -416,7 +416,7 @@ Reify(JSContext *cx, JSCompartment *origin, MutableHandleValue vp)
bool bool
CrossCompartmentWrapper::iterate(JSContext *cx, HandleObject wrapper, unsigned flags, CrossCompartmentWrapper::iterate(JSContext *cx, HandleObject wrapper, unsigned flags,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
{ {
AutoCompartment call(cx, wrappedObject(wrapper)); AutoCompartment call(cx, wrappedObject(wrapper));
@ -430,7 +430,7 @@ CrossCompartmentWrapper::iterate(JSContext *cx, HandleObject wrapper, unsigned f
} }
bool bool
CrossCompartmentWrapper::call(JSContext *cx, HandleObject wrapper, const CallArgs &args) CrossCompartmentWrapper::call(JSContext *cx, HandleObject wrapper, const CallArgs &args) const
{ {
RootedObject wrapped(cx, wrappedObject(wrapper)); RootedObject wrapped(cx, wrappedObject(wrapper));
@ -454,7 +454,7 @@ CrossCompartmentWrapper::call(JSContext *cx, HandleObject wrapper, const CallArg
} }
bool bool
CrossCompartmentWrapper::construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) CrossCompartmentWrapper::construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) const
{ {
RootedObject wrapped(cx, wrappedObject(wrapper)); RootedObject wrapped(cx, wrappedObject(wrapper));
{ {
@ -472,7 +472,7 @@ CrossCompartmentWrapper::construct(JSContext *cx, HandleObject wrapper, const Ca
bool bool
CrossCompartmentWrapper::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CrossCompartmentWrapper::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs srcArgs) CallArgs srcArgs) const
{ {
RootedObject wrapper(cx, &srcArgs.thisv().toObject()); RootedObject wrapper(cx, &srcArgs.thisv().toObject());
JS_ASSERT(srcArgs.thisv().isMagic(JS_IS_CONSTRUCTING) || JS_ASSERT(srcArgs.thisv().isMagic(JS_IS_CONSTRUCTING) ||
@ -521,7 +521,7 @@ CrossCompartmentWrapper::nativeCall(JSContext *cx, IsAcceptableThis test, Native
bool bool
CrossCompartmentWrapper::hasInstance(JSContext *cx, HandleObject wrapper, MutableHandleValue v, CrossCompartmentWrapper::hasInstance(JSContext *cx, HandleObject wrapper, MutableHandleValue v,
bool *bp) bool *bp) const
{ {
AutoCompartment call(cx, wrappedObject(wrapper)); AutoCompartment call(cx, wrappedObject(wrapper));
if (!cx->compartment()->wrap(cx, v)) if (!cx->compartment()->wrap(cx, v))
@ -530,14 +530,14 @@ CrossCompartmentWrapper::hasInstance(JSContext *cx, HandleObject wrapper, Mutabl
} }
const char * const char *
CrossCompartmentWrapper::className(JSContext *cx, HandleObject wrapper) CrossCompartmentWrapper::className(JSContext *cx, HandleObject wrapper) const
{ {
AutoCompartment call(cx, wrappedObject(wrapper)); AutoCompartment call(cx, wrappedObject(wrapper));
return Wrapper::className(cx, wrapper); return Wrapper::className(cx, wrapper);
} }
JSString * JSString *
CrossCompartmentWrapper::fun_toString(JSContext *cx, HandleObject wrapper, unsigned indent) CrossCompartmentWrapper::fun_toString(JSContext *cx, HandleObject wrapper, unsigned indent) const
{ {
RootedString str(cx); RootedString str(cx);
{ {
@ -552,7 +552,7 @@ CrossCompartmentWrapper::fun_toString(JSContext *cx, HandleObject wrapper, unsig
} }
bool bool
CrossCompartmentWrapper::regexp_toShared(JSContext *cx, HandleObject wrapper, RegExpGuard *g) CrossCompartmentWrapper::regexp_toShared(JSContext *cx, HandleObject wrapper, RegExpGuard *g) const
{ {
RegExpGuard wrapperGuard(cx); RegExpGuard wrapperGuard(cx);
{ {
@ -568,7 +568,7 @@ CrossCompartmentWrapper::regexp_toShared(JSContext *cx, HandleObject wrapper, Re
bool bool
CrossCompartmentWrapper::defaultValue(JSContext *cx, HandleObject wrapper, JSType hint, CrossCompartmentWrapper::defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
NOTHING, NOTHING,
@ -578,7 +578,7 @@ CrossCompartmentWrapper::defaultValue(JSContext *cx, HandleObject wrapper, JSTyp
bool bool
CrossCompartmentWrapper::getPrototypeOf(JSContext *cx, HandleObject wrapper, CrossCompartmentWrapper::getPrototypeOf(JSContext *cx, HandleObject wrapper,
MutableHandleObject protop) MutableHandleObject protop) const
{ {
{ {
RootedObject wrapped(cx, wrappedObject(wrapper)); RootedObject wrapped(cx, wrappedObject(wrapper));
@ -594,7 +594,7 @@ CrossCompartmentWrapper::getPrototypeOf(JSContext *cx, HandleObject wrapper,
bool bool
CrossCompartmentWrapper::setPrototypeOf(JSContext *cx, HandleObject wrapper, CrossCompartmentWrapper::setPrototypeOf(JSContext *cx, HandleObject wrapper,
HandleObject proto, bool *bp) HandleObject proto, bool *bp) const
{ {
RootedObject protoCopy(cx, proto); RootedObject protoCopy(cx, proto);
PIERCE(cx, wrapper, PIERCE(cx, wrapper,
@ -615,7 +615,7 @@ SecurityWrapper<Base>::SecurityWrapper(unsigned flags, bool hasPrototype)
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) SecurityWrapper<Base>::isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const
{ {
// Just like BaseProxyHandler, SecurityWrappers claim by default to always // Just like BaseProxyHandler, SecurityWrappers claim by default to always
// be extensible, so as not to leak information about the state of the // be extensible, so as not to leak information about the state of the
@ -626,7 +626,7 @@ SecurityWrapper<Base>::isExtensible(JSContext *cx, HandleObject wrapper, bool *e
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::preventExtensions(JSContext *cx, HandleObject wrapper) SecurityWrapper<Base>::preventExtensions(JSContext *cx, HandleObject wrapper) const
{ {
// See above. // See above.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
@ -636,7 +636,7 @@ SecurityWrapper<Base>::preventExtensions(JSContext *cx, HandleObject wrapper)
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::enter(JSContext *cx, HandleObject wrapper, HandleId id, SecurityWrapper<Base>::enter(JSContext *cx, HandleObject wrapper, HandleId id,
Wrapper::Action act, bool *bp) Wrapper::Action act, bool *bp) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
*bp = false; *bp = false;
@ -646,7 +646,7 @@ SecurityWrapper<Base>::enter(JSContext *cx, HandleObject wrapper, HandleId id,
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, SecurityWrapper<Base>::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs args) CallArgs args) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
return false; return false;
@ -655,7 +655,7 @@ SecurityWrapper<Base>::nativeCall(JSContext *cx, IsAcceptableThis test, NativeIm
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::setPrototypeOf(JSContext *cx, HandleObject wrapper, SecurityWrapper<Base>::setPrototypeOf(JSContext *cx, HandleObject wrapper,
HandleObject proto, bool *bp) HandleObject proto, bool *bp) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
return false; return false;
@ -667,21 +667,21 @@ SecurityWrapper<Base>::setPrototypeOf(JSContext *cx, HandleObject wrapper,
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::defaultValue(JSContext *cx, HandleObject wrapper, SecurityWrapper<Base>::defaultValue(JSContext *cx, HandleObject wrapper,
JSType hint, MutableHandleValue vp) JSType hint, MutableHandleValue vp) const
{ {
return DefaultValue(cx, wrapper, hint, vp); return DefaultValue(cx, wrapper, hint, vp);
} }
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) SecurityWrapper<Base>::objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) const
{ {
return false; return false;
} }
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::regexp_toShared(JSContext *cx, HandleObject obj, RegExpGuard *g) SecurityWrapper<Base>::regexp_toShared(JSContext *cx, HandleObject obj, RegExpGuard *g) const
{ {
return Base::regexp_toShared(cx, obj, g); return Base::regexp_toShared(cx, obj, g);
} }
@ -689,7 +689,7 @@ SecurityWrapper<Base>::regexp_toShared(JSContext *cx, HandleObject obj, RegExpGu
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::defineProperty(JSContext *cx, HandleObject wrapper, SecurityWrapper<Base>::defineProperty(JSContext *cx, HandleObject wrapper,
HandleId id, MutableHandle<PropertyDescriptor> desc) HandleId id, MutableHandle<PropertyDescriptor> desc) const
{ {
if (desc.getter() || desc.setter()) { if (desc.getter() || desc.setter()) {
JSString *str = IdToString(cx, id); JSString *str = IdToString(cx, id);
@ -705,7 +705,7 @@ SecurityWrapper<Base>::defineProperty(JSContext *cx, HandleObject wrapper,
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::watch(JSContext *cx, HandleObject proxy, SecurityWrapper<Base>::watch(JSContext *cx, HandleObject proxy,
HandleId id, HandleObject callable) HandleId id, HandleObject callable) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
return false; return false;
@ -714,7 +714,7 @@ SecurityWrapper<Base>::watch(JSContext *cx, HandleObject proxy,
template <class Base> template <class Base>
bool bool
SecurityWrapper<Base>::unwatch(JSContext *cx, HandleObject proxy, SecurityWrapper<Base>::unwatch(JSContext *cx, HandleObject proxy,
HandleId id) HandleId id) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_UNWRAP_DENIED);
return false; return false;
@ -730,7 +730,7 @@ DeadObjectProxy::DeadObjectProxy()
} }
bool bool
DeadObjectProxy::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) DeadObjectProxy::isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const
{ {
// This is kind of meaningless, but dead-object semantics aside, // This is kind of meaningless, but dead-object semantics aside,
// [[Extensible]] always being true is consistent with other proxy types. // [[Extensible]] always being true is consistent with other proxy types.
@ -739,7 +739,7 @@ DeadObjectProxy::isExtensible(JSContext *cx, HandleObject proxy, bool *extensibl
} }
bool bool
DeadObjectProxy::preventExtensions(JSContext *cx, HandleObject proxy) DeadObjectProxy::preventExtensions(JSContext *cx, HandleObject proxy) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
@ -747,7 +747,7 @@ DeadObjectProxy::preventExtensions(JSContext *cx, HandleObject proxy)
bool bool
DeadObjectProxy::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, DeadObjectProxy::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
@ -755,7 +755,7 @@ DeadObjectProxy::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, Hand
bool bool
DeadObjectProxy::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, DeadObjectProxy::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
@ -763,7 +763,7 @@ DeadObjectProxy::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, H
bool bool
DeadObjectProxy::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id, DeadObjectProxy::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<PropertyDescriptor> desc) MutableHandle<PropertyDescriptor> desc) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
@ -771,89 +771,92 @@ DeadObjectProxy::defineProperty(JSContext *cx, HandleObject wrapper, HandleId id
bool bool
DeadObjectProxy::getOwnPropertyNames(JSContext *cx, HandleObject wrapper, DeadObjectProxy::getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) DeadObjectProxy::delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) DeadObjectProxy::enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::call(JSContext *cx, HandleObject wrapper, const CallArgs &args) DeadObjectProxy::call(JSContext *cx, HandleObject wrapper, const CallArgs &args) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) DeadObjectProxy::construct(JSContext *cx, HandleObject wrapper, const CallArgs &args) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl, CallArgs args) DeadObjectProxy::nativeCall(JSContext *cx, IsAcceptableThis test, NativeImpl impl,
CallArgs args) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v, bool *bp) DeadObjectProxy::hasInstance(JSContext *cx, HandleObject proxy, MutableHandleValue v,
bool *bp) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) DeadObjectProxy::objectClassIs(HandleObject obj, ESClassValue classValue, JSContext *cx) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
const char * const char *
DeadObjectProxy::className(JSContext *cx, HandleObject wrapper) DeadObjectProxy::className(JSContext *cx, HandleObject wrapper) const
{ {
return "DeadObject"; return "DeadObject";
} }
JSString * JSString *
DeadObjectProxy::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) DeadObjectProxy::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const
{ {
return nullptr; return nullptr;
} }
bool bool
DeadObjectProxy::regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) DeadObjectProxy::regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::defaultValue(JSContext *cx, HandleObject obj, JSType hint, MutableHandleValue vp) DeadObjectProxy::defaultValue(JSContext *cx, HandleObject obj, JSType hint,
MutableHandleValue vp) const
{ {
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
return false; return false;
} }
bool bool
DeadObjectProxy::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) DeadObjectProxy::getPrototypeOf(JSContext *cx, HandleObject proxy, MutableHandleObject protop) const
{ {
protop.set(nullptr); protop.set(nullptr);
return true; return true;

Просмотреть файл

@ -66,7 +66,7 @@ class JS_FRIEND_API(Wrapper) : public DirectProxyHandler
}; };
virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint, virtual bool defaultValue(JSContext *cx, HandleObject obj, JSType hint,
MutableHandleValue vp) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
static JSObject *New(JSContext *cx, JSObject *obj, JSObject *parent, const Wrapper *handler, static JSObject *New(JSContext *cx, JSObject *obj, JSObject *parent, const Wrapper *handler,
const WrapperOptions *options = nullptr); const WrapperOptions *options = nullptr);
@ -85,7 +85,7 @@ class JS_FRIEND_API(Wrapper) : public DirectProxyHandler
virtual ~Wrapper(); virtual ~Wrapper();
virtual bool finalizeInBackground(Value priv) MOZ_OVERRIDE; virtual bool finalizeInBackground(Value priv) const MOZ_OVERRIDE;
static const Wrapper singleton; static const Wrapper singleton;
static const Wrapper singletonWithPrototype; static const Wrapper singletonWithPrototype;
@ -109,47 +109,47 @@ class JS_FRIEND_API(CrossCompartmentWrapper) : public Wrapper
virtual ~CrossCompartmentWrapper(); virtual ~CrossCompartmentWrapper();
/* ES5 Harmony fundamental wrapper traps. */ /* ES5 Harmony fundamental wrapper traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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) 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,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject wrapper, virtual bool getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) 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) MOZ_OVERRIDE; virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
/* ES5 Harmony derived wrapper traps. */ /* ES5 Harmony derived wrapper traps. */
virtual bool has(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) 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) 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) 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) MOZ_OVERRIDE; HandleId id, bool strict, MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, HandleObject wrapper, AutoIdVector &props) 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) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
virtual bool call(JSContext *cx, HandleObject wrapper, const CallArgs &args) 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) 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) 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,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual const char *className(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual const char *className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual JSString *fun_toString(JSContext *cx, HandleObject wrapper, virtual JSString *fun_toString(JSContext *cx, HandleObject wrapper,
unsigned indent) MOZ_OVERRIDE; unsigned indent) const MOZ_OVERRIDE;
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) MOZ_OVERRIDE; virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint, virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
MutableHandleValue vp) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
MutableHandleObject protop) 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) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
static const CrossCompartmentWrapper singleton; static const CrossCompartmentWrapper singleton;
static const CrossCompartmentWrapper singletonWithPrototype; static const CrossCompartmentWrapper singletonWithPrototype;
@ -170,26 +170,26 @@ class JS_FRIEND_API(SecurityWrapper) : public Base
public: public:
explicit SecurityWrapper(unsigned flags, bool hasPrototype = false); explicit SecurityWrapper(unsigned flags, bool hasPrototype = false);
virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject wrapper, bool *extensible) const MOZ_OVERRIDE;
virtual bool preventExtensions(JSContext *cx, HandleObject wrapper) 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) MOZ_OVERRIDE; 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) MOZ_OVERRIDE; CallArgs args) const MOZ_OVERRIDE;
virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint, virtual bool defaultValue(JSContext *cx, HandleObject wrapper, JSType hint,
MutableHandleValue vp) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
JSContext *cx) MOZ_OVERRIDE; JSContext *cx) const MOZ_OVERRIDE;
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) MOZ_OVERRIDE; virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) const MOZ_OVERRIDE;
virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id, virtual bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto, virtual bool setPrototypeOf(JSContext *cx, HandleObject proxy, HandleObject proto,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
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) MOZ_OVERRIDE; JS::HandleObject callable) const MOZ_OVERRIDE;
virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id) MOZ_OVERRIDE; virtual bool unwatch(JSContext *cx, JS::HandleObject proxy, JS::HandleId id) const MOZ_OVERRIDE;
/* /*
* Allow our subclasses to select the superclass behavior they want without * Allow our subclasses to select the superclass behavior they want without
@ -211,35 +211,35 @@ class JS_FRIEND_API(DeadObjectProxy) : public BaseProxyHandler
explicit DeadObjectProxy(); explicit DeadObjectProxy();
/* ES5 Harmony fundamental wrapper traps. */ /* ES5 Harmony fundamental wrapper traps. */
virtual bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, virtual bool getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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) 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,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, HandleObject wrapper, virtual bool getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) MOZ_OVERRIDE; AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool delete_(JSContext *cx, HandleObject wrapper, HandleId id, bool *bp) 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) MOZ_OVERRIDE; virtual bool enumerate(JSContext *cx, HandleObject wrapper, AutoIdVector &props) const MOZ_OVERRIDE;
/* Spidermonkey extensions. */ /* Spidermonkey extensions. */
virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE;
virtual bool call(JSContext *cx, HandleObject proxy, const CallArgs &args) 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) MOZ_OVERRIDE; virtual bool construct(JSContext *cx, HandleObject proxy, 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) 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,
bool *bp) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual bool objectClassIs(HandleObject obj, ESClassValue classValue, virtual bool objectClassIs(HandleObject obj, ESClassValue classValue,
JSContext *cx) MOZ_OVERRIDE; JSContext *cx) const MOZ_OVERRIDE;
virtual const char *className(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE; virtual const char *className(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE;
virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) MOZ_OVERRIDE; virtual JSString *fun_toString(JSContext *cx, HandleObject proxy, unsigned indent) const MOZ_OVERRIDE;
virtual bool regexp_toShared(JSContext *cx, HandleObject proxy, RegExpGuard *g) 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) MOZ_OVERRIDE; MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy, virtual bool getPrototypeOf(JSContext *cx, HandleObject proxy,
MutableHandleObject protop) MOZ_OVERRIDE; MutableHandleObject protop) const MOZ_OVERRIDE;
static const DeadObjectProxy singleton; static const DeadObjectProxy singleton;
}; };

Просмотреть файл

@ -1141,7 +1141,7 @@ class DebugScopeProxy : public BaseProxyHandler
*/ */
bool handleUnaliasedAccess(JSContext *cx, Handle<DebugScopeObject*> debugScope, bool handleUnaliasedAccess(JSContext *cx, Handle<DebugScopeObject*> debugScope,
Handle<ScopeObject*> scope, jsid id, Action action, Handle<ScopeObject*> scope, jsid id, Action action,
MutableHandleValue vp, AccessResult *accessResult) MutableHandleValue vp, AccessResult *accessResult) const
{ {
JS_ASSERT(&debugScope->scope() == scope); JS_ASSERT(&debugScope->scope() == scope);
*accessResult = ACCESS_GENERIC; *accessResult = ACCESS_GENERIC;
@ -1318,7 +1318,7 @@ class DebugScopeProxy : public BaseProxyHandler
DebugScopeProxy() : BaseProxyHandler(&family) {} DebugScopeProxy() : BaseProxyHandler(&family) {}
bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) MOZ_OVERRIDE bool isExtensible(JSContext *cx, HandleObject proxy, bool *extensible) const MOZ_OVERRIDE
{ {
// always [[Extensible]], can't be made non-[[Extensible]], like most // always [[Extensible]], can't be made non-[[Extensible]], like most
// proxies // proxies
@ -1326,7 +1326,7 @@ class DebugScopeProxy : public BaseProxyHandler
return true; return true;
} }
bool preventExtensions(JSContext *cx, HandleObject proxy) MOZ_OVERRIDE bool preventExtensions(JSContext *cx, HandleObject proxy) const MOZ_OVERRIDE
{ {
// See above. // See above.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY);
@ -1334,13 +1334,13 @@ class DebugScopeProxy : public BaseProxyHandler
} }
bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, bool getPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE
{ {
return getOwnPropertyDescriptor(cx, proxy, id, desc); return getOwnPropertyDescriptor(cx, proxy, id, desc);
} }
bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id, bool getOwnPropertyDescriptor(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE
{ {
Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>()); Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>());
Rooted<ScopeObject*> scope(cx, &debugScope->scope()); Rooted<ScopeObject*> scope(cx, &debugScope->scope());
@ -1388,7 +1388,7 @@ class DebugScopeProxy : public BaseProxyHandler
} }
bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id, bool get(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id,
MutableHandleValue vp) MOZ_OVERRIDE MutableHandleValue vp) const MOZ_OVERRIDE
{ {
Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>()); Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>());
Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope()); Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope());
@ -1430,7 +1430,7 @@ class DebugScopeProxy : public BaseProxyHandler
* exceptional cases. * exceptional cases.
*/ */
bool getMaybeSentinelValue(JSContext *cx, Handle<DebugScopeObject *> debugScope, HandleId id, bool getMaybeSentinelValue(JSContext *cx, Handle<DebugScopeObject *> debugScope, HandleId id,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
Rooted<ScopeObject*> scope(cx, &debugScope->scope()); Rooted<ScopeObject*> scope(cx, &debugScope->scope());
@ -1460,7 +1460,7 @@ class DebugScopeProxy : public BaseProxyHandler
} }
bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id, bool strict, bool set(JSContext *cx, HandleObject proxy, HandleObject receiver, HandleId id, bool strict,
MutableHandleValue vp) MOZ_OVERRIDE MutableHandleValue vp) const MOZ_OVERRIDE
{ {
Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>()); Rooted<DebugScopeObject*> debugScope(cx, &proxy->as<DebugScopeObject>());
Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope()); Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope());
@ -1480,7 +1480,7 @@ class DebugScopeProxy : public BaseProxyHandler
} }
bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id, bool defineProperty(JSContext *cx, HandleObject proxy, HandleId id,
MutableHandle<PropertyDescriptor> desc) MOZ_OVERRIDE MutableHandle<PropertyDescriptor> desc) const MOZ_OVERRIDE
{ {
Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope()); Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope());
@ -1494,7 +1494,7 @@ class DebugScopeProxy : public BaseProxyHandler
} }
bool getScopePropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props, bool getScopePropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props,
unsigned flags) unsigned flags) const
{ {
Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope()); Rooted<ScopeObject*> scope(cx, &proxy->as<DebugScopeObject>().scope());
@ -1529,17 +1529,17 @@ class DebugScopeProxy : public BaseProxyHandler
return true; return true;
} }
bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props) MOZ_OVERRIDE bool getOwnPropertyNames(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE
{ {
return getScopePropertyNames(cx, proxy, props, JSITER_OWNONLY); return getScopePropertyNames(cx, proxy, props, JSITER_OWNONLY);
} }
bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) MOZ_OVERRIDE bool enumerate(JSContext *cx, HandleObject proxy, AutoIdVector &props) const MOZ_OVERRIDE
{ {
return getScopePropertyNames(cx, proxy, props, 0); return getScopePropertyNames(cx, proxy, props, 0);
} }
bool has(JSContext *cx, HandleObject proxy, HandleId id_, bool *bp) MOZ_OVERRIDE bool has(JSContext *cx, HandleObject proxy, HandleId id_, bool *bp) const MOZ_OVERRIDE
{ {
RootedId id(cx, id_); RootedId id(cx, id_);
ScopeObject &scopeObj = proxy->as<DebugScopeObject>().scope(); ScopeObject &scopeObj = proxy->as<DebugScopeObject>().scope();
@ -1572,7 +1572,7 @@ class DebugScopeProxy : public BaseProxyHandler
return true; return true;
} }
bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) MOZ_OVERRIDE bool delete_(JSContext *cx, HandleObject proxy, HandleId id, bool *bp) const MOZ_OVERRIDE
{ {
RootedValue idval(cx, IdToValue(id)); RootedValue idval(cx, IdToValue(id));
return js_ReportValueErrorFlags(cx, JSREPORT_ERROR, JSMSG_CANT_DELETE, return js_ReportValueErrorFlags(cx, JSREPORT_ERROR, JSMSG_CANT_DELETE,

Просмотреть файл

@ -522,7 +522,7 @@ xpc::IsSandboxPrototypeProxy(JSObject *obj)
bool bool
xpc::SandboxCallableProxyHandler::call(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxCallableProxyHandler::call(JSContext *cx, JS::Handle<JSObject*> proxy,
const JS::CallArgs &args) const JS::CallArgs &args) const
{ {
// We forward the call to our underlying callable. // We forward the call to our underlying callable.
@ -638,7 +638,7 @@ bool
xpc::SandboxProxyHandler::getPropertyDescriptor(JSContext *cx, xpc::SandboxProxyHandler::getPropertyDescriptor(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc) const
{ {
JS::RootedObject obj(cx, wrappedObject(proxy)); JS::RootedObject obj(cx, wrappedObject(proxy));
@ -685,6 +685,7 @@ xpc::SandboxProxyHandler::getOwnPropertyDescriptor(JSContext *cx,
JS::Handle<JSObject*> proxy, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
if (!getPropertyDescriptor(cx, proxy, id, desc)) if (!getPropertyDescriptor(cx, proxy, id, desc))
return false; return false;
@ -702,13 +703,13 @@ xpc::SandboxProxyHandler::getOwnPropertyDescriptor(JSContext *cx,
bool bool
xpc::SandboxProxyHandler::has(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxProxyHandler::has(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) JS::Handle<jsid> id, bool *bp) const
{ {
return BaseProxyHandler::has(cx, proxy, id, bp); return BaseProxyHandler::has(cx, proxy, id, bp);
} }
bool bool
xpc::SandboxProxyHandler::hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxProxyHandler::hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, bool *bp) JS::Handle<jsid> id, bool *bp) const
{ {
return BaseProxyHandler::hasOwn(cx, proxy, id, bp); return BaseProxyHandler::hasOwn(cx, proxy, id, bp);
} }
@ -717,7 +718,7 @@ bool
xpc::SandboxProxyHandler::get(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxProxyHandler::get(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<JSObject*> receiver, JS::Handle<JSObject*> receiver,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<Value> vp) JS::MutableHandle<Value> vp) const
{ {
return BaseProxyHandler::get(cx, proxy, receiver, id, vp); return BaseProxyHandler::get(cx, proxy, receiver, id, vp);
} }
@ -727,21 +728,21 @@ xpc::SandboxProxyHandler::set(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<JSObject*> receiver, JS::Handle<JSObject*> receiver,
JS::Handle<jsid> id, JS::Handle<jsid> id,
bool strict, bool strict,
JS::MutableHandle<Value> vp) JS::MutableHandle<Value> vp) const
{ {
return BaseProxyHandler::set(cx, proxy, receiver, id, strict, vp); return BaseProxyHandler::set(cx, proxy, receiver, id, strict, vp);
} }
bool bool
xpc::SandboxProxyHandler::keys(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxProxyHandler::keys(JSContext *cx, JS::Handle<JSObject*> proxy,
AutoIdVector &props) AutoIdVector &props) const
{ {
return BaseProxyHandler::keys(cx, proxy, props); return BaseProxyHandler::keys(cx, proxy, props);
} }
bool bool
xpc::SandboxProxyHandler::iterate(JSContext *cx, JS::Handle<JSObject*> proxy, xpc::SandboxProxyHandler::iterate(JSContext *cx, JS::Handle<JSObject*> proxy,
unsigned flags, JS::MutableHandle<Value> vp) unsigned flags, JS::MutableHandle<Value> vp) const
{ {
return BaseProxyHandler::iterate(cx, proxy, flags, vp); return BaseProxyHandler::iterate(cx, proxy, flags, vp);
} }

Просмотреть файл

@ -72,7 +72,7 @@ bool
ChromeObjectWrapper::getPropertyDescriptor(JSContext *cx, ChromeObjectWrapper::getPropertyDescriptor(JSContext *cx,
HandleObject wrapper, HandleObject wrapper,
HandleId id, HandleId id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, wrapper, id, GET | SET); assertEnteredPolicy(cx, wrapper, id, GET | SET);
// First, try a lookup on the base wrapper if permitted. // First, try a lookup on the base wrapper if permitted.
@ -103,7 +103,7 @@ ChromeObjectWrapper::getPropertyDescriptor(JSContext *cx,
bool bool
ChromeObjectWrapper::has(JSContext *cx, HandleObject wrapper, ChromeObjectWrapper::has(JSContext *cx, HandleObject wrapper,
HandleId id, bool *bp) HandleId id, bool *bp) const
{ {
assertEnteredPolicy(cx, wrapper, id, GET); assertEnteredPolicy(cx, wrapper, id, GET);
// Try the lookup on the base wrapper if permitted. // Try the lookup on the base wrapper if permitted.
@ -132,7 +132,7 @@ ChromeObjectWrapper::has(JSContext *cx, HandleObject wrapper,
bool bool
ChromeObjectWrapper::get(JSContext *cx, HandleObject wrapper, ChromeObjectWrapper::get(JSContext *cx, HandleObject wrapper,
HandleObject receiver, HandleId id, HandleObject receiver, HandleId id,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, wrapper, id, GET); assertEnteredPolicy(cx, wrapper, id, GET);
vp.setUndefined(); vp.setUndefined();
@ -167,7 +167,7 @@ ChromeObjectWrapper::get(JSContext *cx, HandleObject wrapper,
// contacts. This isn't really ideal, but make it work for now. // contacts. This isn't really ideal, but make it work for now.
bool bool
ChromeObjectWrapper::objectClassIs(HandleObject obj, js::ESClassValue classValue, ChromeObjectWrapper::objectClassIs(HandleObject obj, js::ESClassValue classValue,
JSContext *cx) JSContext *cx) const
{ {
return CrossCompartmentWrapper::objectClassIs(obj, classValue, cx); return CrossCompartmentWrapper::objectClassIs(obj, classValue, cx);
} }
@ -178,7 +178,7 @@ ChromeObjectWrapper::objectClassIs(HandleObject obj, js::ESClassValue classValue
// whole proto remapping thing for COWs is going to be phased out anyway. // whole proto remapping thing for COWs is going to be phased out anyway.
bool bool
ChromeObjectWrapper::enter(JSContext *cx, HandleObject wrapper, ChromeObjectWrapper::enter(JSContext *cx, HandleObject wrapper,
HandleId id, js::Wrapper::Action act, bool *bp) HandleId id, js::Wrapper::Action act, bool *bp) const
{ {
if (AllowedByBase(cx, wrapper, id, act)) if (AllowedByBase(cx, wrapper, id, act))
return true; return true;

Просмотреть файл

@ -31,17 +31,17 @@ class ChromeObjectWrapper : public ChromeObjectWrapperBase
/* Custom traps. */ /* Custom traps. */
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc) 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) 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) MOZ_OVERRIDE; JS::Handle<jsid> id, JS::MutableHandle<JS::Value> vp) 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) MOZ_OVERRIDE; JSContext *cx) const MOZ_OVERRIDE;
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id, virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
js::Wrapper::Action act, bool *bp) MOZ_OVERRIDE; 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 getPropertyNames() here. However, ES5 built-in properties aren't // and getPropertyNames() here. However, ES5 built-in properties aren't

Просмотреть файл

@ -60,7 +60,7 @@ template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::getPropertyDescriptor(JSContext *cx, HandleObject wrapper,
HandleId id, HandleId id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET);
if (!Base::getPropertyDescriptor(cx, wrapper, id, desc)) if (!Base::getPropertyDescriptor(cx, wrapper, id, desc))
@ -72,7 +72,7 @@ template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper,
HandleId id, HandleId id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc) const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET);
if (!Base::getOwnPropertyDescriptor(cx, wrapper, id, desc)) if (!Base::getOwnPropertyDescriptor(cx, wrapper, id, desc))
@ -83,7 +83,7 @@ FilteringWrapper<Base, Policy>::getOwnPropertyDescriptor(JSContext *cx, HandleOb
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::getOwnPropertyNames(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
return Base::getOwnPropertyNames(cx, wrapper, props) && return Base::getOwnPropertyNames(cx, wrapper, props) &&
@ -93,7 +93,7 @@ FilteringWrapper<Base, Policy>::getOwnPropertyNames(JSContext *cx, HandleObject
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::enumerate(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::enumerate(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
return Base::enumerate(cx, wrapper, props) && return Base::enumerate(cx, wrapper, props) &&
@ -103,7 +103,7 @@ FilteringWrapper<Base, Policy>::enumerate(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::keys(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::keys(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
return Base::keys(cx, wrapper, props) && return Base::keys(cx, wrapper, props) &&
@ -113,7 +113,7 @@ FilteringWrapper<Base, Policy>::keys(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::iterate(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::iterate(JSContext *cx, HandleObject wrapper,
unsigned flags, MutableHandleValue vp) unsigned flags, MutableHandleValue vp) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
// We refuse to trigger the iterator hook across chrome wrappers because // We refuse to trigger the iterator hook across chrome wrappers because
@ -126,7 +126,7 @@ FilteringWrapper<Base, Policy>::iterate(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::nativeCall(JSContext *cx, JS::IsAcceptableThis test, FilteringWrapper<Base, Policy>::nativeCall(JSContext *cx, JS::IsAcceptableThis test,
JS::NativeImpl impl, JS::CallArgs args) JS::NativeImpl impl, JS::CallArgs args) const
{ {
if (Policy::allowNativeCall(cx, test, impl)) if (Policy::allowNativeCall(cx, test, impl))
return Base::Permissive::nativeCall(cx, test, impl, args); return Base::Permissive::nativeCall(cx, test, impl, args);
@ -136,7 +136,7 @@ FilteringWrapper<Base, Policy>::nativeCall(JSContext *cx, JS::IsAcceptableThis t
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::defaultValue(JSContext *cx, HandleObject obj, FilteringWrapper<Base, Policy>::defaultValue(JSContext *cx, HandleObject obj,
JSType hint, MutableHandleValue vp) JSType hint, MutableHandleValue vp) const
{ {
return Base::defaultValue(cx, obj, hint, vp); return Base::defaultValue(cx, obj, hint, vp);
} }
@ -147,7 +147,7 @@ template<>
bool bool
FilteringWrapper<CrossCompartmentSecurityWrapper, GentlyOpaque> FilteringWrapper<CrossCompartmentSecurityWrapper, GentlyOpaque>
::defaultValue(JSContext *cx, HandleObject obj, ::defaultValue(JSContext *cx, HandleObject obj,
JSType hint, MutableHandleValue vp) JSType hint, MutableHandleValue vp) const
{ {
JSString *str = JS_NewStringCopyZ(cx, "[Opaque]"); JSString *str = JS_NewStringCopyZ(cx, "[Opaque]");
if (!str) if (!str)
@ -160,7 +160,7 @@ FilteringWrapper<CrossCompartmentSecurityWrapper, GentlyOpaque>
template <typename Base, typename Policy> template <typename Base, typename Policy>
bool bool
FilteringWrapper<Base, Policy>::enter(JSContext *cx, HandleObject wrapper, FilteringWrapper<Base, Policy>::enter(JSContext *cx, HandleObject wrapper,
HandleId id, Wrapper::Action act, bool *bp) HandleId id, Wrapper::Action act, bool *bp) const
{ {
// This is a super ugly hacky to get around Xray Resolve wonkiness. // This is a super ugly hacky to get around Xray Resolve wonkiness.
// //

Просмотреть файл

@ -27,25 +27,26 @@ class FilteringWrapper : public Base {
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) 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) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getOwnPropertyNames(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::AutoIdVector &props) 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) MOZ_OVERRIDE; JS::AutoIdVector &props) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::AutoIdVector &props) 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,
JS::MutableHandle<JS::Value> vp) MOZ_OVERRIDE; JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
virtual bool nativeCall(JSContext *cx, JS::IsAcceptableThis test, JS::NativeImpl impl, virtual bool nativeCall(JSContext *cx, JS::IsAcceptableThis test, JS::NativeImpl impl,
JS::CallArgs args) MOZ_OVERRIDE; JS::CallArgs args) const MOZ_OVERRIDE;
virtual bool defaultValue(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint, JS::MutableHandleValue vp) MOZ_OVERRIDE; virtual bool defaultValue(JSContext *cx, JS::Handle<JSObject*> obj, JSType hint,
JS::MutableHandleValue vp) const MOZ_OVERRIDE;
virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id, virtual bool enter(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
js::Wrapper::Action act, bool *bp) MOZ_OVERRIDE; js::Wrapper::Action act, bool *bp) const MOZ_OVERRIDE;
static const FilteringWrapper singleton; static const FilteringWrapper singleton;
}; };

Просмотреть файл

@ -42,6 +42,7 @@ WaiveXrayWrapper::~WaiveXrayWrapper()
bool bool
WaiveXrayWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, WaiveXrayWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapper,
HandleId id, JS::MutableHandle<JSPropertyDescriptor> desc) HandleId id, JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
return CrossCompartmentWrapper::getPropertyDescriptor(cx, wrapper, id, desc) && return CrossCompartmentWrapper::getPropertyDescriptor(cx, wrapper, id, desc) &&
WrapperFactory::WaiveXrayAndWrap(cx, desc.value()) && WaiveAccessors(cx, desc); WrapperFactory::WaiveXrayAndWrap(cx, desc.value()) && WaiveAccessors(cx, desc);
@ -50,6 +51,7 @@ WaiveXrayWrapper::getPropertyDescriptor(JSContext *cx, HandleObject wrapper,
bool bool
WaiveXrayWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, WaiveXrayWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper,
HandleId id, JS::MutableHandle<JSPropertyDescriptor> desc) HandleId id, JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
return CrossCompartmentWrapper::getOwnPropertyDescriptor(cx, wrapper, id, desc) && return CrossCompartmentWrapper::getOwnPropertyDescriptor(cx, wrapper, id, desc) &&
WrapperFactory::WaiveXrayAndWrap(cx, desc.value()) && WaiveAccessors(cx, desc); WrapperFactory::WaiveXrayAndWrap(cx, desc.value()) && WaiveAccessors(cx, desc);
@ -58,21 +60,21 @@ WaiveXrayWrapper::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper,
bool bool
WaiveXrayWrapper::get(JSContext *cx, HandleObject wrapper, WaiveXrayWrapper::get(JSContext *cx, HandleObject wrapper,
HandleObject receiver, HandleId id, HandleObject receiver, HandleId id,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
return CrossCompartmentWrapper::get(cx, wrapper, receiver, id, vp) && return CrossCompartmentWrapper::get(cx, wrapper, receiver, id, vp) &&
WrapperFactory::WaiveXrayAndWrap(cx, vp); WrapperFactory::WaiveXrayAndWrap(cx, vp);
} }
bool bool
WaiveXrayWrapper::call(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) WaiveXrayWrapper::call(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) const
{ {
return CrossCompartmentWrapper::call(cx, wrapper, args) && return CrossCompartmentWrapper::call(cx, wrapper, args) &&
WrapperFactory::WaiveXrayAndWrap(cx, args.rval()); WrapperFactory::WaiveXrayAndWrap(cx, args.rval());
} }
bool bool
WaiveXrayWrapper::construct(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) WaiveXrayWrapper::construct(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) const
{ {
return CrossCompartmentWrapper::construct(cx, wrapper, args) && return CrossCompartmentWrapper::construct(cx, wrapper, args) &&
WrapperFactory::WaiveXrayAndWrap(cx, args.rval()); WrapperFactory::WaiveXrayAndWrap(cx, args.rval());
@ -82,14 +84,14 @@ WaiveXrayWrapper::construct(JSContext *cx, HandleObject wrapper, const JS::CallA
// nsXBLProtoImplField.cpp. // nsXBLProtoImplField.cpp.
bool bool
WaiveXrayWrapper::nativeCall(JSContext *cx, JS::IsAcceptableThis test, WaiveXrayWrapper::nativeCall(JSContext *cx, JS::IsAcceptableThis test,
JS::NativeImpl impl, JS::CallArgs args) JS::NativeImpl impl, JS::CallArgs args) const
{ {
return CrossCompartmentWrapper::nativeCall(cx, test, impl, args) && return CrossCompartmentWrapper::nativeCall(cx, test, impl, args) &&
WrapperFactory::WaiveXrayAndWrap(cx, args.rval()); WrapperFactory::WaiveXrayAndWrap(cx, args.rval());
} }
bool bool
WaiveXrayWrapper::getPrototypeOf(JSContext *cx, HandleObject wrapper, MutableHandleObject protop) WaiveXrayWrapper::getPrototypeOf(JSContext *cx, HandleObject wrapper, MutableHandleObject protop) const
{ {
return CrossCompartmentWrapper::getPrototypeOf(cx, wrapper, protop) && return CrossCompartmentWrapper::getPrototypeOf(cx, wrapper, protop) &&
(!protop || WrapperFactory::WaiveXrayAndWrap(cx, protop)); (!protop || WrapperFactory::WaiveXrayAndWrap(cx, protop));

Просмотреть файл

@ -20,23 +20,23 @@ class WaiveXrayWrapper : public js::CrossCompartmentWrapper {
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) 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) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc) 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) MOZ_OVERRIDE; JS::Handle<jsid> id, 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) 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) MOZ_OVERRIDE; const JS::CallArgs &args) 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) MOZ_OVERRIDE; JS::NativeImpl impl, JS::CallArgs args) const MOZ_OVERRIDE;
virtual bool getPrototypeOf(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getPrototypeOf(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::MutableHandle<JSObject*> protop) MOZ_OVERRIDE; JS::MutableHandle<JSObject*> protop) const MOZ_OVERRIDE;
static const WaiveXrayWrapper singleton; static const WaiveXrayWrapper singleton;
}; };

Просмотреть файл

@ -185,7 +185,7 @@ public:
// on the holder. If the result is not cached, the lookup will happen afresh // on the holder. If the result is not cached, the lookup will happen afresh
// for each access, which is the right thing for things like dynamic NodeList // for each access, which is the right thing for things like dynamic NodeList
// properties. // properties.
virtual bool resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, virtual bool resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper,
HandleObject wrapper, HandleObject holder, HandleObject wrapper, HandleObject holder,
HandleId id, MutableHandle<JSPropertyDescriptor> desc); HandleId id, MutableHandle<JSPropertyDescriptor> desc);
@ -244,7 +244,7 @@ public:
virtual bool resolveNativeProperty(JSContext *cx, HandleObject wrapper, virtual bool resolveNativeProperty(JSContext *cx, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
virtual bool resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, HandleObject wrapper, virtual bool resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id, bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
@ -253,9 +253,9 @@ public:
virtual bool enumerateNames(JSContext *cx, HandleObject wrapper, unsigned flags, virtual bool enumerateNames(JSContext *cx, HandleObject wrapper, unsigned flags,
AutoIdVector &props); AutoIdVector &props);
static bool call(JSContext *cx, HandleObject wrapper, static bool call(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance); const JS::CallArgs &args, const js::Wrapper& baseInstance);
static bool construct(JSContext *cx, HandleObject wrapper, static bool construct(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance); const JS::CallArgs &args, const js::Wrapper& baseInstance);
static bool isResolving(JSContext *cx, JSObject *holder, jsid id); static bool isResolving(JSContext *cx, JSObject *holder, jsid id);
@ -295,7 +295,7 @@ public:
virtual bool resolveNativeProperty(JSContext *cx, HandleObject wrapper, virtual bool resolveNativeProperty(JSContext *cx, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
virtual bool resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, HandleObject wrapper, virtual bool resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id, bool defineProperty(JSContext *cx, HandleObject wrapper, HandleId id,
@ -306,9 +306,9 @@ public:
virtual bool enumerateNames(JSContext *cx, HandleObject wrapper, unsigned flags, virtual bool enumerateNames(JSContext *cx, HandleObject wrapper, unsigned flags,
AutoIdVector &props); AutoIdVector &props);
static bool call(JSContext *cx, HandleObject wrapper, static bool call(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance); const JS::CallArgs &args, const js::Wrapper& baseInstance);
static bool construct(JSContext *cx, HandleObject wrapper, static bool construct(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance); const JS::CallArgs &args, const js::Wrapper& baseInstance);
static bool isResolving(JSContext *cx, JSObject *holder, jsid id) static bool isResolving(JSContext *cx, JSObject *holder, jsid id)
{ {
@ -339,7 +339,7 @@ public:
MOZ_ASSUME_UNREACHABLE("resolveNativeProperty hook should never be called with HasPrototype = 1"); MOZ_ASSUME_UNREACHABLE("resolveNativeProperty hook should never be called with HasPrototype = 1");
} }
virtual bool resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, HandleObject wrapper, virtual bool resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE;
@ -353,7 +353,7 @@ public:
AutoIdVector &props); AutoIdVector &props);
static bool call(JSContext *cx, HandleObject wrapper, static bool call(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance) const JS::CallArgs &args, const js::Wrapper& baseInstance)
{ {
JSXrayTraits &self = JSXrayTraits::singleton; JSXrayTraits &self = JSXrayTraits::singleton;
RootedObject holder(cx, self.ensureHolder(cx, wrapper)); RootedObject holder(cx, self.ensureHolder(cx, wrapper));
@ -366,7 +366,7 @@ public:
} }
static bool construct(JSContext *cx, HandleObject wrapper, static bool construct(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance) const JS::CallArgs &args, const js::Wrapper& baseInstance)
{ {
JSXrayTraits &self = JSXrayTraits::singleton; JSXrayTraits &self = JSXrayTraits::singleton;
RootedObject holder(cx, self.ensureHolder(cx, wrapper)); RootedObject holder(cx, self.ensureHolder(cx, wrapper));
@ -532,7 +532,7 @@ bool JSXrayTraits::getOwnPropertyFromTargetIfSafe(JSContext *cx,
} }
bool bool
JSXrayTraits::resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, JSXrayTraits::resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper,
HandleObject wrapper, HandleObject holder, HandleObject wrapper, HandleObject holder,
HandleId id, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc)
@ -1525,7 +1525,7 @@ wrappedJSObject_getter(JSContext *cx, HandleObject wrapper, HandleId id, Mutable
} }
bool bool
XrayTraits::resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, XrayTraits::resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper,
HandleObject wrapper, HandleObject holder, HandleId id, HandleObject wrapper, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc)
{ {
@ -1603,7 +1603,7 @@ XrayTraits::set(JSContext *cx, HandleObject wrapper, HandleObject receiver, Hand
} }
bool bool
XPCWrappedNativeXrayTraits::resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, XPCWrappedNativeXrayTraits::resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper,
HandleObject wrapper, HandleObject holder, HandleObject wrapper, HandleObject holder,
HandleId id, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc)
@ -1757,7 +1757,7 @@ XPCWrappedNativeXrayTraits::createHolder(JSContext *cx, JSObject *wrapper)
bool bool
XPCWrappedNativeXrayTraits::call(JSContext *cx, HandleObject wrapper, XPCWrappedNativeXrayTraits::call(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, const JS::CallArgs &args,
js::Wrapper& baseInstance) const js::Wrapper& baseInstance)
{ {
// Run the resolve hook of the wrapped native. // Run the resolve hook of the wrapped native.
XPCWrappedNative *wn = getWN(wrapper); XPCWrappedNative *wn = getWN(wrapper);
@ -1783,7 +1783,7 @@ XPCWrappedNativeXrayTraits::call(JSContext *cx, HandleObject wrapper,
bool bool
XPCWrappedNativeXrayTraits::construct(JSContext *cx, HandleObject wrapper, XPCWrappedNativeXrayTraits::construct(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, const JS::CallArgs &args,
js::Wrapper& baseInstance) const js::Wrapper& baseInstance)
{ {
// Run the resolve hook of the wrapped native. // Run the resolve hook of the wrapped native.
XPCWrappedNative *wn = getWN(wrapper); XPCWrappedNative *wn = getWN(wrapper);
@ -1821,7 +1821,7 @@ DOMXrayTraits::resolveNativeProperty(JSContext *cx, HandleObject wrapper,
} }
bool bool
DOMXrayTraits::resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper, HandleObject wrapper, DOMXrayTraits::resolveOwnProperty(JSContext *cx, const Wrapper &jsWrapper, HandleObject wrapper,
HandleObject holder, HandleId id, HandleObject holder, HandleId id,
MutableHandle<JSPropertyDescriptor> desc) MutableHandle<JSPropertyDescriptor> desc)
{ {
@ -1912,7 +1912,7 @@ DOMXrayTraits::enumerateNames(JSContext *cx, HandleObject wrapper, unsigned flag
bool bool
DOMXrayTraits::call(JSContext *cx, HandleObject wrapper, DOMXrayTraits::call(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance) const JS::CallArgs &args, const js::Wrapper& baseInstance)
{ {
RootedObject obj(cx, getTargetObject(wrapper)); RootedObject obj(cx, getTargetObject(wrapper));
const js::Class* clasp = js::GetObjectClass(obj); const js::Class* clasp = js::GetObjectClass(obj);
@ -1942,7 +1942,7 @@ DOMXrayTraits::call(JSContext *cx, HandleObject wrapper,
bool bool
DOMXrayTraits::construct(JSContext *cx, HandleObject wrapper, DOMXrayTraits::construct(JSContext *cx, HandleObject wrapper,
const JS::CallArgs &args, js::Wrapper& baseInstance) const JS::CallArgs &args, const js::Wrapper& baseInstance)
{ {
RootedObject obj(cx, getTargetObject(wrapper)); RootedObject obj(cx, getTargetObject(wrapper));
MOZ_ASSERT(mozilla::dom::HasConstructor(obj)); MOZ_ASSERT(mozilla::dom::HasConstructor(obj));
@ -2153,7 +2153,8 @@ DEBUG_CheckXBLLookup(JSContext *cx, JSPropertyDescriptor *desc)
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper, bool *extensible) XrayWrapper<Base, Traits>::isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper,
bool *extensible) const
{ {
// Xray wrappers are supposed to provide a clean view of the target // Xray wrappers are supposed to provide a clean view of the target
// reflector, hiding any modifications by script in the target scope. So // reflector, hiding any modifications by script in the target scope. So
@ -2166,7 +2167,7 @@ XrayWrapper<Base, Traits>::isExtensible(JSContext *cx, JS::Handle<JSObject*> wra
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::preventExtensions(JSContext *cx, HandleObject wrapper) XrayWrapper<Base, Traits>::preventExtensions(JSContext *cx, HandleObject wrapper) const
{ {
// See above. // See above.
JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY); JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_CHANGE_EXTENSIBILITY);
@ -2177,6 +2178,7 @@ template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, XrayWrapper<Base, Traits>::getPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET);
RootedObject holder(cx, Traits::singleton.ensureHolder(cx, wrapper)); RootedObject holder(cx, Traits::singleton.ensureHolder(cx, wrapper));
@ -2309,6 +2311,7 @@ template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id, XrayWrapper<Base, Traits>::getOwnPropertyDescriptor(JSContext *cx, HandleObject wrapper, HandleId id,
JS::MutableHandle<JSPropertyDescriptor> desc) JS::MutableHandle<JSPropertyDescriptor> desc)
const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::GET | BaseProxyHandler::SET);
RootedObject holder(cx, Traits::singleton.ensureHolder(cx, wrapper)); RootedObject holder(cx, Traits::singleton.ensureHolder(cx, wrapper));
@ -2390,6 +2393,7 @@ template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::defineProperty(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::defineProperty(JSContext *cx, HandleObject wrapper,
HandleId id, MutableHandle<JSPropertyDescriptor> desc) HandleId id, MutableHandle<JSPropertyDescriptor> desc)
const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::SET);
@ -2454,7 +2458,7 @@ XrayWrapper<Base, Traits>::defineProperty(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::getOwnPropertyNames(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::getOwnPropertyNames(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
return enumerate(cx, wrapper, JSITER_OWNONLY | JSITER_HIDDEN, props); return enumerate(cx, wrapper, JSITER_OWNONLY | JSITER_HIDDEN, props);
@ -2463,7 +2467,7 @@ XrayWrapper<Base, Traits>::getOwnPropertyNames(JSContext *cx, HandleObject wrapp
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::delete_(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::delete_(JSContext *cx, HandleObject wrapper,
HandleId id, bool *bp) HandleId id, bool *bp) const
{ {
assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::SET); assertEnteredPolicy(cx, wrapper, id, BaseProxyHandler::SET);
@ -2481,7 +2485,7 @@ XrayWrapper<Base, Traits>::delete_(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::enumerate(JSContext *cx, HandleObject wrapper, unsigned flags, XrayWrapper<Base, Traits>::enumerate(JSContext *cx, HandleObject wrapper, unsigned flags,
AutoIdVector &props) AutoIdVector &props) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::ENUMERATE);
if (!AccessCheck::wrapperSubsumes(wrapper)) { if (!AccessCheck::wrapperSubsumes(wrapper)) {
@ -2505,7 +2509,7 @@ XrayWrapper<Base, Traits>::enumerate(JSContext *cx, HandleObject wrapper, unsign
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::enumerate(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::enumerate(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
return enumerate(cx, wrapper, 0, props); return enumerate(cx, wrapper, 0, props);
} }
@ -2514,7 +2518,7 @@ template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::get(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::get(JSContext *cx, HandleObject wrapper,
HandleObject receiver, HandleId id, HandleObject receiver, HandleId id,
MutableHandleValue vp) MutableHandleValue vp) const
{ {
// Skip our Base if it isn't already ProxyHandler. // Skip our Base if it isn't already ProxyHandler.
// NB: None of the functions we call are prepared for the receiver not // NB: None of the functions we call are prepared for the receiver not
@ -2526,7 +2530,7 @@ template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::set(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::set(JSContext *cx, HandleObject wrapper,
HandleObject receiver, HandleId id, HandleObject receiver, HandleId id,
bool strict, MutableHandleValue vp) bool strict, MutableHandleValue vp) const
{ {
// Delegate to Traits. // Delegate to Traits.
// NB: None of the functions we call are prepared for the receiver not // NB: None of the functions we call are prepared for the receiver not
@ -2537,7 +2541,7 @@ XrayWrapper<Base, Traits>::set(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::has(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::has(JSContext *cx, HandleObject wrapper,
HandleId id, bool *bp) HandleId id, bool *bp) const
{ {
// Skip our Base if it isn't already ProxyHandler. // Skip our Base if it isn't already ProxyHandler.
return js::BaseProxyHandler::has(cx, wrapper, id, bp); return js::BaseProxyHandler::has(cx, wrapper, id, bp);
@ -2546,7 +2550,7 @@ XrayWrapper<Base, Traits>::has(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::hasOwn(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::hasOwn(JSContext *cx, HandleObject wrapper,
HandleId id, bool *bp) HandleId id, bool *bp) const
{ {
// Skip our Base if it isn't already ProxyHandler. // Skip our Base if it isn't already ProxyHandler.
return js::BaseProxyHandler::hasOwn(cx, wrapper, id, bp); return js::BaseProxyHandler::hasOwn(cx, wrapper, id, bp);
@ -2555,7 +2559,7 @@ XrayWrapper<Base, Traits>::hasOwn(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::keys(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::keys(JSContext *cx, HandleObject wrapper,
AutoIdVector &props) AutoIdVector &props) const
{ {
// Skip our Base if it isn't already ProxyHandler. // Skip our Base if it isn't already ProxyHandler.
return js::BaseProxyHandler::keys(cx, wrapper, props); return js::BaseProxyHandler::keys(cx, wrapper, props);
@ -2564,7 +2568,7 @@ XrayWrapper<Base, Traits>::keys(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::iterate(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::iterate(JSContext *cx, HandleObject wrapper,
unsigned flags, MutableHandleValue vp) unsigned flags, MutableHandleValue vp) const
{ {
// Skip our Base if it isn't already ProxyHandler. // Skip our Base if it isn't already ProxyHandler.
return js::BaseProxyHandler::iterate(cx, wrapper, flags, vp); return js::BaseProxyHandler::iterate(cx, wrapper, flags, vp);
@ -2572,26 +2576,26 @@ XrayWrapper<Base, Traits>::iterate(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::call(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) XrayWrapper<Base, Traits>::call(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::CALL); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::CALL);
// Hard cast the singleton since SecurityWrapper doesn't have one. // Hard cast the singleton since SecurityWrapper doesn't have one.
return Traits::call(cx, wrapper, args, (js::Wrapper&)Base::singleton); return Traits::call(cx, wrapper, args, Base::singleton);
} }
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::construct(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) XrayWrapper<Base, Traits>::construct(JSContext *cx, HandleObject wrapper, const JS::CallArgs &args) const
{ {
assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::CALL); assertEnteredPolicy(cx, wrapper, JSID_VOID, BaseProxyHandler::CALL);
// Hard cast the singleton since SecurityWrapper doesn't have one. // Hard cast the singleton since SecurityWrapper doesn't have one.
return Traits::construct(cx, wrapper, args, (js::Wrapper&)Base::singleton); return Traits::construct(cx, wrapper, args, Base::singleton);
} }
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::defaultValue(JSContext *cx, HandleObject wrapper, XrayWrapper<Base, Traits>::defaultValue(JSContext *cx, HandleObject wrapper,
JSType hint, MutableHandleValue vp) JSType hint, MutableHandleValue vp) const
{ {
// Even if this isn't a security wrapper, Xray semantics dictate that we // Even if this isn't a security wrapper, Xray semantics dictate that we
// run the DefaultValue algorithm directly on the Xray wrapper. // run the DefaultValue algorithm directly on the Xray wrapper.
@ -2604,7 +2608,7 @@ XrayWrapper<Base, Traits>::defaultValue(JSContext *cx, HandleObject wrapper,
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::getPrototypeOf(JSContext *cx, JS::HandleObject wrapper, XrayWrapper<Base, Traits>::getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
JS::MutableHandleObject protop) JS::MutableHandleObject protop) const
{ {
// We really only want this override for non-SecurityWrapper-inheriting // We really only want this override for non-SecurityWrapper-inheriting
// |Base|. But doing that statically with templates requires partial method // |Base|. But doing that statically with templates requires partial method
@ -2635,7 +2639,7 @@ XrayWrapper<Base, Traits>::getPrototypeOf(JSContext *cx, JS::HandleObject wrappe
template <typename Base, typename Traits> template <typename Base, typename Traits>
bool bool
XrayWrapper<Base, Traits>::setPrototypeOf(JSContext *cx, JS::HandleObject wrapper, XrayWrapper<Base, Traits>::setPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
JS::HandleObject proto, bool *bp) JS::HandleObject proto, bool *bp) const
{ {
// Do this only for non-SecurityWrapper-inheriting |Base|. See the comment // Do this only for non-SecurityWrapper-inheriting |Base|. See the comment
// in getPrototypeOf(). // in getPrototypeOf().

Просмотреть файл

@ -69,47 +69,47 @@ class XrayWrapper : public Base {
virtual ~XrayWrapper(); virtual ~XrayWrapper();
/* Fundamental proxy traps. */ /* Fundamental proxy traps. */
virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper, bool *extensible) MOZ_OVERRIDE; virtual bool isExtensible(JSContext *cx, JS::Handle<JSObject*> wrapper, bool *extensible) const MOZ_OVERRIDE;
virtual bool preventExtensions(JSContext *cx, JS::Handle<JSObject*> wrapper) 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, virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc); 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); 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,
JS::MutableHandle<JSPropertyDescriptor> desc); JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
virtual bool getOwnPropertyNames(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool getOwnPropertyNames(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::AutoIdVector &props); 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); JS::Handle<jsid> id, bool *bp) const MOZ_OVERRIDE;
virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::AutoIdVector &props); virtual bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::AutoIdVector &props) const MOZ_OVERRIDE;
/* Derived proxy traps. */ /* Derived proxy traps. */
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); 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); 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 has(JSContext *cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id,
bool *bp); bool *bp) 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); bool *bp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper, virtual bool keys(JSContext *cx, JS::Handle<JSObject*> wrapper,
JS::AutoIdVector &props); 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,
JS::MutableHandle<JS::Value> vp); 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) 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) MOZ_OVERRIDE; const JS::CallArgs &args) 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)
MOZ_OVERRIDE; const MOZ_OVERRIDE;
virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper, virtual bool getPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
JS::MutableHandleObject protop) MOZ_OVERRIDE; JS::MutableHandleObject protop) const MOZ_OVERRIDE;
virtual bool setPrototypeOf(JSContext *cx, JS::HandleObject wrapper, virtual bool setPrototypeOf(JSContext *cx, JS::HandleObject wrapper,
JS::HandleObject proto, bool *bp) MOZ_OVERRIDE; JS::HandleObject proto, bool *bp) const MOZ_OVERRIDE;
static const XrayWrapper singleton; static const XrayWrapper singleton;
@ -117,26 +117,26 @@ class XrayWrapper : public Base {
template <bool HasPrototype> template <bool HasPrototype>
typename mozilla::EnableIf<HasPrototype, bool>::Type typename mozilla::EnableIf<HasPrototype, bool>::Type
getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper, getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper,
JS::HandleObject target, JS::MutableHandleObject protop) JS::HandleObject target, JS::MutableHandleObject protop) const
{ {
return Traits::singleton.getPrototypeOf(cx, wrapper, target, protop); return Traits::singleton.getPrototypeOf(cx, wrapper, target, protop);
} }
template <bool HasPrototype> template <bool HasPrototype>
typename mozilla::EnableIf<!HasPrototype, bool>::Type typename mozilla::EnableIf<!HasPrototype, bool>::Type
getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper, getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper,
JS::HandleObject target, JS::MutableHandleObject protop) JS::HandleObject target, JS::MutableHandleObject protop) const
{ {
return Base::getPrototypeOf(cx, wrapper, protop); return Base::getPrototypeOf(cx, wrapper, protop);
} }
bool getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper, bool getPrototypeOfHelper(JSContext *cx, JS::HandleObject wrapper,
JS::HandleObject target, JS::MutableHandleObject protop) JS::HandleObject target, JS::MutableHandleObject protop) const
{ {
return getPrototypeOfHelper<Traits::HasPrototype>(cx, wrapper, target, return getPrototypeOfHelper<Traits::HasPrototype>(cx, wrapper, target,
protop); protop);
} }
bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags, bool enumerate(JSContext *cx, JS::Handle<JSObject*> wrapper, unsigned flags,
JS::AutoIdVector &props); JS::AutoIdVector &props) const;
}; };
#define PermissiveXrayXPCWN xpc::XrayWrapper<js::CrossCompartmentWrapper, xpc::XPCWrappedNativeXrayTraits> #define PermissiveXrayXPCWN xpc::XrayWrapper<js::CrossCompartmentWrapper, xpc::XPCWrappedNativeXrayTraits>
@ -154,25 +154,25 @@ public:
virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool getPropertyDescriptor(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::Handle<jsid> id, JS::Handle<jsid> id,
JS::MutableHandle<JSPropertyDescriptor> desc) MOZ_OVERRIDE; 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) MOZ_OVERRIDE; JS::MutableHandle<JSPropertyDescriptor> desc) const MOZ_OVERRIDE;
// We just forward the derived traps to the BaseProxyHandler versions which // We just forward the derived traps to the BaseProxyHandler versions which
// implement them in terms of the fundamental traps. // implement them in terms of the fundamental traps.
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) MOZ_OVERRIDE; bool *bp) const MOZ_OVERRIDE;
virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id, virtual bool hasOwn(JSContext *cx, JS::Handle<JSObject*> proxy, JS::Handle<jsid> id,
bool *bp) MOZ_OVERRIDE; 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) 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) MOZ_OVERRIDE; JS::Handle<jsid> id, bool strict, JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool keys(JSContext *cx, JS::Handle<JSObject*> proxy,
JS::AutoIdVector &props) 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,
JS::MutableHandle<JS::Value> vp) MOZ_OVERRIDE; JS::MutableHandle<JS::Value> vp) const MOZ_OVERRIDE;
}; };
extern const SandboxProxyHandler sandboxProxyHandler; extern const SandboxProxyHandler sandboxProxyHandler;
@ -187,7 +187,7 @@ public:
} }
virtual bool call(JSContext *cx, JS::Handle<JSObject*> proxy, virtual bool call(JSContext *cx, JS::Handle<JSObject*> proxy,
const JS::CallArgs &args) MOZ_OVERRIDE; const JS::CallArgs &args) const MOZ_OVERRIDE;
}; };
extern const SandboxCallableProxyHandler sandboxCallableProxyHandler; extern const SandboxCallableProxyHandler sandboxCallableProxyHandler;