#git:framework/web/wrt-installer
Name: wrt-installer
Summary: Installer for tizen Webruntime
-Version: 0.1.121
+Version: 0.1.123
Release: 1
Group: Development/Libraries
License: Apache License, Version 2.0
${INSTALLER_JOBS}/widget_uninstall/task_db_update.cpp
${INSTALLER_JOBS}/widget_uninstall/task_smack.cpp
${INSTALLER_JOBS}/widget_uninstall/task_uninstall_ospsvc.cpp
- ${INSTALLER_JOBS}/widget_uninstall/task_delete_certificates.cpp
+ ${INSTALLER_JOBS}/widget_uninstall/task_delete_pkginfo.cpp
${INSTALLER_SRC_DIR}/logic/installer_logic.cpp
${INSTALLER_SRC_DIR}/logic/installer_controller.cpp
${INSTALLER_SRC_DIR}/misc/wac_widget_id.cpp
#include <directory_api.h>
#include <sys/stat.h>
+#include <unistd.h>
#include <dirent.h>
#include <fstream>
#include <dpl/log/log.h>
writeAttribute(writer, "xmlns", "http://tizen.org/ns/packages");
writeAttribute(writer, "package", this->package);
writeAttribute(writer, "type", this->type);
+ writeAttribute(writer, "root_path", this->rootPath);
writeAttribute(writer, "version", this->version);
if (!this->installLocation.IsNull()) {
writeAttribute(writer, "install-location", (*this->installLocation));
* errors (related to usage of not allowed characters in given places).
*/
typedef DPL::String NcnameType, NmtokenType, AnySimpleType, LangType;
-typedef DPL::String OperationType, MimeType, UriType, TypeType, PackageType;
+typedef DPL::String OperationType, MimeType, UriType, TypeType, PackageType, RootPathType;
typedef DPL::OptionalString InstallLocationType, CategoriesType;
typedef DPL::String AppCategoryType;
typedef DPL::OptionalString KeyType, ValueType;
{
this->version = x;
}
+ void setRootPath(const RootPathType &x)
+ {
+ this->rootPath = x;
+ }
void setStoreClientId(const NcnameType &x)
{
this->storeClientId= x;
NcnameType package;
PackageType type;
NmtokenType version;
+ RootPathType rootPath;
std::list<Account> account;
PrivilegeType privileges;
NcnameType storeClientId;
#include <cstring>
#include <string>
#include <sstream>
+#include <unistd.h>
#include <dpl/assert.h>
#include <appcore-common.h> //TODO is it necessary here?
#include <pcrecpp.h>
<< "[" << DPL::GetErrnoString(error) << "]");
}
#endif
+
+ // creation of box symlink
+ ConfigParserData::LiveboxList& liveboxList =
+ m_context.widgetConfig.configInfo.m_livebox;
+ if (!liveboxList.empty()) {
+ std::string boxExec = "/usr/bin/WebProcess";
+ std::string boxSymlink = m_context.locations->getExecFile();
+ boxSymlink += ".d-box";
+
+ if (symlink(boxExec.c_str(), boxSymlink.c_str()) != 0) {
+ if (errno) {
+ LogPedantic("Failed to make a symbolic name for a file "
+ << "[" << DPL::GetErrnoString(errno) << "]");
+ }
+ }
+ }
+
m_context.job->UpdateProgress(
InstallerContext::INSTALL_CREATE_EXECFILE,
"Widget execfile creation Finished");
targetFile << (**boxIt).m_liveboxId << ".";
targetFile << DPL::ToUTF8String((*sizeIt).m_size) << "." << DEFAULT_PREVIEW_NAME;
- DynamicBoxFileCopy(sourceFile.str(), targetFile.str());
+ copyDynamicBoxFile(sourceFile.str(), targetFile.str());
// clear stream objects
sourceFile.str("");
targetFile << m_context.locations->getSharedDataDir() << "/";
targetFile << (**boxIt).m_liveboxId << "." << DEFAULT_ICON_NAME;
- DynamicBoxFileCopy(sourceFile.str(), targetFile.str());
+ copyDynamicBoxFile(sourceFile.str(), targetFile.str());
// clear stream objects
sourceFile.str("");
"Livebox files copy Finished");
}
-void TaskManifestFile::DynamicBoxFileCopy(const std::string& sourceFile,
+void TaskManifestFile::copyDynamicBoxFile(const std::string& sourceFile,
const std::string& targetFile)
{
Try
}
}
+bool TaskManifestFile::addBoxUiApplication(Manifest& manifest)
+{
+ UiApplication uiApp;
+ std::string postfix = ".d-box";
+ static bool isAdded = false;
+
+ Try
+ {
+ if (isAdded) {
+ LogDebug("UiApplication for d-box is already added");
+ return false;
+ }
+ uiApp.setNodisplay(true);
+ uiApp.setTaskmanage(false);
+ uiApp.setMultiple(false);
+ setWidgetName(manifest, uiApp);
+ setWidgetIcons(uiApp);
+
+ // appid for box is like [webapp id].d-box
+ setWidgetIds(manifest, uiApp, postfix);
+ // executable path for box is like [app path]/bin/[webapp id].d-box
+ setWidgetExecPath(uiApp, postfix);
+ manifest.addUiApplication(uiApp);
+ isAdded = true;
+
+ return true;
+ }
+ Catch(DPL::Exception)
+ {
+ LogError("Adding UiApplication on xml is failed.");
+ isAdded = false;
+ return false;
+ }
+}
+
void TaskManifestFile::stepBackupIconFiles()
{
LogDebug("Backup Icon Files");
void TaskManifestFile::setWidgetManifest(Manifest & manifest)
{
manifest.setPackage(m_context.widgetConfig.tzPkgid);
+ manifest.setRootPath(DPL::FromUTF8String(
+ m_context.locations->getPackageInstallationDir()));
if (!!m_context.widgetConfig.version) {
manifest.setVersion(*m_context.widgetConfig.version);
void TaskManifestFile::setLiveBoxInfo(Manifest& manifest)
{
- FOREACH(it, m_context.widgetConfig.configInfo.m_livebox) {
+ ConfigParserData::LiveboxList& liveboxList =
+ m_context.widgetConfig.configInfo.m_livebox;
+
+ if (liveboxList.empty()) {
+ LogDebug("no livebox");
+ return;
+ }
+
+ if (!addBoxUiApplication(manifest)) {
+ LogDebug("error during adding UiApplication for d-box");
+ return;
+ }
+
+ FOREACH(it, liveboxList) {
LogDebug("setLiveBoxInfo");
LiveBoxInfo liveBox;
DPL::Optional<WrtDB::ConfigParserData::LiveboxInfo> ConfigInfo = *it;
const DPL::OptionalString& tag,
const DPL::String& language, const std::string &extension,
bool & defaultIconSaved);
- void DynamicBoxFileCopy(const std::string& sourceFile,
+ void copyDynamicBoxFile(const std::string& sourceFile,
const std::string& targetFile);
+ bool addBoxUiApplication(Manifest& manifest);
//for widget update
void backupIconFiles();
#include <widget_uninstall/task_remove_custom_handlers.h>
#include <widget_uninstall/task_smack.h>
#include <widget_uninstall/task_uninstall_ospsvc.h>
-#include <widget_uninstall/task_delete_certificates.h>
+#include <widget_uninstall/task_delete_pkginfo.h>
#include <dpl/wrt-dao-ro/global_config.h>
#include <pkg-manager/pkgmgr_signal.h>
#include <app2ext_interface.h>
LogDebug("Widget model exists. App id : " << m_context.tzAppid);
- AddTask(new TaskSmack(m_context));
- AddTask(new TaskCheck(m_context));
-
- if (dao.getPackagingType() == PKG_TYPE_HYBRID_WEB_APP) {
- AddTask(new TaskUninstallOspsvc(m_context));
- }
- AddTask(new TaskRemoveFiles(m_context));
- AddTask(new TaskDbUpdate(m_context));
- AddTask(new TaskRemoveCustomHandlers(m_context));
- AddTask(new TaskDeleteCertificates(m_context));
-
// send start signal of pkgmgr
if (getInstallerStruct().pkgmgrInterface->setPkgname(m_context.tzPkgid))
{
PKGMGR_START_KEY,
PKGMGR_START_UNINSTALL);
}
+
+ AddTask(new TaskCheck(m_context));
+ AddTask(new TaskDeletePkgInfo(m_context));
+ AddTask(new TaskDbUpdate(m_context));
+ AddTask(new TaskSmack(m_context));
+
+ if (dao.getPackagingType() == PKG_TYPE_HYBRID_WEB_APP) {
+ AddTask(new TaskUninstallOspsvc(m_context));
+ }
+ AddTask(new TaskRemoveCustomHandlers(m_context));
+ AddTask(new TaskRemoveFiles(m_context));
} else if (WidgetStatus::NOT_INSTALLED == status ||
WidgetStatus::PREALOAD == status) {
AddTask(new UninstallerTaskFail(status));
#include <widget_uninstall/job_widget_uninstall.h>
#include <widget_uninstall/widget_uninstall_errors.h>
#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
+#include <dpl/utils/wrt_utility.h>
+#include <dpl/utils/path.h>
#include <ace_api_install.h>
#include <dpl/assert.h>
#include <ace-common/ace_api_common.h>
m_context(context)
{
AddStep(&TaskDbUpdate::StartStep);
+ AddStep(&TaskDbUpdate::StepRemoveExternalLocations);
AddStep(&TaskDbUpdate::StepDbUpdate);
AddStep(&TaskDbUpdate::StepLiveboxDBDelete);
AddStep(&TaskDbUpdate::EndStep);
}
}
+void TaskDbUpdate::StepRemoveExternalLocations()
+{
+ if (!m_context.removeAbnormal) {
+ WidgetDAO dao(DPL::FromUTF8String(m_context.tzAppid));
+ LogDebug("Removing external locations:");
+ WrtDB::ExternalLocationList externalPaths = dao.getWidgetExternalLocations();
+ FOREACH(file, externalPaths)
+ {
+ DPL::Utils::Path path(*file);
+ if(path.Exists()){
+ if(path.IsFile()){
+ LogDebug(" -> " << path.Fullpath());
+ Try{
+ DPL::Utils::Remove(path);
+ }Catch(DPL::Utils::Path::BaseException){
+ LogError("Failed to remove the file: " << path.Fullpath());
+ }
+ } else if (path.IsDir()){
+ LogDebug(" -> " << path.Fullpath());
+ Try{
+ DPL::Utils::Remove(path);
+ }Catch(DPL::Utils::Path::BaseException){
+ Throw(Jobs::WidgetUninstall::TaskDbUpdate::
+ Exception::RemoveFilesFailed);
+ }
+ }
+ }else{
+ LogWarning(" -> " << path.Fullpath() << "(no such a path)");
+ }
+ }
+ dao.unregisterAllExternalLocations();
+ }
+}
+
void TaskDbUpdate::StartStep()
{
LogDebug("--------- <TaskDbUpdate> : START ----------");
public:
DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
DECLARE_EXCEPTION_TYPE(Base, DbStepFailed)
+ DECLARE_EXCEPTION_TYPE(Base, RemoveFilesFailed)
};
UninstallerContext& m_context;
private:
void StepDbUpdate();
void StepLiveboxDBDelete();
+ void StepRemoveExternalLocations();
void StartStep();
void EndStep();
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file task_delete_certificates.cpp
- * @author Leerang Song(leerang.song@samsung.com)
- * @version 1.0
- * @brief Implementation file for uninstaller delete certi info from pkgmgr
- */
-
-#include <widget_uninstall/task_delete_certificates.h>
-#include <widget_uninstall/job_widget_uninstall.h>
-#include <widget_uninstall/widget_uninstall_errors.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <pkgmgr_installer.h>
-#include <dpl/assert.h>
-
-namespace Jobs {
-namespace WidgetUninstall {
-TaskDeleteCertificates::TaskDeleteCertificates(
- UninstallerContext& context) :
- DPL::TaskDecl<TaskDeleteCertificates>(this),
- m_context(context)
-{
- AddStep(&TaskDeleteCertificates::StartStep);
- AddStep(&TaskDeleteCertificates::StepDeleteCertificates);
- AddStep(&TaskDeleteCertificates::EndStep);
-}
-
-TaskDeleteCertificates::~TaskDeleteCertificates()
-{}
-
-void TaskDeleteCertificates::StepDeleteCertificates()
-{
- if ((pkgmgr_installer_delete_certinfo(
- const_cast<char*>((m_context.tzAppid).c_str()))) < 0)
- {
- LogError("pkgmgr_installer_delete_certinfo fail");
- }
-}
-
-void TaskDeleteCertificates::StartStep()
-{
- LogDebug("--------- <TaskDeleteCertificates> : START ----------");
-}
-
-void TaskDeleteCertificates::EndStep()
-{
- LogDebug("--------- <TaskDeleteCertificates> : END ----------");
-}
-} //namespace WidgetUninstall
-} //namespace Jobs
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file task_delete_pkginfo.cpp
+ * @author Leerang Song(leerang.song@samsung.com)
+ * @version 1.0
+ * @brief Implementation file for uninstaller delete package information
+ */
+
+#include <string.h>
+#include <widget_uninstall/task_delete_pkginfo.h>
+#include <widget_uninstall/job_widget_uninstall.h>
+#include <widget_uninstall/widget_uninstall_errors.h>
+#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
+#include <pkgmgr/pkgmgr_parser.h>
+#include <dpl/assert.h>
+#include <dpl/utils/wrt_utility.h>
+#include <dpl/utils/path.h>
+
+namespace Jobs {
+namespace WidgetUninstall {
+TaskDeletePkgInfo::TaskDeletePkgInfo(
+ UninstallerContext& context) :
+ DPL::TaskDecl<TaskDeletePkgInfo>(this),
+ m_context(context)
+{
+ AddStep(&TaskDeletePkgInfo::StartStep);
+ AddStep(&TaskDeletePkgInfo::StepDeletePkgInfo);
+ AddStep(&TaskDeletePkgInfo::EndStep);
+}
+
+void TaskDeletePkgInfo::StartStep()
+{
+ LogDebug("--------- <TaskDeletePkgInfo> : START ----------");
+}
+
+void TaskDeletePkgInfo::EndStep()
+{
+ LogDebug("--------- <TaskDeletePkgInfo> : END ----------");
+}
+
+void TaskDeletePkgInfo::StepDeletePkgInfo()
+{
+ std::ostringstream manifest_name;
+ manifest_name << m_context.tzPkgid << ".xml";
+ DPL::Utils::Path destFile;
+ const DPL::Utils::Path PRELOAD_INSTALLED_PATH("/usr/apps");
+ const DPL::Utils::Path USR_PACKAGES_PATH("/usr/share/packages");
+ const DPL::Utils::Path OPT_PACKAGES_PATH("/opt/share/packages");
+ if (0 == (m_context.installedPath.Fullpath()).compare(0,
+ PRELOAD_INSTALLED_PATH.Fullpath().length(),
+ PRELOAD_INSTALLED_PATH.Fullpath())) {
+ LogDebug("This widget is preloaded.");
+ destFile = USR_PACKAGES_PATH;
+ } else {
+ destFile = OPT_PACKAGES_PATH;
+ }
+ destFile /= manifest_name.str();
+ DPL::Utils::Path pre_manifest = USR_PACKAGES_PATH;
+ pre_manifest /= manifest_name.str();
+
+ if (!(destFile.Exists() == 0 && pre_manifest.Exists())) {
+ if (0 != pkgmgr_parser_parse_manifest_for_uninstallation(
+ destFile.Fullpath().c_str(), NULL)) {
+ LogWarning("Manifest file failed to parse for uninstallation");
+ }
+ }
+ if (!DPL::Utils::TryRemove(destFile)) {
+ LogWarning("No manifest file found: " << destFile.Fullpath());
+ } else {
+ LogDebug("Manifest file removed: " << destFile.Fullpath());
+ }
+}
+} //namespace WidgetUninstall
+} //namespace Jobs
* limitations under the License.
*/
/**
- * @file task_delete_certificates.h
+ * @file task_delete_pkginfo.h
* @author Leerang Song(leerang.song@samsung.com)
* @version 1.0
- * @brief Header file for uninstaller task delete certi info from pkgmgr
+ * @brief Header file for uninstaller task delete package infomation
*/
-#ifndef WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_CERTIFICATES_H_
-#define WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_CERTIFICATES_H_
+#ifndef WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_PKGINFO_H_
+#define WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_PKGINFO_H_
#include <dpl/task.h>
namespace Jobs {
namespace WidgetUninstall {
-class TaskDeleteCertificates :
- public DPL::TaskDecl<TaskDeleteCertificates>
+class TaskDeletePkgInfo :
+ public DPL::TaskDecl<TaskDeletePkgInfo>
{
UninstallerContext& m_context;
private:
- void StepDeleteCertificates();
+ void StepDeletePkgInfo();
void StartStep();
void EndStep();
public:
- TaskDeleteCertificates(UninstallerContext& context);
- virtual ~TaskDeleteCertificates();
+ TaskDeletePkgInfo(UninstallerContext& context);
};
} //namespace WidgetUninstall
} //namespace Jobs
#endif
-// WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_CERTIFICATES_H_
+// WRT_SRC_INSTALLER_CORE_JOB_WIDGET_UNINSTALL_TASK_DELETE_PKGINFO_H_
{
AddStep(&TaskRemoveFiles::StartStep);
AddStep(&TaskRemoveFiles::StepRemoveInstallationDirectory);
- AddStep(&TaskRemoveFiles::StepRemoveManifest);
- AddStep(&TaskRemoveFiles::StepRemoveExternalLocations);
AddStep(&TaskRemoveFiles::StepRemoveFinished);
AddStep(&TaskRemoveFiles::EndStep);
}
"Widget remove steps Finished");
}
-void TaskRemoveFiles::StepRemoveManifest()
-{
- std::ostringstream manifest_name;
- manifest_name << m_context.tzPkgid << ".xml";
- DPL::Utils::Path destFile;
- const DPL::Utils::Path PRELOAD_INSTALLED_PATH("/usr/apps");
- const DPL::Utils::Path USR_PACKAGES_PATH("/usr/share/packages");
- const DPL::Utils::Path OPT_PACKAGES_PATH("/opt/share/packages");
- if (0 == (m_context.installedPath.Fullpath()).compare(0,
- PRELOAD_INSTALLED_PATH.Fullpath().length(),
- PRELOAD_INSTALLED_PATH.Fullpath())) {
- LogDebug("This widget is preloaded.");
- destFile = USR_PACKAGES_PATH;
- } else {
- destFile = OPT_PACKAGES_PATH;
- }
- destFile /= manifest_name.str();
- DPL::Utils::Path pre_manifest = USR_PACKAGES_PATH;
- pre_manifest /= manifest_name.str();
-
- if (!(destFile.Exists() == 0 && pre_manifest.Exists())) {
- int ret1 = pkgmgr_parser_parse_manifest_for_uninstallation(
- destFile.Fullpath().c_str(), NULL);
- if (ret1 != 0) {
- LogWarning("Manifest file failed to parse for uninstallation");
- }
- }
- if (!DPL::Utils::TryRemove(destFile)) {
- LogWarning("No manifest file found: " << destFile.Fullpath());
- } else {
- LogDebug("Manifest file removed: " << destFile.Fullpath());
- }
-}
-
-void TaskRemoveFiles::StepRemoveExternalLocations()
-{
- if (!m_context.removeAbnormal) {
- WidgetDAO dao(DPL::FromUTF8String(m_context.tzAppid));
- LogDebug("Removing external locations:");
- WrtDB::ExternalLocationList externalPaths = dao.getWidgetExternalLocations();
- FOREACH(file, externalPaths)
- {
- DPL::Utils::Path path(*file);
- if(path.Exists()){
- if(path.IsFile()){
- LogDebug(" -> " << path.Fullpath());
- Try{
- DPL::Utils::Remove(path);
- }Catch(DPL::Utils::Path::BaseException){
- LogError("Failed to remove the file: " << path.Fullpath());
- }
- } else if (path.IsDir()){
- LogDebug(" -> " << path.Fullpath());
- Try{
- DPL::Utils::Remove(path);
- }Catch(DPL::Utils::Path::BaseException){
- Throw(Jobs::WidgetUninstall::TaskRemoveFiles::
- Exception::RemoveFilesFailed);
- }
- }
- }else{
- LogWarning(" -> " << path.Fullpath() << "(no such a path)");
- }
- }
- dao.unregisterAllExternalLocations();
- }
-}
-
void TaskRemoveFiles::StartStep()
{
LogDebug("--------- <TaskRemoveFiles> : START ----------");
private:
void StepRemoveInstallationDirectory();
void StepRemoveFinished();
- void StepRemoveDesktop();
- void StepRemoveManifest();
- void StepRemoveExternalLocations();
void StartStep();
void EndStep();
*/
#ifndef WRT_PKGMGR_SIGNAL_H_
-#define WRT_PKGMGR_SINGAL_H_
+#define WRT_PKGMGR_SIGNAL_H_
#include <pkg-manager/pkgmgr_signal_interface.h>
#include <pkgmgr_installer.h>