diff options
5 files changed, 46 insertions, 24 deletions
diff --git a/include/ucbhelper/registerucb.hxx b/include/ucbhelper/registerucb.hxx index 89b1d005ca5e..b50d2f6165da 100644 --- a/include/ucbhelper/registerucb.hxx +++ b/include/ucbhelper/registerucb.hxx @@ -42,6 +42,10 @@ namespace ucbhelper { struct ContentProviderData { /** The UNO service name to use to instanciate the content provider. + + If it is the empty string, a null provider will be used (see the + documentation of the Provider argument to + com.sun.star.ucb.XContentProviderManager.registerContentProvider). */ OUString ServiceName; @@ -71,7 +75,10 @@ typedef std::vector< ContentProviderData > ContentProviderDataList; @param rServiceFactory A factory through which to obtain the required services. - @param rName The service name of the content provider. + @param rName The service name of the content provider. If it is the empty + string, a null provider will be used (see the documentation of the Provider + argument to + com.sun.star.ucb.XContentProviderManager.registerContentProvider). @param rArguments Any arguments to instantiate the content provider with. diff --git a/offapi/com/sun/star/ucb/XContentProviderManager.idl b/offapi/com/sun/star/ucb/XContentProviderManager.idl index 9720834f3290..aa6b4533bbcc 100644 --- a/offapi/com/sun/star/ucb/XContentProviderManager.idl +++ b/offapi/com/sun/star/ucb/XContentProviderManager.idl @@ -146,7 +146,7 @@ published interface XContentProviderManager: com::sun::star::uno::XInterface a content identifier (i.e., a URL). @returns - a content provider. + a content provider, or null. */ com::sun::star::ucb::XContentProvider queryContentProvider( [in] string Identifier ); diff --git a/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu b/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu index a3163905a87d..e9704d3ac0d6 100644 --- a/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu +++ b/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu @@ -188,6 +188,17 @@ <value/> </prop> </node> + <node oor:name="Provider900" oor:op="replace"> + <prop oor:name="ServiceName"> + <value/> + </prop> + <prop oor:name="URLTemplate"> + <value>private</value> + </prop> + <prop oor:name="Arguments"> + <value/> + </prop> + </node> <!-- We want the Provider to be the final fallback provider --> <node oor:name="Provider999" oor:op="replace" install:module="gio"> <prop oor:name="ServiceName"> diff --git a/officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs b/officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs index 9fb25e8b0c93..872177de0afd 100644 --- a/officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs +++ b/officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs @@ -28,7 +28,7 @@ </info> <prop oor:name="ServiceName" oor:type="xs:string"> <info> - <desc>Specifies the name of the UNO service to be used to instantiate the UCP.</desc> + <desc>Specifies the name of the UNO service to be used to instantiate the UCP. If it is the empty string, a null provider will be used (see the documentation of the Provider argument to com.sun.star.ucb.XContentProviderManager.registerContentProvider).</desc> </info> </prop> <prop oor:name="URLTemplate" oor:type="xs:string"> diff --git a/ucbhelper/source/provider/registerucb.cxx b/ucbhelper/source/provider/registerucb.cxx index bce135f0c812..a7b4384d61b1 100644 --- a/ucbhelper/source/provider/registerucb.cxx +++ b/ucbhelper/source/provider/registerucb.cxx @@ -58,31 +58,35 @@ registerAtUcb( copy(RTL_CONSTASCII_LENGTH("{noproxy}")) : rArguments); - // First, try to instantiate proxy for provider: uno::Reference< ucb::XContentProvider > xProvider; - if (!bNoProxy) + + if (!rName.isEmpty()) { - uno::Reference< ucb::XContentProviderFactory > xProxyFactory; - try + // First, try to instantiate proxy for provider: + if (!bNoProxy) { - xProxyFactory = ucb::ContentProviderProxyFactory::create( rxContext ); + uno::Reference< ucb::XContentProviderFactory > xProxyFactory; + try + { + xProxyFactory = ucb::ContentProviderProxyFactory::create( rxContext ); + } + catch (uno::Exception const &) {} + OSL_ENSURE(xProxyFactory.is(), "No ContentProviderProxyFactory"); + if (xProxyFactory.is()) + xProvider = xProxyFactory->createContentProvider(rName); } - catch (uno::Exception const &) {} - OSL_ENSURE(xProxyFactory.is(), "No ContentProviderProxyFactory"); - if (xProxyFactory.is()) - xProvider = xProxyFactory->createContentProvider(rName); - } - // Then, try to instantiate provider directly: - if (!xProvider.is()) - try - { - xProvider = uno::Reference< ucb::XContentProvider >( - rxContext->getServiceManager()->createInstanceWithContext(rName, rxContext), - uno::UNO_QUERY); - } - catch (uno::RuntimeException const &) { throw; } - catch (uno::Exception const &) {} + // Then, try to instantiate provider directly: + if (!xProvider.is()) + try + { + xProvider = uno::Reference< ucb::XContentProvider >( + rxContext->getServiceManager()->createInstanceWithContext(rName, rxContext), + uno::UNO_QUERY); + } + catch (uno::RuntimeException const &) { throw; } + catch (uno::Exception const &) {} + } uno::Reference< ucb::XParameterizedContentProvider > xParameterized(xProvider, uno::UNO_QUERY); @@ -104,7 +108,7 @@ registerAtUcb( } bool bSuccess = false; - if (rManager.is() && xProvider.is()) + if (rManager.is() && (rName.isEmpty() || xProvider.is())) { try { |