summaryrefslogtreecommitdiff
path: root/desktop/source/deployment/registry/executable/dp_executable.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/source/deployment/registry/executable/dp_executable.cxx')
-rw-r--r--desktop/source/deployment/registry/executable/dp_executable.cxx344
1 files changed, 0 insertions, 344 deletions
diff --git a/desktop/source/deployment/registry/executable/dp_executable.cxx b/desktop/source/deployment/registry/executable/dp_executable.cxx
deleted file mode 100644
index 035e21e236..0000000000
--- a/desktop/source/deployment/registry/executable/dp_executable.cxx
+++ /dev/null
@@ -1,344 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_desktop.hxx"
-
-#include "dp_misc.h"
-#include "dp_backend.h"
-#include "dp_ucb.h"
-#include "dp_interact.h"
-#include "rtl/string.hxx"
-#include "osl/file.hxx"
-#include "ucbhelper/content.hxx"
-#include "comphelper/servicedecl.hxx"
-#include "svl/inettype.hxx"
-#include "cppuhelper/implbase1.hxx"
-#include "dp_executablebackenddb.hxx"
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::ucb;
-using namespace dp_misc;
-using ::rtl::OUString;
-
-namespace dp_registry {
-namespace backend {
-namespace executable {
-namespace {
-
-class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
-{
- class ExecutablePackageImpl : public ::dp_registry::backend::Package
- {
- BackendImpl * getMyBackend() const;
-
- // Package
- virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
- ::osl::ResettableMutexGuard & guard,
- ::rtl::Reference<dp_misc::AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv );
- virtual void processPackage_(
- ::osl::ResettableMutexGuard & guard,
- bool registerPackage,
- bool startup,
- ::rtl::Reference<dp_misc::AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv );
-
- bool getFileAttributes(sal_uInt64& out_Attributes);
- bool isUrlTargetInExtension();
-
- public:
- inline ExecutablePackageImpl(
- ::rtl::Reference<PackageRegistryBackend> const & myBackend,
- OUString const & url, OUString const & name,
- Reference<deployment::XPackageTypeInfo> const & xPackageType,
- bool bRemoved, OUString const & identifier)
- : Package( myBackend, url, name, name /* display-name */,
- xPackageType, bRemoved, identifier)
- {}
- };
- friend class ExecutablePackageImpl;
-
- typedef ::boost::unordered_map< OUString, Reference<XInterface>,
- ::rtl::OUStringHash > t_string2object;
-
- // PackageRegistryBackend
- virtual Reference<deployment::XPackage> bindPackage_(
- OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
- OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv );
-
- void addDataToDb(OUString const & url);
- bool hasActiveEntry(OUString const & url);
- void revokeEntryFromDb(OUString const & url);
-
- Reference<deployment::XPackageTypeInfo> m_xExecutableTypeInfo;
- std::auto_ptr<ExecutableBackendDb> m_backendDb;
-public:
- BackendImpl( Sequence<Any> const & args,
- Reference<XComponentContext> const & xComponentContext );
-
- // XPackageRegistry
- virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL
- getSupportedPackageTypes() throw (RuntimeException);
- virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType)
- throw (deployment::DeploymentException,
- uno::RuntimeException);
-
- using PackageRegistryBackend::disposing;
-};
-
-
-BackendImpl::BackendImpl(
- Sequence<Any> const & args,
- Reference<XComponentContext> const & xComponentContext )
- : PackageRegistryBackend( args, xComponentContext ),
- m_xExecutableTypeInfo(new Package::TypeInfo(
- OUSTR("application/vnd.sun.star.executable"),
- OUSTR(""),
- OUSTR("Executable"),
- RID_IMG_COMPONENT ) )
-{
- if (!transientMode())
- {
- OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
- m_backendDb.reset(
- new ExecutableBackendDb(getComponentContext(), dbFile));
- }
-}
-
-void BackendImpl::addDataToDb(OUString const & url)
-{
- if (m_backendDb.get())
- m_backendDb->addEntry(url);
-}
-
-void BackendImpl::revokeEntryFromDb(OUString const & url)
-{
- if (m_backendDb.get())
- m_backendDb->revokeEntry(url);
-}
-
-bool BackendImpl::hasActiveEntry(OUString const & url)
-{
- if (m_backendDb.get())
- return m_backendDb->hasActiveEntry(url);
- return false;
-}
-
-
-// XPackageRegistry
-Sequence< Reference<deployment::XPackageTypeInfo> >
-BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
-{
- return Sequence<Reference<deployment::XPackageTypeInfo> >(
- & m_xExecutableTypeInfo, 1);
-}
-
-void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/)
- throw (deployment::DeploymentException,
- uno::RuntimeException)
-{
- if (m_backendDb.get())
- m_backendDb->removeEntry(url);
-}
-
-// PackageRegistryBackend
-Reference<deployment::XPackage> BackendImpl::bindPackage_(
- OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
- OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
-{
- if (mediaType.getLength() == 0)
- {
- throw lang::IllegalArgumentException(
- StrCannotDetectMediaType::get() + url,
- static_cast<OWeakObject *>(this), static_cast<sal_Int16>(-1) );
- }
-
- String type, subType;
- INetContentTypeParameterList params;
- if (INetContentTypes::parse( mediaType, type, subType, &params ))
- {
- if (type.EqualsIgnoreCaseAscii("application"))
- {
- OUString name;
- if (!bRemoved)
- {
- ::ucbhelper::Content ucbContent( url, xCmdEnv );
- name = ucbContent.getPropertyValue(
- dp_misc::StrTitle::get() ).get<OUString>();
- }
- if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.executable"))
- {
- return new BackendImpl::ExecutablePackageImpl(
- this, url, name, m_xExecutableTypeInfo, bRemoved,
- identifier);
- }
- }
- }
- return Reference<deployment::XPackage>();
-}
-
-
-
-// Package
-BackendImpl * BackendImpl::ExecutablePackageImpl::getMyBackend() const
-{
- BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
- if (NULL == pBackend)
- {
- //May throw a DisposedException
- check();
- //We should never get here...
- throw RuntimeException(
- OUSTR("Failed to get the BackendImpl"),
- static_cast<OWeakObject*>(const_cast<ExecutablePackageImpl *>(this)));
- }
- return pBackend;
-}
-
-beans::Optional< beans::Ambiguous<sal_Bool> >
-BackendImpl::ExecutablePackageImpl::isRegistered_(
- ::osl::ResettableMutexGuard &,
- ::rtl::Reference<dp_misc::AbortChannel> const &,
- Reference<XCommandEnvironment> const & )
-{
- bool registered = getMyBackend()->hasActiveEntry(getURL());
- return beans::Optional< beans::Ambiguous<sal_Bool> >(
- sal_True /* IsPresent */,
- beans::Ambiguous<sal_Bool>(
- registered, sal_False /* IsAmbiguous */ ) );
-}
-
-void BackendImpl::ExecutablePackageImpl::processPackage_(
- ::osl::ResettableMutexGuard &,
- bool doRegisterPackage,
- bool /*startup*/,
- ::rtl::Reference<dp_misc::AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & /*xCmdEnv*/ )
-{
- checkAborted(abortChannel);
- if (doRegisterPackage)
- {
- if (!isUrlTargetInExtension())
- {
- OSL_ASSERT(0);
- return;
- }
- sal_uInt64 attributes = 0;
- //Setting the executable attribut does not affect executables on Windows
- if (getFileAttributes(attributes))
- {
- if(getMyBackend()->m_context.equals(OUSTR("user")))
- attributes |= osl_File_Attribute_OwnExe;
- else if (getMyBackend()->m_context.equals(OUSTR("shared")))
- attributes |= (osl_File_Attribute_OwnExe | osl_File_Attribute_GrpExe
- | osl_File_Attribute_OthExe);
- else if (!getMyBackend()->m_context.equals(OUSTR("bundled"))
- && !getMyBackend()->m_context.equals(OUSTR("bundled_prereg")))
- //Bundled extension are required to be in the properly
- //installed. That is an executable must have the right flags
- OSL_ASSERT(0);
-
- //This won't have affect on Windows
- osl::File::setAttributes(
- dp_misc::expandUnoRcUrl(m_url), attributes);
- }
- getMyBackend()->addDataToDb(getURL());
- }
- else
- {
- getMyBackend()->revokeEntryFromDb(getURL());
- }
-}
-
-//We currently cannot check if this XPackage represents a content of a particular extension
-//But we can check if we are within $UNO_USER_PACKAGES_CACHE etc.
-//Done for security reasons. For example an extension manifest could contain a path to
-//an executable outside the extension.
-bool BackendImpl::ExecutablePackageImpl::isUrlTargetInExtension()
-{
- bool bSuccess = false;
- OUString sExtensionDir;
- if(getMyBackend()->m_context.equals(OUSTR("user")))
- sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_USER_PACKAGES_CACHE"));
- else if (getMyBackend()->m_context.equals(OUSTR("shared")))
- sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_SHARED_PACKAGES_CACHE"));
- else if (getMyBackend()->m_context.equals(OUSTR("bundled"))
- || getMyBackend()->m_context.equals(OUSTR("bundled_prereg")))
- sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$BUNDLED_EXTENSIONS"));
- else
- OSL_ASSERT(0);
- //remove file ellipses
- if (osl::File::E_None == osl::File::getAbsoluteFileURL(OUString(), sExtensionDir, sExtensionDir))
- {
- OUString sFile;
- if (osl::File::E_None == osl::File::getAbsoluteFileURL(
- OUString(), dp_misc::expandUnoRcUrl(m_url), sFile))
- {
- if (sal_True == sFile.match(sExtensionDir, 0))
- bSuccess = true;
- }
- }
- return bSuccess;
-}
-
-bool BackendImpl::ExecutablePackageImpl::getFileAttributes(sal_uInt64& out_Attributes)
-{
- bool bSuccess = false;
- const OUString url(dp_misc::expandUnoRcUrl(m_url));
- osl::DirectoryItem item;
- if (osl::FileBase::E_None == osl::DirectoryItem::get(url, item))
- {
- osl::FileStatus aStatus(osl_FileStatus_Mask_Attributes);
- if( osl::FileBase::E_None == item.getFileStatus(aStatus))
- {
- out_Attributes = aStatus.getAttributes();
- bSuccess = true;
- }
- }
- return bSuccess;
-}
-
-
-
-} // anon namespace
-
-namespace sdecl = comphelper::service_decl;
-sdecl::class_<BackendImpl, sdecl::with_args<true> > serviceBI;
-extern sdecl::ServiceDecl const serviceDecl(
- serviceBI,
- "com.sun.star.comp.deployment.executable.PackageRegistryBackend",
- BACKEND_SERVICE_NAME );
-
-} // namespace component
-} // namespace backend
-} // namespace dp_registry
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */