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); } }
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; }
// {{{ 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; }
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); }
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; }
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; }