mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
Backed out changeset 344a525cddbc (bug 1570484) for spidermonkey bustage at BaseProxyHandler.cpp:389:25. CLOSED TREE
This commit is contained in:
parent
3c0d61edd3
commit
2d3a2752f0
@ -2322,7 +2322,7 @@ void nsGlobalWindowOuter::PrepareForProcessChange(JSObject* aProxy) {
|
||||
MOZ_CRASH("PrepareForProcessChange GetRemoteOuterWindowProxy");
|
||||
}
|
||||
|
||||
if (!xpc::TransplantObjectNukingXrayWaiver(cx, localProxy, remoteProxy)) {
|
||||
if (!xpc::TransplantObject(cx, localProxy, remoteProxy)) {
|
||||
MOZ_CRASH("PrepareForProcessChange TransplantObject");
|
||||
}
|
||||
}
|
||||
|
@ -734,16 +734,6 @@ constexpr unsigned CheckProxyFlags() {
|
||||
&js::ProxyObjectOps \
|
||||
}
|
||||
|
||||
// Converts a proxy into a DeadObjectProxy that will throw exceptions on all
|
||||
// access. This will run the proxy's finalizer to perform clean-up before the
|
||||
// conversion happens.
|
||||
JS_FRIEND_API void NukeNonCCWProxy(JSContext* cx, HandleObject proxy);
|
||||
|
||||
// This is a variant of js::NukeNonCCWProxy() for CCWs. It should only be called
|
||||
// on CCWs that have been removed from CCW tables.
|
||||
JS_FRIEND_API void NukeRemovedCrossCompartmentWrapper(JSContext* cx,
|
||||
JSObject* wrapper);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* js_Proxy_h */
|
||||
|
@ -383,35 +383,3 @@ bool BaseProxyHandler::getElements(JSContext* cx, HandleObject proxy,
|
||||
bool BaseProxyHandler::isCallable(JSObject* obj) const { return false; }
|
||||
|
||||
bool BaseProxyHandler::isConstructor(JSObject* obj) const { return false; }
|
||||
|
||||
JS_FRIEND_API void js::NukeNonCCWProxy(JSContext* cx, HandleObject proxy) {
|
||||
MOZ_ASSERT(proxy->is<ProxyObject>());
|
||||
MOZ_ASSERT(!proxy->is<CrossCompartmentWrapperObject>());
|
||||
|
||||
// (NotifyGCNukeWrapper() only needs to be called on CCWs.)
|
||||
|
||||
// The proxy is about to be replaced, so we need to do any necessary
|
||||
// cleanup first.
|
||||
proxy->as<ProxyObject>().handler()->finalize(cx->defaultFreeOp(), proxy);
|
||||
|
||||
proxy->as<ProxyObject>().nuke();
|
||||
|
||||
MOZ_ASSERT(IsDeadProxyObject(proxy));
|
||||
}
|
||||
|
||||
JS_FRIEND_API void js::NukeRemovedCrossCompartmentWrapper(JSContext* cx,
|
||||
JSObject* wrapper) {
|
||||
MOZ_ASSERT(wrapper->is<CrossCompartmentWrapperObject>());
|
||||
|
||||
NotifyGCNukeWrapper(wrapper);
|
||||
|
||||
// We don't need to call finalize here because the CCW finalizer doesn't do
|
||||
// anything. Skipping finalize means that |wrapper| doesn't need to be rooted
|
||||
// to pass the hazard analysis, which is needed because this method is called
|
||||
// from some tricky places inside transplanting where rooting can be
|
||||
// difficult.
|
||||
|
||||
wrapper->as<ProxyObject>().nuke();
|
||||
|
||||
MOZ_ASSERT(IsDeadProxyObject(wrapper));
|
||||
}
|
||||
|
@ -372,6 +372,17 @@ bool CrossCompartmentWrapper::boxedValue_unbox(JSContext* cx,
|
||||
|
||||
const CrossCompartmentWrapper CrossCompartmentWrapper::singleton(0u);
|
||||
|
||||
static void NukeRemovedCrossCompartmentWrapper(JSContext* cx,
|
||||
JSObject* wrapper) {
|
||||
MOZ_ASSERT(wrapper->is<CrossCompartmentWrapperObject>());
|
||||
|
||||
NotifyGCNukeWrapper(wrapper);
|
||||
|
||||
wrapper->as<ProxyObject>().nuke();
|
||||
|
||||
MOZ_ASSERT(IsDeadProxyObject(wrapper));
|
||||
}
|
||||
|
||||
JS_FRIEND_API void js::NukeCrossCompartmentWrapper(JSContext* cx,
|
||||
JSObject* wrapper) {
|
||||
JS::Compartment* comp = wrapper->compartment();
|
||||
|
@ -86,11 +86,6 @@ JSObject* TransplantObjectRetainingXrayExpandos(JSContext* cx,
|
||||
JS::HandleObject origobj,
|
||||
JS::HandleObject target);
|
||||
|
||||
// If origObj has an xray waiver, nuke it before transplant.
|
||||
JSObject* TransplantObjectNukingXrayWaiver(JSContext* cx,
|
||||
JS::HandleObject origObj,
|
||||
JS::HandleObject target);
|
||||
|
||||
bool IsContentXBLCompartment(JS::Compartment* compartment);
|
||||
bool IsContentXBLScope(JS::Realm* realm);
|
||||
bool IsInContentXBLScope(JSObject* obj);
|
||||
|
@ -840,27 +840,6 @@ JSObject* TransplantObjectRetainingXrayExpandos(JSContext* cx,
|
||||
return newIdentity;
|
||||
}
|
||||
|
||||
static void NukeXrayWaiver(JSContext* cx, JS::HandleObject obj) {
|
||||
RootedObject waiver(cx, WrapperFactory::GetXrayWaiver(obj));
|
||||
if (!waiver) {
|
||||
return;
|
||||
}
|
||||
|
||||
XPCWrappedNativeScope* scope = ObjectScope(waiver);
|
||||
JSObject* key = Wrapper::wrappedObject(waiver);
|
||||
MOZ_ASSERT(scope->mWaiverWrapperMap->Find(key));
|
||||
scope->mWaiverWrapperMap->Remove(key);
|
||||
|
||||
js::NukeNonCCWProxy(cx, waiver);
|
||||
}
|
||||
|
||||
JSObject* TransplantObjectNukingXrayWaiver(JSContext* cx,
|
||||
JS::HandleObject origObj,
|
||||
JS::HandleObject target) {
|
||||
NukeXrayWaiver(cx, origObj);
|
||||
return JS_TransplantObject(cx, origObj, target);
|
||||
}
|
||||
|
||||
nsIGlobalObject* NativeGlobal(JSObject* obj) {
|
||||
obj = JS::GetNonCCWObjectGlobal(obj);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user