Esempio n. 1
0
 CPlugin::CPlugin(NPP pNPInstance) :
   m_pNPInstance(pNPInstance),
   m_pNPStream(NULL),
   m_bInitialized(FALSE),
   m_pScriptableObject(NULL)
 {
 #ifdef XP_WIN
   m_hWnd = NULL;
 #endif
 
   NPN_GetValue(m_pNPInstance, NPNVWindowNPObject, &sWindowObj);
 
   NPIdentifier n = NPN_GetStringIdentifier("foof");
 
   sFoo_id = NPN_GetStringIdentifier("foo");
   sBar_id = NPN_GetStringIdentifier("bar");
   sDocument_id = NPN_GetStringIdentifier("document");
   sBody_id = NPN_GetStringIdentifier("body");
   sCreateElement_id = NPN_GetStringIdentifier("createElement");
   sCreateTextNode_id = NPN_GetStringIdentifier("createTextNode");
   sAppendChild_id = NPN_GetStringIdentifier("appendChild");
   sPluginType_id = NPN_GetStringIdentifier("PluginType");
 
   NPVariant v;
   INT32_TO_NPVARIANT(46, v);
 
   NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v);
 
   NPVariant rval;
   NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval);
 
   if (NPVARIANT_IS_INT32(rval)) {
     printf("rval = %d\n", NPVARIANT_TO_INT32(rval));
   }
 
   n = NPN_GetStringIdentifier("document");
 
   if (!NPN_IdentifierIsString(n)) {
     NPString str;
     str.utf8characters = "alert('NPN_IdentifierIsString() test failed!');";
     str.utf8length = strlen(str.utf8characters);
 
     NPN_Evaluate(m_pNPInstance, sWindowObj, &str, NULL);
   }
 
   NPObject *doc;
 
   NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval);
 
   if (NPVARIANT_IS_OBJECT(rval) && (doc = NPVARIANT_TO_OBJECT(rval))) {
     n = NPN_GetStringIdentifier("title");
 
     NPN_GetProperty(m_pNPInstance, doc, n, &rval);
 
     if (NPVARIANT_IS_STRING(rval)) {
       printf ("title = %s\n", NPVARIANT_TO_STRING(rval).utf8characters);
 
       NPN_ReleaseVariantValue(&rval);
     }
 
     n = NPN_GetStringIdentifier("plugindoc");
 
     OBJECT_TO_NPVARIANT(doc, v);
     NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v);
 
     NPString str;
     str.utf8characters = "document.getElementById('result').innerHTML += '<p>' + 'NPN_Evaluate() test, document = ' + this + '</p>';";
     str.utf8length = strlen(str.utf8characters);
 
     NPN_Evaluate(m_pNPInstance, doc, &str, NULL);
 
     NPN_ReleaseObject(doc);
   }
 
   NPVariant barval;
   NPN_GetProperty(m_pNPInstance, sWindowObj, sBar_id, &barval);
 
   NPVariant arg;
   OBJECT_TO_NPVARIANT(sWindowObj, arg);
 
   NPN_InvokeDefault(m_pNPInstance, NPVARIANT_TO_OBJECT(barval), &arg, 1,
                     &rval);
 
   if (NPVARIANT_IS_INT32(rval) && NPVARIANT_TO_INT32(rval) == 4) {
     printf ("Default function call SUCCEEDED!\n");
   } else {
     printf ("Default function call FAILED!\n");
   }
 
   NPN_ReleaseVariantValue(&barval);
   NPN_ReleaseVariantValue(&rval);
 
 
 #if 0
   n = NPN_GetStringIdentifier("prompt");
 
   NPVariant vars[3];
   STRINGZ_TO_NPVARIANT("foo", vars[0]);
   STRINGZ_TO_NPVARIANT("bar", vars[1]);
   STRINGZ_TO_NPVARIANT("foof", vars[2]);
 
   NPN_Invoke(sWindowObj, n, vars, 3, &rval);
 
   if (NPVARIANT_IS_STRING(rval)) {
     printf ("prompt returned '%s'\n", NPVARIANT_TO_STRING(rval).utf8characters);
   }
 
   NPN_ReleaseVariantValue(&rval);
 #endif
 
   NPObject *myobj =
     NPN_CreateObject(m_pNPInstance,
                      GET_NPOBJECT_CLASS(ScriptablePluginObject));
 
   n = NPN_GetStringIdentifier("pluginobj");
 
   OBJECT_TO_NPVARIANT(myobj, v);
   NPN_SetProperty(m_pNPInstance, sWindowObj, n, &v);
 
   NPN_GetProperty(m_pNPInstance, sWindowObj, n, &rval);
 
   printf ("Object set/get test ");
 
   if (NPVARIANT_IS_OBJECT(rval) && NPVARIANT_TO_OBJECT(rval) == myobj) {
     printf ("succeeded!\n");
   } else {
     printf ("FAILED!\n");
   }
 
   NPN_ReleaseVariantValue(&rval);
   NPN_ReleaseObject(myobj);
 
   const char *ua = NPN_UserAgent(m_pNPInstance);
   strcpy(m_String, ua);
 }
Esempio n. 2
0
File: npmain.c Progetto: hno/fribid
NPError NPP_Destroy(NPP instance, NPSavedData **save) {
    NPN_ReleaseObject((NPObject*)instance->pdata);
    return NPERR_NO_ERROR;
}
Esempio n. 3
0
NPError VlcPluginBase::init(int argc, char* const argn[], char* const argv[])
{
    /* prepare VLC command line */
    const char *ppsz_argv[32];
    int ppsz_argc = 0;

#ifndef NDEBUG
    ppsz_argv[ppsz_argc++] = "--no-plugins-cache";
#endif

    /* locate VLC module path */
#ifdef XP_MACOSX
    ppsz_argv[ppsz_argc++] = "--vout=vout_macosx";
#elif defined(XP_WIN)
    HKEY h_key;
    DWORD i_type, i_data = MAX_PATH + 1;
    char p_data[MAX_PATH + 1];
    if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\VideoLAN\\VLC",
                      0, KEY_READ, &h_key ) == ERROR_SUCCESS )
    {
         if( RegQueryValueEx( h_key, "InstallDir", 0, &i_type,
                              (LPBYTE)p_data, &i_data ) == ERROR_SUCCESS )
         {
             if( i_type == REG_SZ )
             {
                 strcat( p_data, "\\plugins" );
                 ppsz_argv[ppsz_argc++] = "--plugin-path";
                 ppsz_argv[ppsz_argc++] = p_data;
             }
         }
         RegCloseKey( h_key );
    }
    ppsz_argv[ppsz_argc++] = "--no-one-instance";

#endif /* XP_MACOSX */

    /* common settings */
    ppsz_argv[ppsz_argc++] = "-vv";
    ppsz_argv[ppsz_argc++] = "--no-stats";
    ppsz_argv[ppsz_argc++] = "--no-media-library";
    ppsz_argv[ppsz_argc++] = "--intf=dummy";
    ppsz_argv[ppsz_argc++] = "--no-video-title-show";
    ppsz_argv[ppsz_argc++] = "--no-xlib";

    bool b_autoloop = false;

    /* parse plugin arguments */
    for( int i = 0; (i < argc) && (ppsz_argc < 32); i++ )
    {
       /* fprintf(stderr, "argn=%s, argv=%s\n", argn[i], argv[i]); */

        if( !strcmp( argn[i], "target" )
         || !strcmp( argn[i], "mrl")
         || !strcmp( argn[i], "filename")
         || !strcmp( argn[i], "src") )
        {
            psz_target = argv[i];
        }
        else if( !strcmp( argn[i], "text" ) )
        {
            set_bg_text( argv[i] );
        }
        else if( !strcmp( argn[i], "autoplay")
              || !strcmp( argn[i], "autostart") )
        {
            set_autoplay(boolValue(argv[i]));
        }
        else if( !strcmp( argn[i], "fullscreen" )
              || !strcmp( argn[i], "allowfullscreen" ) )
        {
            set_enable_fs( boolValue(argv[i]) );
        }
        else if( !strcmp( argn[i], "mute" ) )
        {
            if( boolValue(argv[i]) )
            {
                ppsz_argv[ppsz_argc++] = "--volume=0";
            }
        }
        else if( !strcmp( argn[i], "loop")
              || !strcmp( argn[i], "autoloop") )
        {
            b_autoloop = boolValue(argv[i]);
        }
        else if( !strcmp( argn[i], "toolbar" ) )
        {
            set_show_toolbar( boolValue(argv[i]) );
        }
        else if( !strcmp( argn[i], "bgcolor" ) )
        {
            set_bg_color( argv[i] );
        }
    }

    libvlc_instance = libvlc_new(ppsz_argc, ppsz_argv);
    if( !libvlc_instance )
        return NPERR_GENERIC_ERROR;

    vlc_player::open(libvlc_instance);

    vlc_player::set_mode(b_autoloop ? libvlc_playback_mode_loop :
                                      libvlc_playback_mode_default);

    /*
    ** fetch plugin base URL, which is the URL of the page containing the plugin
    ** this URL is used for making absolute URL from relative URL that may be
    ** passed as an MRL argument
    */
    NPObject *plugin = NULL;

    if( NPERR_NO_ERROR == NPN_GetValue(p_browser, NPNVWindowNPObject, &plugin) )
    {
        /*
        ** is there a better way to get that info ?
        */
        static const char docLocHref[] = "document.location.href";
        NPString script;
        NPVariant result;

        script.UTF8Characters = docLocHref;
        script.UTF8Length = sizeof(docLocHref)-1;

        if( NPN_Evaluate(p_browser, plugin, &script, &result) )
        {
            if( NPVARIANT_IS_STRING(result) )
            {
                NPString &location = NPVARIANT_TO_STRING(result);

                psz_baseURL = (char *) malloc(location.UTF8Length+1);
                if( psz_baseURL )
                {
                    strncpy(psz_baseURL, location.UTF8Characters, location.UTF8Length);
                    psz_baseURL[location.UTF8Length] = '\0';
                }
            }
            NPN_ReleaseVariantValue(&result);
        }
        NPN_ReleaseObject(plugin);
    }

    if( psz_target )
    {
        // get absolute URL from src
        char *psz_absurl = getAbsoluteURL(psz_target);
        psz_target = psz_absurl ? psz_absurl : strdup(psz_target);
    }

    /* assign plugin script root class */
    /* new APIs */
    p_scriptClass = RuntimeNPClass<LibvlcRootNPObject>::getClass();

    if( !events.init() )
        return NPERR_GENERIC_ERROR;

    libvlc_media_player_t *p_md = getMD();
    if( p_md ) {
      libvlc_event_manager_t *p_em;
      p_em = libvlc_media_player_event_manager( getMD() );
      events.hook_manager( p_em, this );
    }

    return NPERR_NO_ERROR;
}
Esempio n. 4
0
CPlugin::~CPlugin()
{
	if (m_pScriptableObject) {
    NPN_ReleaseObject(m_pScriptableObject);
	}
}
Esempio n. 5
0
LibvlcPlaylistNPObject::~LibvlcPlaylistNPObject()
{
    // Why the isValid()?
    if( isValid() && playlistItemsObj )
        NPN_ReleaseObject(playlistItemsObj);
};