Add StepSetMainapp 44/215044/4
authorJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 1 Oct 2019 06:54:24 +0000 (15:54 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 4 Nov 2019 02:48:01 +0000 (11:48 +0900)
Add StepSetMainapp for some request types to set mainapp attribute properly.

Change-Id: I23717ba8edc9da81ce2c33ddfcd432dcfabcbc29
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/hybrid/hybrid_installer.cc
src/hybrid/step/configuration/step_merge_tpk_config.cc
src/hybrid/step/configuration/step_set_mainapp.cc [new file with mode: 0644]
src/hybrid/step/configuration/step_set_mainapp.h [new file with mode: 0644]

index 31028d0..079754f 100644 (file)
@@ -90,6 +90,7 @@
 #include "hybrid/shared_dirs.h"
 #include "hybrid/step/configuration/step_merge_tpk_config.h"
 #include "hybrid/step/configuration/step_merge_tpk_privileges.h"
+#include "hybrid/step/configuration/step_set_mainapp.h"
 #include "hybrid/step/configuration/step_stash_tpk_config.h"
 #include "hybrid/step/encryption/step_encrypt_resources.h"
 #include "hybrid/step/pkgmgr/step_merge_xml.h"
@@ -486,6 +487,7 @@ void HybridInstaller::ManifestDirectInstallSteps() {
   AddStep<hybrid::configuration::StepMergeTpkPrivileges>();
   AddStep<ci::security::StepPrivilegeCompatibility>(
       ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::pkgmgr::StepRegisterApplication>();
   AddStep<ci::security::StepRegisterTrustAnchor>(
       ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
@@ -529,6 +531,7 @@ void HybridInstaller::ManifestDirectUpdateSteps() {
   AddStep<hybrid::configuration::StepMergeTpkPrivileges>();
   AddStep<ci::security::StepPrivilegeCompatibility>(
       ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::pkgmgr::StepUpdateApplication>();
   AddStep<ci::security::StepRegisterTrustAnchor>(
       ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
@@ -552,6 +555,7 @@ void HybridInstaller::ManifestPartialInstallSteps() {
       wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
   AddStep<hybrid::configuration::StepMergeTpkConfig>(
       hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::configuration::StepParsePreload>();
   AddStep<ci::security::StepSignature>(false);
   AddStep<hybrid::configuration::StepMergeTpkPrivileges>();
@@ -582,6 +586,7 @@ void HybridInstaller::ManifestPartialUpdateSteps() {
       wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
   AddStep<hybrid::configuration::StepMergeTpkConfig>(
       hybrid::configuration::StepMergeTpkConfig::MergeType::OVERWRITE);
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::configuration::StepParsePreload>();
   AddStep<ci::security::StepSignature>(false);
   AddStep<ci::configuration::StepParseManifest>(
@@ -706,6 +711,7 @@ void HybridInstaller::ReadonlyUpdateUninstallSteps() {
   AddStep<ci::filesystem::StepRemoveTep>();
   AddStep<ci::filesystem::StepRemoveFiles>();
   AddStep<ci::filesystem::StepRemoveZipImage>();
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::pkgmgr::StepUpdateApplication>();
   AddStep<ci::filesystem::StepRemoveUserData>();
   AddStep<ci::configuration::StepSwitchReadonlyMode>();
@@ -766,6 +772,8 @@ void HybridInstaller::RecoverDBSteps() {
   AddStep<ci::security::StepGetPrivilegeLevel>();
   AddStep<ci::security::StepPrivilegeCompatibility>(
       ci::security::StepPrivilegeCompatibility::InternalPrivType::BOTH);
+  AddStep<wgt::security::StepCheckSettingsLevel>();
+  AddStep<hybrid::configuration::StepSetMainapp>();
   AddStep<ci::pkgmgr::StepRegisterApplication>();
 }
 
index eb2619f..d63d003 100644 (file)
@@ -6,8 +6,6 @@
 
 #include <pkgmgrinfo_basic.h>
 
-#include <common/utils/glist_range.h>
-
 #include "hybrid/hybrid_backend_data.h"
 
 namespace hybrid {
@@ -24,27 +22,11 @@ common_installer::Step::Status StepMergeTpkConfig::process() {
   manifest_x* tpk_data = data->tpk_manifest_data.get();
   manifest_x* wgt_data = context_->manifest_data.get();
 
-  if (merge_type_ == MergeType::CONCAT) {
+  if (merge_type_ == MergeType::CONCAT)
     wgt_data->application =
         g_list_concat(wgt_data->application, tpk_data->application);
-  } else {
-    // mainappid should be webapp for hybrid pkg
-    for (application_x* app :
-        GListRange<application_x*>(tpk_data->application)) {
-      if (app->type && strcmp(app->type, "webapp") != 0)
-        continue;
-
-      if (app->mainapp)
-        free(app->mainapp);
-      app->mainapp = strdup("true");
-      if (!app->mainapp) {
-        LOG(ERROR) << "Out of memoery";
-        return Status::ERROR;
-      }
-      break;
-    }
+  else
     wgt_data->application = tpk_data->application;
-  }
 
   tpk_data->application = nullptr;
   return Status::OK;
diff --git a/src/hybrid/step/configuration/step_set_mainapp.cc b/src/hybrid/step/configuration/step_set_mainapp.cc
new file mode 100644 (file)
index 0000000..5d8958d
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright (c) 2019 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_set_mainapp.h"
+
+#include <pkgmgrinfo_basic.h>
+
+#include <common/utils/glist_range.h>
+
+#include "hybrid/hybrid_backend_data.h"
+
+namespace hybrid {
+namespace configuration {
+
+common_installer::Step::Status StepSetMainapp::process() {
+  manifest_x* manifest_data = context_->manifest_data.get();
+  for (application_x* app :
+      GListRange<application_x*>(manifest_data->application)) {
+    if (app->type && strcmp(app->type, "webapp") != 0)
+      continue;
+
+    if (app->mainapp)
+      free(app->mainapp);
+    app->mainapp = strdup("true");
+    if (!app->mainapp) {
+      LOG(ERROR) << "Out of memoery";
+      return Status::ERROR;
+    }
+    break;
+  }
+  return Status::OK;
+}
+
+}  // namespace configuration
+}  // namespace hybrid
diff --git a/src/hybrid/step/configuration/step_set_mainapp.h b/src/hybrid/step/configuration/step_set_mainapp.h
new file mode 100644 (file)
index 0000000..2b287fb
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright (c) 2019 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_SET_MAINAPP_H_
+#define HYBRID_STEP_CONFIGURATION_STEP_SET_MAINAPP_H_
+
+#include <common/step/step.h>
+#include <manifest_parser/utils/logging.h>
+
+namespace hybrid {
+namespace configuration {
+
+/**
+ * \brief StepSetMainapp
+ *        Sets main application information
+ */
+class StepSetMainapp : public common_installer::Step {
+ public:
+  using Step::Step;
+
+  Status process() override;
+  Status clean() override { return Status::OK; }
+  Status undo() override { return Status::OK; }
+  Status precheck() override { return Status::OK; }
+
+  STEP_NAME(SetMainapp)
+};
+
+}  // namespace configuration
+}  // namespace hybrid
+
+#endif  // HYBRID_STEP_CONFIGURATION_STEP_SET_MAINAPP_H_