Example #1
0
void
WebGLContext::GenerateWarning(const char* fmt, va_list ap)
{
    if (!ShouldGenerateWarnings())
        return;

    mAlreadyGeneratedWarnings++;

    char buf[1024];
    PR_vsnprintf(buf, 1024, fmt, ap);

    // no need to print to stderr, as JS_ReportWarning takes care of this for us.

    if (!mCanvasElement) {
        return;
    }

    dom::AutoJSAPI api;
    if (!api.Init(mCanvasElement->OwnerDoc()->GetScopeObject())) {
        return;
    }

    JSContext* cx = api.cx();
    JS_ReportWarning(cx, "WebGL: %s", buf);
    if (!ShouldGenerateWarnings()) {
        JS_ReportWarning(cx,
                         "WebGL: No further warnings will be reported for this"
                         " WebGL context. (already reported %d warnings)",
                         mAlreadyGeneratedWarnings);
    }
}
Example #2
0
JSBool g2_register_event(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
	LPSTR callback = NULL;
	LPTSTR domEvent = NULL;
	JSObject * target = NULL;

	JS_BeginRequest(cx);
	if(!JS_ConvertArguments(cx, argc, argv, "o W/ s", &target, &domEvent, &callback))
	{
		JS_ReportError(cx, "Error parsing arguments in registerevent.");
		JS_EndRequest(cx);
		return JS_FALSE;
	}

	if(!JS_InstanceOf(cx, target, &lDOMNodeClass, NULL))
	{
		JS_ReportWarning(cx, "Cannot register an event for anything besides a DOM node");
		JS_EndRequest(cx);
		return JS_TRUE;
	}

	PrivateData * mPrivate = (PrivateData*)JS_GetPrivate(cx, obj);
	nsIDOMNode * mNode = (nsIDOMNode*)JS_GetPrivate(cx, target);
	DOMEventListener * newListener = new DOMEventListener(mPrivate, callback);
	newListener->AddRef();
	
	nsCOMPtr<nsIDOMEventTarget> realTarget = do_QueryInterface(mNode);
	nsDependentString typeString(domEvent);
	EnterCriticalSection(&domStateLock);
	nsresult rv = realTarget->AddEventListener(typeString, newListener, PR_FALSE);
	LeaveCriticalSection(&domStateLock);
	if(NS_SUCCEEDED(rv))
	{
		newListener->next = mPrivate->mDOMListener;
		mPrivate->mDOMListener = newListener;
		mPrivate->nDOMListeners++;
		*rval = JSVAL_TRUE;
	}
	else
	{
		newListener->Release();
		*rval = JSVAL_FALSE;
	}
	return JS_TRUE;
}
Example #3
0
// {{{ Conversions
bool JSGlobal::JS_btoa(JSContext *cx, JS::CallArgs &args)
{
    if (args[0].isString()) {

        JSAutoByteString cdata;
        JS::RootedString str(cx, args[0].toString());
        cdata.encodeUtf8(cx, str);

        char *ret = Utils::B64Encode(
            reinterpret_cast<unsigned char *>(cdata.ptr()), cdata.length());

        args.rval().setString(JS_NewStringCopyZ(cx, ret));

        free(ret);

    } else {
        args.rval().setNull();
        JS_ReportWarning(cx, "btoa() non-string given");
    }

    return true;
}
Example #4
0
JSBool DLLCALL
js_CommonOperationCallback(JSContext *cx, js_callback_t* cb)
{
	cb->counter++;

	/* Terminated? */
	if(cb->auto_terminate &&
		(cb->terminated!=NULL && *cb->terminated)) {
		JS_ReportWarning(cx,"Terminated");
		cb->counter=0;
		return(JS_FALSE);
	}

	/* Infinite loop? */
	if(cb->limit && cb->counter > cb->limit) {
		JS_ReportError(cx,"Infinite loop (%lu operation callbacks) detected",cb->counter);
		cb->counter=0;
		return(JS_FALSE);
	}

	/* Give up timeslices every once in a while */
	if(cb->yield_interval && (cb->counter%cb->yield_interval)==0) {
		jsrefcount	rc;

		rc=JS_SUSPENDREQUEST(cx);
		YIELD();
		JS_RESUMEREQUEST(cx, rc);
	}

	/* Permit other contexts to run GC */
	JS_YieldRequest(cx);

	/* Periodic Garbage Collection */
	if(cb->gc_interval && (cb->counter%cb->gc_interval)==0)
		JS_MaybeGC(cx), cb->gc_attempts++;

    return(JS_TRUE);
}
Example #5
0
static JSBool
js_OperationCallback(JSContext *cx)
{
	JSBool	ret;
	sbbs_t*		sbbs;

	JS_SetOperationCallback(cx, NULL);
	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) {
		JS_SetOperationCallback(cx, js_OperationCallback);
		return(JS_FALSE);
	}

	if(sbbs->js_callback.auto_terminate && !sbbs->online) {
		JS_ReportWarning(cx,"Disconnected");
		sbbs->js_callback.counter=0;
		JS_SetOperationCallback(cx, js_OperationCallback);
		return(JS_FALSE);
	}

	ret=js_CommonOperationCallback(cx,&sbbs->js_callback);
	JS_SetOperationCallback(cx, js_OperationCallback);
	return ret;
}
Example #6
0
JSBool replaceChild(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
{
	JSObject * newChildObj, *refChildObj;
	nsCOMPtr<nsIDOMNode> newChild, refChild, mNode, outNode;

	JS_BeginRequest(cx);
	if(!JS_ConvertArguments(cx, argc, argv, "o o", &newChildObj, &refChildObj))
	{
		JS_ReportError(cx, "Error converting arguments in replaceChild");
		JS_EndRequest(cx);
		return JS_FALSE;
	}
	
	if(!JS_InstanceOf(cx, newChildObj, &lDOMNodeClass, NULL) || !JS_InstanceOf(cx, refChildObj, &lDOMNodeClass, NULL))
	{
		JS_ReportWarning(cx, "Arguments to replaceChild must both be DOMNode objects.");
		JS_EndRequest(cx);
		return JS_TRUE;
	}
	newChild = (nsIDOMNode*)JS_GetPrivate(cx, newChildObj);
	refChild = (nsIDOMNode*)JS_GetPrivate(cx, refChildObj);
	mNode = (nsIDOMNode*)JS_GetPrivate(cx, obj);
	
	EnterCriticalSection(&domStateLock);
	domState = 1;
	if(mNode->ReplaceChild(newChild, refChild, getter_AddRefs(outNode)) == NS_OK)
	{
		JSObject * retObj = JS_NewObject(cx, &lDOMNodeClass, lDOMNodeProto, obj);
		*rval = OBJECT_TO_JSVAL(retObj);
		JS_SetPrivate(cx, retObj, outNode);
	}
	else
		*rval = JSVAL_FALSE;
	LeaveCriticalSection(&domStateLock);
	JS_EndRequest(cx);
	return JS_TRUE;
}