LCOV - code coverage report
Current view: top level - extensions/source/plugin/base - nfuncs.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 242 0.0 %
Date: 2014-04-14 Functions: 0 27 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*************************************************************************
       3             :  *
       4             :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5             :  *
       6             :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7             :  *
       8             :  * OpenOffice.org - a multi-platform office productivity suite
       9             :  *
      10             :  * This file is part of OpenOffice.org.
      11             :  *
      12             :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13             :  * it under the terms of the GNU Lesser General Public License version 3
      14             :  * only, as published by the Free Software Foundation.
      15             :  *
      16             :  * OpenOffice.org is distributed in the hope that it will be useful,
      17             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19             :  * GNU Lesser General Public License version 3 for more details
      20             :  * (a copy is included in the LICENSE file that accompanied this code).
      21             :  *
      22             :  * You should have received a copy of the GNU Lesser General Public License
      23             :  * version 3 along with OpenOffice.org.  If not, see
      24             :  * <http://www.openoffice.org/license.html>
      25             :  * for a copy of the LGPLv3 License.
      26             :  *
      27             :  ************************************************************************/
      28             : 
      29             : 
      30             : #ifdef AIX
      31             : #define _LINUX_SOURCE_COMPAT
      32             : #include <sys/timer.h>
      33             : #undef _LINUX_SOURCE_COMPAT
      34             : #endif
      35             : 
      36             : #ifdef WNT
      37             : #include <prewin.h>
      38             : #include <postwin.h>
      39             : #undef OPTIONAL
      40             : #endif
      41             : 
      42             : #include <cstdarg>
      43             : #include <list>
      44             : 
      45             : #include <plugin/impl.hxx>
      46             : #include <vcl/svapp.hxx>
      47             : #include <boost/scoped_array.hpp>
      48             : 
      49             : #if OSL_DEBUG_LEVEL > 1
      50             : #include <osl/thread.h>
      51             : #include <osl/thread.hxx>
      52             : #include <stdio.h>
      53             : static FILE * s_file = 0;
      54             : void TRACE( char const * s )
      55             : {
      56             :     if (! s_file)
      57             :         s_file = stderr;
      58             :     if (s_file)
      59             :     {
      60             :         oslThreadIdentifier t = osl::Thread::getCurrentIdentifier();
      61             :         fprintf( s_file, "log [t_id=%" SAL_PRIuUINT32 "]: %s\n", t, s );
      62             :         fflush( s_file );
      63             :     }
      64             : }
      65             : void TRACEN( char const * s, long n )
      66             : {
      67             :     if (! s_file)
      68             :         s_file = stderr;
      69             :     if (s_file)
      70             :     {
      71             :         oslThreadIdentifier t = osl::Thread::getCurrentIdentifier();
      72             :         fprintf( s_file, "log [t_id=%" SAL_PRIuUINT32 "]: %s%ld\n", t, s, n );
      73             :         fflush( s_file );
      74             :     }
      75             : }
      76             : void TRACES( char const* s, char const* s2 )
      77             : {
      78             :     if (! s_file)
      79             :         s_file = stderr;
      80             :     if (s_file)
      81             :     {
      82             :         oslThreadIdentifier t = osl::Thread::getCurrentIdentifier();
      83             :         fprintf( s_file, "log [t_id=%" SAL_PRIuUINT32 "]: %s %s\n", t, s, s2 );
      84             :         fflush( s_file );
      85             :     }
      86             : }
      87             : #else
      88             : #define TRACE(x)
      89             : #define TRACEN(x,n)
      90             : #define TRACES(x,s)
      91             : #endif
      92             : 
      93             : using namespace com::sun::star::lang;
      94             : 
      95             : 
      96             : // Move deprecated functions which no longer appear in npapi.h before
      97             : // their use to avoid errors that they're undeclared at point of use
      98             : extern "C"
      99             : {
     100           0 :     const JRIEnvInterface** SAL_CALL NP_LOADDS  NPN_GetJavaEnv()
     101             :     {
     102             :         TRACE( "NPN_GetJavaEnv" );
     103             :         // no java in this program
     104           0 :         return NULL;
     105             :     }
     106             : 
     107           0 :     jref SAL_CALL NP_LOADDS  NPN_GetJavaPeer( NPP /*instance*/ )
     108             :     {
     109             :         TRACE( "NPN_GetJavaPeer" );
     110           0 :         return NULL;
     111             :     }
     112             : }
     113             : 
     114             : NPNetscapeFuncs aNPNFuncs =
     115             : {
     116             :     sizeof( NPNetscapeFuncs ),
     117             :     (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR,
     118             :     NPN_GetURL,
     119             :     NPN_PostURL,
     120             :     NPN_RequestRead,
     121             :     NPN_NewStream,
     122             :     NPN_Write,
     123             :     NPN_DestroyStream,
     124             :     NPN_Status,
     125             :     NPN_UserAgent,
     126             :     NPN_MemAlloc,
     127             :     NPN_MemFree,
     128             :     NPN_MemFlush,
     129             :     NPN_ReloadPlugins,
     130             :     NPN_GetJavaEnv,
     131             :     NPN_GetJavaPeer,
     132             :     NPN_GetURLNotify,
     133             :     NPN_PostURLNotify,
     134             :     NPN_GetValue,
     135             :     NPN_SetValue,
     136             :     NPN_InvalidateRect,
     137             :     NPN_InvalidateRegion,
     138             :     NPN_ForceRedraw
     139             : };
     140             : 
     141           0 : static OString normalizeURL( XPlugin_Impl* plugin, const OString& url )
     142             : {
     143           0 :     OString aLoadURL;
     144           0 :     if( url.indexOf( ':' ) == -1 )
     145             :     {
     146           0 :         aLoadURL = OUStringToOString( plugin->getCreationURL(), plugin->getTextEncoding() );
     147             :         int nPos;
     148           0 :         if( ( nPos = aLoadURL.indexOf( "://" ) ) != -1 )
     149             :         {
     150           0 :             if( url.indexOf( '/' ) != -1 )
     151             :             {
     152             :                 // this means same server but new path
     153           0 :                 nPos = aLoadURL.indexOf( '/', nPos+3 );
     154             : 
     155           0 :                 if( nPos != -1 )
     156           0 :                     aLoadURL = aLoadURL.copy( 0, url.startsWith("/") ? nPos : nPos+1 );
     157             :             }
     158             :             else
     159             :             {
     160             :                 // same server but new file
     161           0 :                 nPos = aLoadURL.lastIndexOf( '/' );
     162           0 :                 aLoadURL = aLoadURL.copy( 0, nPos+1 );
     163             :             }
     164           0 :             aLoadURL += url;
     165             :         }
     166             :         else
     167           0 :             aLoadURL = url;
     168             :     }
     169           0 :     else if( url.indexOf( ":/" ) != -1 )
     170           0 :         aLoadURL = url;
     171             : 
     172           0 :     return aLoadURL;
     173             : }
     174             : 
     175           0 : struct AsynchronousGetURL
     176             : {
     177             :     OUString                        aUrl;
     178             :     OUString                        aTarget;
     179             :     Reference< XEventListener >     xListener;
     180             : 
     181             :     DECL_LINK( getURL, XPlugin_Impl* );
     182             : };
     183             : 
     184           0 : IMPL_LINK( AsynchronousGetURL, getURL, XPlugin_Impl*, pImpl )
     185             : {
     186             :     try
     187             :     {
     188           0 :         pImpl->enterPluginCallback();
     189           0 :         if( xListener.is() )
     190           0 :             pImpl->getPluginContext()->
     191             :                 getURLNotify( pImpl,
     192             :                               aUrl,
     193             :                               aTarget,
     194           0 :                               xListener );
     195             :         else
     196           0 :             pImpl->getPluginContext()->
     197             :                 getURL( pImpl,
     198             :                         aUrl,
     199           0 :                         aTarget );
     200             :     }
     201           0 :     catch(const ::com::sun::star::plugin::PluginException&)
     202             :     {
     203             :     }
     204           0 :     pImpl->leavePluginCallback();
     205           0 :     delete this;
     206           0 :     return 0;
     207             : }
     208             : 
     209             : 
     210             : extern "C" {
     211             : 
     212           0 :     void* SAL_CALL NP_LOADDS  NPN_MemAlloc( uint32_t nBytes )
     213             :     {
     214             :         TRACE( "NPN_MemAlloc" );
     215           0 :         void* pMem = malloc( nBytes );
     216           0 :         return pMem;
     217             :     }
     218             : 
     219           0 :     void SAL_CALL NP_LOADDS  NPN_MemFree( void* pMem )
     220             :     {
     221             :         TRACE( "NPN_MemFree" );
     222           0 :         free( pMem );
     223           0 :     }
     224             : 
     225           0 :     uint32_t SAL_CALL NP_LOADDS  NPN_MemFlush( uint32_t /*nSize*/ )
     226             :     {
     227             :         TRACE( "NPN_MemFlush" );
     228           0 :         return 0;
     229             :     }
     230             : 
     231           0 :     NPError SAL_CALL NP_LOADDS  NPN_DestroyStream( NPP instance, NPStream* stream, NPError /*reason*/ )
     232             :     {
     233             :         TRACE( "NPN_DestroyStream" );
     234           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     235           0 :         if( ! pImpl )
     236           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     237             : 
     238           0 :         PluginStream* pStream = pImpl->getStreamFromNPStream( stream );
     239           0 :         if( pStream )
     240             :         {
     241           0 :             if( pStream->getStreamType() == InputStream )
     242           0 :                 static_cast<PluginInputStream*>(pStream)->releaseSelf();
     243             :             else
     244           0 :                 delete pStream;
     245             :         }
     246             : 
     247           0 :         return NPERR_NO_ERROR;
     248             :     }
     249             : 
     250           0 :     NPError SAL_CALL NP_LOADDS  NPN_GetURL( NPP instance, const char* url, const char* window )
     251             :     {
     252             :         TRACES( "NPN_GetURL", url );
     253           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     254           0 :         if( ! pImpl )
     255           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     256             : 
     257           0 :         AsynchronousGetURL* pAsync = new AsynchronousGetURL();
     258             : 
     259           0 :         OString aLoadURL = normalizeURL( pImpl, url );
     260             :         TRACES( "NPN_GetURL", aLoadURL.getStr() );
     261           0 :         pAsync->aUrl = OStringToOUString( aLoadURL, pImpl->getTextEncoding() );
     262           0 :         pAsync->aTarget = OStringToOUString( window, pImpl->getTextEncoding() );
     263           0 :         pImpl->setLastGetUrl( aLoadURL );
     264           0 :         Application::PostUserEvent( LINK( pAsync, AsynchronousGetURL, getURL ), pImpl );
     265           0 :         return NPERR_NO_ERROR;
     266             :     }
     267             : 
     268           0 :     NPError SAL_CALL NP_LOADDS  NPN_GetURLNotify( NPP instance, const char* url, const char* target,
     269             :                           void* notifyData )
     270             :     {
     271             :         TRACES( "NPN_GetURLNotify", url );
     272           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     273           0 :         if( ! pImpl )
     274           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     275             : 
     276           0 :         OString aLoadURL = normalizeURL( pImpl, url );
     277           0 :         if( aLoadURL.isEmpty() )
     278           0 :             return NPERR_INVALID_URL;
     279             : 
     280           0 :         AsynchronousGetURL* pAsync = new AsynchronousGetURL();
     281             :         PluginEventListener* pListener =
     282           0 :             new PluginEventListener( pImpl, url, aLoadURL.getStr(), notifyData );
     283           0 :         if( ! target || ! *target )
     284             :         {
     285             :             // stream will be fed back to plugin,
     286             :             // notify immediately after destruction of stream
     287           0 :             pImpl->addPluginEventListener( pListener );
     288           0 :             pListener = NULL;
     289             :         }
     290           0 :         pAsync->aUrl        = OStringToOUString( aLoadURL, pImpl->getTextEncoding() );
     291           0 :         pAsync->aTarget     = OStringToOUString( target, pImpl->getTextEncoding() );
     292           0 :         pAsync->xListener   = pListener;
     293           0 :         pImpl->setLastGetUrl( aLoadURL );
     294           0 :         Application::PostUserEvent( LINK( pAsync, AsynchronousGetURL, getURL ), pImpl );
     295             : 
     296           0 :         return NPERR_NO_ERROR;
     297             :     }
     298             : 
     299           0 :     NPError SAL_CALL NP_LOADDS  NPN_NewStream( NPP instance, NPMIMEType type, const char* target,
     300             :                            NPStream** stream )
     301             :         // stream is a return value
     302             :     {
     303             :         TRACE( "NPN_NewStream" );
     304           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     305           0 :         if( ! pImpl )
     306           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     307             : 
     308             :         PluginOutputStream* pStream = new PluginOutputStream( pImpl,
     309           0 :                                                               "", 0, 0 );
     310           0 :         *stream = pStream->getStream();
     311             : 
     312             :         try
     313             :         {
     314           0 :             pImpl->enterPluginCallback();
     315           0 :             pImpl->getPluginContext()->
     316             :                 newStream(
     317             :                     pImpl,
     318           0 :                     OStringToOUString( type, pImpl->getTextEncoding () ),
     319           0 :                     OStringToOUString( target, pImpl->getTextEncoding() ),
     320           0 :                     ::com::sun::star::uno::Reference< ::com::sun::star::io::XActiveDataSource > ( pStream->getOutputStream(), UNO_QUERY )
     321           0 :                     );
     322           0 :             pImpl->leavePluginCallback();
     323             :         }
     324           0 :         catch( const ::com::sun::star::plugin::PluginException& e )
     325             :         {
     326           0 :             pImpl->leavePluginCallback();
     327           0 :             return e.ErrorCode;
     328             :         }
     329             : 
     330           0 :         return NPERR_NO_ERROR;
     331             :     }
     332             : 
     333           0 :     NPError SAL_CALL NP_LOADDS  NPN_PostURLNotify( NPP instance, const char* url, const char* target, uint32_t len, const char* buf, NPBool file, void* notifyData )
     334             :     {
     335             :         TRACE( "NPN_PostURLNotify" );
     336           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     337           0 :         if( ! pImpl )
     338           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     339             : 
     340           0 :         ::com::sun::star::uno::Sequence<sal_Int8> Bytes( (sal_Int8*)buf, len );
     341             : 
     342           0 :         OString aPostURL = normalizeURL( pImpl, url );
     343             :         PluginEventListener* pListener =
     344           0 :             new PluginEventListener( pImpl, url, aPostURL.getStr(), notifyData );
     345             : 
     346           0 :         if( ! target || ! *target )
     347             :         {
     348             :             // stream will be fed back to plugin,
     349             :             // notify immediately after destruction of stream
     350           0 :             pImpl->addPluginEventListener( pListener );
     351           0 :             pListener = NULL;
     352             :         }
     353             : 
     354             :         try
     355             :         {
     356           0 :             pImpl->enterPluginCallback();
     357           0 :             pImpl->getPluginContext()->
     358             :                 postURLNotify( pImpl,
     359           0 :                                OStringToOUString( aPostURL, pImpl->getTextEncoding() ),
     360           0 :                                OStringToOUString( target, pImpl->getTextEncoding() ),
     361             :                                Bytes,
     362             :                                file,
     363           0 :                                ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > ( pListener ) );
     364           0 :             pImpl->leavePluginCallback();
     365             :         }
     366           0 :         catch( const ::com::sun::star::plugin::PluginException& e )
     367             :         {
     368           0 :             pImpl->leavePluginCallback();
     369           0 :             return e.ErrorCode;
     370             :         }
     371             : 
     372           0 :         return NPERR_NO_ERROR;
     373             :     }
     374             : 
     375           0 :     NPError SAL_CALL NP_LOADDS  NPN_PostURL( NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file )
     376             :     {
     377             :         TRACE( "NPN_PostURL" );
     378           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     379           0 :         if( ! pImpl )
     380           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     381             : 
     382           0 :         ::com::sun::star::uno::Sequence<sal_Int8> Bytes( (sal_Int8*)buf, len );
     383           0 :         OString aPostURL = normalizeURL( pImpl, url );
     384             :         try
     385             :         {
     386           0 :             pImpl->enterPluginCallback();
     387           0 :             pImpl->getPluginContext()->
     388             :                 postURL( pImpl,
     389           0 :                          OStringToOUString( aPostURL, pImpl->getTextEncoding() ),
     390           0 :                          OStringToOUString( window, pImpl->getTextEncoding () ),
     391             :                          Bytes,
     392           0 :                          file );
     393           0 :             pImpl->leavePluginCallback();
     394             :         }
     395           0 :         catch( const ::com::sun::star::plugin::PluginException& e )
     396             :         {
     397           0 :             pImpl->leavePluginCallback();
     398           0 :             return e.ErrorCode;
     399             :         }
     400             : 
     401           0 :         return NPERR_NO_ERROR;
     402             :     }
     403             : 
     404           0 :     NPError SAL_CALL NP_LOADDS  NPN_RequestRead( NPStream* stream, NPByteRange* rangeList )
     405             :     {
     406             :         TRACE( "NPN_RequestRead" );
     407           0 :         if( ! rangeList )
     408           0 :             return NPERR_NO_ERROR;
     409             : 
     410           0 :         ::std::list<XPlugin_Impl*>& rList = PluginManager::get().getPlugins();
     411           0 :         ::std::list<XPlugin_Impl*>::iterator iter;
     412           0 :         XPlugin_Impl* pPlugin = NULL;
     413           0 :         PluginStream* pStream = NULL;
     414           0 :         for( iter = rList.begin(); iter!= rList.end(); ++iter )
     415             :         {
     416           0 :             pStream = (*iter)->getStreamFromNPStream( stream );
     417           0 :             if( pStream )
     418             :             {
     419           0 :                 pPlugin = *iter;
     420           0 :                 break;
     421             :             }
     422             :         }
     423           0 :         if( ! pPlugin )
     424           0 :             return NPERR_INVALID_INSTANCE_ERROR;
     425           0 :         if( ! pStream || pStream->getStreamType() != InputStream )
     426           0 :             return NPERR_FILE_NOT_FOUND;
     427             : 
     428           0 :         PluginInputStream* pInputStream = (PluginInputStream*)pStream;
     429           0 :         boost::scoped_array<sal_Int8> pBytes;
     430           0 :         int   nBytes = 0;
     431           0 :         pPlugin->enterPluginCallback();
     432           0 :         while( rangeList )
     433             :         {
     434           0 :             if( pBytes && nBytes < (int)rangeList->length )
     435           0 :                 pBytes.reset();
     436           0 :             if( ! pBytes ) {
     437           0 :                 nBytes = rangeList->length;
     438           0 :                 pBytes.reset(new sal_Int8[ nBytes ]);
     439             :             }
     440             :             int nRead =
     441           0 :                 pInputStream->read( rangeList->offset, pBytes.get(), rangeList->length );
     442           0 :             int nPos = 0;
     443             :             int nNow;
     444           0 :             do
     445             :             {
     446           0 :                 nNow = pPlugin->getPluginComm()->
     447             :                     NPP_WriteReady( pPlugin->getNPPInstance(),
     448           0 :                                     stream );
     449           0 :                 nNow = pPlugin->getPluginComm()->
     450             :                     NPP_Write( pPlugin->getNPPInstance(),
     451             :                                stream,
     452             :                                rangeList->offset + nPos,
     453             :                                nNow,
     454           0 :                                pBytes.get()+nPos );
     455           0 :                 nPos += nNow;
     456           0 :                 nRead -= nNow;
     457           0 :             } while( nRead > 0 && nNow );
     458           0 :             rangeList = rangeList->next;
     459             :         }
     460           0 :         pPlugin->leavePluginCallback();
     461             : 
     462           0 :         return NPERR_NO_ERROR;
     463             :     }
     464             : 
     465           0 :     void SAL_CALL NP_LOADDS  NPN_Status( NPP instance, const char* message )
     466             :     {
     467             :         TRACE( "NPN_Status" );
     468           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     469           0 :         if( ! pImpl )
     470           0 :             return;
     471             : 
     472             :         try
     473             :         {
     474           0 :             pImpl->enterPluginCallback();
     475           0 :             pImpl->getPluginContext()->
     476           0 :                 displayStatusText( pImpl, OStringToOUString( message, pImpl->getTextEncoding() ) );
     477           0 :             pImpl->leavePluginCallback();
     478             :         }
     479           0 :         catch( const ::com::sun::star::plugin::PluginException& )
     480             :         {
     481           0 :             pImpl->leavePluginCallback();
     482           0 :             return;
     483             :         }
     484             :     }
     485             : 
     486           0 :     const char* SAL_CALL NP_LOADDS  NPN_UserAgent( NPP instance )
     487             :     {
     488           0 :         static char* pAgent = strdup( "Mozilla 3.0" );
     489             : 
     490           0 :         XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     491           0 :         if( pImpl )
     492             :         {
     493           0 :             OUString UserAgent;
     494             :             try
     495             :             {
     496           0 :                 pImpl->enterPluginCallback();
     497           0 :                 UserAgent = pImpl->getPluginContext()->
     498           0 :                     getUserAgent( pImpl );
     499           0 :                 pImpl->leavePluginCallback();
     500           0 :                 if( pAgent )
     501           0 :                     free( pAgent );
     502           0 :                 pAgent = strdup( OUStringToOString( UserAgent, pImpl->getTextEncoding() ).getStr() );
     503             :             }
     504           0 :             catch( const ::com::sun::star::plugin::PluginException& )
     505             :             {
     506           0 :                 pImpl->leavePluginCallback();
     507           0 :             }
     508             :         }
     509             : 
     510             :         TRACES( "NPN_UserAgent: returning", pAgent );
     511             : 
     512           0 :         return pAgent;
     513             :     }
     514             : 
     515           0 : void SAL_CALL NP_LOADDS  NPN_Version( int* major, int* minor, int* net_major, int* net_minor )
     516             : {
     517             :     TRACE( "NPN_Version" );
     518           0 :     *major = 4;
     519           0 :     *minor = 0;
     520           0 :     *net_major = 4;
     521           0 :     *net_minor = 5;
     522           0 : }
     523             : 
     524           0 : int32_t SAL_CALL NP_LOADDS  NPN_Write( NPP instance, NPStream* stream, int32_t len,
     525             :                  void* buffer )
     526             : {
     527             :     TRACE( "NPN_Write" );
     528           0 :     XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     529           0 :     if( ! pImpl )
     530           0 :         return 0;
     531             : 
     532           0 :     PluginStream* pStream = pImpl->getStreamFromNPStream( stream );
     533           0 :     if( ! pStream || pStream->getStreamType() != OutputStream )
     534           0 :         return 0;
     535             : 
     536           0 :     pImpl->enterPluginCallback();
     537           0 :     ::com::sun::star::uno::Sequence<sal_Int8> Bytes( (sal_Int8*)buffer, len );
     538           0 :     ((PluginOutputStream*)pStream)->getOutputStream()->writeBytes( Bytes );
     539           0 :     pImpl->leavePluginCallback();
     540             : 
     541           0 :     return len;
     542             : }
     543             : 
     544             : 
     545           0 : NPError SAL_CALL NP_LOADDS  NPN_GetValue( NPP instance, NPNVariable variable, void* value )
     546             : {
     547             :     TRACEN( "NPN_GetValue: ", variable );
     548           0 :     XPlugin_Impl* pImpl = XPluginManager_Impl::getXPluginFromNPP( instance );
     549             : 
     550           0 :     if( ! pImpl )
     551           0 :         return 0;
     552             : 
     553           0 :     NPError aResult( NPERR_NO_ERROR );
     554             : 
     555           0 :     switch( variable )
     556             :     {
     557             :         case NPNVxDisplay:
     558             :             // Unix only, handled in sysdep part
     559             :         case NPNVxtAppContext:
     560             :             // Unix only, handled in sysdep part
     561             :          default:
     562           0 :             aResult = NPERR_INVALID_PARAM;
     563           0 :             break;
     564             :         #ifdef MACOSX
     565             :         case 2000: // NPNVsupportsQuickDrawBool
     566             :             *(NPBool*)value = false;
     567             :             break;
     568             :         case 2001: // NPNVsupportsCoreGraphicsBool
     569             :             *(NPBool*)value = true;
     570             :             break;
     571             :         #endif
     572             :         case NPNVjavascriptEnabledBool:
     573             :             // no javascript
     574           0 :             *(NPBool*)value = false;
     575           0 :             break;
     576             :         case NPNVasdEnabledBool:
     577             :             // no SmartUpdate
     578           0 :             *(NPBool*)value = false;
     579           0 :             break;
     580             :         case NPNVisOfflineBool:
     581             :             // no offline browsing
     582           0 :             *(NPBool*)value = false;
     583           0 :             break;
     584             :     }
     585             : 
     586           0 :     return aResult;
     587             : }
     588             : 
     589           0 : void SAL_CALL NP_LOADDS  NPN_ReloadPlugins(NPBool /*reloadPages*/)
     590             : {
     591             :     TRACE( "NPN_ReloadPlugins" );
     592           0 : }
     593             : 
     594             : 
     595           0 : NPError SAL_CALL NP_LOADDS  NPN_SetValue( NPP instance,
     596             :                                           NPPVariable variable,
     597             :                                           void* value )
     598             : {
     599           0 :     NPError nError = NPERR_NO_ERROR;
     600             :     TRACEN( "NPN_SetValue ", variable );
     601             :     #ifdef MACOSX
     602             :     NPN_SetValue_Impl(instance, variable, value);
     603             :     #else
     604             :     (void)instance;
     605             :     (void)variable;
     606             :     (void)value;
     607             :     #endif
     608           0 :     return nError;
     609             : }
     610             : 
     611           0 : void SAL_CALL NP_LOADDS  NPN_InvalidateRect(NPP instance, NPRect* /*invalidRect*/)
     612             : {
     613             :     TRACE( "NPN_InvalidateRect" );
     614             : 
     615             :     #ifdef MACOSX
     616             :     NPN_ForceRedraw( instance );
     617             :     #else
     618             :     (void)instance;
     619             :     #endif
     620           0 : }
     621             : 
     622           0 : void SAL_CALL NP_LOADDS  NPN_InvalidateRegion(NPP instance, NPRegion /*invalidRegion*/)
     623             : {
     624             :     TRACE( "NPN_InvalidateRegion" );
     625             : 
     626             :     #ifdef MACOSX
     627             :     NPN_ForceRedraw( instance );
     628             :     #else
     629             :     (void)instance;
     630             :     #endif
     631           0 : }
     632             : 
     633           0 : void SAL_CALL NP_LOADDS  NPN_ForceRedraw(NPP instance)
     634             : {
     635             :     TRACE( "NPN_ForceRedraw" );
     636             :     #ifdef MACOSX
     637             :     NPN_ForceRedraw_Impl(instance);
     638             :     #else
     639             :     (void)instance;
     640             :     #endif
     641           0 : }
     642             : 
     643             : }
     644             : 
     645             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10