diff options
author | Giuseppe Castagno <giuseppe.castagno@acca-esse.eu> | 2016-10-15 16:21:42 +0200 |
---|---|---|
committer | Giuseppe Castagno <giuseppe.castagno@acca-esse.eu> | 2016-10-17 10:45:04 +0000 |
commit | 26c99e42db233e375a007c49e1e903359caa1ce3 (patch) | |
tree | 71a2ec04b5db83a95e2f3a2e266091d6df4ffac5 | |
parent | 3c4f17b571ba041cb03d5c7e27968ee11edfb97d (diff) |
tdf#103274: Add helper for a default XCommandEnvironment reference.
This helper should be used where the empty XCommandEnvironment
e.g. something like:
css::uno::Reference< css::ucb::XCommandEnvironment >()
is currently used.
See comment in the committed code (include/unotools/ucbhelper.hxx)
for details.
A case use is presented in this commit, please see:
sfx2/source/doc/docfile.cxx for details.
Change-Id: Ieb97c0ed61f31ef8df532c8be0e7ff1035327915
Reviewed-on: https://gerrit.libreoffice.org/29927
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Giuseppe Castagno <giuseppe.castagno@acca-esse.eu>
-rw-r--r-- | include/unotools/ucbhelper.hxx | 30 | ||||
-rw-r--r-- | sfx2/source/doc/docfile.cxx | 7 | ||||
-rw-r--r-- | unotools/source/ucbhelper/ucbhelper.cxx | 18 |
3 files changed, 53 insertions, 2 deletions
diff --git a/include/unotools/ucbhelper.hxx b/include/unotools/ucbhelper.hxx index 1777a408584f..653d82805d6b 100644 --- a/include/unotools/ucbhelper.hxx +++ b/include/unotools/ucbhelper.hxx @@ -80,6 +80,36 @@ UNOTOOLS_DLLPUBLIC bool IsSubPath( UNOTOOLS_DLLPUBLIC bool EqualURLs( OUString const & url1, OUString const & url2); +/** +* Returns a default XCommandEnvironment to be used +* when creating a ucbhelper::Content. +* +* Due to the way the WebDAV UCP provider works, an interaction handler +* is always needed: +* 1) to activate the credential dialog or to provide the cached credentials +* whenever the server requests them; +* +* 2) in case of ssl connection (https) to activate the dialog to show the +* certificate if said certificate looks wrong or dubious. +* +* This helper provides the XCommandEnvironment with an interaction +* handler that intercepts: +* 1) css::ucb::AuthenticationRequest() +* 2) css::ucb::CertificateValidationRequest() +* 3) css::ucb::InteractiveIOException() +* 4) css::ucb::UnsupportedDataSinkException() +* +* Exception 1) and 2) will be passed to the UI handler, e.g. shown to +* the user for interaction. +* +* Exception 3) and 4) will be have a default 'Abort' result. +* See comphelper::StillReadWriteInteraction for details. +* comphelper::StillReadWriteInteraction was introduced in +* commit bbe51f039dffca2506ea542feb78571b6358b981. +*/ +UNOTOOLS_DLLPUBLIC + css::uno::Reference< css::ucb::XCommandEnvironment > getDefaultCommandEnvironment(); + } } #endif diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx index 2179f8248284..e41f7161838b 100644 --- a/sfx2/source/doc/docfile.cxx +++ b/sfx2/source/doc/docfile.cxx @@ -394,8 +394,11 @@ util::DateTime SfxMedium::GetInitFileDate( bool bIgnoreOldValue ) { try { - uno::Reference< css::ucb::XCommandEnvironment > xDummyEnv; - ::ucbhelper::Content aContent( GetURLObject().GetMainURL( INetURLObject::NO_DECODE ), xDummyEnv, comphelper::getProcessComponentContext() ); + // add a default css::ucb::XCommandEnvironment + // in order to have the WebDAV UCP provider manage http/https authentication correctly + ::ucbhelper::Content aContent( GetURLObject().GetMainURL( INetURLObject::NO_DECODE ), + utl::UCBContentHelper::getDefaultCommandEnvironment(), + comphelper::getProcessComponentContext() ); aContent.getPropertyValue("DateModified") >>= pImpl->m_aDateTime; pImpl->m_bGotDateTime = true; diff --git a/unotools/source/ucbhelper/ucbhelper.cxx b/unotools/source/ucbhelper/ucbhelper.cxx index acbc63f41564..aa751b679c9d 100644 --- a/unotools/source/ucbhelper/ucbhelper.cxx +++ b/unotools/source/ucbhelper/ucbhelper.cxx @@ -25,6 +25,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/task/XInteractionHandler.hpp> +#include <com/sun/star/task/InteractionHandler.hpp> #include <com/sun/star/ucb/CommandAbortedException.hpp> #include <com/sun/star/ucb/ContentInfo.hpp> #include <com/sun/star/ucb/ContentInfoAttribute.hpp> @@ -46,6 +47,7 @@ #include <com/sun/star/util/DateTime.hpp> #include <comphelper/processfactory.hxx> #include <cppuhelper/exc_hlp.hxx> +#include <comphelper/simplefileaccessinteraction.hxx> #include <osl/file.hxx> #include <rtl/string.h> #include <rtl/ustring.h> @@ -120,6 +122,22 @@ DateTime convert(css::util::DateTime const & dt) { } +css::uno::Reference< css::ucb::XCommandEnvironment > utl::UCBContentHelper::getDefaultCommandEnvironment() +{ + css::uno::Reference< css::task::XInteractionHandler > xIH( + css::task::InteractionHandler::createWithParent( + comphelper::getProcessComponentContext(), nullptr ) ); + + css::uno::Reference< css::ucb::XProgressHandler > xProgress; + ucbhelper::CommandEnvironment* pCommandEnv = + new ::ucbhelper::CommandEnvironment( + new comphelper::SimpleFileAccessInteraction( xIH ), xProgress ); + + css::uno::Reference < css::ucb::XCommandEnvironment > xEnv( + static_cast< css::ucb::XCommandEnvironment* >(pCommandEnv), css::uno::UNO_QUERY ); + return xEnv; +} + bool utl::UCBContentHelper::IsDocument(OUString const & url) { try { return content(url).isDocument(); |