/* PRBool enumerate (in nsIXPConnectWrappedNative wrapper, in JSContextPtr cx, in JSObjectPtr obj); */ NS_IMETHODIMP nsJSIID::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext * cx, JSObject * obj, PRBool *_retval) { // In this case, let's just eagerly resolve... XPCCallContext ccx(JS_CALLER, cx); AutoMarkingNativeInterfacePtr iface(ccx); const nsIID* iid; mInfo->GetIIDShared(&iid); iface = XPCNativeInterface::GetNewOrUsed(ccx, iid); if(!iface) return NS_OK; PRUint16 count = iface->GetMemberCount(); for(PRUint16 i = 0; i < count; i++) { XPCNativeMember* member = iface->GetMemberAt(i); if(member && member->IsConstant() && !xpc_ForcePropertyResolve(cx, obj, member->GetName())) { return NS_ERROR_UNEXPECTED; } } return NS_OK; }
JSBool XPCIDispatchExtension::Enumerate(XPCCallContext& ccx, JSObject* obj, XPCWrappedNative * wrapper) { XPCNativeInterface* iface = XPCNativeInterface::GetNewOrUsed( ccx,&NSID_IDISPATCH); if(!iface) return JS_FALSE; XPCWrappedNativeTearOff* tearoff = wrapper->FindTearOff(ccx, iface); if(!tearoff) return JS_FALSE; XPCDispInterface* pInfo = tearoff->GetIDispatchInfo(); PRUint32 members = pInfo->GetMemberCount(); // Iterate over the members and force the properties to be resolved for(PRUint32 index = 0; index < members; ++index) { const XPCDispInterface::Member & member = pInfo->GetMember(index); jsval name = member.GetName(); if(!xpc_ForcePropertyResolve(ccx, obj, name)) return JS_FALSE; } return JS_TRUE; }