2001-01-25 23:25:24 -06:00
/*************************************************************************
*
2008-04-11 01:23:14 -05:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
2001-01-25 23:25:24 -06:00
*
2010-02-12 08:01:35 -06:00
* Copyright 2000 , 2010 Oracle and / or its affiliates .
2001-01-25 23:25:24 -06:00
*
2008-04-11 01:23:14 -05:00
* OpenOffice . org - a multi - platform office productivity suite
2001-01-25 23:25:24 -06:00
*
2008-04-11 01:23:14 -05:00
* This file is part of OpenOffice . org .
2001-01-25 23:25:24 -06:00
*
2008-04-11 01:23:14 -05:00
* OpenOffice . org is free software : you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License version 3
* only , as published by the Free Software Foundation .
2001-01-25 23:25:24 -06:00
*
2008-04-11 01:23:14 -05:00
* OpenOffice . org is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Lesser General Public License version 3 for more details
* ( a copy is included in the LICENSE file that accompanied this code ) .
2001-01-25 23:25:24 -06:00
*
2008-04-11 01:23:14 -05:00
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice . org . If not , see
* < http : //www.openoffice.org/license.html>
* for a copy of the LGPLv3 License .
2001-01-25 23:25:24 -06:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2001-01-26 01:39:47 -06:00
# ifndef __FRAMEWORK_SERVICES_PLUGINFRAME_HXX_
# define __FRAMEWORK_SERVICES_PLUGINFRAME_HXX_
2001-01-25 23:25:24 -06:00
//_________________________________________________________________________________________________________________
// my own includes
//_________________________________________________________________________________________________________________
2002-05-23 06:54:59 -05:00
# include <services/frame.hxx>
2001-01-25 23:25:24 -06:00
//_________________________________________________________________________________________________________________
// interface includes
//_________________________________________________________________________________________________________________
# include <com/sun/star/mozilla/XPluginInstance.hpp>
# include <com/sun/star/mozilla/XPluginInstancePeer.hpp>
# include <com/sun/star/mozilla/XPluginWindowPeer.hpp>
# include <com/sun/star/io/XInputStream.hpp>
# include <com/sun/star/lang/XInitialization.hpp>
# include <com/sun/star/awt/XWindow.hpp>
2001-11-21 07:58:14 -06:00
# include <com/sun/star/frame/XDispatchResultListener.hpp>
2001-01-25 23:25:24 -06:00
# include <com/sun/star/frame/FeatureStateEvent.hpp>
2001-03-29 06:17:17 -06:00
# include <com/sun/star/lang/EventObject.hpp>
2001-01-25 23:25:24 -06:00
//_________________________________________________________________________________________________________________
// other includes
//_________________________________________________________________________________________________________________
# ifndef _VCL_ATOM_HXX
# include <vcl/threadex.hxx>
# endif
2009-10-06 00:38:24 -05:00
# include <unotools/cmdoptions.hxx>
2002-04-22 01:05:16 -05:00
2001-01-25 23:25:24 -06:00
//_________________________________________________________________________________________________________________
// namespace
//_________________________________________________________________________________________________________________
namespace framework {
//_________________________________________________________________________________________________________________
// exported const
//_________________________________________________________________________________________________________________
//_________________________________________________________________________________________________________________
// exported definitions
//_________________________________________________________________________________________________________________
/*-************************************************************************************************************/ /**
@ short implements an special frame - a plugin frame
@ descr -
@ implements XInitialization
XPluginInstance
2001-11-21 07:58:14 -06:00
XDispatchResultListener
2002-05-23 06:54:59 -05:00
@ base Frame
2001-01-25 23:25:24 -06:00
*/ /*-*************************************************************************************************************/
2002-05-23 06:54:59 -05:00
class PlugInFrame : public css : : lang : : XInitialization ,
public css : : mozilla : : XPluginInstance ,
2001-11-21 07:58:14 -06:00
public css : : frame : : XDispatchResultListener , // => XEVENTLISTENER
2002-05-23 06:54:59 -05:00
public Frame // Order of baseclasses is neccessary for right initialization!
2001-01-25 23:25:24 -06:00
{
//-------------------------------------------------------------------------------------------------------------
// public methods
//-------------------------------------------------------------------------------------------------------------
public :
//---------------------------------------------------------------------------------------------------------
// constructor / destructor
//---------------------------------------------------------------------------------------------------------
/*-****************************************************************************************************/ /**
@ short standard constructor to create instance
@ descr This constructor initialize a new instance of this class ,
and will be set valid values on his member and baseclasses .
@ seealso -
@ param -
@ return -
@ onerror -
*/ /*-*****************************************************************************************************/
2001-03-29 06:17:17 -06:00
PlugInFrame ( const css : : uno : : Reference < css : : lang : : XMultiServiceFactory > & xFactory ) ;
2001-01-25 23:25:24 -06:00
/*-****************************************************************************************************/ /**
@ short standard destructor
@ descr This method destruct an instance of this class and clear some member .
@ seealso -
@ param -
@ return -
@ onerror -
*/ /*-*****************************************************************************************************/
virtual ~ PlugInFrame ( ) ;
//---------------------------------------------------------------------------------------------------------
// XInterface, XTypeProvider, XServiceInfo
//---------------------------------------------------------------------------------------------------------
DECLARE_XINTERFACE
DECLARE_XTYPEPROVIDER
DECLARE_XSERVICEINFO
//---------------------------------------------------------------------------------------------------------
// XInitialization
//---------------------------------------------------------------------------------------------------------
2001-03-29 06:17:17 -06:00
void SAL_CALL initialize ( const css : : uno : : Sequence < css : : uno : : Any > & seqArguments ) throw ( css : : uno : : Exception ,
css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
//---------------------------------------------------------------------------------------------------------
// XPluginInstance
//---------------------------------------------------------------------------------------------------------
2001-03-29 06:17:17 -06:00
void SAL_CALL start ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL implcb_start ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL stop ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL implcb_stop ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL destroy ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL implcb_destroy ( ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL createWindow ( const css : : uno : : Any & aPlatformWindowHandle ,
sal_Bool bEmbedded ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL implcb_createWindow ( const css : : uno : : Any & aPlatformWindowHandle ,
sal_Bool bEmbedded ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL newStream ( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Reference < css : : io : : XInputStream > & xStream ,
const css : : uno : : Any & aSessionId ) throw ( css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
void SAL_CALL implcb_newStream
2001-03-29 06:17:17 -06:00
( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Reference < css : : io : : XInputStream > & xStream ,
const css : : uno : : Any & aSessionId ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL newURL ( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Any & aSessionId ) throw ( css : : uno : : RuntimeException ) ;
void SAL_CALL implcb_newURL ( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Any & aSessionId ) throw ( css : : uno : : RuntimeException ) ;
virtual void SAL_CALL getHttpServerURL ( : : rtl : : OUString & sHost ,
sal_uInt16 & nPort ,
: : rtl : : OUString & sPrefix ) throw ( css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
//---------------------------------------------------------------------------------------------------------
// XDispatchProvider
//---------------------------------------------------------------------------------------------------------
2001-03-29 06:17:17 -06:00
virtual css : : uno : : Reference < css : : frame : : XDispatch > SAL_CALL queryDispatch ( const css : : util : : URL & aURL ,
const : : rtl : : OUString & sTargetFrameName ,
sal_Int32 nSearchFlags ) throw ( css : : uno : : RuntimeException ) ;
virtual css : : uno : : Sequence < css : : uno : : Reference < css : : frame : : XDispatch > > SAL_CALL queryDispatches ( const css : : uno : : Sequence < css : : frame : : DispatchDescriptor > & seqDescripts ) throw ( css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
//---------------------------------------------------------------------------------------------------------
2001-11-21 07:58:14 -06:00
// XDispatchResultListener
2001-01-25 23:25:24 -06:00
//---------------------------------------------------------------------------------------------------------
2001-11-21 07:58:14 -06:00
virtual void SAL_CALL dispatchFinished ( const css : : frame : : DispatchResultEvent & aEvent ) throw ( css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
//---------------------------------------------------------------------------------------------------------
// XEventListener
//---------------------------------------------------------------------------------------------------------
2001-03-29 06:17:17 -06:00
void SAL_CALL disposing ( const css : : lang : : EventObject & aEvent ) throw ( css : : uno : : RuntimeException ) ;
2001-01-25 23:25:24 -06:00
//-------------------------------------------------------------------------------------------------------------
// protected methods
//-------------------------------------------------------------------------------------------------------------
protected :
//-------------------------------------------------------------------------------------------------------------
// private methods
//-------------------------------------------------------------------------------------------------------------
private :
void impl_tryToLoadDocument ( ) ;
2001-10-09 03:08:55 -05:00
sal_Bool impl_registerRemoteFactories ( const css : : uno : : Reference < css : : lang : : XMultiServiceFactory > & xRemoteServiceManager ) ;
2001-01-25 23:25:24 -06:00
//-------------------------------------------------------------------------------------------------------------
// debug methods
// (should be private everyway!)
//-------------------------------------------------------------------------------------------------------------
/*-****************************************************************************************************/ /**
@ short debug - method to check incoming parameter of some other mehods of this class
@ descr The following methods are used to check parameters for other methods
of this class . The return value is used directly for an ASSERT ( . . . ) .
@ seealso ASSERTs in implementation !
@ param references to checking variables
@ return sal_False on invalid parameter < BR >
sal_True otherway
@ onerror -
*/ /*-*****************************************************************************************************/
# ifdef ENABLE_ASSERTIONS
private :
2001-03-29 06:17:17 -06:00
static sal_Bool impldbg_checkParameter_initialize ( const css : : uno : : Sequence < css : : uno : : Any > & seqArguments ) ;
static sal_Bool impldbg_checkParameter_createWindow ( const css : : uno : : Any & aPlatformWindowHandle ,
sal_Bool bEmbedded ) ;
static sal_Bool impldbg_checkParameter_newStream ( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Reference < css : : io : : XInputStream > & xStream ) ;
static sal_Bool impldbg_checkParameter_newURL ( const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ) ;
static sal_Bool impldbg_checkParameter_getHttpServerURL ( : : rtl : : OUString & sHost ,
sal_uInt16 & nPort ,
: : rtl : : OUString & sPrefix ) ;
static sal_Bool impldbg_checkParameter_queryDispatch ( const css : : util : : URL & aURL ,
const : : rtl : : OUString & sTargetFrameName ,
sal_Int32 nSearchFlags ) ;
static sal_Bool impldbg_checkParameter_queryDispatches ( const css : : uno : : Sequence < css : : frame : : DispatchDescriptor > & seqDescripts ) ;
static sal_Bool impldbg_checkParameter_statusChanged ( const css : : frame : : FeatureStateEvent & aEvent ) ;
static sal_Bool impldbg_checkParameter_disposing ( const css : : lang : : EventObject & aEvent ) ;
2001-01-25 23:25:24 -06:00
# endif // #ifdef ENABLE_ASSERTIONS
//-------------------------------------------------------------------------------------------------------------
// variables
// (should be private everyway!)
//-------------------------------------------------------------------------------------------------------------
private :
2001-03-29 06:17:17 -06:00
css : : uno : : Reference < css : : mozilla : : XPluginInstancePeer > m_xPlugInInstancePeer ; /// Reference to UNO interface of PlugIn dll for communication with browser
css : : uno : : Reference < css : : mozilla : : XPluginWindowPeer > m_xPlugInWindowPeer ; /// Reference to set child window at plugin window
css : : uno : : Sequence < css : : beans : : PropertyValue > m_seqProperties ; /// Sequence of properties as arguments for load document
css : : util : : URL m_aURL ; /// URL for document to load
sal_Bool m_bILoad ; /// PlugInFrame has a valid loader which load the document and wait for finished/cancelled
sal_Bool m_bIHaveDocument ; /// We have a document loaded successful.
css : : uno : : Reference < css : : frame : : XDispatchProvider > m_xPlugInDispatcher ; /// Dispatcher to forward dispatches to browser
2001-10-09 03:08:55 -05:00
static sal_Bool m_bRemoteFactoriesExist ; /// indicates, if remote factories was already registered (neccessary one times only!)
2002-04-22 01:05:16 -05:00
SvtCommandOptions m_aCommandOptions ; /// ref counted class to support disabling commands defined by configuration file
2001-01-25 23:25:24 -06:00
} ; // class PlugInFrame
/*-************************************************************************************************************/ /**
@ short used to forward all asynchronous calls which use VCL internal to the main thread
@ descr We need this asynchronous mechanism to prevent us against dead locks . Sometimes our main thread
can call us for event handling like FOCUS , ACTIVATE and something else . But at the same time we will call
the main thread to CREATE A WINDOW , SET IT VISIBLE . . . Then we have a problem . We must send us himself a event
to run our code synchronized with our main thread !
@ implements
2002-05-16 07:28:34 -05:00
@ base -
2001-01-25 23:25:24 -06:00
*/ /*-*************************************************************************************************************/
enum eIMPL_PluginCommand
{
START ,
STOP ,
CREATEWINDOW ,
DESTROY ,
NEWSTREAM ,
NEWURL
} ;
2002-05-16 07:28:34 -05:00
class cIMPL_MainThreadExecutorRequest
2001-01-25 23:25:24 -06:00
{
public :
2002-05-16 07:28:34 -05:00
cIMPL_MainThreadExecutorRequest ( eIMPL_PluginCommand eCommand ,
2001-03-29 06:17:17 -06:00
PlugInFrame * pPluginInstance ) ;
2001-01-25 23:25:24 -06:00
2002-05-16 07:28:34 -05:00
cIMPL_MainThreadExecutorRequest ( eIMPL_PluginCommand eCommand ,
2001-03-29 06:17:17 -06:00
PlugInFrame * pPluginInstance ,
const css : : uno : : Any & aPlatformWindowHandle ,
sal_Bool bEmbedded ) ;
2001-01-25 23:25:24 -06:00
2002-05-16 07:28:34 -05:00
cIMPL_MainThreadExecutorRequest ( eIMPL_PluginCommand eCommand ,
2001-03-29 06:17:17 -06:00
PlugInFrame * pPluginInstance ,
const : : rtl : : OUString & sMIMEDescription ,
const : : rtl : : OUString & sURL ,
const : : rtl : : OUString & sFilter ,
const css : : uno : : Reference < css : : io : : XInputStream > & xStream ,
const css : : uno : : Any & aSessionId ) ;
2001-01-25 23:25:24 -06:00
/*-****************************************************************************************************/ /**
@ short -
@ descr -
@ seealso -
@ param -
@ return -
@ onerror -
*/ /*-*****************************************************************************************************/
2002-05-16 07:28:34 -05:00
virtual long doIt ( ) ;
2001-01-25 23:25:24 -06:00
//-------------------------------------------------------------------------------------------------------------
// private variables
//-------------------------------------------------------------------------------------------------------------
private :
2001-03-29 06:17:17 -06:00
eIMPL_PluginCommand m_eCommand ; /// switch to specify forward function
PlugInFrame * m_pPluginInstance ; /// instance wich has started this swicth mechanism and wish to called back from us
2002-05-16 07:28:34 -05:00
css : : uno : : Reference < css : : uno : : XInterface > m_xPluginInstance ; /// reference to our plugin frame to prevent that plugin frame dies before we call back
2001-03-29 06:17:17 -06:00
css : : uno : : Any m_aPlatformWindowHandle ; /// parameter for XPluginInstance->createWindow()
sal_Bool m_bEmbedded ; /// parameter for XPluginInstance->createWindow()
: : rtl : : OUString m_sMIMEDescription ; /// parameter for XPluginInstance->newStream()/newURL()
: : rtl : : OUString m_sURL ; /// parameter for XPluginInstance->newStream()/newURL()
: : rtl : : OUString m_sFilter ; /// parameter for XPluginInstance->newStream()/newURL()
css : : uno : : Reference < css : : io : : XInputStream > m_xStream ; /// parameter for XPluginInstance->newStream()/newURL()
css : : uno : : Any m_aSessionId ; /// parameter for XPluginInstance->newStream()/newURL()
2001-01-25 23:25:24 -06:00
} ;
2002-05-16 07:28:34 -05:00
class cIMPL_MainThreadExecutor
{
//-------------------------------------------------------------------------------------------------------------
// public methods
//-------------------------------------------------------------------------------------------------------------
public :
static void execute ( cIMPL_MainThreadExecutorRequest * pRequest ) ;
/*-****************************************************************************************************/ /**
@ short -
@ descr -
@ seealso -
@ param -
@ return -
@ onerror -
*/ /*-*****************************************************************************************************/
DECL_STATIC_LINK ( cIMPL_MainThreadExecutor , worker , cIMPL_MainThreadExecutorRequest * ) ;
} ;
2001-01-25 23:25:24 -06:00
} // namespace framework
2001-01-26 01:39:47 -06:00
# endif // #ifndef __FRAMEWORK_SERVICES_PLUGINFRAME_HXX_