static JSValueRef setCustomPolicyDelegateCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { // Has mac implementation if (argumentCount < 1) return JSValueMakeUndefined(context); bool permissive = false; if (argumentCount >= 2) permissive = JSValueToBoolean(context, arguments[1]); LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setCustomPolicyDelegate(JSValueToBoolean(context, arguments[0]), permissive); return JSValueMakeUndefined(context); }
/* * Tests whether a JavaScript value is an array object * * This invokes Array.isArray(value) and returns its result */ EXPORTAPI bool HyperloopJSValueIsArray(JSContextRef ctx, JSValueRef value) { if (JSValueIsObject(ctx, value)) { JSObjectRef global = JSContextGetGlobalObject(ctx); JSValueRef exception = JSValueMakeNull(ctx); JSStringRef string = JSStringCreateWithUTF8CString("Array"); JSObjectRef array = JSValueToObject(ctx, JSObjectGetProperty(ctx, global, string, &exception), &exception); JSStringRelease(string); if (!JSValueIsNull(ctx, exception)) { return false; } string = JSStringCreateWithUTF8CString("isArray"); JSObjectRef isArray = JSValueToObject(ctx, JSObjectGetProperty(ctx, array, string, &exception), &exception); JSStringRelease(string); if (!JSValueIsNull(ctx, exception)) { return false; } JSValueRef result = JSObjectCallAsFunction(ctx, isArray, global, 1, &value, &exception); if (JSValueIsNull(ctx, exception) && JSValueIsBoolean(ctx, result)) { return JSValueToBoolean(ctx, result); } } return false; }
static void assertEqualsAsBoolean(JSValueRef value, bool expectedValue) { if (JSValueToBoolean(context, value) != expectedValue) { fprintf(stderr, "assertEqualsAsBoolean failed: %p, %d\n", value, expectedValue); failed = 1; } }
static JSValueRef enableEnhancedAccessibilityCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { AccessibilityController* controller = static_cast<AccessibilityController*>(JSObjectGetPrivate(thisObject)); if (argumentCount == 1) controller->enableEnhancedAccessibility(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
JNIEXPORT jboolean JNICALL Java_com_appcelerator_hyperloop_ViewOnTouchListener_NativeOnTouch (JNIEnv *env, jobject thiz, jlong jsContextRef, jlong thisObjectRef, jlong onTouchFuncRef, jobject view, jobject event) { JSContextRef ctx = (JSContextRef)jsContextRef; JSObjectRef onTouchFunc = (JSObjectRef)onTouchFuncRef; JSObjectRef thisObject = (JSObjectRef)thisObjectRef; JSValueRef argv[2]; argv[0] = MakeObjectForJava_android_view_View(ctx, view); argv[1] = MakeObjectForJava_android_view_MotionEvent(ctx, event); if (JSObjectIsFunction(ctx, onTouchFunc)) { JSValueRef exception = JSValueMakeNull(ctx); JSValueRef result = JSObjectCallAsFunction(ctx, onTouchFunc, thisObject, 2, argv, &exception); if (!JSValueIsNull(ctx, exception)) { JSStringRef string = JSValueToStringCopy(ctx, exception, NULL); CCHAR_FROM_JSSTRINGREF(string, cstring); LOGD("Java_com_appcelerator_hyperloop_ViewOnTouchListener_NativeOnTouch '%s'", cstring); free(cstring); JSStringRelease(string); } return JSValueToBoolean(ctx, result) ? JNI_TRUE : JNI_FALSE; } return JNI_FALSE; }
static JSValueRef setSelectTrailingWhitespaceEnabledCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setSelectTrailingWhitespaceEnabled(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
static JSValueRef setCallCloseOnWebViewsCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setCallCloseOnWebViews(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
JNIEXPORT jint JNICALL WebKitGTK_NATIVE(_1JSValueToBoolean) (JNIEnv *env, jclass that, jintLong arg0, jintLong arg1) { jint rc = 0; WebKitGTK_NATIVE_ENTER(env, that, _1JSValueToBoolean_FUNC); rc = (jint)JSValueToBoolean((JSContextRef)arg0, (JSValueRef)arg1); WebKitGTK_NATIVE_EXIT(env, that, _1JSValueToBoolean_FUNC); return rc; }
static JSValueRef setCloseRemainingWindowsWhenCompleteCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setCloseRemainingWindowsWhenComplete(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
static JSValueRef showChildApplicationsCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount < 1) return JSValueMakeUndefined(context); ApplicationTestController* controller = static_cast<ApplicationTestController*>(JSObjectGetPrivate(thisObject)); controller->setShowChildApplications(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
bool WebViewTest::javascriptResultToBoolean(WebKitJavascriptResult* javascriptResult) { JSGlobalContextRef context = webkit_javascript_result_get_global_context(javascriptResult); g_assert(context); JSValueRef value = webkit_javascript_result_get_value(javascriptResult); g_assert(value); g_assert(JSValueIsBoolean(context, value)); return JSValueToBoolean(context, value); }
static JSValueRef collectOnAlternateThreadCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { bool waitUntilDone = false; if (argumentCount > 0) waitUntilDone = JSValueToBoolean(context, arguments[0]); GCController* controller = static_cast<GCController*>(JSObjectGetPrivate(thisObject)); controller->collectOnAlternateThread(waitUntilDone); return JSValueMakeUndefined(context); }
static JSValueRef setUseDashboardCompatibilityModeCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { // Has mac implementation if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setUseDashboardCompatibilityMode(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
static JSValueRef setPopupBlockingEnabledCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { // Has mac & windows implementation if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setPopupBlockingEnabled(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
static JSValueRef setWindowIsKeyCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { // Has mac implementation if (argumentCount < 1) return JSValueMakeUndefined(context); LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setWindowIsKey(JSValueToBoolean(context, arguments[0])); return JSValueMakeUndefined(context); }
NATIVE(JSValue,jboolean,toBoolean) (PARAMS, jlong ctx, jlong valueRef) { JSContextWrapper *wrapper = (JSContextWrapper *)ctx; struct msg_t { JSContextRef ctx; JSValueRef valueRef; bool ret; }; msg_t msg = { wrapper->context, (JSValueRef)valueRef, false }; wrapper->worker_q->sync([](void *msg) { msg_t *m = (msg_t *)msg; m->ret = JSValueToBoolean(m->ctx, m->valueRef); },&msg); return msg.ret; }
bool IsArray(JSObjectRef obj) { if (g_fnxIsArray == NULL) { JSStringRef fnScript = JSStringCreateWithUTF8CString("return arguments[0] instanceof Array"); g_fnxIsArray = JSObjectMakeFunction(g_ctx, NULL, 0, NULL, fnScript, NULL, 0, NULL); JSValueProtect(g_ctx, g_fnxIsArray); JSStringRelease(fnScript); } JSValueRef isArray = JSObjectCallAsFunction(g_ctx, g_fnxIsArray, NULL, 1, (JSValueRef*) &obj, NULL); return JSValueToBoolean(g_ctx, isArray); }
EJ_BIND_FUNCTION(EJBindingCanvas, arc, ctx, argc, argv ) { if( argc < 5 ) { return NULL; } float x = JSValueToNumberFast(ctx, argv[0]), y = JSValueToNumberFast(ctx, argv[1]), radius = JSValueToNumberFast(ctx, argv[2]), startAngle = JSValueToNumberFast(ctx, argv[3]), endAngle = JSValueToNumberFast(ctx, argv[4]); BOOL antiClockwise = argc < 6 ? false : JSValueToBoolean(ctx, argv[5]); renderingContext->arc(x,y,radius,startAngle,endAngle ,antiClockwise); return NULL; }
template<> std::string RJSAccessor::to_binary(JSContextRef ctx, JSValueRef &val) { static JSStringRef arrayBufferString = JSStringCreateWithUTF8CString("ArrayBuffer"); static JSStringRef bufferString = JSStringCreateWithUTF8CString("buffer"); static JSStringRef byteLengthString = JSStringCreateWithUTF8CString("byteLength"); static JSStringRef byteOffsetString = JSStringCreateWithUTF8CString("byteOffset"); static JSStringRef isViewString = JSStringCreateWithUTF8CString("isView"); static JSStringRef uint8ArrayString = JSStringCreateWithUTF8CString("Uint8Array"); JSObjectRef arrayBufferConstructor = RJSValidatedObjectProperty(ctx, JSContextGetGlobalObject(ctx), arrayBufferString); JSObjectRef uint8ArrayContructor = RJSValidatedObjectProperty(ctx, JSContextGetGlobalObject(ctx), uint8ArrayString); JSValueRef uint8ArrayArguments[3]; size_t uint8ArrayArgumentsCount = 0; // Value should either be an ArrayBuffer or ArrayBufferView (i.e. TypedArray or DataView). if (JSValueIsInstanceOfConstructor(ctx, val, arrayBufferConstructor, NULL)) { uint8ArrayArguments[0] = val; uint8ArrayArgumentsCount = 1; } else if (JSObjectRef object = JSValueToObject(ctx, val, NULL)) { // Check if value is an ArrayBufferView by calling ArrayBuffer.isView(val). JSObjectRef isViewMethod = RJSValidatedObjectProperty(ctx, arrayBufferConstructor, isViewString); JSValueRef isView = JSObjectCallAsFunction(ctx, isViewMethod, arrayBufferConstructor, 1, &val, NULL); if (isView && JSValueToBoolean(ctx, isView)) { uint8ArrayArguments[0] = RJSValidatedObjectProperty(ctx, object, bufferString); uint8ArrayArguments[1] = RJSValidatedPropertyValue(ctx, object, byteOffsetString); uint8ArrayArguments[2] = RJSValidatedPropertyValue(ctx, object, byteLengthString); uint8ArrayArgumentsCount = 3; } } if (!uint8ArrayArgumentsCount) { throw std::runtime_error("Can only convert ArrayBuffer and TypedArray objects to binary"); } JSValueRef exception = NULL; JSObjectRef uint8Array = JSObjectCallAsConstructor(ctx, uint8ArrayContructor, uint8ArrayArgumentsCount, uint8ArrayArguments, &exception); if (exception) { throw RJSException(ctx, exception); } size_t byteCount = RJSValidatedListLength(ctx, uint8Array); std::string bytes(byteCount, 0); for (size_t i = 0; i < byteCount; i++) { JSValueRef byteValue = JSObjectGetPropertyAtIndex(ctx, uint8Array, (unsigned)i, NULL); bytes[i] = JSValueToNumber(ctx, byteValue, NULL); } return bytes; }
static bool EvilExceptionObject_hasInstance(JSContextRef context, JSObjectRef constructor, JSValueRef possibleValue, JSValueRef* exception) { UNUSED_PARAM(context); UNUSED_PARAM(constructor); JSStringRef hasInstanceName = JSStringCreateWithUTF8CString("hasInstance"); JSValueRef hasInstance = JSObjectGetProperty(context, constructor, hasInstanceName, exception); JSStringRelease(hasInstanceName); if (!hasInstance) return false; JSObjectRef function = JSValueToObject(context, hasInstance, exception); JSValueRef result = JSObjectCallAsFunction(context, function, constructor, 1, &possibleValue, exception); return result && JSValueToBoolean(context, result); }
static bool console_setSharedBool(JSContextRef ctx, JSObjectRef thisObject, JSStringRef /*propertyName*/, JSValueRef value, JSValueRef* /*exception*/) { if (!JSValueIsBoolean(ctx, value)) return false; CallJSDlg* dlg = static_cast<CallJSDlg*>(JSObjectGetPrivate(thisObject)); if (!dlg) return false; bool temp = JSValueToBoolean (ctx, value); dlg->setSharedBool(temp); return true; }
/** * internal * * implementation of console.log */ static JSValueRef HyperloopLogger (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount>0) { std::ostringstream stream; for (size_t c=0;c<argumentCount;c++) { if (JSValueIsObject(ctx,arguments[c]) || JSValueIsString(ctx,arguments[c])) { std::string str(HyperloopJSValueToStringCopy(ctx,arguments[c],exception)); stream << str; } else if (JSValueIsNumber(ctx,arguments[c])) { double num = JSValueToNumber(ctx,arguments[c],exception); double intpart; if (modf(num, &intpart) == 0.0) { stream << intpart; } else { stream << num; } } else if (JSValueIsBoolean(ctx,arguments[c])) { bool b = JSValueToBoolean(ctx,arguments[c]); stream << (b ? "true":"false"); } else if (JSValueIsNull(ctx,arguments[c])) { stream << "null"; } else if (JSValueIsUndefined(ctx,arguments[c])) { stream << "undefined"; } if (c+1 < argumentCount) { stream << " "; } } // call the platform adapter HyperloopNativeLogger(stream.str().c_str()); } return JSValueMakeUndefined(ctx); }
static bool gumjs_proxy_has_property (JSContextRef ctx, JSObjectRef object, JSStringRef property_name) { GumJscProxy * self; GumJscCore * core; self = GUMJS_PROXY (object); if (self->has == NULL) return false; core = JSObjectGetPrivate (JSContextGetGlobalObject (ctx)); { GumJscScope scope = GUM_JSC_SCOPE_INIT (core); JSValueRef * ex = &scope.exception; JSValueRef property_name_value, value; bool result = false; property_name_value = JSValueMakeString (ctx, property_name); value = JSObjectCallAsFunction (ctx, self->has, self->receiver, 1, &property_name_value, ex); if (value == NULL) goto beach; if (!JSValueIsBoolean (ctx, value)) goto invalid_result_type; result = JSValueToBoolean (ctx, value); goto beach; invalid_result_type: { _gumjs_throw (ctx, ex, "expected has() to return a boolean"); goto beach; } beach: { _gum_jsc_scope_flush (&scope); return result; } } }
static JSValueRef JSOSInstaller_setRestart(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (!JSValueIsObjectOfClass(context, thisObject, JSOSInstaller_class(context))) { JSStringRef message = JSStringCreateWithUTF8CString("TypeError: setRestart can only be called on JSOSInstaller"); *exception = JSValueMakeString(context, message); JSStringRelease(message); } else if (argumentCount < 1 || !JSValueIsBoolean(context, arguments[0])) { JSStringRef message = JSStringCreateWithUTF8CString("TypeError: first argument to setRestart must be a boolean"); *exception = JSValueMakeString(context, message); JSStringRelease(message); } else { JSInstaller* jsinst = JSObjectGetPrivate(thisObject); jsinst->restart = JSValueToBoolean(context,arguments[0]); } return JSValueMakeUndefined(context); }
EJ_BIND_FUNCTION(EJBindingHttpRequest, open, ctx, argc, argv) { if (argc < 2) { return NULL; } // Cleanup previous request, if any clearConnection(); clearRequest(); method = JSValueToNSString(ctx, argv[0]); method->retain(); url = JSValueToNSString(ctx, argv[1]); url->retain(); async = argc > 2 ? JSValueToBoolean(ctx, argv[2]) : true; if (argc > 4) { user = JSValueToNSString(ctx, argv[3]); user->retain(); password = JSValueToNSString(ctx, argv[4]); password->retain(); } state = kEJHttpRequestStateOpened; return NULL; }
static JSValueRef set_can_register_cb (JSContextRef js_context, JSObjectRef js_function, JSObjectRef js_this, size_t argument_count, const JSValueRef js_arguments[], JSValueRef* js_exception) { JSValueRef js_value = JSValueMakeNull (js_context); if (argument_count == 1 && JSValueGetType (js_context, js_arguments[0]) == kJSTypeBoolean) { bool sensitive = JSValueToBoolean (js_context, js_arguments[0]); gtk_widget_set_sensitive (register_button, sensitive == true); } return js_value; }
JSValueRef function_file_output_stream_open(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argc, const JSValueRef args[], JSValueRef *exception) { if (argc == 2 && JSValueGetType(ctx, args[0]) == kJSTypeString && JSValueGetType(ctx, args[1]) == kJSTypeBoolean) { char *path = value_to_c_string(ctx, args[0]); bool append = JSValueToBoolean(ctx, args[1]); uint64_t descriptor = file_open_write(path, append); free(path); char *descriptor_str = descriptor_int_to_str(descriptor); JSValueRef rv = c_string_to_value(ctx, descriptor_str); free(descriptor_str); return rv; } return JSValueMakeNull(ctx); }
GVariant* js_to_dbus(JSContextRef ctx, const JSValueRef jsvalue, const GVariantType* sig, JSValueRef *exception) { if (g_variant_type_is_array(sig)) { GVariantBuilder builder; g_variant_builder_init(&builder, sig); JSPropertyNameArrayRef array = JSObjectCopyPropertyNames(ctx, (JSObjectRef)jsvalue); const GVariantType* child_sig = g_variant_type_element(sig); if (g_variant_type_is_dict_entry(child_sig)) { const GVariantType* key_sig = g_variant_type_first(child_sig); const GVariantType* value_sig = g_variant_type_next(key_sig); for (size_t i=0; i < JSPropertyNameArrayGetCount(array); i++) { if (filter_function_child(ctx, jsvalue, i)) continue; g_variant_builder_open(&builder, child_sig); JSValueRef key = JSValueMakeString(ctx, JSPropertyNameArrayGetNameAtIndex(array, i)); JSValueRef value = JSObjectGetPropertyAtIndex(ctx, (JSObjectRef)jsvalue, i, NULL); g_variant_builder_add_value(&builder, js_to_dbus(ctx, key, key_sig, exception)); g_variant_builder_add_value(&builder, js_to_dbus(ctx, value, value_sig, exception)); g_variant_builder_close(&builder); } return g_variant_builder_end(&builder); } else { GVariantBuilder builder; g_variant_builder_init(&builder, sig); JSPropertyNameArrayRef array = JSObjectCopyPropertyNames(ctx, (JSObjectRef)jsvalue); const GVariantType* child_sig = g_variant_type_element(sig); for (size_t i=0; i < JSPropertyNameArrayGetCount(array); i++) { if (filter_array_child(ctx, array, i)) continue; g_variant_builder_add_value(&builder, js_to_dbus(ctx, JSObjectGetPropertyAtIndex(ctx, (JSObjectRef)jsvalue, i, NULL), child_sig, exception)); } JSPropertyNameArrayRelease(array); return g_variant_builder_end(&builder); } } else if (g_variant_type_is_tuple(sig)) { GVariantBuilder builder; g_variant_builder_init(&builder, sig); JSPropertyNameArrayRef array = JSObjectCopyPropertyNames(ctx, (JSObjectRef)jsvalue); const GVariantType* current_sig = g_variant_type_first(sig); for (size_t i=0; i < JSPropertyNameArrayGetCount(array); i++) { if (filter_array_child(ctx, array, i)) continue; g_variant_builder_add_value(&builder, js_to_dbus(ctx, JSObjectGetPropertyAtIndex(ctx, (JSObjectRef)jsvalue, i, NULL), current_sig, exception)); current_sig = g_variant_type_next(current_sig); } JSPropertyNameArrayRelease(array); return g_variant_builder_end(&builder); } else { switch (g_variant_type_peek_string(sig)[0]) { case 'y': return g_variant_new_byte(JSValueToNumber(ctx, jsvalue, exception)); case 'n': return g_variant_new_int16(JSValueToNumber(ctx, jsvalue, exception)); case 'q': return g_variant_new_uint16(JSValueToNumber(ctx, jsvalue, exception)); case 'i': return g_variant_new_int32(JSValueToNumber(ctx, jsvalue, exception)); case 'u': return g_variant_new_uint32(JSValueToNumber(ctx, jsvalue, exception)); case 'x': return g_variant_new_int64(JSValueToNumber(ctx, jsvalue, exception)); case 't': return g_variant_new_uint64(JSValueToNumber(ctx, jsvalue, exception)); case 'd': return g_variant_new_double(JSValueToNumber(ctx, jsvalue, exception)); case 'h': return g_variant_new_handle(JSValueToNumber(ctx, jsvalue, exception)); case 'b': return g_variant_new_boolean(JSValueToBoolean(ctx, jsvalue)); case 's': { char* v = jsvalue_to_cstr(ctx, jsvalue); GVariant* r = g_variant_new_string(v); g_free(v); return r; } case 'v': { //TODO: /*g_variant_new_variant()*/ g_assert_not_reached(); } } } g_assert_not_reached(); }
static bool setDragModeCallback(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSValueRef* exception) { dragMode = JSValueToBoolean(context, value); return true; }
static bool setGlobalFlagCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef value, JSValueRef* exception) { LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject)); controller->setGlobalFlag(JSValueToBoolean(context, value)); return true; }