Backed out changeset 344a525cddbc (bug 1570484) for spidermonkey bustage at BaseProxyHandler.cpp:389:25. CLOSED TREE

This commit is contained in:
Brindusan Cristian 2019-08-05 18:25:24 +03:00
parent 3c0d61edd3
commit 2d3a2752f0
6 changed files with 12 additions and 69 deletions

View File

@ -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");
}
}

View File

@ -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 */

View File

@ -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));
}

View File

@ -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();

View File

@ -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);

View File

@ -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);