xref: /AOO41X/main/svtools/source/misc/linkpolicy.cxx (revision a12ae337ec5ceb799fc055816d4155eeb3e45c1a)
1*a12ae337SPeter /**************************************************************
2*a12ae337SPeter  *
3*a12ae337SPeter  * Licensed to the Apache Software Foundation (ASF) under one
4*a12ae337SPeter  * or more contributor license agreements.  See the NOTICE file
5*a12ae337SPeter  * distributed with this work for additional information
6*a12ae337SPeter  * regarding copyright ownership.  The ASF licenses this file
7*a12ae337SPeter  * to you under the Apache License, Version 2.0 (the
8*a12ae337SPeter  * "License"); you may not use this file except in compliance
9*a12ae337SPeter  * with the License.  You may obtain a copy of the License at
10*a12ae337SPeter  *
11*a12ae337SPeter  *   http://www.apache.org/licenses/LICENSE-2.0
12*a12ae337SPeter  *
13*a12ae337SPeter  * Unless required by applicable law or agreed to in writing,
14*a12ae337SPeter  * software distributed under the License is distributed on an
15*a12ae337SPeter  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a12ae337SPeter  * KIND, either express or implied.  See the License for the
17*a12ae337SPeter  * specific language governing permissions and limitations
18*a12ae337SPeter  * under the License.
19*a12ae337SPeter  *
20*a12ae337SPeter  *************************************************************/
21*a12ae337SPeter 
22*a12ae337SPeter // MARKER(update_precomp.py): autogen include statement, do not remove
23*a12ae337SPeter #include "precompiled_svtools.hxx"
24*a12ae337SPeter 
25*a12ae337SPeter #include <com/sun/star/document/XLinkAuthorizer.hpp>
26*a12ae337SPeter #include <com/sun/star/frame/XController.hpp>
27*a12ae337SPeter #include <com/sun/star/frame/XDesktop.hpp>
28*a12ae337SPeter #include <com/sun/star/frame/XFrame.hpp>
29*a12ae337SPeter #include <com/sun/star/frame/XModel.hpp>
30*a12ae337SPeter #include <com/sun/star/lang/XMultiServiceFactory.hpp>
31*a12ae337SPeter #include <com/sun/star/uno/Reference.hxx>
32*a12ae337SPeter #include <ucbhelper/contentbroker.hxx>
33*a12ae337SPeter 
34*a12ae337SPeter #include <svtools/linkpolicy.hxx>
35*a12ae337SPeter 
36*a12ae337SPeter using namespace ::com::sun::star;
37*a12ae337SPeter 
38*a12ae337SPeter namespace svt { namespace linkpolicy {
39*a12ae337SPeter 
mayFollowDocumentLink(::rtl::OUString const & rUrl)40*a12ae337SPeter bool mayFollowDocumentLink( ::rtl::OUString const & rUrl )
41*a12ae337SPeter {
42*a12ae337SPeter     if ( rUrl.getLength() == 0 )
43*a12ae337SPeter         return false;
44*a12ae337SPeter 
45*a12ae337SPeter     // These schemes reach process state or the object model; no permission
46*a12ae337SPeter     // makes them a sensible target for document content.
47*a12ae337SPeter     if ( isVendorUrl( rUrl ) )
48*a12ae337SPeter         return false;
49*a12ae337SPeter 
50*a12ae337SPeter     /* Ask the current document, which needs a ServiceManager to reach.
51*a12ae337SPeter        Because utl::UcbStreamHelper relies on the ::ucbhelper::ContentBroker
52*a12ae337SPeter        instance, use its ServiceManager. */
53*a12ae337SPeter     ::ucbhelper::ContentBroker* pBroker = ::ucbhelper::ContentBroker::get();
54*a12ae337SPeter     if ( pBroker )
55*a12ae337SPeter     {
56*a12ae337SPeter         uno::Reference< lang::XMultiServiceFactory > xFactory =
57*a12ae337SPeter             pBroker->getServiceManager();
58*a12ae337SPeter         if ( xFactory.is() )
59*a12ae337SPeter         {
60*a12ae337SPeter             uno::Any desktop( xFactory->createInstance(
61*a12ae337SPeter                 ::rtl::OUString::createFromAscii( "com.sun.star.frame.Desktop" ) ) );
62*a12ae337SPeter             uno::Reference< frame::XDesktop > xDesktop( desktop, uno::UNO_QUERY );
63*a12ae337SPeter             if ( xDesktop.is() )
64*a12ae337SPeter             {
65*a12ae337SPeter                 uno::Reference< frame::XFrame > xFrame( xDesktop->getCurrentFrame() );
66*a12ae337SPeter                 if ( xFrame.is() )
67*a12ae337SPeter                 {
68*a12ae337SPeter                     uno::Reference< frame::XController > xController(
69*a12ae337SPeter                         xFrame->getController() );
70*a12ae337SPeter                     if ( xController.is() )
71*a12ae337SPeter                     {
72*a12ae337SPeter                         uno::Reference< frame::XModel > xModel(
73*a12ae337SPeter                             xController->getModel() );
74*a12ae337SPeter                         if ( xModel.is() )
75*a12ae337SPeter                         {
76*a12ae337SPeter                             uno::Reference< document::XLinkAuthorizer >
77*a12ae337SPeter                                 xLinkAuthorizer( xModel, uno::UNO_QUERY );
78*a12ae337SPeter                             if ( xLinkAuthorizer.is() )
79*a12ae337SPeter                                 return xLinkAuthorizer->authorizeLinks( rUrl );
80*a12ae337SPeter                         }
81*a12ae337SPeter                     }
82*a12ae337SPeter                 }
83*a12ae337SPeter             }
84*a12ae337SPeter         }
85*a12ae337SPeter     }
86*a12ae337SPeter 
87*a12ae337SPeter     // No document to ask: behave as the linked-graphic loader always has.
88*a12ae337SPeter     return true;
89*a12ae337SPeter }
90*a12ae337SPeter 
91*a12ae337SPeter } }
92