case INSTALL_FILEOP: *vp = OBJECT_TO_JSVAL(gFileOpObject); break;
GetInstallProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp){  nsInstall *a = (nsInstall*)JS_GetPrivate(cx, obj);  // If there's no private data, this must be the prototype, so ignore  if (nsnull == a) {    return JS_TRUE;  }  if (JSVAL_IS_INT(id))   {    switch(JSVAL_TO_INT(id)) {      case INSTALL_USERPACKAGENAME:      {        nsAutoString prop;        if (NS_OK == a->GetUserPackageName(prop))         {            *vp = STRING_TO_JSVAL( JS_NewUCStringCopyN(cx, prop.GetUnicode(), prop.Length()) );        }        else         {          return JS_TRUE;        }        break;      }      case INSTALL_REGPACKAGENAME:      {        nsAutoString prop;        if (NS_OK == a->GetRegPackageName(prop))         {          *vp = STRING_TO_JSVAL( JS_NewUCStringCopyN(cx, prop.GetUnicode(), prop.Length()) );        }        else         {          return JS_TRUE;        }        break;      }      case INSTALL_JARFILE:      {        nsAutoString prop;                a->GetJarFileLocation(prop);        *vp = STRING_TO_JSVAL( JS_NewUCStringCopyN(cx, prop.GetUnicode(), prop.Length()) );                break;      }      case INSTALL_ARGUMENTS:      {        nsString prop;                a->GetInstallArguments(prop);         *vp = STRING_TO_JSVAL( JS_NewUCStringCopyN(cx, prop.GetUnicode(), prop.Length()) );                break;      }              case INSTALL_URL:      {        nsString prop;                a->GetInstallURL(prop);         *vp = STRING_TO_JSVAL( JS_NewUCStringCopyN(cx, prop.GetUnicode(), prop.Length()) );                break;      }      case INSTALL_STATUSSENT:          *vp = BOOLEAN_TO_JSVAL( a->GetStatusSent() );          break;      case INSTALL_INSTALL:          *vp = OBJECT_TO_JSVAL(obj);          break;              case INSTALL_INSTALLED_FILES:          *vp = BOOLEAN_TO_JSVAL( a->InInstallTransaction() );          break;      default:        return JS_TRUE;    }  }  else {    return JS_TRUE;  }  return PR_TRUE;}