m_context.locations->registerAppid(m_context.tzAppid);
m_context.installedPath =
DPL::Utils::Path(*dao.getWidgetInstalledPath());
+ m_context.manifestFile = getManifestFile();
_D("Widget model exists. App id : %s", m_context.tzAppid.c_str());
return m_context.removeFinished;
}
+DPL::Utils::Path JobWidgetUninstall::getManifestFile() const
+{
+ std::ostringstream manifest_name;
+ manifest_name << m_context.tzPkgid << ".xml";
+ DPL::Utils::Path manifestFile;
+
+ const DPL::Utils::Path PRELOAD_INSTALLED_PATH("/usr/apps/" + m_context.tzPkgid);
+ const DPL::Utils::Path USR_PACKAGES_PATH("/usr/share/packages");
+ const DPL::Utils::Path OPT_PACKAGES_PATH("/opt/share/packages");
+
+ if (PRELOAD_INSTALLED_PATH == m_context.installedPath) {
+ _D("This widget is preloaded.");
+ manifestFile = USR_PACKAGES_PATH;
+ } else {
+ manifestFile = OPT_PACKAGES_PATH;
+ }
+
+ manifestFile /= manifest_name.str();
+ _D("Manifest file : %s", manifestFile.Fullpath().c_str());
+
+ return manifestFile;
+}
+
void JobWidgetUninstall::SendProgress()
{
using namespace PackageManager;
std::string getRemovedTizenId() const;
bool getRemoveStartedFlag() const;
bool getRemoveFinishedFlag() const;
+ DPL::Utils::Path getManifestFile() const;
WidgetStatus getWidgetStatus(const std::string &appId);
#include <dpl/wrt-dao-ro/global_config.h>
#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
#include <app_manager.h>
+#include <pkgmgr/pkgmgr_parser.h>
+#include <pkgmgr-info.h>
#include <installer_log.h>
namespace Jobs {
{
AddStep(&TaskCheck::StartStep);
AddStep(&TaskCheck::StepUninstallPreCheck);
+ AddStep(&TaskCheck::StepCheckMDM);
AddStep(&TaskCheck::EndStep);
}
_D("Widget Can be uninstalled, Pkgname : %s", m_context.tzAppid.c_str());
}
+
+void TaskCheck::StepCheckMDM()
+{
+ _D("StepCheckMDM");
+
+ if (PMINFO_R_OK != pkgmgr_parser_check_mdm_policy_for_uninstallation(
+ m_context.manifestFile.Fullpath().c_str())) {
+ _E("Failed to check mdm policy");
+ ThrowMsg(Exceptions::CheckMDMPolicyFailure, "Can't uninstall! Because of MDM policy");
+ }
+}
} //namespace WidgetUninstall
} //namespace Jobs
//steps
void StepUninstallPreCheck();
+ void StepCheckMDM();
void StartStep();
void EndStep();
{
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())) {
- _D("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;
+ DPL::Utils::Path pre_manifest("/usr/share/packages");
pre_manifest /= manifest_name.str();
- if (!(destFile.Exists() == 0 && pre_manifest.Exists())) {
+ if (!(m_context.manifestFile.Exists() == 0 && pre_manifest.Exists())) {
if (0 != pkgmgr_parser_parse_manifest_for_uninstallation(
- destFile.Fullpath().c_str(), NULL)) {
+ m_context.manifestFile.Fullpath().c_str(), NULL)) {
_W("Manifest file failed to parse for uninstallation");
}
}
- if (!DPL::Utils::TryRemove(destFile)) {
- _W("No manifest file found: %s", destFile.Fullpath().c_str());
+ if (!DPL::Utils::TryRemove(m_context.manifestFile)) {
+ _W("No manifest file found: %s", m_context.manifestFile.Fullpath().c_str());
} else {
- _D("Manifest file removed: %s", destFile.Fullpath().c_str());
+ _D("Manifest file removed: %s", m_context.manifestFile.Fullpath().c_str());
}
}
} //namespace WidgetUninstall
std::string tzPkgid;
bool removeAbnormal;
DPL::Utils::Path installedPath;
+ DPL::Utils::Path manifestFile;
};
#endif // WRT_SRC_INSTALLER_CORE_UNINSTALLER_TASKS_UNINSTALLER_CONTEXT_H_
DECLARE_JOB_EXCEPTION(Base, PlatformAPIFailure, ErrorWidgetUninstallationFailed)
DECLARE_JOB_EXCEPTION(Base, RemoveFileFailure, ErrorWidgetUninstallationFailed)
DECLARE_JOB_EXCEPTION(Base, Unremovable, ErrorWidgetUninstallationFailed)
+DECLARE_JOB_EXCEPTION(Base, CheckMDMPolicyFailure, ErrorWidgetUninstallationFailed)
} //namespace
} //namespace
} //namespace