JSObject * TransplantObject(JSContext *cx, JS::HandleObject origobj, JS::HandleObject target) { RootedObject oldWaiver(cx, WrapperFactory::GetXrayWaiver(origobj)); RootedObject newIdentity(cx, JS_TransplantObject(cx, origobj, target)); if (!newIdentity || !oldWaiver) return newIdentity; if (!FixWaiverAfterTransplant(cx, oldWaiver, newIdentity)) return nullptr; return newIdentity; }
JSObject * TransplantObjectWithWrapper(JSContext *cx, JSObject *origobj, JSObject *origwrapper, JSObject *targetobj, JSObject *targetwrapper) { RootedObject oldWaiver(cx, WrapperFactory::GetXrayWaiver(origobj)); RootedObject newSameCompartmentWrapper(cx, js_TransplantObjectWithWrapper(cx, origobj, origwrapper, targetobj, targetwrapper)); if (!newSameCompartmentWrapper || !oldWaiver) return newSameCompartmentWrapper; RootedObject newIdentity(cx, Wrapper::wrappedObject(newSameCompartmentWrapper)); MOZ_ASSERT(js::IsWrapper(newIdentity)); if (!FixWaiverAfterTransplant(cx, oldWaiver, newIdentity)) return NULL; return newSameCompartmentWrapper; }