From 70bb8c257e7fc402da60fa70109cece1fe4c69d1 Mon Sep 17 00:00:00 2001 From: Giuseppe Castagno Date: Thu, 17 Mar 2016 11:09:32 +0100 Subject: Related tdf#88502 Add default XCommandEnvironment to ... ... Content::getResourceType During WebDAV operation the css::ucb::XCommandEnvironment is almost always needed. Depending on the operation, sometimes the client doesn't set it, in order to disable the exception processing that takes part in ucbhelper::cancelCommandExecution. Change-Id: Ib4bf6a7ca3a902437cab9050c3e310342c655ff2 Reviewed-on: https://gerrit.libreoffice.org/23327 Tested-by: Jenkins Reviewed-by: jan iversen --- ucb/source/ucp/webdav-neon/webdavcontent.cxx | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx b/ucb/source/ucp/webdav-neon/webdavcontent.cxx index 50dc91cccfe0..50dce422bb68 100644 --- a/ucb/source/ucp/webdav-neon/webdavcontent.cxx +++ b/ucb/source/ucp/webdav-neon/webdavcontent.cxx @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -3436,6 +3437,27 @@ Content::ResourceType Content::getResourceType( } else { + // In case xEnv is present, uses the interaction handler provided + // in xEnv. + // In case xEnv is not present, supply a command env to PROPFIND() + // that contains an interaction handler in order to activate the + // credential dialog if the server request them. + // The command env is needed by lower level function for examples as + // NeonSession_CertificationNotify where it is used to check the server + // certificate or ask the user for a manual confirmation if the certificate + // needs the user visual check. + // xEnv is still used in cancelCommandExecution(), so the cancelling operates + // as the client application (e.g. framework) requested. + css::uno::Reference< css::ucb::XCommandEnvironment > xAuthEnv( xEnv ); + if( !xAuthEnv.is() ) + { + css:: uno::Reference< task::XInteractionHandler > xIH( + css::task::InteractionHandler::createWithParent( m_xContext, nullptr ), css::uno::UNO_QUERY_THROW ); + + xAuthEnv = css::ucb::CommandEnvironment::create( + m_xContext, xIH, css::uno::Reference< ucb::XProgressHandler >() ) ; + } + try { // Try to fetch some frequently used property value, e.g. those @@ -3452,7 +3474,7 @@ Content::ResourceType Content::getResourceType( ContentProperties::UCBNamesToDAVNames( aProperties, aPropNames ); - rResAccess->PROPFIND( DAVZERO, aPropNames, resources, xEnv ); + rResAccess->PROPFIND( DAVZERO, aPropNames, resources, xAuthEnv ); if ( resources.size() == 1 ) { -- cgit