summaryrefslogtreecommitdiff
path: root/scripting/source/protocolhandler
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/source/protocolhandler')
-rwxr-xr-x[-rw-r--r--]scripting/source/protocolhandler/exports.dxp1
-rwxr-xr-x[-rw-r--r--]scripting/source/protocolhandler/makefile.mk9
-rwxr-xr-xscripting/source/protocolhandler/protocolhandler.component34
-rwxr-xr-x[-rw-r--r--]scripting/source/protocolhandler/scripthandler.cxx66
-rwxr-xr-x[-rw-r--r--]scripting/source/protocolhandler/scripthandler.hxx0
5 files changed, 58 insertions, 52 deletions
diff --git a/scripting/source/protocolhandler/exports.dxp b/scripting/source/protocolhandler/exports.dxp
index 9630d7e06768..f0e1c69934bc 100644..100755
--- a/scripting/source/protocolhandler/exports.dxp
+++ b/scripting/source/protocolhandler/exports.dxp
@@ -1,3 +1,2 @@
component_getImplementationEnvironment
-component_writeInfo
component_getFactory
diff --git a/scripting/source/protocolhandler/makefile.mk b/scripting/source/protocolhandler/makefile.mk
index c782c1a188f5..5a2e92bbbac3 100644..100755
--- a/scripting/source/protocolhandler/makefile.mk
+++ b/scripting/source/protocolhandler/makefile.mk
@@ -45,6 +45,7 @@ SHL1TARGET= $(TARGET)$(DLLPOSTFIX)
SHL1STDLIBS= \
$(SFXLIB) \
+ $(FWELIB) \
$(CPPULIB) \
$(CPPUHELPERLIB) \
$(VCLLIB) \
@@ -61,3 +62,11 @@ DEF1EXPORTFILE= exports.dxp
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
+
+ALLTAR : $(MISC)/protocolhandler.component
+
+$(MISC)/protocolhandler.component .ERRREMOVE : \
+ $(SOLARENV)/bin/createcomponent.xslt protocolhandler.component
+ $(XSLTPROC) --nonet --stringparam uri \
+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \
+ $(SOLARENV)/bin/createcomponent.xslt protocolhandler.component
diff --git a/scripting/source/protocolhandler/protocolhandler.component b/scripting/source/protocolhandler/protocolhandler.component
new file mode 100755
index 000000000000..db177a896ca4
--- /dev/null
+++ b/scripting/source/protocolhandler/protocolhandler.component
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* 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.
+*
+* 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).
+*
+* 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.
+*
+**********************************************************************-->
+
+<component loader="com.sun.star.loader.SharedLibrary"
+ xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="com.sun.star.comp.ScriptProtocolHandler">
+ <service name="com.sun.star.frame.ProtocolHandler"/>
+ </implementation>
+</component>
diff --git a/scripting/source/protocolhandler/scripthandler.cxx b/scripting/source/protocolhandler/scripthandler.cxx
index dce9ddee15f5..3c2f97a040ba 100644..100755
--- a/scripting/source/protocolhandler/scripthandler.cxx
+++ b/scripting/source/protocolhandler/scripthandler.cxx
@@ -50,10 +50,12 @@
#include <sfx2/frame.hxx>
#include <sfx2/sfxdlg.hxx>
#include <vcl/abstdlg.hxx>
+#include <tools/diagnose_ex.h>
#include <cppuhelper/factory.hxx>
#include <cppuhelper/exc_hlp.hxx>
#include <util/util.hxx>
+#include <framework/documentundoguard.hxx>
#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/uri/XUriReference.hpp"
@@ -70,7 +72,6 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::script;
using namespace ::com::sun::star::script::provider;
using namespace ::com::sun::star::document;
-using namespace ::scripting_util;
namespace scripting_protocolhandler
{
@@ -98,8 +99,7 @@ void SAL_CALL ScriptProtocolHandler::initialize(
throw RuntimeException( temp, Reference< XInterface >() );
}
- validateXRef( m_xFactory,
- "ScriptProtocolHandler::initialize: No Service Manager available" );
+ ENSURE_OR_THROW( m_xFactory.is(), "ScriptProtocolHandler::initialize: No Service Manager available" );
m_bInitialised = true;
}
@@ -156,14 +156,14 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
sal_Bool bSuccess = sal_False;
Any invokeResult;
- bool bCaughtException = FALSE;
+ bool bCaughtException = sal_False;
Any aException;
if ( m_bInitialised )
{
try
{
- bool bIsDocumentScript = ( aURL.Complete.indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("document")) ) !=-1 );
+ bool bIsDocumentScript = ( aURL.Complete.indexOfAsciiL( RTL_CONSTASCII_STRINGPARAM( "document" ) ) !=-1 );
// TODO: isn't this somewhat strange? This should be a test for a location=document parameter, shouldn't it?
if ( bIsDocumentScript )
@@ -183,7 +183,7 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
Reference< provider::XScript > xFunc =
m_xScriptProvider->getScript( aURL.Complete );
- validateXRef( xFunc,
+ ENSURE_OR_THROW( xFunc.is(),
"ScriptProtocolHandler::dispatchWithNotification: validate xFunc - unable to obtain XScript interface" );
@@ -208,6 +208,11 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
}
}
+ // attempt to protect the document against the script tampering with its Undo Context
+ ::std::auto_ptr< ::framework::DocumentUndoGuard > pUndoGuard;
+ if ( bIsDocumentScript )
+ pUndoGuard.reset( new ::framework::DocumentUndoGuard( m_xScriptInvocation ) );
+
bSuccess = sal_False;
while ( !bSuccess )
{
@@ -247,18 +252,8 @@ void SAL_CALL ScriptProtocolHandler::dispatchWithNotification(
invokeResult <<= reason.concat( aException.getValueTypeName() ).concat( e.Message );
- bCaughtException = TRUE;
- }
-#ifdef _DEBUG
- catch ( ... )
- {
- ::rtl::OUString reason(RTL_CONSTASCII_USTRINGPARAM(
- "ScriptProtocolHandler::dispatch: caught unknown exception" ));
-
- invokeResult <<= reason;
+ bCaughtException = sal_True;
}
-#endif
-
}
else
{
@@ -359,13 +354,11 @@ ScriptProtocolHandler::getScriptInvocation()
return m_xScriptInvocation.is();
}
-void
-ScriptProtocolHandler::createScriptProvider()
+void ScriptProtocolHandler::createScriptProvider()
{
if ( m_xScriptProvider.is() )
- {
return;
- }
+
try
{
// first, ask the component supporting the XScriptInvocationContext interface
@@ -398,6 +391,7 @@ ScriptProtocolHandler::createScriptProvider()
m_xScriptProvider = xSPS->getScriptProvider();
}
+ // if nothing of this is successful, use the master script provider
if ( !m_xScriptProvider.is() )
{
Reference< XPropertySet > xProps( m_xFactory, UNO_QUERY_THROW );
@@ -431,15 +425,6 @@ ScriptProtocolHandler::createScriptProvider()
::rtl::OUString temp = OUSTR( "ScriptProtocolHandler::createScriptProvider: " );
throw RuntimeException( temp.concat( e.Message ), Reference< XInterface >() );
}
-#ifdef _DEBUG
- catch ( ... )
- {
- throw RuntimeException(
- OUSTR( "ScriptProtocolHandler::createScriptProvider: UnknownException: " ),
- Reference< XInterface > () );
- }
-#endif
-
}
ScriptProtocolHandler::ScriptProtocolHandler(
@@ -538,27 +523,6 @@ extern "C"
*ppEnvironmentTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME ;
}
- sal_Bool SAL_CALL component_writeInfo( void * pServiceManager ,
- void * pRegistryKey )
- {
- (void)pServiceManager;
-
- Reference< css::registry::XRegistryKey > xKey(
- reinterpret_cast< css::registry::XRegistryKey* >( pRegistryKey ) ) ;
-
- ::rtl::OUString aStr = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/" ) );
- aStr +=
- ::scripting_protocolhandler::ScriptProtocolHandler::impl_getStaticImplementationName();
-
- aStr += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES" ) );
- Reference< css::registry::XRegistryKey > xNewKey = xKey->createKey( aStr );
- xNewKey->createKey(
- ::rtl::OUString::createFromAscii( ::scripting_protocolhandler::MYSERVICENAME )
- );
-
- return sal_True;
- }
-
void* SAL_CALL component_getFactory( const sal_Char * pImplementationName ,
void * pServiceManager ,
void * pRegistryKey )
diff --git a/scripting/source/protocolhandler/scripthandler.hxx b/scripting/source/protocolhandler/scripthandler.hxx
index cf3c68cc3341..cf3c68cc3341 100644..100755
--- a/scripting/source/protocolhandler/scripthandler.hxx
+++ b/scripting/source/protocolhandler/scripthandler.hxx