Ejemplo n.º 1
0
nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info)
{
    info.fVersion = nsnull;

    // Passing NULL for a file path will prevent a call to NP_Initialize.
    nsCOMPtr<nsIPlugin> plugin;
    nsresult rv = nsNPAPIPlugin::CreatePlugin(NULL, pLibrary, getter_AddRefs(plugin));
    if (NS_FAILED(rv))
      return rv;

    if (plugin) {
        const char* (*npGetPluginVersion)() =
          (const char* (*)()) PR_FindFunctionSymbol(pLibrary, "NP_GetPluginVersion");
        if (npGetPluginVersion)
            info.fVersion = PL_strdup(npGetPluginVersion());

        const char *mimedescr = NULL;
        plugin->GetMIMEDescription(&mimedescr);
#ifdef NS_DEBUG
        printf("GetMIMEDescription() returned \"%s\"\n", mimedescr);
#endif
        if (NS_FAILED(rv = ParsePluginMimeDescription(mimedescr, info)))
            return rv;

        nsCAutoString path;
        if (NS_FAILED(rv = mPlugin->GetNativePath(path)))
            return rv;
        info.fFullPath = PL_strdup(path.get());

        nsCAutoString fileName;
        if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
          return rv;
        info.fFileName = PL_strdup(fileName.get());

        const char *name = NULL;
        plugin->GetValue(nsPluginVariable_NameString, &name);
        if (name)
          info.fName = PL_strdup(name);
        else
          info.fName = PL_strdup(fileName.get());

        const char *description = NULL;
        plugin->GetValue(nsPluginVariable_DescriptionString, &description);
        if (!description)
            description = "";
        info.fDescription = PL_strdup(description);
    }
    return NS_OK;
}
Ejemplo n.º 2
0
nsresult nsPluginFile::GetPluginInfo(nsPluginInfo& info, PRLibrary **outLibrary)
{
    *outLibrary = nullptr;

    info.fVersion = nullptr;

    // Sadly we have to load the library for this to work.
    nsresult rv = LoadPlugin(outLibrary);
    if (NS_FAILED(rv))
        return rv;
  
    const char* (*npGetPluginVersion)() =
        (const char* (*)()) PR_FindFunctionSymbol(pLibrary, "NP_GetPluginVersion");
    if (npGetPluginVersion) {
        info.fVersion = PL_strdup(npGetPluginVersion());
    }

    const char* (*npGetMIMEDescription)() =
        (const char* (*)()) PR_FindFunctionSymbol(pLibrary, "NP_GetMIMEDescription");
    if (!npGetMIMEDescription) {
        return NS_ERROR_FAILURE;
    }

    const char* mimedescr = npGetMIMEDescription();
    if (!mimedescr) {
        return NS_ERROR_FAILURE;
    }

    rv = ParsePluginMimeDescription(mimedescr, info);
    if (NS_FAILED(rv)) {
        return rv;
    }

    nsAutoCString path;
    if (NS_FAILED(rv = mPlugin->GetNativePath(path)))
        return rv;
    info.fFullPath = PL_strdup(path.get());

    nsAutoCString fileName;
    if (NS_FAILED(rv = mPlugin->GetNativeLeafName(fileName)))
        return rv;
    info.fFileName = PL_strdup(fileName.get());

    NP_GetValueFunc npGetValue = (NP_GetValueFunc)PR_FindFunctionSymbol(pLibrary, "NP_GetValue");
    if (!npGetValue) {
        return NS_ERROR_FAILURE;
    }

    const char *name = NULL;
    npGetValue(NULL, NPPVpluginNameString, &name);
    if (name) {
        info.fName = PL_strdup(name);
    }
    else {
        info.fName = PL_strdup(fileName.get());
    }

    const char *description = NULL;
    npGetValue(NULL, NPPVpluginDescriptionString, &description);
    if (description) {
        info.fDescription = PL_strdup(description);
    }
    else {
        info.fDescription = PL_strdup("");
    }

    return NS_OK;
}