Implement ManifestDirectInstall and ManifestDirectUpdate request handling 51/64351/8 accepted/tizen/common/20160513.123153 submit/tizen/20160511.132536
authorTomasz Iwanek <t.iwanek@samsung.com>
Thu, 31 Mar 2016 09:55:31 +0000 (11:55 +0200)
committerTomasz Iwanek <t.iwanek@samsung.com>
Wed, 11 May 2016 11:12:09 +0000 (04:12 -0700)
To verify, try following to scenarios:

1)
 wgt-backend -i ${package}
 wgt-backend -y ${pkgid} # package should be updated from its manifest with success

2)
 wgt-backend -i ${package}
 rm /home/$USER/.applications/dbspace/*
 wgt-backend -y ${pkgid} # package should be installed from its manifest with success

Submit together:
 https://review.tizen.org/gerrit/#/c/64204

Change-Id: I47c2af1e71e8f9b0f022c593762644da88afb8f9

14 files changed:
src/hybrid/CMakeLists.txt
src/hybrid/hybrid_installer.cc
src/hybrid/step/configuration/step_parse.cc [deleted file]
src/hybrid/step/configuration/step_parse.h [deleted file]
src/unit_tests/manifest_test.cc
src/wgt/CMakeLists.txt
src/wgt/step/configuration/step_parse.cc
src/wgt/step/configuration/step_parse.h
src/wgt/step/configuration/step_parse_recovery.cc
src/wgt/step/configuration/step_parse_recovery.h
src/wgt/step/security/step_direct_manifest_check_signature.cc [new file with mode: 0644]
src/wgt/step/security/step_direct_manifest_check_signature.h [new file with mode: 0644]
src/wgt/wgt_app_query_interface.cc
src/wgt/wgt_installer.cc

index 0e2418f..72cc3d2 100644 (file)
@@ -1,6 +1,5 @@
 SET(SRCS
   step/configuration/step_merge_tpk_config.cc
-  step/configuration/step_parse.cc
   step/configuration/step_stash_tpk_config.cc
   step/encryption/step_encrypt_resources.cc
   hybrid_installer.cc
index 2f9c274..26d5593 100644 (file)
@@ -58,9 +58,9 @@
 
 #include "hybrid/hybrid_backend_data.h"
 #include "hybrid/step/configuration/step_merge_tpk_config.h"
-#include "hybrid/step/configuration/step_parse.h"
 #include "hybrid/step/configuration/step_stash_tpk_config.h"
 #include "hybrid/step/encryption/step_encrypt_resources.h"
+#include "wgt/step/configuration/step_parse.h"
 #include "wgt/step/configuration/step_parse_recovery.h"
 #include "wgt/step/encryption/step_remove_encryption_data.h"
 #include "wgt/step/filesystem/step_create_symbolic_link.h"
@@ -88,7 +88,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
           ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
       AddStep<hybrid::configuration::StepStashTpkConfig>();
-      AddStep<hybrid::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
       AddStep<hybrid::configuration::StepMergeTpkConfig>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -121,7 +122,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
           ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
       AddStep<hybrid::configuration::StepStashTpkConfig>();
-      AddStep<hybrid::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
       AddStep<hybrid::configuration::StepMergeTpkConfig>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -185,7 +187,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
       AddStep<ci::filesystem::StepDeltaPatch>();
       AddStep<hybrid::configuration::StepStashTpkConfig>();
-      AddStep<hybrid::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
       AddStep<hybrid::configuration::StepMergeTpkConfig>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -244,7 +247,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
           ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
       AddStep<hybrid::configuration::StepStashTpkConfig>();
-      AddStep<hybrid::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
       AddStep<hybrid::configuration::StepMergeTpkConfig>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -278,7 +282,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
           ci::configuration::StepParseManifest::ManifestLocation::PACKAGE,
           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
       AddStep<hybrid::configuration::StepStashTpkConfig>();
-      AddStep<hybrid::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
       AddStep<hybrid::configuration::StepMergeTpkConfig>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -311,6 +316,52 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
       AddStep<ci::pkgmgr::StepRunParserPlugin>(
           ci::Plugin::ActionType::Upgrade);
       break;
+    case ci::RequestType::ManifestDirectInstall:
+      AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+      AddStep<ci::configuration::StepParseManifest>(
+          ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+          ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+      AddStep<hybrid::configuration::StepStashTpkConfig>();
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+      AddStep<hybrid::configuration::StepMergeTpkConfig>();
+      AddStep<ci::security::StepCheckSignature>();
+      AddStep<ci::security::StepPrivilegeCompatibility>();
+      AddStep<wgt::security::StepCheckSettingsLevel>();
+      AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
+      AddStep<ci::security::StepRollbackInstallationSecurity>();
+      AddStep<wgt::pkgmgr::StepGenerateXml>();
+      AddStep<ci::pkgmgr::StepRunParserPlugin>(
+          ci::Plugin::ActionType::Install);
+      AddStep<ci::pkgmgr::StepRegisterApplication>();
+      AddStep<ci::security::StepRegisterSecurity>();
+      AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>();
+      break;
+    case ci::RequestType::ManifestDirectUpdate:
+      AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+      AddStep<ci::filesystem::StepUnzip>();
+      AddStep<ci::configuration::StepParseManifest>(
+          ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+          ci::configuration::StepParseManifest::StoreLocation::NORMAL);
+      AddStep<hybrid::configuration::StepStashTpkConfig>();
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+      AddStep<hybrid::configuration::StepMergeTpkConfig>();
+      AddStep<ci::security::StepCheckSignature>();
+      AddStep<ci::security::StepPrivilegeCompatibility>();
+      AddStep<wgt::security::StepCheckSettingsLevel>();
+      AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
+      AddStep<ci::security::StepRollbackInstallationSecurity>();
+      AddStep<ci::configuration::StepParseManifest>(
+          ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+          ci::configuration::StepParseManifest::StoreLocation::BACKUP);
+      AddStep<ci::pkgmgr::StepKillApps>();
+      AddStep<ci::security::StepUpdateSecurity>();
+      AddStep<wgt::pkgmgr::StepGenerateXml>();
+      AddStep<ci::pkgmgr::StepUpdateApplication>();
+      AddStep<ci::pkgmgr::StepRunParserPlugin>(
+          ci::Plugin::ActionType::Upgrade);
+      break;
     default:
       AddStep<ci::configuration::StepFail>();
       break;
diff --git a/src/hybrid/step/configuration/step_parse.cc b/src/hybrid/step/configuration/step_parse.cc
deleted file mode 100644 (file)
index 1e25fbe..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache-2.0 license that can be
-// found in the LICENSE file.
-
-#include "hybrid/step/configuration/step_parse.h"
-
-namespace {
-
-const char kResWgtPath[] = "res/wgt";
-
-}
-
-namespace hybrid {
-namespace configuration {
-
-bool StepParse::LocateConfigFile() {
-  return Check(context_->unpacked_dir_path.get() / kResWgtPath);
-}
-
-}  // namespace configuration
-}  // namespace hybrid
-
diff --git a/src/hybrid/step/configuration/step_parse.h b/src/hybrid/step/configuration/step_parse.h
deleted file mode 100644 (file)
index 4c5b339..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by an apache-2.0 license that can be
-// found in the LICENSE file.
-
-#ifndef HYBRID_STEP_CONFIGURATION_STEP_PARSE_H_
-#define HYBRID_STEP_CONFIGURATION_STEP_PARSE_H_
-
-#include <manifest_parser/utils/logging.h>
-
-#include "wgt/step/configuration/step_parse.h"
-
-namespace hybrid {
-namespace configuration {
-
-/**
- * \brief This step parse config.xml configuration file of widget
- *
- * This subclass overrides location of file and it is used when hybrid package
- * is installed.
- */
-class StepParse : public wgt::configuration::StepParse {
- public:
-  using wgt::configuration::StepParse::StepParse;
-
-  bool LocateConfigFile() override;
-
-  SCOPE_LOG_TAG(Parse)
-};
-
-}  // namespace configuration
-}  // namespace hybrid
-
-#endif  // HYBRID_STEP_CONFIGURATION_STEP_PARSE_H_
index 46d2f8b..b72a9bd 100644 (file)
@@ -48,7 +48,9 @@ class StepParseRunner {
 
   bool Run() {
     PrepareContext();
-    wgt::configuration::StepParse step(context_.get(), !ignore_start_files_);
+    wgt::configuration::StepParse step(context_.get(),
+        wgt::configuration::StepParse::ConfigLocation::PACKAGE,
+        !ignore_start_files_);
     return step.process() == ci::Step::Status::OK;
   }
 
index 7a63521..1542e28 100644 (file)
@@ -18,6 +18,7 @@ SET(SRCS
   step/security/step_check_wgt_background_category.cc
   step/security/step_check_wgt_notification_category.cc
   step/security/step_check_wgt_ime_privilege.cc
+  step/security/step_direct_manifest_check_signature.cc
   wgt_app_query_interface.cc
   wgt_installer.cc
 )
index c19e7d9..680ab35 100644 (file)
@@ -8,6 +8,7 @@
 #include <boost/filesystem/path.hpp>
 
 #include <common/app_installer.h>
+#include <common/backup_paths.h>
 #include <common/installer_context.h>
 #include <common/step/step.h>
 #include <common/utils/glist_range.h>
@@ -51,6 +52,8 @@ const char kCategoryWatchClock[] = "com.samsung.wmanager.WATCH_CLOCK";
 const std::string kManifestVersion = "1.0.0";
 const char kTizenPackageXmlNamespace[] = "http://tizen.org/ns/packages";
 
+const char kResWgt[] = "res/wgt";
+
 GList* GenerateMetadataListX(const wgt::parse::MetaDataInfo& meta_info) {
   GList* list = nullptr;
   for (auto& meta : meta_info.metadata()) {
@@ -90,8 +93,10 @@ namespace app_keys = wgt::application_widget_keys;
 namespace sc = std::chrono;
 
 StepParse::StepParse(common_installer::InstallerContext* context,
+                     ConfigLocation config_location,
                      bool check_start_file)
     : Step(context),
+      config_location_(config_location),
       check_start_file_(check_start_file) {
 }
 
@@ -519,7 +524,27 @@ bool StepParse::FillManifestX(manifest_x* manifest) {
 }
 
 bool StepParse::LocateConfigFile() {
-  return StepParse::Check(context_->unpacked_dir_path.get());
+  switch (config_location_) {
+    case ConfigLocation::PACKAGE:
+      return StepParse::Check(context_->unpacked_dir_path.get());
+    case ConfigLocation::INSTALLED:
+      return StepParse::Check(context_->pkg_path.get() / kResWgt);
+    case ConfigLocation::RECOVERY:
+      if (StepParse::Check(common_installer::GetBackupPathForPackagePath(
+          context_->root_application_path.get()
+              / context_->pkgid.get()) / kResWgt))
+        return true;
+      if (StepParse::Check(
+          context_->root_application_path.get()
+              / context_->pkgid.get() / kResWgt))
+        return true;
+      return false;
+    case ConfigLocation::RESOURCE_WGT:
+      return StepParse::Check(context_->unpacked_dir_path.get() / kResWgt);
+    default:
+      LOG(ERROR) << "Unknown config location";
+      return false;
+  }
 }
 
 common_installer::Step::Status StepParse::process() {
index 93a9328..9bc1b73 100644 (file)
@@ -27,8 +27,15 @@ namespace configuration {
  */
 class StepParse : public common_installer::Step {
  public:
+  enum class ConfigLocation {
+    PACKAGE,      // parse config file from unpacking diretory
+    INSTALLED,    // parse config file from current package installation
+    RECOVERY,     // parse config file from backup location or package location
+    RESOURCE_WGT  // parse config file from unpacking subdiretory "res/wgt"
+  };
+
   explicit StepParse(common_installer::InstallerContext* context,
-      bool check_start_file);
+      ConfigLocation config_location, bool check_start_file);
 
   Status process() override;
   Status clean() override { return Status::OK; }
@@ -63,6 +70,7 @@ class StepParse : public common_installer::Step {
   bool FillManifestX(manifest_x* manifest);
 
   std::unique_ptr<wgt::parse::WidgetConfigParser> parser_;
+  ConfigLocation config_location_;
   bool check_start_file_;
 
   SCOPE_LOG_TAG(Parse)
index 0d8f3dc..c01cb41 100644 (file)
@@ -18,11 +18,13 @@ namespace configuration {
 
 StepParseRecovery::StepParseRecovery(
     common_installer::InstallerContext* context)
-    : StepParse(context, false) {
+    : StepParse(context, StepParse::ConfigLocation::RECOVERY, false) {
 }
 
 common_installer::Step::Status StepParseRecovery::process() {
   (void) StepParse::process();
+  context_->pkg_path.set(
+      context_->root_application_path.get() / context_->pkgid.get());
   return Status::OK;
 }
 
@@ -38,19 +40,5 @@ common_installer::Step::Status StepParseRecovery::precheck() {
   return Status::OK;
 }
 
-bool StepParseRecovery::LocateConfigFile() {
-  context_->pkg_path.set(
-      context_->root_application_path.get() / context_->pkgid.get());
-
-  if (Check(common_installer::GetBackupPathForPackagePath(
-      context_->pkg_path.get()) / kResWgtPath))
-    return true;
-
-  if (Check(context_->pkg_path.get() / kResWgtPath))
-    return true;
-
-  return false;
-}
-
 }  // namespace configuration
 }  // namespace wgt
index ad3015d..bc30019 100644 (file)
@@ -47,13 +47,6 @@ class StepParseRecovery : public StepParse {
    */
   Status precheck() override;
 
-  /**
-   * \brief Locate config.xml file
-   *
-   * \return true if config.xml is found
-   */
-  bool LocateConfigFile() override;
-
   SCOPE_LOG_TAG(ParseRecovery)
 };
 
diff --git a/src/wgt/step/security/step_direct_manifest_check_signature.cc b/src/wgt/step/security/step_direct_manifest_check_signature.cc
new file mode 100644 (file)
index 0000000..469a490
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache-2.0 license that can be
+// found in the LICENSE file.
+
+#include "wgt/step/security/step_direct_manifest_check_signature.h"
+
+namespace bf = boost::filesystem;
+
+namespace {
+
+const char kResWgt[] = "res/wgt";
+
+}  // namespace
+
+namespace wgt {
+namespace security {
+
+bf::path StepDirectManifestCheckSignature::GetSignatureRoot() const {
+  return StepCheckSignature::GetSignatureRoot() / kResWgt;
+}
+
+}  // namespace security
+}  // namespace wgt
diff --git a/src/wgt/step/security/step_direct_manifest_check_signature.h b/src/wgt/step/security/step_direct_manifest_check_signature.h
new file mode 100644 (file)
index 0000000..a24d910
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+// Use of this source code is governed by an apache-2.0 license that can be
+// found in the LICENSE file.
+
+#ifndef WGT_STEP_SECURITY_STEP_DIRECT_MANIFEST_CHECK_SIGNATURE_H_
+#define WGT_STEP_SECURITY_STEP_DIRECT_MANIFEST_CHECK_SIGNATURE_H_
+
+#include <common/step/security/step_check_signature.h>
+#include <manifest_parser/utils/logging.h>
+
+namespace wgt {
+namespace security {
+
+class StepDirectManifestCheckSignature
+    : public common_installer::security::StepCheckSignature {
+ public:
+  using StepCheckSignature::StepCheckSignature;
+
+ private:
+  boost::filesystem::path GetSignatureRoot() const override;
+
+  SCOPE_LOG_TAG(StepDirectManifestCheckSignature)
+};
+
+}  // namespace security
+}  // namespace wgt
+
+#endif  // WGT_STEP_SECURITY_STEP_DIRECT_MANIFEST_CHECK_SIGNATURE_H_
index 02678ee..e4245cc 100644 (file)
@@ -41,7 +41,7 @@ std::string GetInstallationRequestInfo(int argc, char** argv) {
   for (int i = 0; i < argc; ++i) {
     if (!strcmp(argv[i], "-i") || !strcmp(argv[i], "-r") ||
         !strcmp(argv[i], "-d") || !strcmp(argv[i], "-b") ||
-        !strcmp(argv[i], "-w")) {
+        !strcmp(argv[i], "-w") || !strcmp(argv[i], "-y")) {
       if (i + 1 < argc) {
         path = argv[i + 1];
         break;
@@ -102,10 +102,16 @@ std::string ReadPkgidFromRecovery(const std::string& recovery_path) {
 namespace wgt {
 
 bool WgtAppQueryInterface::IsAppInstalledByArgv(int argc, char** argv) {
-  std::string path = GetInstallationRequestInfo(argc, argv);
-  if (path.empty())
+  std::string arg = GetInstallationRequestInfo(argc, argv);
+  if (arg.empty())
     return false;
-  std::string pkg_id = GetPkgIdFromPath(path);
+
+  // argument from commandline is package id
+  if (ci::IsPackageInstalled(arg, ci::GetRequestMode()))
+    return true;
+
+  // argument from commandline is path to file
+  std::string pkg_id = GetPkgIdFromPath(arg);
   if (pkg_id.empty())
     return false;
   return ci::IsPackageInstalled(pkg_id, ci::GetRequestMode());
index 55c7a53..d56dad9 100644 (file)
@@ -76,6 +76,7 @@
 #include "wgt/step/security/step_check_wgt_background_category.h"
 #include "wgt/step/security/step_check_wgt_notification_category.h"
 #include "wgt/step/security/step_check_wgt_ime_privilege.h"
+#include "wgt/step/security/step_direct_manifest_check_signature.h"
 
 namespace ci = common_installer;
 
@@ -90,7 +91,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
     case ci::RequestType::Install : {
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
       AddStep<ci::filesystem::StepUnzip>();
-      AddStep<wgt::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+        wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
       AddStep<ci::pkgmgr::StepCheckBlacklist>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -119,7 +121,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
     case ci::RequestType::Update: {
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
       AddStep<ci::filesystem::StepUnzip>();
-      AddStep<wgt::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
       AddStep<ci::pkgmgr::StepCheckBlacklist>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -173,7 +176,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
     }
     case ci::RequestType::Reinstall: {
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
-      AddStep<wgt::configuration::StepParse>(false);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
       AddStep<ci::pkgmgr::StepKillApps>();
       AddStep<ci::configuration::StepParseManifest>(
           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
@@ -189,10 +193,12 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
       AddStep<ci::filesystem::StepUnzip>();
       // TODO(t.iwanek): manifest is parsed twice...
-      AddStep<wgt::configuration::StepParse>(false);
+      AddStep<wgt::configuration::StepParse>(
+            wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
       // start file may not have changed
       AddStep<ci::filesystem::StepDeltaPatch>("res/wgt/");
-      AddStep<wgt::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
       AddStep<ci::pkgmgr::StepCheckBlacklist>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -243,7 +249,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
     case ci::RequestType::MountInstall: {
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
       AddStep<ci::mount::StepMountUnpacked>();
-      AddStep<wgt::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
       AddStep<ci::pkgmgr::StepCheckBlacklist>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -272,7 +279,8 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
     case ci::RequestType::MountUpdate: {
       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
       AddStep<ci::mount::StepMountUnpacked>();
-      AddStep<wgt::configuration::StepParse>(true);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
       AddStep<ci::pkgmgr::StepCheckBlacklist>();
       AddStep<ci::security::StepCheckSignature>();
       AddStep<ci::security::StepPrivilegeCompatibility>();
@@ -303,6 +311,47 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
       AddStep<ci::pkgmgr::StepUpdateApplication>();
       break;
     }
+    case ci::RequestType::ManifestDirectInstall: {
+      AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+      AddStep<ci::pkgmgr::StepCheckBlacklist>();
+      AddStep<wgt::security::StepDirectManifestCheckSignature>();
+      AddStep<ci::security::StepPrivilegeCompatibility>();
+      AddStep<wgt::security::StepCheckWgtNotificationCategory>();
+      AddStep<wgt::security::StepCheckWgtImePrivilege>();
+      AddStep<wgt::security::StepCheckSettingsLevel>();
+      AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
+      AddStep<ci::security::StepRollbackInstallationSecurity>();
+      AddStep<wgt::pkgmgr::StepGenerateXml>();
+      AddStep<ci::pkgmgr::StepRegisterApplication>();
+      AddStep<ci::pkgmgr::StepRunParserPlugin>(ci::Plugin::ActionType::Install);
+      AddStep<ci::security::StepRegisterSecurity>();
+      break;
+    }
+    case ci::RequestType::ManifestDirectUpdate: {
+      AddStep<ci::configuration::StepConfigure>(pkgmgr_);
+      AddStep<wgt::configuration::StepParse>(
+          wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
+      AddStep<ci::pkgmgr::StepCheckBlacklist>();
+      AddStep<wgt::security::StepDirectManifestCheckSignature>();
+      AddStep<ci::security::StepPrivilegeCompatibility>();
+      AddStep<wgt::security::StepCheckWgtNotificationCategory>();
+      AddStep<wgt::security::StepCheckWgtImePrivilege>();
+      AddStep<wgt::security::StepCheckSettingsLevel>();
+      AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
+      AddStep<ci::configuration::StepParseManifest>(
+          ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
+          ci::configuration::StepParseManifest::StoreLocation::BACKUP);
+      AddStep<ci::pkgmgr::StepKillApps>();
+      AddStep<ci::filesystem::StepCopyTep>();
+      AddStep<ci::security::StepUpdateSecurity>();
+      AddStep<wgt::pkgmgr::StepGenerateXml>();
+      AddStep<ci::pkgmgr::StepRunParserPlugin>(
+          ci::Plugin::ActionType::Upgrade);
+      AddStep<ci::pkgmgr::StepUpdateApplication>();
+      break;
+    }
     default: {
       AddStep<ci::configuration::StepFail>();
     }