# include <mozilla-config.h>\r
#endif\r
\r
-#include "npolibvlc.h"\r
#include "vlcplugin.h"\r
+#include "npolibvlc.h"\r
\r
/*\r
** implementation of libvlc root object\r
\r
RuntimeNPObject::InvokeResult LibvlcRootNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
switch( index )\r
{\r
\r
RuntimeNPObject::InvokeResult LibvlcRootNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const NPVariant &value)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const NPVariant &value)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcMessageNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
switch( index )\r
{\r
RuntimeNPObject(instance, aClass),\r
_p_iter(NULL)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(instance->pdata);\r
libvlc_log_t *p_log = p_plugin->getLog();\r
if( p_log )\r
{\r
\r
RuntimeNPObject::InvokeResult LibvlcMessageIteratorNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
switch( index )\r
{\r
case ID_messageiterator_hasNext:\r
\r
RuntimeNPObject::InvokeResult LibvlcMessageIteratorNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcMessagesNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
switch( index )\r
{\r
case ID_messages_count:\r
\r
RuntimeNPObject::InvokeResult LibvlcMessagesNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
LibvlcLogNPObject::LibvlcLogNPObject(NPP instance, const NPClass *aClass) :\r
RuntimeNPObject(instance, aClass)\r
{\r
- _p_vlcmessages = static_cast<LibvlcMessagesNPObject*>(NPN_CreateObject(instance, RuntimeNPClass<LibvlcMessagesNPObject>::getClass()));\r
+ _p_vlcmessages = NPN_CreateObject(instance, RuntimeNPClass<LibvlcMessagesNPObject>::getClass());\r
};\r
\r
LibvlcLogNPObject::~LibvlcLogNPObject()\r
\r
RuntimeNPObject::InvokeResult LibvlcLogNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcLogNPObject::setProperty(int index, const NPVariant &value)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcPlaylistItemsNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcPlaylistItemsNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
LibvlcPlaylistNPObject::LibvlcPlaylistNPObject(NPP instance, const NPClass *aClass) :\r
RuntimeNPObject(instance, aClass)\r
{\r
- _p_vlcplaylistitems = static_cast<LibvlcPlaylistItemsNPObject*>(NPN_CreateObject(instance, RuntimeNPClass<LibvlcPlaylistItemsNPObject>::getClass()));\r
+ _p_vlcplaylistitems = NPN_CreateObject(instance, RuntimeNPClass<LibvlcPlaylistItemsNPObject>::getClass());\r
};\r
\r
LibvlcPlaylistNPObject::~LibvlcPlaylistNPObject()\r
\r
RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
name = stringValue(NPVARIANT_TO_STRING(args[0]));\r
}\r
else\r
- return INVOKERESULT_NO_SUCH_METHOD;\r
+ {\r
+ delete url;\r
+ return INVOKERESULT_INVALID_VALUE;\r
+ }\r
}\r
\r
int i_options = 0;\r
{\r
parseOptions(NPVARIANT_TO_OBJECT(args[2]), &i_options, &ppsz_options);\r
}\r
+ else\r
+ {\r
+ delete url;\r
+ delete name;\r
+ return INVOKERESULT_INVALID_VALUE;\r
+ }\r
}\r
\r
int item = libvlc_playlist_add_extended(p_plugin->getVLC(),\r
delete name;\r
for( int i=0; i< i_options; ++i )\r
{\r
- if( ppsz_options[i] )\r
- free(ppsz_options[i]);\r
+ delete ppsz_options[i];\r
}\r
- if( ppsz_options )\r
- free(ppsz_options);\r
+ delete ppsz_options;\r
+\r
if( libvlc_exception_raised(&ex) )\r
{\r
NPN_SetException(this, libvlc_exception_get_message(&ex));\r
\r
RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
\r
RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const NPVariant &value)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
}\r
\r
libvlc_video_set_aspect_ratio(p_input, psz_aspect, &ex);\r
- free(psz_aspect );\r
+ delete psz_aspect;\r
libvlc_input_free(p_input);\r
\r
if( libvlc_exception_raised(&ex) )\r
}\r
\r
libvlc_video_set_crop_geometry(p_input, psz_geometry, &ex);\r
- free(psz_geometry );\r
+ delete psz_geometry;\r
libvlc_input_free(p_input);\r
\r
if( libvlc_exception_raised(&ex) )\r
\r
RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
{\r
- VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
- if( p_plugin )\r
+ /* is plugin still running */\r
+ if( _instance->pdata )\r
{\r
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(_instance->pdata);\r
libvlc_exception_t ex;\r
libvlc_exception_init(&ex);\r
\r
static char* stringValue(const NPVariant &v);
protected:
+ void *operator new(size_t n)
+ {
+ return NPN_MemAlloc(n);
+ };
+
+ void operator delete(void *p)
+ {
+ /*
+ ** Some memory scribble happens occasionally on freed object
+ ** when used on Firefox (MacOS X) and may cause crash, a leak
+ ** sounds like the better option.
+ */
+ //NPN_MemFree(p);
+ };
RuntimeNPObject(NPP instance, const NPClass *aClass) :
_instance(instance)
{
_class = const_cast<NPClass *>(aClass);
- referenceCount = 1;
+ //referenceCount = 1;
};
virtual ~RuntimeNPObject() {};
static NPObject *RuntimeNPClassAllocate(NPP instance, NPClass *aClass)
{
const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(aClass);
- return (NPObject *)vClass->create(instance);
+ return vClass->create(instance);
}
static void RuntimeNPClassDeallocate(NPObject *npobj)
{
RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
+ vObj->_class = NULL;
delete vObj;
}
template<class T>
static bool RuntimeNPClassGetProperty(NPObject *npobj, NPIdentifier name, NPVariant *result)
{
- const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
- int index = vClass->indexOfProperty(name);
- if( index != -1 )
+ RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
+ if( vObj->_instance )
{
- RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
- return vObj->returnInvokeResult(vObj->getProperty(index, *result));
+ const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
+ int index = vClass->indexOfProperty(name);
+ if( index != -1 )
+ {
+ return vObj->returnInvokeResult(vObj->getProperty(index, *result));
+ }
}
return false;
}
template<class T>
static bool RuntimeNPClassSetProperty(NPObject *npobj, NPIdentifier name, const NPVariant *value)
{
- const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
- int index = vClass->indexOfProperty(name);
- if( index != -1 )
+ RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
+ if( vObj->_instance )
{
- RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
- return vObj->returnInvokeResult(vObj->setProperty(index, *value));
+ const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
+ int index = vClass->indexOfProperty(name);
+ if( index != -1 )
+ {
+ return vObj->returnInvokeResult(vObj->setProperty(index, *value));
+ }
}
return false;
}
template<class T>
static bool RuntimeNPClassRemoveProperty(NPObject *npobj, NPIdentifier name)
{
- const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
- int index = vClass->indexOfProperty(name);
- if( index != -1 )
+ RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
+ if( vObj->_instance )
{
- RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
- return vObj->returnInvokeResult(vObj->removeProperty(index));
+ const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
+ int index = vClass->indexOfProperty(name);
+ if( index != -1 )
+ {
+ return vObj->returnInvokeResult(vObj->removeProperty(index));
+ }
}
return false;
}
const NPVariant *args, uint32_t argCount,
NPVariant *result)
{
- const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
- int index = vClass->indexOfMethod(name);
- if( index != -1 )
+ RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
+ if( vObj->_instance )
{
- RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
- return vObj->returnInvokeResult(vObj->invoke(index, args, argCount, *result));
+ const RuntimeNPClass<T> *vClass = static_cast<RuntimeNPClass<T> *>(npobj->_class);
+ int index = vClass->indexOfMethod(name);
+ if( index != -1 )
+ {
+ return vObj->returnInvokeResult(vObj->invoke(index, args, argCount, *result));
+ }
}
return false;
}
NPVariant *result)
{
RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
- return vObj->returnInvokeResult(vObj->invokeDefault(args, argCount, *result));
+ if( vObj->_instance )
+ {
+ return vObj->returnInvokeResult(vObj->invokeDefault(args, argCount, *result));
+ }
+ return false;
}
template<class T>