Пример #1
0
JsAgent::MethodIds::MethodIds() 
	: onLoad(NPN_GetStringIdentifier("onLoad"))
	, onUnload(NPN_GetStringIdentifier("onUnload"))
	, toString(NPN_GetStringIdentifier("toString"))
	, defineFunction(NPN_GetStringIdentifier("defineFunction"))
	, invokeFunction(NPN_GetStringIdentifier("invokeFunction"))
	, invokeDelegate(NPN_GetStringIdentifier("invokeDelegate"))
	, wrapDelegate(NPN_GetStringIdentifier("wrapDelegate"))
	, length(NPN_GetStringIdentifier("length"))
	, debug(NPN_GetStringIdentifier("debug"))
	, createArgs(NPN_GetStringIdentifier("createArgs"))
	, index0(NPN_GetIntIdentifier(0))
	, index1(NPN_GetIntIdentifier(1))
{}
Пример #2
0
NPIdentifier
int32VariantToIdentifier(NPVariant variant)
{
    assert(NPVARIANT_IS_INT32(variant));
    int32_t integer = NPVARIANT_TO_INT32(variant);
    return NPN_GetIntIdentifier(integer);
}
Пример #3
0
NPIdentifier doubleVariantToIdentifier(NPVariant variant) {
  assert(NPVARIANT_IS_DOUBLE(variant));
  double value = NPVARIANT_TO_DOUBLE(variant);
  // sadly there is no "getdoubleidentifier"
  int32_t integer = static_cast<int32_t>(value);
  return NPN_GetIntIdentifier(integer);
}
Пример #4
0
// XXX FIXME See comment at the other parseOptions variant.
void LibvlcPlaylistNPObject::parseOptions(NPObject *obj, int *i_options,
                                          char*** ppsz_options)
{
    /* WARNING: Safari does not implement NPN_HasProperty/NPN_HasMethod */

    NPVariant value;

    /* we are expecting to have a Javascript Array object */
    NPIdentifier propId = NPN_GetStringIdentifier("length");
    if( NPN_GetProperty(_instance, obj, propId, &value) )
    {
        int count = numberValue(value);
        NPN_ReleaseVariantValue(&value);

        if( count )
        {
            long capacity = 16;
            char **options = (char **)malloc(capacity*sizeof(char *));
            if( options )
            {
                int nOptions = 0;

                while( nOptions < count )
                {
                    propId = NPN_GetIntIdentifier(nOptions);
                    if( ! NPN_GetProperty(_instance, obj, propId, &value) )
                        /* return what we got so far */
                        break;

                    if( ! NPVARIANT_IS_STRING(value) )
                    {
                        /* return what we got so far */
                        NPN_ReleaseVariantValue(&value);
                        break;
                    }

                    if( nOptions == capacity )
                    {
                        capacity += 16;
                        char **moreOptions = (char **)realloc(options, capacity*sizeof(char*));
                        if( ! moreOptions )
                        {
                            /* failed to allocate more memory */
                            NPN_ReleaseVariantValue(&value);
                            /* return what we got so far */
                            *i_options = nOptions;
                            *ppsz_options = options;
                            break;
                        }
                        options = moreOptions;
                    }

                    options[nOptions++] = stringValue(value);
                }
                *i_options = nOptions;
                *ppsz_options = options;
            }
        }
    }
}
Пример #5
0
 NPIdentifier integerToIdentifier( size_t integer )
 {
   static IntegerToIdentifierMap integerToIdentifierMap; 
   IntegerToIdentifierMap::const_iterator it = integerToIdentifierMap.find( integer );
   if ( it == integerToIdentifierMap.end() )
   {
     NPIdentifier identifier = NPN_GetIntIdentifier( integer );
     FABRIC_ASSERT( identifier );
     it = integerToIdentifierMap.insert( IntegerToIdentifierMap::value_type( integer, identifier ) ).first;
   }
   return it->second;
 }
Пример #6
0
bool JsObjectWrapper::invokeDefault(const NPVariant* args, unsigned argCount, NPVariant* result) {
	if(argCount < 1) {
		Debug::println("JsObjectWrapper::invokeDefault> argCount < 1: %d", argCount);
		return false;
	}

	if(!NPVARIANT_IS_OBJECT(args[0])) {
		Debug::println("JsObjectWrapper::invokeDefault> args[0] not an object");
		return false;
	}

	NPObject* pArray = NPVARIANT_TO_OBJECT(args[0]);
	Variant varRet;
	if(!NPN_GetProperty(getNPP(), pArray, m_agent->methods.length, varRet.ptr())) {
		Debug::println("JsObjectWrapper::invokeDefault> get length failed");
		return false;
	}

	if(!NPVARIANT_IS_INT32(varRet.get())) {
		Debug::println("JsObjectWrapper::invokeDefault> length did not return an int");
		return false;
	}

	int len = NPVARIANT_TO_INT32(varRet.get());
	VariantArray varArgs(len);

	for(int i = 0; i < len; i++) {
		NPIdentifier id = NPN_GetIntIdentifier(i);
		Variant varItem;
		if(!NPN_GetProperty(getNPP(), pArray, id, varArgs[i].ptr())) {
			Debug::println("JsObjectWrapper::invokeDefault> get [%d] failed", i);
			return false;
		}
	}

	Debug::println("JsObjectWrapper::invokeDefault");
	if(!m_agent->invokeRemoteDelegate(m_targetId, varArgs.get(), len, result)) {
		Debug::println("JsObjectWrapper::invokeDefault> invokeRemoteDelegate() failed");
		return false;
	}

	return true;
}