void WebPluginInfoProvider::getWebVisiblePluginInfo(WebCore::Page& page, Vector<WebCore::PluginInfo>& plugins) { ASSERT_ARG(plugins, plugins.isEmpty()); getPluginInfo(page, plugins); #if PLATFORM(MAC) if (auto* document = page.mainFrame().document()) { if (auto* securityOrigin = document->securityOrigin()) { if (securityOrigin->isLocal()) return; } } for (int32_t i = plugins.size() - 1; i >= 0; --i) { auto& info = plugins.at(i); // Allow built-in plugins. Also tentatively allow plugins that the client might later selectively permit. if (info.isApplicationPlugin || info.clientLoadPolicy == WebCore::PluginLoadClientPolicyAsk) continue; if (info.clientLoadPolicy == WebCore::PluginLoadClientPolicyBlock) plugins.remove(i); } #endif }
void WebPlatformStrategies::getWebVisiblePluginInfo(const Page* page, Vector<PluginInfo>& plugins) { ASSERT_ARG(page, page); ASSERT_ARG(plugins, plugins.isEmpty()); getPluginInfo(page, plugins); #if PLATFORM(MAC) if (Document* document = page->mainFrame().document()) { if (SecurityOrigin* securityOrigin = document->securityOrigin()) { if (securityOrigin->isLocal()) return; } } for (int32_t i = plugins.size() - 1; i >= 0; --i) { PluginInfo& info = plugins.at(i); PluginLoadClientPolicy clientPolicy = info.clientLoadPolicy; // Allow built-in plugins. Also tentatively allow plugins that the client might later selectively permit. if (info.isApplicationPlugin || clientPolicy == PluginLoadClientPolicyAsk) continue; if (clientPolicy == PluginLoadClientPolicyBlock) plugins.remove(i); } #endif }
void PluginInfoStore::loadPlugin(Vector<PluginModuleInfo>& plugins, const String& pluginPath) { PluginModuleInfo plugin; if (!getPluginInfo(pluginPath, plugin)) return; if (!shouldUsePlugin(plugins, plugin)) return; plugins.append(plugin); }
void PluginInfoStore::loadPlugin(const String& pluginPath) { Plugin plugin; if (!getPluginInfo(pluginPath, plugin)) return; if (!shouldUsePlugin(plugin)) return; // Add the plug-in. m_plugins.append(plugin); }
void NetscapePluginModule::determineQuirks() { PluginInfoStore::Plugin plugin; getPluginInfo(m_pluginPath, plugin); Vector<MimeClassInfo> mimeTypes = plugin.info.mimes; for (size_t i = 0; i < mimeTypes.size(); ++i) { // FIXME: It seems strange to assume that any plugin that handles this MIME type needs this quirk. Should // we be be checking the plugin's name instead? if (mimeTypes[i].type == "application/x-shockwave-flash") { uint64_t flashTenVersion = fileVersion(0x00000000, 0x000a0000); uint64_t version = plugin.fileVersion; // Pre Flash v10 only requests windowless plugins if we use a Mozilla user agent. // For testing information, see: https://bugs.webkit.org/show_bug.cgi?id=60726. if (version < flashTenVersion) m_pluginQuirks.add(PluginQuirks::WantsMozillaUserAgent); break; } } }
PluginInfoList& PluginFactory::rescan() { //remove plugins that are not loaded PluginInfoList::Iterator it = infoList.begin(); while( it != infoList.end() ) { PluginInfo *info = (*it).first; if( !info ) continue; //plugin is not loaded if( !info->get() ) { QLibrary *lib = (*it).second; lib->unload(); delete lib; it = infoList.remove(it); continue; } ++it; } //load all plugins (and avoid collisions) QRegExp libRxp = QRegExp( "^lib.*\\.so[0-9.]*$" ); //QRegExp libRxp = QRegExp( "^lib.*" ); PluginInfoList pluginList; QStringList libraryPaths = ancaConf->readListEntry( LIBRARY_PATHS, LIBRARY_PATHS_DEFAULT ); #ifdef PREL libraryPaths.append( PREL "/share/anca/plugins"); #endif libraryPaths.append(QDir::homeDirPath() + "/.anca/plugins"); //iterate all paths where plugins should be for ( QStringList::iterator it = libraryPaths.begin(); it != libraryPaths.end(); ++it ) { PTRACE( 3, "Searching directory " << ( *it ).latin1() << " for plugins" ); QDir dir( *it ); if ( !dir.exists() ) continue; dir.setFilter( QDir::Files | QDir::NoSymLinks ); const QFileInfoList *fileList = dir.entryInfoList(); QFileInfo *file; QLibrary *lib; //iterate all files in the directory for ( QFileInfoListIterator fit( *fileList ); ( file = *fit ); ++fit ) { //is the file plugin? if ( !file->fileName().contains( libRxp ) ) continue; //open plugin lib = new QLibrary( file->filePath().latin1() ); if( !lib->load() ) { PTRACE( 3, "Library " << file->fileName().latin1() << " could not be loaded" ); continue; } //resolve symbol 'getPluginInfo' if ( GetPluginInfo * getPluginInfo = ( GetPluginInfo* ) lib->resolve( "getPluginInfo" ) ) { PluginInfo * pluginInfo = getPluginInfo(); pluginList.append( PluginInfoPair(pluginInfo, lib) ); } else { PTRACE( 3, "Symbol \"getPluginInfo\" not found in library " << file->fileName().latin1() ); delete lib; } } } //insert that pluginInfo to class infoList that in not already there for( PluginInfoList::iterator it = pluginList.begin(); it != pluginList.end(); ++it ) { QLibrary *lib = (*it).second; if( !lib ) continue; if( !infoList.contains( *it ) ) infoList.append( *it ); else { lib->unload(); delete lib; } } // sort plugins according to type qHeapSort(infoList); return infoList; }