From 6d5ef60c6faa649c5f8a2674e178d26c92e74acf Mon Sep 17 00:00:00 2001
From: Piotr Ganicz
Date: Fri, 30 Sep 2016 11:24:43 +0200
Subject: [PATCH 01/16] Coding style
Change-Id: Ib507c02e3202cd96df63a1fddf8d51fa8cb7f163
---
src/wgt/step/configuration/step_parse.cc | 4 +++-
src/wgt/step/encryption/step_encrypt_resources.cc | 6 +++---
src/wgt/step/filesystem/step_wgt_patch_icons.cc | 3 ++-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc
index c6bf723..c15d8af 100644
--- a/src/wgt/step/configuration/step_parse.cc
+++ b/src/wgt/step/configuration/step_parse.cc
@@ -39,6 +39,7 @@
#include
#include
#include
+#include
#include "wgt/wgt_backend_data.h"
@@ -77,7 +78,8 @@ void AppendWidgetMetadata(GList** metadatas,
const std::vector> metadata) {
GList* list = *metadatas;
for (auto& meta : metadata) {
- metadata_x* new_meta = static_cast(calloc(1, sizeof(metadata_x)));
+ metadata_x* new_meta =
+ static_cast(calloc(1, sizeof(metadata_x)));
new_meta->key = strdup(meta.first.c_str());
if (!meta.second.empty())
new_meta->value = strdup(meta.second.c_str());
diff --git a/src/wgt/step/encryption/step_encrypt_resources.cc b/src/wgt/step/encryption/step_encrypt_resources.cc
index b2ec518..d7d2e9a 100644
--- a/src/wgt/step/encryption/step_encrypt_resources.cc
+++ b/src/wgt/step/encryption/step_encrypt_resources.cc
@@ -23,7 +23,7 @@
namespace {
-const std::size_t kEncryptionChunkMaxSize = 8_kB; // bytes
+const std::size_t kEncryptionChunkMaxSize = 8_kB; // bytes
const std::set encryptSet { ".html", ".htm", ".css", ".js"};
FILE* OpenFile(const std::string& path, const std::string& mode) {
@@ -191,7 +191,8 @@ bool StepEncryptResources::EncryptFile(const bf::path &src) {
size_t encrypted_size = 0;
// TODO(p.sikorski) check if it is Preloaded
int ret;
- if (context_->request_mode.get() == common_installer::RequestMode::GLOBAL) {
+ if (context_->request_mode.get()
+ == common_installer::RequestMode::GLOBAL) {
ret = wae_encrypt_global_web_application(
context_->pkgid.get().c_str(),
context_->is_preload_request.get() ?
@@ -255,7 +256,6 @@ bool StepEncryptResources::EncryptFile(const bf::path &src) {
free(encrypted_data);
}
inChunk.reset(new unsigned char[chunkSize]);
-
} while (!std::feof(input));
fclose(output);
diff --git a/src/wgt/step/filesystem/step_wgt_patch_icons.cc b/src/wgt/step/filesystem/step_wgt_patch_icons.cc
index c01c1c8..ade10df 100644
--- a/src/wgt/step/filesystem/step_wgt_patch_icons.cc
+++ b/src/wgt/step/filesystem/step_wgt_patch_icons.cc
@@ -60,7 +60,8 @@ common_installer::Step::Status StepWgtPatchIcons::process() {
// create default icon if there is no icon at all
bf::path icon_path = common_icon_location / app->appid;
icon_path += ".png";
- bf::copy_file(kDefaultIconPath, icon_path, bf::copy_option::overwrite_if_exists, error);
+ bf::copy_file(kDefaultIconPath, icon_path,
+ bf::copy_option::overwrite_if_exists, error);
if (error) {
LOG(ERROR) << "Failed to create default icon for web application";
return Status::ICON_ERROR;
--
2.7.4
From ae4180600470832d977354a5bc350031817a1a4c Mon Sep 17 00:00:00 2001
From: Tomasz Iwanek
Date: Mon, 26 Sep 2016 11:12:48 +0200
Subject: [PATCH 02/16] Fix checking privilege level for hybrid apps
There are two facts:
- we need to store all privileges into pkgmgr database,
- we need to check privilege level for native and web
privileges separatelly in case of hybrid application.
Therefore, merging of native and web privilege is delayed till
checking privilege level. Installing of hybrid app will involve
customized step for checking privilege level.
Requires:
- https://review.tizen.org/gerrit/89685
Change-Id: I7bb044e4ddb6de488e959b8433105bc22c82f0c1
---
src/hybrid/CMakeLists.txt | 2 +
src/hybrid/hybrid_installer.cc | 24 ++++++----
.../step/configuration/step_merge_tpk_config.cc | 4 --
.../step/configuration/step_merge_tpk_config.h | 3 ++
.../configuration/step_merge_tpk_privileges.cc | 27 ++++++++++++
.../step/configuration/step_merge_tpk_privileges.h | 34 +++++++++++++++
.../step/security/step_hybrid_check_signature.cc | 51 ++++++++++++++++++++++
.../step/security/step_hybrid_check_signature.h | 27 ++++++++++++
8 files changed, 160 insertions(+), 12 deletions(-)
create mode 100644 src/hybrid/step/configuration/step_merge_tpk_privileges.cc
create mode 100644 src/hybrid/step/configuration/step_merge_tpk_privileges.h
create mode 100644 src/hybrid/step/security/step_hybrid_check_signature.cc
create mode 100644 src/hybrid/step/security/step_hybrid_check_signature.h
diff --git a/src/hybrid/CMakeLists.txt b/src/hybrid/CMakeLists.txt
index ccc7f4a..bc950d5 100644
--- a/src/hybrid/CMakeLists.txt
+++ b/src/hybrid/CMakeLists.txt
@@ -1,7 +1,9 @@
SET(SRCS
step/configuration/step_merge_tpk_config.cc
+ step/configuration/step_merge_tpk_privileges.cc
step/configuration/step_stash_tpk_config.cc
step/encryption/step_encrypt_resources.cc
+ step/security/step_hybrid_check_signature.cc
hybrid_installer.cc
)
ADD_LIBRARY(${TARGET_LIBNAME_HYBRID} STATIC ${SRCS})
diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc
index 7a5e12e..eac41e6 100644
--- a/src/hybrid/hybrid_installer.cc
+++ b/src/hybrid/hybrid_installer.cc
@@ -57,7 +57,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -74,8 +73,10 @@
#include "hybrid/hybrid_backend_data.h"
#include "hybrid/step/configuration/step_merge_tpk_config.h"
+#include "hybrid/step/configuration/step_merge_tpk_privileges.h"
#include "hybrid/step/configuration/step_stash_tpk_config.h"
#include "hybrid/step/encryption/step_encrypt_resources.h"
+#include "hybrid/step/security/step_hybrid_check_signature.h"
#include "wgt/step/configuration/step_parse.h"
#include "wgt/step/encryption/step_remove_encryption_data.h"
#include "wgt/step/filesystem/step_copy_preview_icons.h"
@@ -110,7 +111,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -151,7 +153,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -231,7 +234,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -301,7 +305,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -342,7 +347,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -387,7 +393,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -414,7 +421,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
diff --git a/src/hybrid/step/configuration/step_merge_tpk_config.cc b/src/hybrid/step/configuration/step_merge_tpk_config.cc
index 913ad98..15d59c3 100644
--- a/src/hybrid/step/configuration/step_merge_tpk_config.cc
+++ b/src/hybrid/step/configuration/step_merge_tpk_config.cc
@@ -21,10 +21,6 @@ common_installer::Step::Status StepMergeTpkConfig::process() {
g_list_concat(wgt_data->application, tpk_data->application);
tpk_data->application = nullptr;
- wgt_data->privileges =
- g_list_concat(wgt_data->privileges, tpk_data->privileges);
- tpk_data->privileges = nullptr;
-
return Status::OK;
}
diff --git a/src/hybrid/step/configuration/step_merge_tpk_config.h b/src/hybrid/step/configuration/step_merge_tpk_config.h
index 2171d59..623eba5 100644
--- a/src/hybrid/step/configuration/step_merge_tpk_config.h
+++ b/src/hybrid/step/configuration/step_merge_tpk_config.h
@@ -15,6 +15,9 @@ namespace configuration {
* \brief MergeTpkConfig
* Merges information from tpk manifest into information from widget
* configuration for hybrid package.
+ *
+ * Expection is the information about native privileges. These are merged in
+ * \see StepMergeTpkPrivileges
*/
class StepMergeTpkConfig : public common_installer::Step {
public:
diff --git a/src/hybrid/step/configuration/step_merge_tpk_privileges.cc b/src/hybrid/step/configuration/step_merge_tpk_privileges.cc
new file mode 100644
index 0000000..ef763d6
--- /dev/null
+++ b/src/hybrid/step/configuration/step_merge_tpk_privileges.cc
@@ -0,0 +1,27 @@
+// 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 "hybrid/step/configuration/step_merge_tpk_privileges.h"
+
+#include "hybrid/hybrid_backend_data.h"
+
+namespace ci = common_installer;
+
+namespace hybrid {
+namespace configuration {
+
+ci::Step::Status StepMergeTpkPrivileges::process() {
+ // merge privilege list for insertion into database
+ HybridBackendData* data =
+ static_cast(context_->backend_data.get());
+ manifest_x* tpk_data = data->tpk_manifest_data.get();
+ manifest_x* wgt_data = context_->manifest_data.get();
+ wgt_data->privileges =
+ g_list_concat(wgt_data->privileges, tpk_data->privileges);
+ tpk_data->privileges = nullptr;
+ return Status::OK;
+}
+
+} // namespace configuration
+} // namespace hybrid
diff --git a/src/hybrid/step/configuration/step_merge_tpk_privileges.h b/src/hybrid/step/configuration/step_merge_tpk_privileges.h
new file mode 100644
index 0000000..0afe851
--- /dev/null
+++ b/src/hybrid/step/configuration/step_merge_tpk_privileges.h
@@ -0,0 +1,34 @@
+// 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 HYBRID_STEP_CONFIGURATION_STEP_MERGE_TPK_PRIVILEGES_H_
+#define HYBRID_STEP_CONFIGURATION_STEP_MERGE_TPK_PRIVILEGES_H_
+
+#include
+#include
+
+namespace hybrid {
+namespace configuration {
+
+/**
+ * @brief The StepMergeTpkPrivileges class
+ * Merges native privileges into web applicaiton privileges when
+ * installing hybrid app.
+ */
+class StepMergeTpkPrivileges : public common_installer::Step {
+ public:
+ using Step::Step;
+
+ Status process() override;
+ Status undo() override { return Status::OK; }
+ Status clean() override { return Status::OK; }
+ Status precheck() override { return Status::OK; }
+
+ STEP_NAME(MergeTpkPrivileges)
+};
+
+} // namespace configuration
+} // namespace hybrid
+
+#endif // HYBRID_STEP_CONFIGURATION_STEP_MERGE_TPK_PRIVILEGES_H_
diff --git a/src/hybrid/step/security/step_hybrid_check_signature.cc b/src/hybrid/step/security/step_hybrid_check_signature.cc
new file mode 100644
index 0000000..b71717f
--- /dev/null
+++ b/src/hybrid/step/security/step_hybrid_check_signature.cc
@@ -0,0 +1,51 @@
+// 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 "hybrid/step/security/step_hybrid_check_signature.h"
+
+#include
+
+#include
+
+#include "hybrid/hybrid_backend_data.h"
+
+namespace ci = common_installer;
+
+namespace {
+
+const char kNativePackageType[] = "tpk";
+
+} // namespace
+
+namespace hybrid {
+namespace security {
+
+ci::Step::Status StepHybridCheckSignature::CheckPrivilegeLevel(
+ ci::PrivilegeLevel level) {
+ auto status = StepCheckSignature::CheckPrivilegeLevel(level);
+ if (status != Status::OK)
+ return status;
+
+ HybridBackendData* data =
+ static_cast(context_->backend_data.get());
+ manifest_x* tpk_data = data->tpk_manifest_data.get();
+ if (tpk_data->privileges) {
+ std::string error_message;
+ if (!context_->is_preload_request.get()) {
+ if (!ci::ValidatePrivilegeLevel(level, kNativePackageType,
+ tpk_data->api_version, tpk_data->privileges, &error_message)) {
+ if (!error_message.empty()) {
+ LOG(ERROR) << "error_message: " << error_message;
+ on_error(Status::SIGNATURE_ERROR, error_message);
+ }
+ return Status::SIGNATURE_ERROR;
+ }
+ }
+ }
+
+ return Status::OK;
+}
+
+} // namespace security
+} // namespace hybrid
diff --git a/src/hybrid/step/security/step_hybrid_check_signature.h b/src/hybrid/step/security/step_hybrid_check_signature.h
new file mode 100644
index 0000000..d867700
--- /dev/null
+++ b/src/hybrid/step/security/step_hybrid_check_signature.h
@@ -0,0 +1,27 @@
+// 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 HYBRID_STEP_SECURITY_STEP_HYBRID_CHECK_SIGNATURE_H_
+#define HYBRID_STEP_SECURITY_STEP_HYBRID_CHECK_SIGNATURE_H_
+
+#include
+#include
+
+namespace hybrid {
+namespace security {
+
+class StepHybridCheckSignature
+ : public common_installer::security::StepCheckSignature {
+ public:
+ using StepCheckSignature::StepCheckSignature;
+
+ Status CheckPrivilegeLevel(common_installer::PrivilegeLevel level) override;
+
+ STEP_NAME(HybridCheckSignature)
+};
+
+} // namespace security
+} // namespace hybrid
+
+#endif // HYBRID_STEP_SECURITY_STEP_HYBRID_CHECK_SIGNATURE_H_
--
2.7.4
From 88bac074ab0094c74a426de47e8a4a2b33200ef1 Mon Sep 17 00:00:00 2001
From: Sangyoon Jang
Date: Tue, 4 Oct 2016 17:49:40 +0900
Subject: [PATCH 03/16] Fix WgtAppQueryInterface
Don't parse again argv, argc.
They are already parsed by PkgMgrInterface.
Requires:
- https://review.tizen.org/gerrit/90478
Change-Id: I2ab9f8ad291f97070d38617e1fd4cb15bb9e986a
Signed-off-by: Sangyoon Jang
---
src/wgt/wgt_app_query_interface.cc | 57 +++++++++-----------------------------
src/wgt/wgt_app_query_interface.h | 14 ++++------
src/wgt_backend/wgt_backend.cc | 3 +-
3 files changed, 21 insertions(+), 53 deletions(-)
diff --git a/src/wgt/wgt_app_query_interface.cc b/src/wgt/wgt_app_query_interface.cc
index 90adc45..be08ae1 100644
--- a/src/wgt/wgt_app_query_interface.cc
+++ b/src/wgt/wgt_app_query_interface.cc
@@ -11,6 +11,7 @@
#include
#include
+#include
#include
#include
#include
@@ -36,35 +37,6 @@ namespace {
const char kHybridConfigLocation[] = "res/wgt/config.xml";
const char kTizenManifestLocation[] = "tizen-manifest.xml";
-uid_t GetUid(int argc, char** argv) {
- uid_t uid = 0;
- for (int i = 0; i < argc; ++i) {
- if (!strcmp(argv[i], "-u")) {
- if (i + 1 < argc) {
- uid = atoi(argv[i + 1]);
- break;
- }
- }
- }
-
- return uid;
-}
-
-std::string GetInstallationRequestInfo(int argc, char** argv) {
- std::string path;
- 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], "-y")) {
- if (i + 1 < argc) {
- path = argv[i + 1];
- break;
- }
- }
- }
- return path;
-}
-
std::string GetPkgIdFromPath(const std::string& path) {
if (!bf::exists(path))
return {};
@@ -115,12 +87,7 @@ std::string ReadPkgidFromRecovery(const std::string& recovery_path) {
namespace wgt {
-bool WgtAppQueryInterface::IsAppInstalledByArgv(int argc, char** argv) {
- std::string arg = GetInstallationRequestInfo(argc, argv);
- if (arg.empty())
- return false;
-
- uid_t uid = GetUid(argc, argv);
+bool WgtAppQueryInterface::IsPkgInstalled(const std::string& arg, uid_t uid) {
// argument from commandline is package id
if (ci::QueryIsPackageInstalled(arg, ci::GetRequestMode(uid), uid))
return true;
@@ -132,24 +99,26 @@ bool WgtAppQueryInterface::IsAppInstalledByArgv(int argc, char** argv) {
return ci::QueryIsPackageInstalled(pkg_id, ci::GetRequestMode(uid), uid);
}
-bool WgtAppQueryInterface::IsHybridApplication(int argc, char** argv) {
- std::string arg = GetInstallationRequestInfo(argc, argv);
+bool WgtAppQueryInterface::IsHybridApplication(const std::string& arg,
+ uid_t uid) {
+ std::string info;
if (arg.find("apps_rw/recovery-") != std::string::npos)
- arg = ReadPkgidFromRecovery(arg);
+ info = ReadPkgidFromRecovery(arg);
+ else
+ info = arg;
- uid_t uid = GetUid(argc, argv);
- if (ci::QueryIsPackageInstalled(arg, ci::GetRequestMode(uid), uid)) {
+ if (ci::QueryIsPackageInstalled(info, ci::GetRequestMode(uid), uid)) {
bf::path package_directory(ci::GetRootAppPath(false, uid));
- if (bf::exists(package_directory / arg / kTizenManifestLocation) &&
- bf::exists(package_directory / arg / kHybridConfigLocation))
+ if (bf::exists(package_directory / info / kTizenManifestLocation) &&
+ bf::exists(package_directory / info / kHybridConfigLocation))
return true;
} else {
bool tizen_manifest_found = false;
bool config_xml_found = false;
- if (!ci::CheckPathInZipArchive(arg.c_str(), kTizenManifestLocation,
+ if (!ci::CheckPathInZipArchive(info.c_str(), kTizenManifestLocation,
&tizen_manifest_found))
return false;
- if (!ci::CheckPathInZipArchive(arg.c_str(), kHybridConfigLocation,
+ if (!ci::CheckPathInZipArchive(info.c_str(), kHybridConfigLocation,
&config_xml_found))
return false;
if (tizen_manifest_found && config_xml_found)
diff --git a/src/wgt/wgt_app_query_interface.h b/src/wgt/wgt_app_query_interface.h
index 8c3776a..fe075fe 100644
--- a/src/wgt/wgt_app_query_interface.h
+++ b/src/wgt/wgt_app_query_interface.h
@@ -5,6 +5,10 @@
#ifndef WGT_WGT_APP_QUERY_INTERFACE_H_
#define WGT_WGT_APP_QUERY_INTERFACE_H_
+#include
+
+#include
+
#include
namespace wgt {
@@ -20,23 +24,17 @@ class WgtAppQueryInterface : public common_installer::AppQueryInterface {
* \brief method for checking if package is installed based
* on argv
*
- * \param argc main() argc argument passed to the backend
- * \param argv main() argv argument passed to the backend
- *
* \return true if package is installed
*/
- bool IsAppInstalledByArgv(int argc, char** argv) override;
+ bool IsPkgInstalled(const std::string& arg, uid_t uid) override;
/**
* \brief This method is workaround for detecting installation of hybrid
* application.
*
- * \param argc main() argc argument passed to the backend
- * \param argv main() argv argument passed to the backend
- *
* \return true if package is hybrid
*/
- bool IsHybridApplication(int argc, char** argv);
+ bool IsHybridApplication(const std::string& arg, uid_t uid);
};
} // namespace wgt
diff --git a/src/wgt_backend/wgt_backend.cc b/src/wgt_backend/wgt_backend.cc
index 14639c6..f0633b4 100644
--- a/src/wgt_backend/wgt_backend.cc
+++ b/src/wgt_backend/wgt_backend.cc
@@ -24,7 +24,8 @@ int main(int argc, char** argv) {
// This is workaround for hybrid apps as they requires much different flow
// but installer does not branch at all in current design
- if (query_interface.IsHybridApplication(argc, argv)) {
+ if (query_interface.IsHybridApplication(
+ pkgmgr->GetRequestInfo(), pkgmgr->GetUid())) {
LOG(INFO) << "Hybrid package detected";
hybrid::HybridInstaller installer(pkgmgr);
return (installer.Run() == ci::AppInstaller::Result::OK) ? 0 : 1;
--
2.7.4
From a93be446c8cb36cff18a0ad5b7337ff512f5f6fd Mon Sep 17 00:00:00 2001
From: Tomasz Iwanek
Date: Fri, 7 Oct 2016 10:56:10 +0200
Subject: [PATCH 04/16] Patch reinstall/RDS according to SDK behaviour
Commit changes reinstall request argument. Now pkgid
is expected instead of path to directory. What is more,
if package manifest is not in the directory supplied by
reinstall/RDS then it will be copied from install location.
Application installer expects that SDK will put files into:
- local installation:
/home/$USERNAME/apps_rw/tmp/$PKGID/
- global installation:
/opt/apps/tmp/$PKGID/
Requires:
- https://review.tizen.org/gerrit/91412
Submit together:
- https://review.tizen.org/gerrit/91430
- https://review.tizen.org/gerrit/91431
- https://review.tizen.org/gerrit/91432
Verification:
- run smoke tests,
- run reinstall from SDK,
- run RDS from SDK.
Change-Id: I7a5008c6a5d9d28f4181a0be92d42dc9c8e57e28
---
src/unit_tests/smoke_test.cc | 19 ++++++---
.../test_samples/smoke/delta_dir/.rds_delta | 6 +--
.../smoke/delta_dir/{ => res/wgt}/ADDED | 0
.../smoke/delta_dir/{ => res/wgt}/MODIFIED | 0
.../smoke/delta_dir/{ => res/wgt}/config.xml | 0
src/wgt/CMakeLists.txt | 2 +-
.../step/configuration/step_check_rds_manifest.cc | 49 ++++++++++++++++++++++
.../step/configuration/step_check_rds_manifest.h | 31 ++++++++++++++
src/wgt/step/rds/step_wgt_rds_modify.cc | 23 ----------
src/wgt/step/rds/step_wgt_rds_modify.h | 41 ------------------
src/wgt/wgt_installer.cc | 11 ++---
11 files changed, 104 insertions(+), 78 deletions(-)
rename src/unit_tests/test_samples/smoke/delta_dir/{ => res/wgt}/ADDED (100%)
rename src/unit_tests/test_samples/smoke/delta_dir/{ => res/wgt}/MODIFIED (100%)
rename src/unit_tests/test_samples/smoke/delta_dir/{ => res/wgt}/config.xml (100%)
create mode 100644 src/wgt/step/configuration/step_check_rds_manifest.cc
create mode 100644 src/wgt/step/configuration/step_check_rds_manifest.h
delete mode 100644 src/wgt/step/rds/step_wgt_rds_modify.cc
delete mode 100644 src/wgt/step/rds/step_wgt_rds_modify.h
diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc
index 48c6045..ec1ab9d 100644
--- a/src/unit_tests/smoke_test.cc
+++ b/src/unit_tests/smoke_test.cc
@@ -6,13 +6,16 @@
#include
#include
#include
+
#include
#include
#include
#include
#include
#include
+#include
#include
+
#include
#include
#include
@@ -334,15 +337,15 @@ ci::AppInstaller::Result Uninstall(const std::string& pkgid,
return CallBackend(SIZEOFARRAY(argv), argv, type, mode);
}
-ci::AppInstaller::Result Reinstall(const bf::path& path,
- const bf::path& delta_dir,
+ci::AppInstaller::Result RDSUpdate(const bf::path& path,
+ const std::string& pkgid,
PackageType type,
RequestResult mode = RequestResult::NORMAL) {
if (Install(path, type) != ci::AppInstaller::Result::OK) {
LOG(ERROR) << "Failed to install application. Cannot perform RDS";
return ci::AppInstaller::Result::UNKNOWN;
}
- const char* argv[] = {"", "-r", delta_dir.c_str(), "-u",
+ const char* argv[] = {"", "-r", pkgid.c_str(), "-u",
kTestUserIdStr.c_str()};
return CallBackend(SIZEOFARRAY(argv), argv, type, mode);
}
@@ -493,10 +496,16 @@ TEST_F(SmokeTest, DeinstallationMode) {
TEST_F(SmokeTest, RDSMode) {
bf::path path = kSmokePackagesDirectory / "RDSMode.wgt";
- bf::path delta_directory = kSmokePackagesDirectory / "delta_dir/";
std::string pkgid = "smokeapp11";
std::string appid = "smokeapp11.RDSMode";
- ASSERT_EQ(Reinstall(path, delta_directory, PackageType::WGT),
+ bf::path delta_directory = kSmokePackagesDirectory / "delta_dir/";
+ bf::path sdk_expected_directory =
+ bf::path(ci::GetRootAppPath(false, kTestUserId)) / "tmp" / pkgid;
+ bs::error_code error;
+ bf::create_directories(sdk_expected_directory.parent_path(), error);
+ ASSERT_FALSE(error);
+ ASSERT_TRUE(CopyDir(delta_directory, sdk_expected_directory));
+ ASSERT_EQ(RDSUpdate(path, pkgid, PackageType::WGT),
ci::AppInstaller::Result::OK);
ValidatePackage(pkgid, {appid});
diff --git a/src/unit_tests/test_samples/smoke/delta_dir/.rds_delta b/src/unit_tests/test_samples/smoke/delta_dir/.rds_delta
index fb08dcc..7467bbe 100644
--- a/src/unit_tests/test_samples/smoke/delta_dir/.rds_delta
+++ b/src/unit_tests/test_samples/smoke/delta_dir/.rds_delta
@@ -1,6 +1,6 @@
#add
-ADDED
+res/wgt/ADDED
#modify
-MODIFIED
+res/wgt/MODIFIED
#delete
-DELETED
+res/wgt/DELETED
diff --git a/src/unit_tests/test_samples/smoke/delta_dir/ADDED b/src/unit_tests/test_samples/smoke/delta_dir/res/wgt/ADDED
similarity index 100%
rename from src/unit_tests/test_samples/smoke/delta_dir/ADDED
rename to src/unit_tests/test_samples/smoke/delta_dir/res/wgt/ADDED
diff --git a/src/unit_tests/test_samples/smoke/delta_dir/MODIFIED b/src/unit_tests/test_samples/smoke/delta_dir/res/wgt/MODIFIED
similarity index 100%
rename from src/unit_tests/test_samples/smoke/delta_dir/MODIFIED
rename to src/unit_tests/test_samples/smoke/delta_dir/res/wgt/MODIFIED
diff --git a/src/unit_tests/test_samples/smoke/delta_dir/config.xml b/src/unit_tests/test_samples/smoke/delta_dir/res/wgt/config.xml
similarity index 100%
rename from src/unit_tests/test_samples/smoke/delta_dir/config.xml
rename to src/unit_tests/test_samples/smoke/delta_dir/res/wgt/config.xml
diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt
index 3124963..678dc70 100755
--- a/src/wgt/CMakeLists.txt
+++ b/src/wgt/CMakeLists.txt
@@ -1,5 +1,6 @@
# Target - sources
SET(SRCS
+ step/configuration/step_check_rds_manifest.cc
step/configuration/step_check_start_files.cc
step/configuration/step_parse.cc
step/encryption/step_encrypt_resources.cc
@@ -12,7 +13,6 @@ SET(SRCS
step/filesystem/step_wgt_resource_directory.cc
step/filesystem/step_wgt_update_package_directory.cc
step/pkgmgr/step_generate_xml.cc
- step/rds/step_wgt_rds_modify.cc
step/security/step_add_default_privileges.cc
step/security/step_check_settings_level.cc
step/security/step_check_wgt_background_category.cc
diff --git a/src/wgt/step/configuration/step_check_rds_manifest.cc b/src/wgt/step/configuration/step_check_rds_manifest.cc
new file mode 100644
index 0000000..560f015
--- /dev/null
+++ b/src/wgt/step/configuration/step_check_rds_manifest.cc
@@ -0,0 +1,49 @@
+// 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/configuration/step_check_rds_manifest.h"
+
+#include
+#include
+#include
+
+namespace bf = boost::filesystem;
+namespace bs = boost::system;
+
+namespace {
+
+const char kConfigInstalled[] = "res/wgt/config.xml";
+const char kConfigDeltaDir[] = "res/wgt/config.xml";
+
+} // namespace
+
+namespace wgt {
+namespace configuration {
+
+common_installer::Step::Status StepCheckRDSManifest::process() {
+ bf::path target = context_->unpacked_dir_path.get() / kConfigDeltaDir;
+ if (!bf::exists(target)) {
+ bf::path source = context_->root_application_path.get() /
+ context_->pkgid.get() / kConfigInstalled;
+ if (!bf::exists(source)) {
+ LOG(ERROR) << "Cannot find old manifest file";
+ return Status::APP_DIR_ERROR;
+ }
+ bs::error_code error;
+ bf::create_directories(source.parent_path(), error);
+ if (error) {
+ LOG(ERROR) << "Failed to create directories for manifest file";
+ return Status::APP_DIR_ERROR;
+ }
+ bf::copy_file(source, target, error);
+ if (error) {
+ LOG(ERROR) << "Failed to copy old manifest file";
+ return Status::APP_DIR_ERROR;
+ }
+ }
+ return Status::OK;
+}
+
+} // namespace configuration
+} // namespace wgt
diff --git a/src/wgt/step/configuration/step_check_rds_manifest.h b/src/wgt/step/configuration/step_check_rds_manifest.h
new file mode 100644
index 0000000..ff5e06f
--- /dev/null
+++ b/src/wgt/step/configuration/step_check_rds_manifest.h
@@ -0,0 +1,31 @@
+// 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_CONFIGURATION_STEP_CHECK_RDS_MANIFEST_H_
+#define WGT_STEP_CONFIGURATION_STEP_CHECK_RDS_MANIFEST_H_
+
+#include
+
+#include
+#include
+
+namespace wgt {
+namespace configuration {
+
+class StepCheckRDSManifest : 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(CheckRDSManifest)
+};
+
+} // namespace configuration
+} // namespace wgt
+
+#endif // WGT_STEP_CONFIGURATION_STEP_CHECK_RDS_MANIFEST_H_
diff --git a/src/wgt/step/rds/step_wgt_rds_modify.cc b/src/wgt/step/rds/step_wgt_rds_modify.cc
deleted file mode 100644
index aa293e9..0000000
--- a/src/wgt/step/rds/step_wgt_rds_modify.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include "wgt/step/rds/step_wgt_rds_modify.h"
-
-#include
-#include
-
-#include
-#include
-#include
-
-namespace wgt {
-namespace rds {
-
-std::string StepWgtRDSModify::GetAppPath() {
- boost::filesystem::path p = context_->pkg_path.get() / "res" / "wgt";
- return p.string();
-}
-
-} // namespace rds
-} // namespace wgt
diff --git a/src/wgt/step/rds/step_wgt_rds_modify.h b/src/wgt/step/rds/step_wgt_rds_modify.h
deleted file mode 100644
index 2812b5a..0000000
--- a/src/wgt/step/rds/step_wgt_rds_modify.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a apache 2.0 license that can be
-// found in the LICENSE file.
-
-#ifndef WGT_STEP_RDS_STEP_WGT_RDS_MODIFY_H_
-#define WGT_STEP_RDS_STEP_WGT_RDS_MODIFY_H_
-
-#include
-#include
-#include
-
-#include
-#include
-#include
-
-#include "common/installer_context.h"
-
-namespace wgt {
-namespace rds {
-
-/**
- * \brief Step that apply RDS modification during reinstallation process
- */
-class StepWgtRDSModify : public common_installer::rds::StepRDSModify {
- public:
- using StepRDSModify::StepRDSModify;
-
- /**
- * \brief return app path
- *
- * \return std::string
- */
- std::string GetAppPath() override;
-
- STEP_NAME(WgtRDSModify)
-};
-
-} // namespace rds
-} // namespace wgt
-
-#endif // WGT_STEP_RDS_STEP_WGT_RDS_MODIFY_H_
diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc
index 29e1d7e..4905e55 100755
--- a/src/wgt/wgt_installer.cc
+++ b/src/wgt/wgt_installer.cc
@@ -59,6 +59,8 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -71,9 +73,8 @@
#include
#include
-#include
-#include
+#include "wgt/step/configuration/step_check_rds_manifest.h"
#include "wgt/step/configuration/step_check_start_files.h"
#include "wgt/step/configuration/step_parse.h"
#include "wgt/step/encryption/step_encrypt_resources.h"
@@ -86,7 +87,6 @@
#include "wgt/step/filesystem/step_wgt_resource_directory.h"
#include "wgt/step/filesystem/step_wgt_update_package_directory.h"
#include "wgt/step/pkgmgr/step_generate_xml.h"
-#include "wgt/step/rds/step_wgt_rds_modify.h"
#include "wgt/step/security/step_add_default_privileges.h"
#include "wgt/step/security/step_check_settings_level.h"
#include "wgt/step/security/step_check_wgt_background_category.h"
@@ -214,8 +214,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
}
case ci::RequestType::Reinstall: {
AddStep(pkgmgr_);
+ AddStep();
AddStep(
- wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
+ wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, false);
AddStep();
AddStep();
AddStep();
@@ -226,7 +227,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
--
2.7.4
From fdd6a8bba4cfb4f25a3a40f197b6ab0a31090eae Mon Sep 17 00:00:00 2001
From: Sangyoon Jang
Date: Mon, 17 Oct 2016 20:00:32 +0900
Subject: [PATCH 05/16] Fix step order of hybrid installer
Parser plugins should be run after pakcage registration.
Change-Id: I0635000604e28c28e88a7e3d56b69a972fec533a
Signed-off-by: Sangyoon Jang
---
src/hybrid/hybrid_installer.cc | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc
index eac41e6..e98f992 100644
--- a/src/hybrid/hybrid_installer.cc
+++ b/src/hybrid/hybrid_installer.cc
@@ -133,10 +133,10 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep(
- ci::Plugin::ActionType::Install);
AddStep();
AddStep();
+ AddStep(
+ ci::Plugin::ActionType::Install);
AddStep();
AddStep();
AddStep();
@@ -327,10 +327,10 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep(
- ci::Plugin::ActionType::Install);
AddStep();
AddStep();
+ AddStep(
+ ci::Plugin::ActionType::Install);
AddStep();
AddStep();
AddStep();
@@ -401,10 +401,10 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep(
- ci::Plugin::ActionType::Install);
AddStep();
AddStep();
+ AddStep(
+ ci::Plugin::ActionType::Install);
AddStep();
AddStep();
AddStep();
--
2.7.4
From 8c6fc81fabd0d348c8ab57af6ac6f7fd376e8cd1 Mon Sep 17 00:00:00 2001
From: Sangyoon Jang
Date: Mon, 17 Oct 2016 20:02:15 +0900
Subject: [PATCH 06/16] Temporary fix for hybrid pkg installation
Submit together:
- https://review.tizen.org/gerrit/92583
- https://review.tizen.org/gerrit/92584
- https://review.tizen.org/gerrit/92585
Change-Id: If9ab9d27126568e12efadcaea50988ab57cd4c5f
Signed-off-by: Sangyoon Jang
---
src/wgt/step/pkgmgr/step_generate_xml.cc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/wgt/step/pkgmgr/step_generate_xml.cc b/src/wgt/step/pkgmgr/step_generate_xml.cc
index d3e9aad..669bb26 100644
--- a/src/wgt/step/pkgmgr/step_generate_xml.cc
+++ b/src/wgt/step/pkgmgr/step_generate_xml.cc
@@ -94,6 +94,16 @@ 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(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);
+ }
+ }
auto& appwidgets = widget_info.app_widgets();
const auto& appwidget = std::find_if(appwidgets.begin(), appwidgets.end(),
--
2.7.4
From 58317277b6f3775ee6fc3d56e83b81be220f7848 Mon Sep 17 00:00:00 2001
From: Tomasz Iwanek
Date: Fri, 30 Sep 2016 10:48:38 +0200
Subject: [PATCH 07/16] Revert "Fix checking privilege level for hybrid apps"
Following commit will reimplement this bug fix.
This reverts commit 3002913a84371529abcb09bc7f51857bd3a3899a.
Change-Id: I6334d50351fe49daedf543322738b102de2444f5
---
src/hybrid/CMakeLists.txt | 2 -
src/hybrid/hybrid_installer.cc | 24 ++++------
.../step/configuration/step_merge_tpk_config.cc | 4 ++
.../step/configuration/step_merge_tpk_config.h | 3 --
.../configuration/step_merge_tpk_privileges.cc | 27 ------------
.../step/configuration/step_merge_tpk_privileges.h | 34 ---------------
.../step/security/step_hybrid_check_signature.cc | 51 ----------------------
.../step/security/step_hybrid_check_signature.h | 27 ------------
8 files changed, 12 insertions(+), 160 deletions(-)
delete mode 100644 src/hybrid/step/configuration/step_merge_tpk_privileges.cc
delete mode 100644 src/hybrid/step/configuration/step_merge_tpk_privileges.h
delete mode 100644 src/hybrid/step/security/step_hybrid_check_signature.cc
delete mode 100644 src/hybrid/step/security/step_hybrid_check_signature.h
diff --git a/src/hybrid/CMakeLists.txt b/src/hybrid/CMakeLists.txt
index bc950d5..ccc7f4a 100644
--- a/src/hybrid/CMakeLists.txt
+++ b/src/hybrid/CMakeLists.txt
@@ -1,9 +1,7 @@
SET(SRCS
step/configuration/step_merge_tpk_config.cc
- step/configuration/step_merge_tpk_privileges.cc
step/configuration/step_stash_tpk_config.cc
step/encryption/step_encrypt_resources.cc
- step/security/step_hybrid_check_signature.cc
hybrid_installer.cc
)
ADD_LIBRARY(${TARGET_LIBNAME_HYBRID} STATIC ${SRCS})
diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc
index e98f992..1a0e76f 100644
--- a/src/hybrid/hybrid_installer.cc
+++ b/src/hybrid/hybrid_installer.cc
@@ -57,6 +57,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -73,10 +74,8 @@
#include "hybrid/hybrid_backend_data.h"
#include "hybrid/step/configuration/step_merge_tpk_config.h"
-#include "hybrid/step/configuration/step_merge_tpk_privileges.h"
#include "hybrid/step/configuration/step_stash_tpk_config.h"
#include "hybrid/step/encryption/step_encrypt_resources.h"
-#include "hybrid/step/security/step_hybrid_check_signature.h"
#include "wgt/step/configuration/step_parse.h"
#include "wgt/step/encryption/step_remove_encryption_data.h"
#include "wgt/step/filesystem/step_copy_preview_icons.h"
@@ -111,8 +110,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -153,8 +151,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -234,8 +231,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true);
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -305,8 +301,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -347,8 +342,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -393,8 +387,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep();
AddStep();
- AddStep();
- AddStep();
+ AddStep();
AddStep();
AddStep();
AddStep();
@@ -421,8 +414,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr)
AddStep();
AddStep