JSValue convertNPVariantToValue(ExecState* exec, const NPVariant* variant, RootObject* rootObject) { JSLockHolder lock(exec); NPVariantType type = variant->type; if (type == NPVariantType_Bool) return jsBoolean(NPVARIANT_TO_BOOLEAN(*variant)); if (type == NPVariantType_Null) return jsNull(); if (type == NPVariantType_Void) return jsUndefined(); if (type == NPVariantType_Int32) return jsNumber(NPVARIANT_TO_INT32(*variant)); if (type == NPVariantType_Double) return jsNumber(NPVARIANT_TO_DOUBLE(*variant)); if (type == NPVariantType_String) return WebCore::jsStringWithCache(exec, convertNPStringToUTF16(&variant->value.stringValue)); if (type == NPVariantType_Object) { NPObject* obj = variant->value.objectValue; if (obj->_class == NPScriptObjectClass) // Get JSObject from NP_JavaScriptObject. return ((JavaScriptObject*)obj)->imp; // Wrap NPObject in a CInstance. return CInstance::create(obj, rootObject)->createRuntimeObject(exec); } return jsUndefined(); }
JSValue *convertNPVariantToValue(ExecState*, const NPVariant* variant, RootObject* rootObject) { JSLock lock; NPVariantType type = variant->type; if (type == NPVariantType_Bool) return jsBoolean(NPVARIANT_TO_BOOLEAN(*variant)); if (type == NPVariantType_Null) return jsNull(); if (type == NPVariantType_Void) return jsUndefined(); if (type == NPVariantType_Int32) return jsNumber(NPVARIANT_TO_INT32(*variant)); if (type == NPVariantType_Double) return jsNumber(NPVARIANT_TO_DOUBLE(*variant)); if (type == NPVariantType_String) { NPUTF16 *stringValue; unsigned int UTF16Length; convertNPStringToUTF16(&variant->value.stringValue, &stringValue, &UTF16Length); // requires free() of returned memory UString resultString((const UChar *)stringValue,UTF16Length); free(stringValue); return jsString(resultString); } if (type == NPVariantType_Object) { NPObject *obj = variant->value.objectValue; if (obj->_class == NPScriptObjectClass) // Get JSObject from NP_JavaScriptObject. return ((JavaScriptObject *)obj)->imp; // Wrap NPObject in a CInstance. return Instance::createRuntimeObject(Instance::CLanguage, obj, rootObject); } return jsUndefined(); }