[Libreoffice-commits] core.git: include/ucbhelper offapi/com officecfg/registry ucbhelper/source

Stephan Bergmann sbergman at redhat.com
Fri Jun 14 04:08:18 PDT 2013


 include/ucbhelper/registerucb.hxx                              |    9 +
 offapi/com/sun/star/ucb/XContentProviderManager.idl            |    2 
 officecfg/registry/data/org/openoffice/ucb/Configuration.xcu   |   11 ++
 officecfg/registry/schema/org/openoffice/ucb/Configuration.xcs |    2 
 ucbhelper/source/provider/registerucb.cxx                      |   46 +++++-----
 5 files changed, 46 insertions(+), 24 deletions(-)

New commits:
commit aa892d2b432319f949d0b45a0529036984f1aad7
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Jun 14 13:05:46 2013 +0200

    Fix support for "dummy" content providers
    
    ...and use it so that private: URLs are not needlessly passed to the gio or
    gnome-vfs "catch-all" UCPs.
    
    Change-Id: I85d100567d1641130449fe21ccd072bcc0ec0979

diff --git a/include/ucbhelper/registerucb.hxx b/include/ucbhelper/registerucb.hxx
index 89b1d00..b50d2f6 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 9720834..aa6b453 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 a316390..e9704d3 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 9fb25e8..872177d 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 bce135f..a7b4384 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
         {


More information about the Libreoffice-commits mailing list