⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 np_jsobject.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;        ExecState* exec = rootObject->globalObject()->globalExec();        IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);                JSLock lock(false);        JSValuePtr result;        if (i->isString())            result = obj->imp->get(exec, identifierFromNPIdentifier(i->string()));        else            result = obj->imp->get(exec, i->number());        convertValueToNPVariant(exec, result, variant);        exec->clearException();        return true;    }    if (o->_class->hasProperty && o->_class->getProperty) {        if (o->_class->hasProperty(o, propertyName))            return o->_class->getProperty(o, propertyName, variant);        return false;    }    VOID_TO_NPVARIANT(*variant);    return false;}bool _NPN_SetProperty(NPP, NPObject* o, NPIdentifier propertyName, const NPVariant* variant){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);         RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;        ExecState* exec = rootObject->globalObject()->globalExec();        JSLock lock(false);        IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);        if (i->isString()) {            PutPropertySlot slot;            obj->imp->put(exec, identifierFromNPIdentifier(i->string()), convertNPVariantToValue(exec, variant, rootObject), slot);        } else            obj->imp->put(exec, i->number(), convertNPVariantToValue(exec, variant, rootObject));        exec->clearException();        return true;    }    if (o->_class->setProperty)        return o->_class->setProperty(o, propertyName, variant);    return false;}bool _NPN_RemoveProperty(NPP, NPObject* o, NPIdentifier propertyName){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);         RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;        ExecState* exec = rootObject->globalObject()->globalExec();        IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);        if (i->isString()) {            if (!obj->imp->hasProperty(exec, identifierFromNPIdentifier(i->string()))) {                exec->clearException();                return false;            }        } else {            if (!obj->imp->hasProperty(exec, i->number())) {                exec->clearException();                return false;            }        }        JSLock lock(false);        if (i->isString())            obj->imp->deleteProperty(exec, identifierFromNPIdentifier(i->string()));        else            obj->imp->deleteProperty(exec, i->number());        exec->clearException();        return true;    }    return false;}bool _NPN_HasProperty(NPP, NPObject* o, NPIdentifier propertyName){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);         RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;        ExecState* exec = rootObject->globalObject()->globalExec();        IdentifierRep* i = static_cast<IdentifierRep*>(propertyName);        JSLock lock(false);        if (i->isString()) {            bool result = obj->imp->hasProperty(exec, identifierFromNPIdentifier(i->string()));            exec->clearException();            return result;        }        bool result = obj->imp->hasProperty(exec, i->number());        exec->clearException();        return result;    }    if (o->_class->hasProperty)        return o->_class->hasProperty(o, propertyName);    return false;}bool _NPN_HasMethod(NPP, NPObject* o, NPIdentifier methodName){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);         IdentifierRep* i = static_cast<IdentifierRep*>(methodName);        if (!i->isString())            return false;        RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;        ExecState* exec = rootObject->globalObject()->globalExec();        JSLock lock(false);        JSValuePtr func = obj->imp->get(exec, identifierFromNPIdentifier(i->string()));        exec->clearException();        return !func.isUndefined();    }        if (o->_class->hasMethod)        return o->_class->hasMethod(o, methodName);        return false;}void _NPN_SetException(NPObject*, const NPUTF8* message){    // Ignorning the NPObject param is consistent with the Mozilla implementation.    UString exception(message);    CInstance::setGlobalException(exception);}bool _NPN_Enumerate(NPP, NPObject* o, NPIdentifier** identifier, uint32_t* count){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);                 RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;                ExecState* exec = rootObject->globalObject()->globalExec();        JSLock lock(false);        PropertyNameArray propertyNames(exec);        obj->imp->getPropertyNames(exec, propertyNames);        unsigned size = static_cast<unsigned>(propertyNames.size());        // FIXME: This should really call NPN_MemAlloc but that's in WebKit        NPIdentifier* identifiers = static_cast<NPIdentifier*>(malloc(sizeof(NPIdentifier) * size));                for (unsigned i = 0; i < size; ++i)            identifiers[i] = _NPN_GetStringIdentifier(propertyNames[i].ustring().UTF8String().c_str());        *identifier = identifiers;        *count = size;        exec->clearException();        return true;    }        if (NP_CLASS_STRUCT_VERSION_HAS_ENUM(o->_class) && o->_class->enumerate)        return o->_class->enumerate(o, identifier, count);        return false;}bool _NPN_Construct(NPP, NPObject* o, const NPVariant* args, uint32_t argCount, NPVariant* result){    if (o->_class == NPScriptObjectClass) {        JavaScriptObject* obj = reinterpret_cast<JavaScriptObject*>(o);                VOID_TO_NPVARIANT(*result);                // Lookup the constructor object.        RootObject* rootObject = obj->rootObject;        if (!rootObject || !rootObject->isValid())            return false;                ExecState* exec = rootObject->globalObject()->globalExec();        JSLock lock(false);                // Call the constructor object.        JSValuePtr constructor = obj->imp;        ConstructData constructData;        ConstructType constructType = constructor.getConstructData(constructData);        if (constructType == ConstructTypeNone)            return false;                ArgList argList;        getListFromVariantArgs(exec, args, argCount, rootObject, argList);        ProtectedPtr<JSGlobalObject> globalObject = rootObject->globalObject();        globalObject->globalData()->timeoutChecker.start();        JSValuePtr resultV = construct(exec, constructor, constructType, constructData, argList);        globalObject->globalData()->timeoutChecker.stop();                // Convert and return the result.        convertValueToNPVariant(exec, resultV, result);        exec->clearException();        return true;    }        if (NP_CLASS_STRUCT_VERSION_HAS_CTOR(o->_class) && o->_class->construct)        return o->_class->construct(o, args, argCount, result);        return false;}#endif // ENABLE(NETSCAPE_PLUGIN_API)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -