Exemple #1
0
JSBool netgetjoinableous(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
	LPWSTR domain, account, password;
	JS_BeginRequest(cx);
	if(!JS_ConvertArguments(cx, argc, argv, "W W W", &domain, &account, &password))
	{
		JS_ReportError(cx, "Error parsing arguments in NetGetJoinableOUs");
		JS_EndRequest(cx);
	}

	JS_YieldRequest(cx);
	DWORD ouCount = 0;
	LPWSTR * ous = NULL;
	DWORD status = NetGetJoinableOUs(NULL, domain, (JSVAL_IS_NULL(argv[1]) ? NULL : account), (JSVAL_IS_NULL(argv[2]) ? NULL : password), &ouCount, &ous);
	if(status != NERR_Success)
	{
		JS_NewNumberValue(cx, status, rval);
		JS_EndRequest(cx);
		return JS_TRUE;
	}

	JSObject * arrayObj = JS_NewArrayObject(cx, 0, NULL);
	*rval = OBJECT_TO_JSVAL(arrayObj);
	for(DWORD i = 0; i < ouCount; i++)
	{
		JSString * curOu = JS_NewUCStringCopyZ(cx, (jschar*)ous[i]);
		JS_DefineElement(cx, arrayObj, i, STRING_TO_JSVAL(curOu), NULL, NULL, 0);
	}
	NetApiBufferFree(ous);
	JS_EndRequest(cx);
	return JS_TRUE;
}
JSString* JSDOMProcessingInstruction::getData()
{
  if (_pi == NULL) return NULL;
  XMLChToVXIchar data(_pi->getData());
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, data.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
/**
 * Set a property of an object from a nsString.
 *
 * If the nsString is void (i.e. IsVoid is true), do nothing.
 */
bool SetStringProperty(JSContext *cx, JSObject *aObject, const char *aProperty,
                       const nsString aValue)
{
  if (aValue.IsVoid()) {
    return true;
  }
  JSString* strValue = JS_NewUCStringCopyZ(cx, aValue.get());
  jsval valValue = STRING_TO_JSVAL(strValue);
  return JS_SetProperty(cx, aObject, aProperty, &valValue);
}
/**
 * Set a property of an object from a nsString.
 *
 * If the nsString is void (i.e. IsVoid is true), do nothing.
 */
bool SetStringProperty(JSContext *cx, JS::Handle<JSObject*> aObject, const char *aProperty,
                       const nsString aValue)
{
  if (aValue.IsVoid()) {
    return true;
  }
  JSString* strValue = JS_NewUCStringCopyZ(cx, aValue.get());
  NS_ENSURE_TRUE(strValue, false);
  JS::Rooted<JS::Value> valValue(cx, JS::StringValue(strValue));
  return JS_SetProperty(cx, aObject, aProperty, valValue);
}
Exemple #5
0
JSBool win32_getlasterrormsg(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
	LPWSTR buffer;
	DWORD errorCode = GetLastError();
	JS_BeginRequest(cx);
	if(argc > 0)
		JS_ValueToECMAUint32(cx, argv[0], (uint32*)&errorCode);
	FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, NULL);
	JSString * retStr = JS_NewUCStringCopyZ(cx, (jschar*)buffer);
	JS_EndRequest(cx);
	LocalFree(buffer);
	*rval = STRING_TO_JSVAL(retStr);
	return JS_TRUE;
}
Exemple #6
0
JSBool stringPropGetter(JSContext * cx, JSObject * obj, jsval idval, jsval * vp)
{
	JS_BeginRequest(cx);
	nsCOMPtr<nsIDOMNode> mNode = (nsIDOMNode*)JS_GetPrivate(cx, obj);
	nsCOMPtr<nsIDOMElement> mElement = do_QueryInterface(mNode);

	nsString value;
	switch(JSVAL_TO_INT(idval))
	{
	case NAME_PROP:
		mNode->GetNodeName(value);
		break;
	case VALUE_PROP:
		mNode->GetNodeValue(value);
		break;
	case TAGNAME_PROP:
		if(mElement)
			mElement->GetTagName(value);
		break;
	case TEXT_PROP:
		{
			nsCOMPtr<nsIDOM3Node> l3Node = do_QueryInterface(mNode);
			if(l3Node != NULL)
				l3Node->GetTextContent(value);
		}
		break;
	}

	if(value.IsEmpty())
		*vp = JSVAL_NULL;
	else
	{
		JSString * retVal = JS_NewUCStringCopyZ(cx, (jschar*)value.get());
		*vp = STRING_TO_JSVAL(retVal);
	}
	JS_EndRequest(cx);
	return JS_TRUE;
}
/*
 * ½«ANSI±àÂëµÄc×Ö·û´®×ª»»ÎªUTF-16±àÂëµÄjs×Ö·û´®
 */
JSString* c_str_to_js_str( JSContext* cx, const char* v, size_t length /*= -1*/ )
{
	if (v == nullptr)
	{
		return nullptr;
	}

#if 0
	JSString* str = JS_NewStringCopyZ(cx, v);
#else
	if (length == -1)
	{
		length = strlen(v);
	}

	if (length == 0)
	{
		return JS_GetEmptyString(JS_GetRuntime(cx));
	}

	JS::RootedString ret(cx);

	//std::u16string outUtf16;
	//bool result = UTF8ToUTF16(v, outUtf16);
	//if (!result) {
	//	return JS_GetEmptyString(JS_GetRuntime(cx));
	//}

	// ANSI -> UTF16
	auto len = MultiByteToWideChar(CP_ACP, 0, v, -1, nullptr, 0);
	WCHAR *utf16Buf = new WCHAR[len];
	MultiByteToWideChar(CP_ACP, 0, v, -1, utf16Buf, len);
	JSString* str = JS_NewUCStringCopyZ(cx, (const jschar*)utf16Buf);
	delete utf16Buf;
#endif

	return str;
}
NS_IMETHODIMP 
nsHTTPIndex::OnFTPControlLog(PRBool server, const char *msg)
{
    NS_ENSURE_TRUE(mRequestor, NS_OK);

    nsCOMPtr<nsIScriptGlobalObject> scriptGlobal(do_GetInterface(mRequestor));
    NS_ENSURE_TRUE(scriptGlobal, NS_OK);

    nsIScriptContext *context = scriptGlobal->GetContext();
    NS_ENSURE_TRUE(context, NS_OK);

    JSContext* cx = reinterpret_cast<JSContext*>
                                    (context->GetNativeContext());
    NS_ENSURE_TRUE(cx, NS_OK);

    JSObject* global = JS_GetGlobalObject(cx);
    NS_ENSURE_TRUE(global, NS_OK);

    jsval params[2];

    nsString unicodeMsg;
    unicodeMsg.AssignWithConversion(msg);
    JSAutoRequest ar(cx);
    JSString* jsMsgStr = JS_NewUCStringCopyZ(cx, (jschar*) unicodeMsg.get());

    params[0] = BOOLEAN_TO_JSVAL(server);
    params[1] = STRING_TO_JSVAL(jsMsgStr);
    
    jsval val;
    JS_CallFunctionName(cx,
                        global, 
                        "OnFTPControlLog",
                        2, 
                        params, 
                        &val);
    return NS_OK;
}
/* static */ void
JetpackChild::ReportError(JSContext* cx, const char* message,
                          JSErrorReport* report)
{
  if (sReportingError) {
    NS_WARNING("Recursive error reported.");
    return;
  }

  sReportingError = true;

  js::AutoObjectRooter obj(cx, JS_NewObject(cx, NULL, NULL, NULL));

  if (report && report->filename) {
    jsval filename = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, report->filename));
    JS_SetProperty(cx, obj.object(), "fileName", &filename);
  }

  if (report) {
    jsval lineno = INT_TO_JSVAL(report->lineno);
    JS_SetProperty(cx, obj.object(), "lineNumber", &lineno);
  }

  jsval msgstr = JSVAL_NULL;
  if (report && report->ucmessage)
    msgstr = STRING_TO_JSVAL(JS_NewUCStringCopyZ(cx, report->ucmessage));
  else
    msgstr = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, message));
  JS_SetProperty(cx, obj.object(), "message", &msgstr);

  MessageResult smr;
  Variant* vp = smr.data.AppendElement();
  JetpackActorCommon::jsval_to_Variant(cx, OBJECT_TO_JSVAL(obj.object()), vp);
  GetThis(cx)->SendSendMessage(NS_LITERAL_STRING("core:exception"), smr.data);

  sReportingError = false;
}
nsresult
ArchiveRequest::GetFilenamesResult(JSContext* aCx,
                                   JS::Value* aValue,
                                   nsTArray<nsCOMPtr<nsIDOMFile> >& aFileList)
{
  JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length(), nullptr));
  nsresult rv;

  if (!array) {
    return NS_ERROR_OUT_OF_MEMORY;
  }

  for (uint32_t i = 0; i < aFileList.Length(); ++i) {
    nsCOMPtr<nsIDOMFile> file = aFileList[i];

    nsString filename;
    rv = file->GetName(filename);
    NS_ENSURE_SUCCESS(rv, rv);

    JSString* str = JS_NewUCStringCopyZ(aCx, filename.get());
    NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY);

    JS::Rooted<JS::Value> item(aCx, STRING_TO_JSVAL(str));

    if (NS_FAILED(rv) || !JS_SetElement(aCx, array, i, &item)) {
      return NS_ERROR_FAILURE;
    }
  }

  if (!JS_FreezeObject(aCx, array)) {
    return NS_ERROR_FAILURE;
  }

  *aValue = OBJECT_TO_JSVAL(array);
  return NS_OK;
}