diff --git a/extensions/source/plugin/aqua/macmgr.cxx b/extensions/source/plugin/aqua/macmgr.cxx index 29cc793b5856..65a56f03f7ad 100644 --- a/extensions/source/plugin/aqua/macmgr.cxx +++ b/extensions/source/plugin/aqua/macmgr.cxx @@ -413,6 +413,7 @@ static bool checkBlackList( CFBundleRef i_xBundle ) if( bundleversion && CFGetTypeID(bundleversion) == CFStringGetTypeID() ) aBundleVersion = getString( static_cast(bundleversion) ); + bool bReject = false; // #i102735# VLC plugin prior to 1.0 tends to crash if( aBundleName.equalsAscii( "VLC Plug-in" ) ) { @@ -420,17 +421,24 @@ static bool checkBlackList( CFBundleRef i_xBundle ) rtl::OUString aMajor( aBundleVersion.getToken( 0, '.', nIndex ) ); if( aMajor.toInt32() < 1 ) { - #if OSL_DEBUG_LEVEL > 1 - fprintf( stderr, "rejecting VCL plugin (%s %s)\n", - rtl::OUStringToOString( aBundleName, RTL_TEXTENCODING_UTF8 ).getStr(), - rtl::OUStringToOString( aBundleVersion, RTL_TEXTENCODING_UTF8 ).getStr() - ); - #endif - return true; + bReject = true; } } + // #i103674# Garmin Communicator Plugin crashes + else if( aBundleName.equalsAscii( "Garmin Communicator Plugin" ) ) + { + bReject = true; + } - return false; + #if OSL_DEBUG_LEVEL > 1 + if( bReject ) + fprintf( stderr, "rejecting plugin \"%s\" version %s\n", + rtl::OUStringToOString( aBundleName, RTL_TEXTENCODING_UTF8 ).getStr(), + rtl::OUStringToOString( aBundleVersion, RTL_TEXTENCODING_UTF8 ).getStr() + ); + #endif + + return bReject; } static int getPluginDescriptions( CFBundleRef i_xBundle , list< PluginDescription* >& io_rDescriptions ) @@ -572,7 +580,7 @@ static rtl::OUString FindFolderURL( FSVolumeRefNum vRefNum, OSType folderType ) return aRet; } -Sequence XPluginManager_Impl::getPluginDescriptions() throw() +Sequence XPluginManager_Impl::impl_getPluginDescriptions() throw() { static Sequence aDescriptions; static BOOL bHavePlugins = FALSE; diff --git a/extensions/source/plugin/base/manager.cxx b/extensions/source/plugin/base/manager.cxx index 92fca1211caa..bb5422c69a51 100644 --- a/extensions/source/plugin/base/manager.cxx +++ b/extensions/source/plugin/base/manager.cxx @@ -35,19 +35,19 @@ #include #endif -#include +#include "plugin/impl.hxx" -#ifndef _OSL_MUTEX_HXX -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include +#include "osl/mutex.hxx" +#include "svtools/pathoptions.hxx" +#include "vcl/configsettings.hxx" + +#include "com/sun/star/container/XEnumerationAccess.hpp" +#include "com/sun/star/container/XNameAccess.hpp" +#include "com/sun/star/container/XEnumeration.hpp" +#include "com/sun/star/container/XElementAccess.hpp" +#include "com/sun/star/container/XIndexAccess.hpp" +#include "com/sun/star/loader/XImplementationLoader.hpp" +#include "com/sun/star/loader/CannotActivateFactoryException.hpp" PluginManager* PluginManager::pManager = NULL; @@ -165,6 +165,20 @@ XPlugin_Impl* XPluginManager_Impl::getPluginImplementation( const Reference< ::c return NULL; } +Sequence XPluginManager_Impl::getPluginDescriptions() throw() +{ + Sequence aRet; + + vcl::SettingsConfigItem* pCfg = vcl::SettingsConfigItem::get(); + rtl::OUString aVal( pCfg->getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "BrowserPlugins" ) ), + rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Disabled" ) ) ) ); + if( ! aVal.toBoolean() ) + { + aRet = impl_getPluginDescriptions(); + } + return aRet; +} + Reference< ::com::sun::star::plugin::XPlugin > XPluginManager_Impl::createPlugin( const Reference< ::com::sun::star::plugin::XPluginContext >& acontext, INT16 mode, const Sequence< ::rtl::OUString >& argn, const Sequence< ::rtl::OUString >& argv, const ::com::sun::star::plugin::PluginDescription& plugintype) throw( RuntimeException,::com::sun::star::plugin::PluginException ) { diff --git a/extensions/source/plugin/inc/plugin/impl.hxx b/extensions/source/plugin/inc/plugin/impl.hxx index 28524770521c..e9adee5088dd 100644 --- a/extensions/source/plugin/inc/plugin/impl.hxx +++ b/extensions/source/plugin/inc/plugin/impl.hxx @@ -293,6 +293,9 @@ public: virtual Reference< com::sun::star::plugin::XPluginContext > SAL_CALL createPluginContext() throw(); // has to be implemented per system + virtual Sequence< com::sun::star::plugin::PluginDescription > SAL_CALL impl_getPluginDescriptions(void) throw(); + // calls system specific impl_getPluginDescriptions + // checks whether plugins are disabled virtual Sequence< com::sun::star::plugin::PluginDescription > SAL_CALL getPluginDescriptions(void) throw(); virtual Reference< com::sun::star::plugin::XPlugin > SAL_CALL createPlugin( const Reference< com::sun::star::plugin::XPluginContext > & acontext, sal_Int16 mode, const Sequence< rtl::OUString >& argn, const Sequence< rtl::OUString >& argv, const com::sun::star::plugin::PluginDescription& plugintype) throw( RuntimeException,::com::sun::star::plugin::PluginException ); diff --git a/extensions/source/plugin/unx/unxmgr.cxx b/extensions/source/plugin/unx/unxmgr.cxx index ff17d1e24324..1f1d291daf8d 100644 --- a/extensions/source/plugin/unx/unxmgr.cxx +++ b/extensions/source/plugin/unx/unxmgr.cxx @@ -226,7 +226,7 @@ static void CheckPluginRegistryFiles( const rtl::OString& rPath, list< PluginDes closedir( pDIR ); } -Sequence XPluginManager_Impl::getPluginDescriptions() throw() +Sequence XPluginManager_Impl::impl_getPluginDescriptions() throw() { static Sequence aDescriptions; static BOOL bHavePlugins = FALSE; diff --git a/extensions/source/plugin/win/winmgr.cxx b/extensions/source/plugin/win/winmgr.cxx index 6a63ad8b5402..caf7a38a5458 100644 --- a/extensions/source/plugin/win/winmgr.cxx +++ b/extensions/source/plugin/win/winmgr.cxx @@ -325,7 +325,7 @@ static void add_SO_Plugins( PluginLocationMap & rPlugins ) } //__________________________________________________________________________________________________ -Sequence< PluginDescription > XPluginManager_Impl::getPluginDescriptions(void) throw() +Sequence< PluginDescription > XPluginManager_Impl::impl_getPluginDescriptions(void) throw() { Guard< Mutex > aGuard( Mutex::getGlobalMutex() ); static Sequence s_aDescriptions( 0 );