static JSBool CompartmentCallback(JSContext *cx, JSCompartment *compartment, uintN op) { if(op == JSCOMPARTMENT_NEW) return JS_TRUE; XPCJSRuntime* self = nsXPConnect::GetRuntimeInstance(); if(!self) return JS_TRUE; XPCCompartmentMap& map = self->GetCompartmentMap(); nsAdoptingCString origin; origin.Adopt(static_cast<char *>(JS_SetCompartmentPrivate(cx, compartment, nsnull))); #ifdef DEBUG { JSCompartment *current; NS_ASSERTION(map.Get(origin, ¤t), "no compartment?"); NS_ASSERTION(current == compartment, "compartment mismatch"); } #endif map.Remove(origin); return JS_TRUE; }