Replace pkg_path with GetPkgPath() method in InstallerContext
[platform/core/appfw/wgt-backend.git] / src / wgt / step / pkgmgr / step_generate_xml.cc
index 3e63560..64a2303 100644 (file)
@@ -94,16 +94,9 @@ bool WriteWidgetApplicationAttributesAndElements(
   if (app->multiple)
     xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple",
         BAD_CAST app->multiple);
-  // FIXME: For hotfix, must be removed
-  if (app->support_sizes) {
-    for (auto& ss : GListRange<support_size_x*>(app->support_sizes)) {
-      xmlTextWriterStartElement(writer, BAD_CAST "support-size");
-      xmlTextWriterWriteAttribute(writer, BAD_CAST "preview",
-          BAD_CAST ss->preview);
-      xmlTextWriterWriteString(writer, BAD_CAST ss->size);
-      xmlTextWriterEndElement(writer);
-    }
-  }
+  if (app->mainapp)
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "main",
+        BAD_CAST app->mainapp);
 
   auto& appwidgets = widget_info.app_widgets();
   const auto& appwidget = std::find_if(appwidgets.begin(), appwidgets.end(),
@@ -115,8 +108,6 @@ bool WriteWidgetApplicationAttributesAndElements(
   }
 
   // Add extra elements for wgt widget-application
-  xmlTextWriterWriteAttribute(writer, BAD_CAST "main",
-      BAD_CAST (appwidget->primary ? "true" : "false"));  // NOLINT
   if (!appwidget->update_period.empty()) {
         xmlTextWriterWriteAttribute(writer, BAD_CAST "update-period", BAD_CAST
             std::to_string(static_cast<int>(
@@ -159,9 +150,9 @@ bool WriteWidgetApplicationAttributesAndElements(
 
 void WriteWatchApplicationAttributes(
     xmlTextWriterPtr writer, application_x* app) {
-  if (app->ambient_support)
+  if (app->support_ambient)
     xmlTextWriterWriteAttribute(writer, BAD_CAST "ambient-support",
-        BAD_CAST app->ambient_support);
+        BAD_CAST app->support_ambient);
 }
 
 }  // namespace
@@ -174,7 +165,7 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
   xmlTextWriterWriteAttribute(writer, BAD_CAST "appid", BAD_CAST app->appid);
 
   // binary is a symbolic link named <appid> and is located in <pkgid>/<appid>
-  bf::path exec_path = context_->pkg_path.get()
+  bf::path exec_path = context_->GetPkgPath()
       / bf::path("bin") / bf::path(app->appid);
   xmlTextWriterWriteAttribute(writer, BAD_CAST "exec",
                               BAD_CAST exec_path.string().c_str());
@@ -198,7 +189,7 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
     if (!WriteWidgetApplicationAttributesAndElements(writer, app,
         static_cast<WgtBackendData*>(
             context_->backend_data.get())->appwidgets.get(),
-        context_->pkg_path.get() / "shared" / "res"))
+        context_->GetPkgPath() / "shared" / "res"))
       return Status::MANIFEST_ERROR;
     break;
   case AppCompType::WATCHAPP:
@@ -314,9 +305,7 @@ common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml(
 }
 
 common_installer::Step::Status StepGenerateXml::undo() {
-  bs::error_code error;
-  if (bf::exists(context_->xml_path.get()))
-    bf::remove_all(context_->xml_path.get(), error);
+  common_installer::RemoveAll(context_->xml_path.get());
   return Status::OK;
 }
 
@@ -341,7 +330,7 @@ common_installer::Step::Status StepGenerateXml::precheck() {
 common_installer::Step::Status StepGenerateXml::process() {
   bf::path xml_path =
       bf::path(getUserManifestPath(context_->uid.get(),
-                  context_->is_preload_request.get()))
+                  context_->is_readonly_package.get()))
       / bf::path(context_->pkgid.get());
   xml_path += ".xml";
   context_->xml_path.set(xml_path.string());
@@ -397,11 +386,12 @@ common_installer::Step::Status StepGenerateXml::GenerateManifestElement(
     return status;
   }
   GeneratePrivilege(writer);
+  GenerateProvidesAppDefinedPrivilege(writer);
   GenerateAccount(writer);
   GenerateIme(writer);
   GenerateProfiles(writer);
   GenerateShortcuts(writer);
-
+  GenerateTrustAnchor(writer);
   xmlTextWriterEndElement(writer);
   return Status::OK;
 }
@@ -420,6 +410,12 @@ void StepGenerateXml::GenerateManifestElementAttributes(
       BAD_CAST context_->manifest_data.get()->api_version);
   xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay-setting",
       BAD_CAST context_->manifest_data.get()->nodisplay_setting);
+  if (context_->is_readonly_package.get()) {
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "readonly", BAD_CAST "true");
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "preload", BAD_CAST "true");
+  } else if (context_->is_preload_rw_package.get()) {
+    xmlTextWriterWriteAttribute(writer, BAD_CAST "preload", BAD_CAST "true");
+  }
 }
 
 void StepGenerateXml::GenerateLangLabels(xmlTextWriterPtr writer) {
@@ -510,7 +506,37 @@ void StepGenerateXml::GeneratePrivilege(xmlTextWriterPtr writer) {
       xmlTextWriterWriteString(writer, BAD_CAST priv->value);
       xmlTextWriterEndElement(writer);
     }
+    if (context_->manifest_data.get()->appdefined_privileges) {
+      for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+           context_->manifest_data.get()->appdefined_privileges)) {
+        xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+        xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+                                    BAD_CAST priv->license);
+        xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+                                    BAD_CAST priv->type);
+        xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+        xmlTextWriterEndElement(writer);
+      }
+    }
+    xmlTextWriterEndElement(writer);
+  }
+}
 
+void StepGenerateXml::GenerateProvidesAppDefinedPrivilege(
+    xmlTextWriterPtr writer) {
+  if (context_->manifest_data.get()->provides_appdefined_privileges) {
+    xmlTextWriterStartElement(writer,
+                              BAD_CAST "provides-appdefined-privileges");
+    for (appdefined_privilege_x* priv : GListRange<appdefined_privilege_x*>(
+         context_->manifest_data.get()->provides_appdefined_privileges)) {
+      xmlTextWriterStartElement(writer, BAD_CAST "appdefined-privilege");
+      xmlTextWriterWriteAttribute(writer, BAD_CAST "license",
+                                  BAD_CAST priv->license);
+      xmlTextWriterWriteAttribute(writer, BAD_CAST "type",
+                                  BAD_CAST priv->type);
+      xmlTextWriterWriteString(writer, BAD_CAST priv->value);
+      xmlTextWriterEndElement(writer);
+    }
     xmlTextWriterEndElement(writer);
   }
 }
@@ -625,10 +651,10 @@ void StepGenerateXml::GenerateShortcuts(xmlTextWriterPtr writer) {
       if (!shortcut.app_id.empty())
         xmlTextWriterWriteAttribute(writer, BAD_CAST "appid",
                                     BAD_CAST shortcut.app_id.c_str());
-      if (!shortcut.app_id.empty())
+      if (!shortcut.extra_data.empty())
         xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_data",
                                     BAD_CAST shortcut.extra_data.c_str());
-      if (!shortcut.app_id.empty())
+      if (!shortcut.extra_key.empty())
         xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_key",
                                     BAD_CAST shortcut.extra_key.c_str());
       if (!shortcut.icon.empty()) {
@@ -650,5 +676,16 @@ void StepGenerateXml::GenerateShortcuts(xmlTextWriterPtr writer) {
   }
 }
 
+void StepGenerateXml::GenerateTrustAnchor(xmlTextWriterPtr writer) {
+  if (!context_->manifest_data.get()->use_system_certs)
+    return;
+
+  xmlTextWriterStartElement(writer, BAD_CAST "trust-anchor");
+  xmlTextWriterWriteAttribute(writer, BAD_CAST "use-system-certs",
+      BAD_CAST context_->manifest_data.get()->use_system_certs);
+
+  xmlTextWriterEndElement(writer);
+}
+
 }  // namespace pkgmgr
 }  // namespace wgt