X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fjobs%2Fwidget_install%2Fjob_widget_install.cpp;h=e2b20865955ed468c741055b3c2e65cf385ecd47;hb=373696532fc5ac86078243b600ad1c141f3e98ff;hp=fe6103fadf78097ce94c0659d5541d8850986302;hpb=df7b007c93bbec244392ef29d3a244cba9f9a781;p=framework%2Fweb%2Fwrt-installer.git diff --git a/src/jobs/widget_install/job_widget_install.cpp b/src/jobs/widget_install/job_widget_install.cpp index fe6103f..e2b2086 100644 --- a/src/jobs/widget_install/job_widget_install.cpp +++ b/src/jobs/widget_install/job_widget_install.cpp @@ -69,7 +69,6 @@ #include #include #include -#include #include #include @@ -195,12 +194,6 @@ JobWidgetInstall::JobWidgetInstall( } AddTask(new TaskFileManipulation(m_installerContext)); - // TODO: Update progress information for this task - - //This is sort of quick solution, because ACE verdicts are based upon - //data from DAO (DB). So AceCheck for now has to be AFTER DbUpdate - //task. - AddTask(new TaskSmack(m_installerContext)); AddTask(new TaskManifestFile(m_installerContext)); if (m_installerContext.widgetConfig.packagingType == @@ -209,9 +202,9 @@ JobWidgetInstall::JobWidgetInstall( AddTask(new TaskInstallOspsvc(m_installerContext)); } AddTask(new TaskCertificates(m_installerContext)); - AddTask(new TaskPluginsCopy(m_installerContext)); AddTask(new TaskDatabase(m_installerContext)); AddTask(new TaskAceCheck(m_installerContext)); + AddTask(new TaskSmack(m_installerContext)); } else if (result == ConfigureResult::Updated) { LogInfo("Configure installation updated"); LogInfo("Widget Update"); @@ -251,9 +244,6 @@ JobWidgetInstall::JobWidgetInstall( AddTask(new TaskUpdateFiles(m_installerContext)); } - /* TODO : To backup file, save md5 values */ - AddTask(new TaskSmack(m_installerContext)); - AddTask(new TaskManifestFile(m_installerContext)); if (m_installerContext.widgetConfig.packagingType == PKG_TYPE_HYBRID_WEB_APP) @@ -265,12 +255,12 @@ JobWidgetInstall::JobWidgetInstall( { AddTask(new TaskRemoveBackupFiles(m_installerContext)); } - AddTask(new TaskPluginsCopy(m_installerContext)); AddTask(new TaskDatabase(m_installerContext)); AddTask(new TaskAceCheck(m_installerContext)); //TODO: remove widgetHandle from this task and move before database task // by now widget handle is needed in ace check // Any error in acecheck while update will break widget + AddTask(new TaskSmack(m_installerContext)); } else if (result == ConfigureResult::Deferred) { // Installation is deferred LogInfo("Configure installation deferred"); @@ -591,14 +581,62 @@ ConfigureResult JobWidgetInstall::checkWidgetUpdate( // Check running state bool isRunning = false; - int retval = + int ret = app_manager_is_running(DPL::ToUTF8String(update.tzAppId).c_str(), &isRunning); - if (APP_MANAGER_ERROR_NONE != retval || isRunning) { + if (APP_MANAGER_ERROR_NONE != ret) { LogError("Fail to get running state"); return ConfigureResult::Failed_WidgetRunning; } + if (true == isRunning) { + // get app_context for running application + // app_context must be released with app_context_destroy + app_context_h appCtx = NULL; + ret = + app_manager_get_app_context( + DPL::ToUTF8String(update.tzAppId).c_str(), + &appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to get app_context"); + return ConfigureResult::Failed_WidgetRunning; + } + + // terminate app_context_h + ret = app_manager_terminate_app(appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to terminate running application"); + app_context_destroy(appCtx); + return ConfigureResult::Failed_WidgetRunning; + } else { + app_context_destroy(appCtx); + // app_manager_terminate_app isn't sync API + // wait until application isn't running (50ms * 100) + bool isStillRunning = true; + int checkingloop = 100; + struct timespec duration = { 0, 50 * 1000 * 1000 }; + while (--checkingloop >= 0) { + nanosleep(&duration, NULL); + int ret = + app_manager_is_running( + DPL::ToUTF8String(update.tzAppId).c_str(), + &isStillRunning); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to get running state"); + return ConfigureResult::Failed_WidgetRunning; + } + if (!isStillRunning) { + break; + } + } + if (isStillRunning) { + LogError("Fail to terminate running application"); + return ConfigureResult::Failed_WidgetRunning; + } + LogInfo("terminate application"); + } + } + m_installerContext.widgetConfig.tzAppid = update.tzAppId; if (isUpperVersion(update.existingVersion, update.incomingVersion) || @@ -1120,7 +1158,7 @@ bool JobWidgetInstall::isDRMWidget(std::string /*widgetPath*/) bool JobWidgetInstall::DecryptDRMWidget(std::string /*widgetPath*/, std::string /*destPath*/) { - /* TODO */ + /* TODO */ return false; } } //namespace WidgetInstall