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

Generated by: LCOV version 1.10