#include <ace_registration.h>
#include <errno.h>
#include <string.h>
+#include <vconf.h>
using namespace WrtDB;
namespace Jobs {
namespace WidgetInstall {
+
+namespace {
+const char * const VCONF_KEY_PREFIX = "file/private/";
+const char * const VCONF_KEY_GROUP = "/security";
+const char * const VCONF_KEY_POPUP_USAGE = "/popup_usage";
+const char * const VCONF_KEY_GEOLOCATION_USAGE = "/geolocation_usage";
+const char * const VCONF_KEY_WEB_NOTIFICATION_USAGE = "/web_notification_usage";
+const char * const VCONF_KEY_WEB_DATABASE_USAGE = "/web_database_usage";
+const char * const VCONF_KEY_FILESYSTEM_USAGE = "/filesystem_usage";
+}
TaskDatabase::TaskDatabase(InstallerContext& context) :
DPL::TaskDecl<TaskDatabase>(this),
m_context(context),
AddStep(&TaskDatabase::StepWrtDBInsert);
AddStep(&TaskDatabase::StepAceDBInsert);
AddStep(&TaskDatabase::StepRemoveExternalFiles);
+ AddStep(&TaskDatabase::StepCreateVconf);
AddAbortStep(&TaskDatabase::StepAbortDBInsert);
}
}
}
+void TaskDatabase::StepCreateVconf()
+{
+ LogDebug("StepCreateVconf");
+ std::string keyPrefix =
+ VCONF_KEY_PREFIX
+ + DPL::ToUTF8String(m_context.locations->getPkgname())
+ + VCONF_KEY_GROUP;
+ std::string securityPopupUsageKey = keyPrefix + VCONF_KEY_POPUP_USAGE;
+ std::string geolocationUsageKey = keyPrefix + VCONF_KEY_GEOLOCATION_USAGE;
+ std::string webNotificationUsageKey = keyPrefix + VCONF_KEY_WEB_NOTIFICATION_USAGE;
+ std::string webDatabaseUsageKey = keyPrefix + VCONF_KEY_WEB_DATABASE_USAGE;
+ std::string filesystemUsageKey = keyPrefix + VCONF_KEY_FILESYSTEM_USAGE;
+
+ vconf_set_int(securityPopupUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+ // prevent permission error
+ vconf_unset(securityPopupUsageKey.c_str());
+ vconf_set_int(securityPopupUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+ vconf_set_int(geolocationUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+ vconf_set_int(webNotificationUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+ vconf_set_int(webDatabaseUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+ vconf_set_int(filesystemUsageKey.c_str(),
+ static_cast<int>(WrtDB::SETTINGS_TYPE_ON));
+}
+
void TaskDatabase::StepAbortDBInsert()
{
LogWarning("[DB Update Task] Aborting... (DB Clean)");
ErrorDeferred, ///< Widget installation was deferred and will be continued when possible
ErrorDatabaseFailure, ///< Failure in database
ErrorRemovingFolderFailure, ///< Failure in removing existing widget folder
+ ErrorCreateVconfFailure, ///< Failure in creating vconf
ErrorInstallOspServcie, ///< Failure in installing osp service
ErrorUpdateWidget, ///< Failure in widget update.
ErrorInstallToExt, ///< Failure in install to sdcard
DECLARE_JOB_EXCEPTION(Base, UnknownError, ErrorUnknown)
DECLARE_JOB_EXCEPTION(Base, DatabaseFailure, ErrorDatabaseFailure)
DECLARE_JOB_EXCEPTION(Base, RemovingFolderFailure, ErrorRemovingFolderFailure)
+DECLARE_JOB_EXCEPTION(Base, CreateVconfFailure, ErrorCreateVconfFailure)
DECLARE_JOB_EXCEPTION(Base, CopyIconFailed, ErrorUnknown)
#include <errno.h>
#include <string.h>
#include <widget_install_to_external.h>
+#include <vconf.h>
namespace Jobs {
namespace WidgetUninstall {
using namespace WrtDB;
+namespace {
+const char * const VCONF_KEY_PREFIX = "file/private/";
+}
+
TaskRemoveFiles::TaskRemoveFiles(UninstallerContext& context) :
DPL::TaskDecl<TaskRemoveFiles>(this),
m_context(context)
//AddStep(&TaskRemoveFiles::StepRemoveDesktop);
AddStep(&TaskRemoveFiles::StepRemoveManifest);
AddStep(&TaskRemoveFiles::StepRemoveExternalLocations);
+ AddStep(&TaskRemoveFiles::StepRemoveVconf);
AddStep(&TaskRemoveFiles::StepRemoveFinished);
}
dao.unregisterAllExternalLocations();
}
+void TaskRemoveFiles::StepRemoveVconf()
+{
+ std::string key =
+ VCONF_KEY_PREFIX
+ + DPL::ToUTF8String(m_context.locations->getPkgname()) ;
+ if(vconf_unset_recursive(key.c_str())) {
+ LogError("Fail to unset vconf file");
+ } else {
+ LogDebug("vconf file is removed");
+ }
+}
+
void TaskRemoveFiles::StepRemoveExternalWidget()
{
Try {