bool CrossOriginXrayWrapper::getPropertyDescriptor(JSContext* cx, JS::Handle<JSObject*> wrapper, JS::Handle<jsid> id, JS::MutableHandle<JSPropertyDescriptor> desc) const { if (!SecurityXrayDOM::getPropertyDescriptor(cx, wrapper, id, desc)) return false; if (desc.object()) { // All properties on cross-origin DOM objects are |own|. desc.object().set(wrapper); // All properties on cross-origin DOM objects are non-enumerable and // "configurable". Any value attributes are read-only. desc.attributesRef() &= ~JSPROP_ENUMERATE; desc.attributesRef() &= ~JSPROP_PERMANENT; if (!desc.getter() && !desc.setter()) desc.attributesRef() |= JSPROP_READONLY; } return true; }