Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : *
9 : : * This file incorporates work covered by the following license notice:
10 : : *
11 : : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : : * contributor license agreements. See the NOTICE file distributed
13 : : * with this work for additional information regarding copyright
14 : : * ownership. The ASF licenses this file to you under the Apache
15 : : * License, Version 2.0 (the "License"); you may not use this file
16 : : * except in compliance with the License. You may obtain a copy of
17 : : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : : */
19 : :
20 : :
21 : : #include "MMozillaBootstrap.hxx"
22 : :
23 : : using namespace com::sun::star::uno;
24 : : using namespace com::sun::star::lang;
25 : : using namespace com::sun::star::mozilla;
26 : : using namespace connectivity::mozab;
27 : : #include <MNSFolders.hxx>
28 : : #include "MNSProfileDiscover.hxx"
29 : : #ifndef MINIMAL_PROFILEDISCOVER
30 : : # include "MNSProfileManager.hxx"
31 : : # include "MNSRunnable.hxx"
32 : : #endif
33 : : #include <MNSInit.hxx>
34 : :
35 : : static MozillaBootstrap *pMozillaBootstrap=NULL;
36 : 0 : static Reference<XMozillaBootstrap> xMozillaBootstrap;
37 : 0 : extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL OMozillaBootstrap_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory)
38 : : {
39 : 0 : if (!pMozillaBootstrap)
40 : : {
41 : 0 : pMozillaBootstrap=new connectivity::mozab::MozillaBootstrap( _rxFactory );
42 : 0 : pMozillaBootstrap->Init();
43 : 0 : xMozillaBootstrap = pMozillaBootstrap;
44 : : }
45 : 0 : return pMozillaBootstrap;
46 : : }
47 : :
48 : : // --------------------------------------------------------------------------------
49 : :
50 : :
51 : : // --------------------------------------------------------------------------------
52 : 0 : MozillaBootstrap::MozillaBootstrap(
53 : : const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory)
54 : 0 : : OMozillaBootstrap_BASE(m_aMutex), m_xMSFactory( _rxFactory )
55 : : {
56 : 0 : }
57 : : // -----------------------------------------------------------------------------
58 : 0 : MozillaBootstrap::~MozillaBootstrap()
59 : : {
60 : 0 : }
61 : : // -----------------------------------------------------------------------------
62 : 0 : void MozillaBootstrap::Init()
63 : : {
64 : 0 : sal_Bool aProfileExists=sal_False;
65 : :
66 : : #ifndef MINIMAL_PROFILEDISCOVER
67 : : //This must be call before any mozilla code
68 : : MNS_Init(aProfileExists);
69 : :
70 : : m_ProfileManager = new ProfileManager();
71 : : #else
72 : : (void)aProfileExists; /* avoid warning about unused parameter */
73 : : #endif
74 : 0 : m_ProfileAccess = new ProfileAccess();
75 : 0 : bootupProfile(::com::sun::star::mozilla::MozillaProductType_Mozilla,rtl::OUString());
76 : 0 : }
77 : :
78 : : // --------------------------------------------------------------------------------
79 : 0 : void MozillaBootstrap::disposing()
80 : : {
81 : 0 : ::osl::MutexGuard aGuard(m_aMutex);
82 : 0 : OMozillaBootstrap_BASE::disposing();
83 : 0 : }
84 : :
85 : : // static ServiceInfo
86 : : //------------------------------------------------------------------------------
87 : 0 : rtl::OUString MozillaBootstrap::getImplementationName_Static( ) throw(RuntimeException)
88 : : {
89 : 0 : return rtl::OUString(MOZAB_MozillaBootstrap_IMPL_NAME);
90 : : }
91 : : //------------------------------------------------------------------------------
92 : 0 : Sequence< ::rtl::OUString > MozillaBootstrap::getSupportedServiceNames_Static( ) throw (RuntimeException)
93 : : {
94 : : // which service is supported
95 : : // for more information @see com.sun.star.mozilla.MozillaBootstrap
96 : 0 : Sequence< ::rtl::OUString > aSNS( 1 );
97 : 0 : aSNS[0] = ::rtl::OUString( "com.sun.star.mozilla.MozillaBootstrap");
98 : 0 : return aSNS;
99 : : }
100 : :
101 : : //------------------------------------------------------------------
102 : 0 : ::rtl::OUString SAL_CALL MozillaBootstrap::getImplementationName( ) throw(RuntimeException)
103 : : {
104 : 0 : return getImplementationName_Static();
105 : : }
106 : :
107 : : //------------------------------------------------------------------
108 : 0 : sal_Bool SAL_CALL MozillaBootstrap::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
109 : : {
110 : 0 : Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames());
111 : 0 : const ::rtl::OUString* pSupported = aSupported.getConstArray();
112 : 0 : const ::rtl::OUString* pEnd = pSupported + aSupported.getLength();
113 : 0 : for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported)
114 : : ;
115 : :
116 : 0 : return pSupported != pEnd;
117 : : }
118 : :
119 : : //------------------------------------------------------------------
120 : 0 : Sequence< ::rtl::OUString > SAL_CALL MozillaBootstrap::getSupportedServiceNames( ) throw(RuntimeException)
121 : : {
122 : 0 : return getSupportedServiceNames_Static();
123 : : }
124 : :
125 : :
126 : : // XProfileDiscover
127 : 0 : ::sal_Int32 SAL_CALL MozillaBootstrap::getProfileCount( ::com::sun::star::mozilla::MozillaProductType product) throw (::com::sun::star::uno::RuntimeException)
128 : : {
129 : 0 : return m_ProfileAccess->getProfileCount(product);
130 : : }
131 : 0 : ::sal_Int32 SAL_CALL MozillaBootstrap::getProfileList( ::com::sun::star::mozilla::MozillaProductType product, ::com::sun::star::uno::Sequence< ::rtl::OUString >& list ) throw (::com::sun::star::uno::RuntimeException)
132 : : {
133 : 0 : return m_ProfileAccess->getProfileList(product,list);
134 : : }
135 : 0 : ::rtl::OUString SAL_CALL MozillaBootstrap::getDefaultProfile( ::com::sun::star::mozilla::MozillaProductType product ) throw (::com::sun::star::uno::RuntimeException)
136 : : {
137 : 0 : return m_ProfileAccess->getDefaultProfile(product);
138 : : }
139 : 0 : ::rtl::OUString SAL_CALL MozillaBootstrap::getProfilePath( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException)
140 : : {
141 : 0 : return m_ProfileAccess->getProfilePath(product,profileName);
142 : : }
143 : 0 : ::sal_Bool SAL_CALL MozillaBootstrap::isProfileLocked( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException)
144 : : {
145 : 0 : return m_ProfileAccess->isProfileLocked(product,profileName);
146 : : }
147 : 0 : ::sal_Bool SAL_CALL MozillaBootstrap::getProfileExists( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException)
148 : : {
149 : 0 : return m_ProfileAccess->getProfileExists(product,profileName);
150 : : }
151 : :
152 : : // XProfileManager
153 : 0 : ::sal_Int32 SAL_CALL MozillaBootstrap::bootupProfile( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException)
154 : : {
155 : : #ifndef MINIMAL_PROFILEDISCOVER
156 : : return m_ProfileManager->bootupProfile(product,profileName);
157 : : #else
158 : : (void)product; /* avoid warning about unused parameter */
159 : : (void)profileName; /* avoid warning about unused parameter */
160 : 0 : return -1;
161 : : #endif
162 : : }
163 : 0 : ::sal_Int32 SAL_CALL MozillaBootstrap::shutdownProfile( ) throw (::com::sun::star::uno::RuntimeException)
164 : : {
165 : : #ifndef MINIMAL_PROFILEDISCOVER
166 : : return m_ProfileManager->shutdownProfile();
167 : : #else
168 : 0 : return -1;
169 : : #endif
170 : : }
171 : 0 : ::com::sun::star::mozilla::MozillaProductType SAL_CALL MozillaBootstrap::getCurrentProduct( ) throw (::com::sun::star::uno::RuntimeException)
172 : : {
173 : : #ifndef MINIMAL_PROFILEDISCOVER
174 : : return m_ProfileManager->getCurrentProduct();
175 : : #else
176 : 0 : return ::com::sun::star::mozilla::MozillaProductType_Default;
177 : : #endif
178 : : }
179 : 0 : ::rtl::OUString SAL_CALL MozillaBootstrap::getCurrentProfile( ) throw (::com::sun::star::uno::RuntimeException)
180 : : {
181 : : #ifndef MINIMAL_PROFILEDISCOVER
182 : : return m_ProfileManager->getCurrentProfile();
183 : : #else
184 : 0 : return ::rtl::OUString();
185 : : #endif
186 : : }
187 : 0 : ::sal_Bool SAL_CALL MozillaBootstrap::isCurrentProfileLocked( ) throw (::com::sun::star::uno::RuntimeException)
188 : : {
189 : : #ifndef MINIMAL_PROFILEDISCOVER
190 : : return isProfileLocked(getCurrentProduct(),m_ProfileManager->getCurrentProfile());
191 : : #else
192 : 0 : return true;
193 : : #endif
194 : : }
195 : 0 : ::rtl::OUString SAL_CALL MozillaBootstrap::setCurrentProfile( ::com::sun::star::mozilla::MozillaProductType product, const ::rtl::OUString& profileName ) throw (::com::sun::star::uno::RuntimeException)
196 : : {
197 : : #ifndef MINIMAL_PROFILEDISCOVER
198 : : return m_ProfileManager->setCurrentProfile(product,profileName);
199 : : #else
200 : : (void)product; /* avoid warning about unused parameter */
201 : : (void)profileName; /* avoid warning about unused parameter */
202 : 0 : return ::rtl::OUString();
203 : : #endif
204 : : }
205 : :
206 : : // XProxyRunner
207 : 0 : ::sal_Int32 SAL_CALL MozillaBootstrap::Run( const ::com::sun::star::uno::Reference< ::com::sun::star::mozilla::XCodeProxy >& aCode ) throw (::com::sun::star::uno::RuntimeException)
208 : : {
209 : : #ifndef MINIMAL_PROFILEDISCOVER
210 : : ::rtl::OUString profileName = aCode->getProfileName();
211 : : ::rtl::OUString currProfileName = getCurrentProfile();
212 : : ::com::sun::star::mozilla::MozillaProductType currProduct = getCurrentProduct();
213 : :
214 : : //if client provides a profileName, we will use it
215 : : if (!profileName.isEmpty()
216 : : && ( aCode->getProductType() != currProduct || !profileName.equals(currProfileName)) )
217 : : setCurrentProfile(aCode->getProductType(),profileName);
218 : : MNSRunnable xRunnable;
219 : :
220 : : return xRunnable.StartProxy(aCode);
221 : : #else
222 : : (void)aCode; /* avoid warning about unused parameter */
223 : 0 : return -1;
224 : : #endif
225 : : }
226 : :
227 : : #ifdef MINIMAL_PROFILEDISCOVER
228 : : #include <cppuhelper/factory.hxx>
229 : : using ::com::sun::star::uno::Reference;
230 : : using ::com::sun::star::uno::Sequence;
231 : : using ::com::sun::star::lang::XSingleServiceFactory;
232 : : using ::com::sun::star::lang::XMultiServiceFactory;
233 : :
234 : 0 : static Reference< XInterface > SAL_CALL createInstance( const Reference< XMultiServiceFactory >& rServiceManager )
235 : : {
236 : 0 : MozillaBootstrap * pBootstrap = reinterpret_cast<MozillaBootstrap*>(OMozillaBootstrap_CreateInstance(rServiceManager));
237 : 0 : return *pBootstrap;
238 : : }
239 : :
240 : 0 : extern "C" SAL_DLLPUBLIC_EXPORT void* SAL_CALL component_getFactory(
241 : : const sal_Char* pImplementationName,
242 : : void* pServiceManager,
243 : : void* /*pRegistryKey*/)
244 : : {
245 : 0 : void* pRet = 0;
246 : :
247 : 0 : if (pServiceManager)
248 : : {
249 : 0 : ::rtl::OUString aImplName( ::rtl::OUString::createFromAscii( pImplementationName ) );
250 : 0 : Reference< XSingleServiceFactory > xFactory;
251 : 0 : if ( aImplName == "com.sun.star.comp.mozilla.MozillaBootstrap" )
252 : : {
253 : 0 : Sequence< ::rtl::OUString > aSNS( 1 );
254 : 0 : aSNS[0] = ::rtl::OUString( "com.sun.star.mozilla.MozillaBootstrap");
255 : :
256 : : xFactory = ::cppu::createSingleFactory(
257 : : reinterpret_cast< XMultiServiceFactory* > ( pServiceManager),
258 : 0 : aImplName, createInstance, aSNS );
259 : : }
260 : 0 : if ( xFactory.is() )
261 : : {
262 : 0 : xFactory->acquire();
263 : 0 : pRet = xFactory.get();
264 : 0 : }
265 : : }
266 : :
267 : 0 : return pRet;
268 : 0 : };
269 : :
270 : : #endif
271 : :
272 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|