1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef UUI_IAHNDL_HXX 25 #define UUI_IAHNDL_HXX 26 27 #include <vector> 28 29 #include "osl/mutex.hxx" 30 #include "rtl/ustring.hxx" 31 32 #include "com/sun/star/uno/Reference.hxx" 33 #include "com/sun/star/uno/Sequence.hxx" 34 35 #include "com/sun/star/beans/Optional.hpp" 36 #include "com/sun/star/task/InteractionClassification.hpp" 37 38 #include "tools/solar.h" // sal_uInt16 39 #include "tools/errcode.hxx" // ErrCode 40 #include "tools/rc.hxx" // Resource 41 #include "tools/wintypes.hxx" // WinBits 42 43 namespace com { namespace sun { namespace star { 44 namespace awt { 45 class XWindow; 46 } 47 namespace embed { 48 class XStorage; 49 } 50 namespace lang { 51 class XMultiServiceFactory; 52 } 53 namespace security { 54 struct DocumentSignatureInformation; 55 } 56 namespace task { 57 class FutureDocumentVersionProductUpdateRequest; 58 class XInteractionContinuation; 59 class XInteractionHandler; 60 class XInteractionRequest; 61 } 62 namespace ucb { 63 class NameClashResolveRequest; 64 } 65 } } } 66 67 #include <hash_map> 68 69 class Window; 70 71 //============================================================================ 72 struct InteractionHandlerData 73 { 74 /** The UNO service name to use to instantiate the content provider. 75 */ 76 rtl::OUString ServiceName; 77 InteractionHandlerDataInteractionHandlerData78 InteractionHandlerData() {}; InteractionHandlerDataInteractionHandlerData79 InteractionHandlerData(const rtl::OUString & rService) 80 : ServiceName( rService ){} 81 }; 82 83 typedef std::vector< InteractionHandlerData > InteractionHandlerDataList; 84 85 typedef ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > Continuations; 86 87 typedef ::std::hash_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash > StringHashMap; 88 89 //============================================================================ 90 class UUIInteractionHelper 91 { 92 private: 93 mutable osl::Mutex m_aPropertyMutex; 94 ::com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > m_xServiceFactory; 95 ::com::sun::star::uno::Sequence< com::sun::star::uno::Any > m_aProperties; 96 StringHashMap m_aTypedCustomHandlers; 97 UUIInteractionHelper(UUIInteractionHelper &); // not implemented 98 void operator =(UUIInteractionHelper); // not implemented 99 100 public: 101 UUIInteractionHelper( 102 com::sun::star::uno::Reference< 103 com::sun::star::lang::XMultiServiceFactory > const & rServiceFactory, 104 com::sun::star::uno::Sequence< 105 com::sun::star::uno::Any > const & rArguments) 106 SAL_THROW(()); 107 UUIInteractionHelper( 108 com::sun::star::uno::Reference< 109 com::sun::star::lang::XMultiServiceFactory > const & rServiceFactory) 110 SAL_THROW(()); 111 112 ~UUIInteractionHelper() SAL_THROW(()); 113 114 bool 115 handleRequest( 116 com::sun::star::uno::Reference< 117 com::sun::star::task::XInteractionRequest > const & rRequest); 118 119 com::sun::star::beans::Optional< rtl::OUString > 120 getStringFromRequest( 121 com::sun::star::uno::Reference< 122 com::sun::star::task::XInteractionRequest > const & rRequest); 123 124 // Helper. 125 static ::rtl::OUString 126 replaceMessageWithArguments( 127 ::rtl::OUString aMessage, 128 std::vector< rtl::OUString > const & rArguments ); 129 130 private: 131 bool 132 handleRequest_impl( 133 com::sun::star::uno::Reference< 134 com::sun::star::task::XInteractionRequest > const & rRequest, 135 bool bObtainErrorStringOnly, 136 bool & bHasErrorString, 137 rtl::OUString & rErrorString); 138 139 static long 140 handlerequest(void* pHandleData, void* pInteractionHandler); 141 142 com::sun::star::beans::Optional< rtl::OUString > 143 getStringFromRequest_impl( 144 com::sun::star::uno::Reference< 145 com::sun::star::task::XInteractionRequest > const & rRequest); 146 147 static long 148 getstringfromrequest(void* pHandleData, void* pInteractionHandler); 149 150 Window * 151 getParentProperty() 152 SAL_THROW(()); 153 154 ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow> 155 getParentXWindow() const 156 SAL_THROW(()); 157 158 rtl::OUString 159 getContextProperty() 160 SAL_THROW(()); 161 162 com::sun::star::uno::Reference< com::sun::star::task::XInteractionHandler > 163 getInteractionHandler(); 164 165 bool handleTypedHandlerImplementations( 166 ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest > const & rRequest 167 ); 168 169 bool 170 tryOtherInteractionHandler( 171 com::sun::star::uno::Reference< 172 com::sun::star::task::XInteractionRequest > const & rRequest); 173 174 void 175 getInteractionHandlerList(InteractionHandlerDataList &rdataList); 176 177 static bool 178 isInformationalErrorMessageRequest( 179 com::sun::star::uno::Sequence< 180 com::sun::star::uno::Reference< 181 com::sun::star::task::XInteractionContinuation > > const & 182 rContinuations); 183 184 //===================================================================== 185 186 bool 187 handleInteractiveIOException( 188 com::sun::star::uno::Reference< 189 com::sun::star::task::XInteractionRequest > const & rRequest, 190 bool bObtainErrorStringOnly, 191 bool & bHasErrorString, 192 rtl::OUString & rErrorString); 193 194 bool 195 handleAuthenticationRequest( 196 com::sun::star::uno::Reference< 197 com::sun::star::task::XInteractionRequest > const & rRequest); 198 199 bool 200 handleCertificateValidationRequest( 201 com::sun::star::uno::Reference< 202 com::sun::star::task::XInteractionRequest > const & rRequest); 203 204 void 205 handleNameClashResolveRequest( 206 com::sun::star::ucb::NameClashResolveRequest const & rRequest, 207 com::sun::star::uno::Sequence< 208 com::sun::star::uno::Reference< 209 com::sun::star::task::XInteractionContinuation > > const & 210 rContinuations); 211 212 bool 213 handleMasterPasswordRequest( 214 com::sun::star::uno::Reference< 215 com::sun::star::task::XInteractionRequest > const & rRequest); 216 217 bool 218 handlePasswordRequest( 219 com::sun::star::uno::Reference< 220 com::sun::star::task::XInteractionRequest > const & rRequest); 221 222 bool 223 handleCookiesRequest( 224 com::sun::star::uno::Reference< 225 com::sun::star::task::XInteractionRequest > const & rRequest); 226 227 bool 228 handleNoSuchFilterRequest( 229 com::sun::star::uno::Reference< 230 com::sun::star::task::XInteractionRequest > const & rRequest); 231 232 bool 233 handleAmbigousFilterRequest( 234 com::sun::star::uno::Reference< 235 com::sun::star::task::XInteractionRequest > const & rRequest); 236 237 bool 238 handleFilterOptionsRequest( 239 com::sun::star::uno::Reference< 240 com::sun::star::task::XInteractionRequest > const & rRequest); 241 242 void 243 handleErrorHandlerRequest( 244 com::sun::star::task::InteractionClassification eClassification, 245 ErrCode nErrorCode, 246 std::vector< rtl::OUString > const & rArguments, 247 com::sun::star::uno::Sequence< 248 com::sun::star::uno::Reference< 249 com::sun::star::task::XInteractionContinuation > > const & 250 rContinuations, 251 bool bObtainErrorStringOnly, 252 bool & bHasErrorString, 253 rtl::OUString & rErrorString); 254 255 void 256 handleGenericErrorRequest( 257 sal_Int32 nErrorCode, 258 com::sun::star::uno::Sequence< 259 com::sun::star::uno::Reference< 260 com::sun::star::task::XInteractionContinuation > > const & 261 rContinuations, 262 bool bObtainErrorStringOnly, 263 bool & bHasErrorString, 264 rtl::OUString & rErrorString); 265 266 void 267 handleMacroConfirmRequest( 268 const ::rtl::OUString& aDocumentURL, 269 const ::com::sun::star::uno::Reference< 270 ::com::sun::star::embed::XStorage >& xZipStorage, 271 const ::rtl::OUString& aDocumentVersion, 272 const ::com::sun::star::uno::Sequence< 273 ::com::sun::star::security::DocumentSignatureInformation > 274 aSignInfo, 275 com::sun::star::uno::Sequence< 276 com::sun::star::uno::Reference< 277 com::sun::star::task::XInteractionContinuation > > const & 278 rContinuations); 279 280 void 281 handleFutureDocumentVersionUpdateRequest( 282 const ::com::sun::star::task::FutureDocumentVersionProductUpdateRequest& 283 _rRequest, 284 com::sun::star::uno::Sequence< 285 com::sun::star::uno::Reference< 286 com::sun::star::task::XInteractionContinuation > > const & 287 rContinuations); 288 289 void 290 handleBrokenPackageRequest( 291 std::vector< rtl::OUString > const & rArguments, 292 ::com::sun::star::uno::Sequence< 293 ::com::sun::star::uno::Reference< 294 ::com::sun::star::task::XInteractionContinuation > > const & 295 rContinuations, 296 bool bObtainErrorStringOnly, 297 bool & bHasErrorString, 298 rtl::OUString & rErrorString); 299 300 bool handleLockedDocumentRequest( 301 com::sun::star::uno::Reference< 302 com::sun::star::task::XInteractionRequest > const & rRequest); 303 304 bool handleChangedByOthersRequest( 305 com::sun::star::uno::Reference< 306 com::sun::star::task::XInteractionRequest > const & rRequest); 307 308 bool handleLockFileIgnoreRequest( 309 com::sun::star::uno::Reference< 310 com::sun::star::task::XInteractionRequest > const & rRequest); 311 312 bool handleCustomRequest( 313 const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& i_rRequest, 314 const ::rtl::OUString& i_rServiceName 315 ) const; 316 }; 317 318 class ErrorResource: private Resource 319 { 320 public: 321 inline ErrorResource(ResId & rResId) SAL_THROW(()): Resource(rResId) {} 322 323 inline ~ErrorResource() SAL_THROW(()) { FreeResource(); } 324 325 bool getString(ErrCode nErrorCode, rtl::OUString * pString) const 326 SAL_THROW(()); 327 }; 328 329 /* 330 class InteractionRequest 331 { 332 public: 333 InteractionRequest( 334 com::sun::star::uno::Reference< 335 com::sun::star::task::XInteractionRequest > const & rRequest) 336 : m_aRequest( rRequest ) {} 337 338 virtual bool toString( rtl::OUString & rString ) = 0; 339 virtual bool handle( rtl::OUString & rString ) = 0; 340 341 private: 342 com::sun::star::uno::Reference< 343 com::sun::star::task::XInteractionRequest > m_aRequest; 344 }; 345 */ 346 347 #endif // UUI_IAHNDL_HXX 348