From 6a4cf6791a12ed4a4371fd0cd3e251bdbbf75ca9 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Mon, 21 Nov 2016 16:00:25 +0900 Subject: [PATCH 01/16] Implement wgt backend library This backend library is for getting package information from file. The functions are called by dlsym from pkgmgr_client api. (Refer to: https://review.tizen.org/gerrit/73286) Change-Id: I547fae4bf0a431a28826ef8c4f6e83768c4acc18 Signed-off-by: Sangyoon Jang --- CMakeLists.txt | 3 + packaging/wgt-backend.spec | 3 + src/CMakeLists.txt | 1 + src/lib/CMakeLists.txt | 15 ++++ src/lib/wgt_archive_info.cc | 214 ++++++++++++++++++++++++++++++++++++++++++++ src/lib/wgt_archive_info.h | 23 +++++ src/lib/wgt_pkgmgr.cc | 34 +++++++ 7 files changed, 293 insertions(+) create mode 100644 src/lib/CMakeLists.txt create mode 100644 src/lib/wgt_archive_info.cc create mode 100644 src/lib/wgt_archive_info.h create mode 100644 src/lib/wgt_pkgmgr.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index f39937d..77ad385 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EXTRA_LINKER_FLAGS}") # Targets SET(TARGET_LIBNAME_WGT "wgt-installer") +SET(TARGET_LIBNAME_WGT_ARCHIVE_INFO "wgt") SET(TARGET_WGT_BACKEND "wgt-backend") SET(TARGET_LIBNAME_HYBRID "hybrid-installer") @@ -46,8 +47,10 @@ PKG_CHECK_MODULES(APP_INSTALLERS_DEPS REQUIRED app-installers) PKG_CHECK_MODULES(WGT_MANIFEST_HANDLERS_DEPS REQUIRED wgt-manifest-handlers) PKG_CHECK_MODULES(MANIFEST_PARSER_DEPS REQUIRED manifest-parser) PKG_CHECK_MODULES(PKGMGR_INSTALLER_DEPS REQUIRED pkgmgr-installer) +PKG_CHECK_MODULES(PKGMGR_TYPES_DEPS REQUIRED pkgmgr-types) PKG_CHECK_MODULES(ENCRYPTION_DEPS REQUIRED libwebappenc) PKG_CHECK_MODULES(TPK_INSTALLER_DEPS REQUIRED tpk-installer) +PKG_CHECK_MODULES(VCONF_DEPS REQUIRED vconf) FIND_PACKAGE(Boost REQUIRED COMPONENTS system filesystem regex program_options) FIND_PACKAGE(GTest REQUIRED) diff --git a/packaging/wgt-backend.spec b/packaging/wgt-backend.spec index dbc504c..998fc24 100644 --- a/packaging/wgt-backend.spec +++ b/packaging/wgt-backend.spec @@ -16,8 +16,10 @@ BuildRequires: pkgconfig(app-installers) BuildRequires: pkgconfig(manifest-parser) BuildRequires: pkgconfig(wgt-manifest-handlers) BuildRequires: pkgconfig(pkgmgr-installer) +BuildRequires: pkgconfig(pkgmgr-types) BuildRequires: pkgconfig(libwebappenc) BuildRequires: pkgconfig(tpk-installer) +BuildRequires: pkgconfig(vconf) %description This is a package that installs the WGT backend of pkgmgr. @@ -57,6 +59,7 @@ ln -s %{_bindir}/wgt-backend %{buildroot}%{_sysconfdir}/package-manager/backend/ %manifest wgt-backend.manifest %license LICENSE %{_sysconfdir}/package-manager/backend/wgt +%{_sysconfdir}/package-manager/backendlib/libwgt.so %{_bindir}/wgt-backend %{_datadir}/wgt-backend/default.png diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0136fd6..5384753 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,5 @@ ADD_SUBDIRECTORY(hybrid) +ADD_SUBDIRECTORY(lib) ADD_SUBDIRECTORY(wgt) ADD_SUBDIRECTORY(wgt_backend) ADD_SUBDIRECTORY(unit_tests) diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt new file mode 100644 index 0000000..a14aaae --- /dev/null +++ b/src/lib/CMakeLists.txt @@ -0,0 +1,15 @@ +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} LIB_SRCS) +ADD_LIBRARY(${TARGET_LIBNAME_WGT_ARCHIVE_INFO} SHARED ${LIB_SRCS}) + +TARGET_INCLUDE_DIRECTORIES(${TARGET_LIBNAME_WGT_ARCHIVE_INFO} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../") + +APPLY_PKG_CONFIG(${TARGET_LIBNAME_WGT_ARCHIVE_INFO} PUBLIC + APP_INSTALLERS_DEPS + PKGMGR_TYPES_DEPS + MANIFEST_PARSER_DEPS + WGT_MANIFEST_HANDLERS_DEPS + VCONF_DEPS + Boost +) + +INSTALL(TARGETS ${TARGET_LIBNAME_WGT_ARCHIVE_INFO} DESTINATION ${SYSCONF_INSTALL_DIR}/package-manager/backendlib) diff --git a/src/lib/wgt_archive_info.cc b/src/lib/wgt_archive_info.cc new file mode 100644 index 0000000..bcaa43b --- /dev/null +++ b/src/lib/wgt_archive_info.cc @@ -0,0 +1,214 @@ +// 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 "lib/wgt_archive_info.h" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace bf = boost::filesystem; +namespace ci = common_installer; + +namespace { + +const char kVconfLanguageKey[] = "db/menu_widget/language"; + +bool ExtractPackageArchive(const char* file_path, const bf::path& tmp_dir) { + if (!ci::ExtractToTmpDir(file_path, tmp_dir)) { + LOG(ERROR) << "Failed to extract"; + return false; + } + return true; +} + +bool GetPackageInfo(wgt::parse::WidgetConfigParser& parser, + package_manager_pkg_detail_info_t* info) { + auto widget_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::WidgetInfo::Key())); + auto app_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::TizenApplicationInfo::Key())); + if (!widget_info || !app_info) { + LOG(ERROR) << "WidgetInfo / TizenApplicationInfo not found"; + return false; + } + + snprintf(info->pkg_type, sizeof(info->pkg_type), "wgt"); + snprintf(info->version, sizeof(info->version), "%s", + widget_info->version().c_str()); + snprintf(info->author, sizeof(info->version), "%s", + widget_info->author().c_str()); + + snprintf(info->pkg_name, sizeof(info->pkg_name), "%s", + app_info->package().c_str()); + snprintf(info->pkgid, sizeof(info->pkgid), "%s", app_info->package().c_str()); + snprintf(info->api_version, sizeof(info->api_version), "%s", + app_info->required_version().c_str()); + + return true; +} + +bool GetPrivilegesInfo(wgt::parse::WidgetConfigParser& parser, + package_manager_pkg_detail_info_t* info) { + auto privileges_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::PermissionsInfo::Key())); + if (!privileges_info) + return false; + + const auto& privileges = privileges_info->GetAPIPermissions(); + for (auto& priv : privileges) { + info->privilege_list = g_list_append(info->privilege_list, + strdup(priv.c_str())); + } + + return true; +} + +bool GetLabelInfo(wgt::parse::WidgetConfigParser& parser, const char* locale, + package_manager_pkg_detail_info_t* info) { + auto widget_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::WidgetInfo::Key())); + if (!widget_info) + return false; + + std::string name; + const auto& labels = widget_info->name_set(); + if (labels.find(locale) != labels.end()) { + name = labels.find(locale)->second; + snprintf(info->label, sizeof(info->label), "%s", name.c_str()); + return true; + } else if (labels.find("") != labels.end()) { + name = labels.find("")->second; + snprintf(info->label, sizeof(info->label), "%s", name.c_str()); + return true; + } + + return false; +} + +bool GetDescriptionInfo(wgt::parse::WidgetConfigParser& parser, + const char* locale, package_manager_pkg_detail_info_t* info) { + auto widget_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::WidgetInfo::Key())); + if (!widget_info) + return false; + + std::string desc; + const auto& descriptions = widget_info->description_set(); + if (descriptions.find(locale) != descriptions.end()) { + desc = descriptions.find(locale)->second; + snprintf(info->pkg_description, sizeof(info->pkg_description), "%s", + desc.c_str()); + return true; + } else if (descriptions.find("") != descriptions.end()) { + desc = descriptions.find("")->second; + snprintf(info->pkg_description, sizeof(info->pkg_description), "%s", + desc.c_str()); + return true; + } + + return false; +} + +bool ReadIcon(const bf::path& icon, const bf::path& tmp_dir, + package_manager_pkg_detail_info_t* info) { + bf::path icon_path; + if (icon.is_absolute()) + icon_path = icon; + else + icon_path = tmp_dir / icon; + + LOG(INFO) << "Icon file path: " << icon_path; + + std::ifstream ifs(icon_path.c_str(), + std::ifstream::in | std::ifstream::binary); + ifs.seekg(0, ifs.end); + int len = ifs.tellg(); + ifs.seekg(0, ifs.beg); + + if (len <= 0) + return false; + + char* buf = static_cast(malloc(sizeof(char) * len)); + + LOG(INFO) << "Reading icon file, " << len << " bytes"; + ifs.read(buf, len); + + info->icon_buf = buf; + info->icon_size = len; + + return true; +} + +bool GetIconInfo(wgt::parse::WidgetConfigParser& parser, + bf::path& tmp_dir, package_manager_pkg_detail_info_t* info) { + auto icons_info = + std::static_pointer_cast( + parser.GetManifestData(wgt::parse::ApplicationIconsInfo::Key())); + if (!icons_info) + return false; + + return ReadIcon(icons_info->icons().front().path(), tmp_dir, info); +} + +} // namespace + +bool WgtArchiveInfo::GetArchiveInfo(const char* file_path, + package_manager_pkg_detail_info_t* info) { + bf::path tmp_dir = ci::GenerateTmpDir("/tmp"); + if (!ci::CreateDir(tmp_dir)) + return false; + LOG(DEBUG) << "Unpack at temporary dir: " << tmp_dir; + if (!ExtractPackageArchive(file_path, tmp_dir)) + return false; + + wgt::parse::WidgetConfigParser parser; + bf::path manifest_path = tmp_dir / "config.xml"; + if (!parser.ParseManifest(manifest_path)) { + LOG(ERROR) << "Failed to parse"; + bf::remove_all(tmp_dir); + return false; + } + + if (!GetPackageInfo(parser, info)) { + LOG(ERROR) << "Failed to get package info"; + bf::remove_all(tmp_dir); + return false; + } + if (!GetPrivilegesInfo(parser, info)) + LOG(WARNING) << "Failed to get privileges info"; + if (!GetIconInfo(parser, tmp_dir, info)) + LOG(WARNING) << "Failed to get icon info"; + + char* locale = vconf_get_str(kVconfLanguageKey); + if (!GetLabelInfo(parser, locale, info)) + LOG(WARNING) << "Failed to get label info"; + if (!GetDescriptionInfo(parser, locale, info)) + LOG(WARNING) << "Failed to get description info"; + + free(locale); + bf::remove_all(tmp_dir); + + return true; +} diff --git a/src/lib/wgt_archive_info.h b/src/lib/wgt_archive_info.h new file mode 100644 index 0000000..3882f78 --- /dev/null +++ b/src/lib/wgt_archive_info.h @@ -0,0 +1,23 @@ +// 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 LIB_WGT_ARCHIVE_INFO_H_ +#define LIB_WGT_ARCHIVE_INFO_H_ + +#include + +#include + +#include + +class WgtArchiveInfo : public common_installer::Singleton { + CRTP_DECLARE_DEFAULT_CONSTRUCTOR_CLASS(WgtArchiveInfo) + public: + bool GetArchiveInfo(const char* file_path, + package_manager_pkg_detail_info_t* info); + + SCOPE_LOG_TAG(WgtArchiveInfo) +}; + +#endif // LIB_WGT_ARCHIVE_INFO diff --git a/src/lib/wgt_pkgmgr.cc b/src/lib/wgt_pkgmgr.cc new file mode 100644 index 0000000..129c185 --- /dev/null +++ b/src/lib/wgt_pkgmgr.cc @@ -0,0 +1,34 @@ +// 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 + +#include "lib/wgt_archive_info.h" + +#define EXPORT_API __attribute__((visibility("default"))) + +namespace { + +int GetPackageArchiveInfo(const char* path, + package_manager_pkg_detail_info_t* info) { + if (!WgtArchiveInfo::Instance().GetArchiveInfo(path, info)) + return -1; + return 0; +} + +void PluginOnUnload() { +} + +} // namespace + +extern "C" EXPORT_API int pkg_plugin_on_load(pkg_plugin_set* set) { + if (set == nullptr) + return -1; + set->plugin_on_unload = PluginOnUnload; + set->pkg_is_installed = nullptr; + set->get_installed_pkg_list = nullptr; + set->get_pkg_detail_info = nullptr; + set->get_pkg_detail_info_from_package = GetPackageArchiveInfo; + return 0; +} -- 2.7.4 From da4c4d58e52f8df826f5643fdeed5e07161b5da9 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Tue, 22 Nov 2016 16:43:12 +0900 Subject: [PATCH 02/16] apply extended concept of package's attribute. Requires : https://review.tizen.org/gerrit/#/c/99039/ Change-Id: I3da722ec30cd00554b9fe9e00b001bb6922a8cbf Signed-off-by: jongmyeongko --- src/hybrid/hybrid_installer.cc | 1 + src/wgt/step/configuration/step_parse.cc | 4 ---- src/wgt/step/encryption/step_encrypt_resources.cc | 2 +- src/wgt/step/encryption/step_remove_encryption_data.cc | 2 +- src/wgt/step/pkgmgr/step_generate_xml.cc | 2 +- src/wgt/wgt_installer.cc | 2 ++ 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 2b416e3..324c771 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -236,6 +236,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, true); AddStep(); + AddStep(); AddStep(); AddStep(); AddStep( diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc index cf349e8..8fcbcec 100644 --- a/src/wgt/step/configuration/step_parse.cc +++ b/src/wgt/step/configuration/step_parse.cc @@ -230,10 +230,6 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) { manifest->type = strdup("wgt"); manifest->appsetting = strdup("false"); manifest->nodisplay_setting = strdup("false"); - if (context_->is_preload_request.get()) - manifest->preload = strdup("true"); - else - manifest->preload = strdup("false"); manifest->installed_storage = strdup("installed_internal"); // For wgt package use the long name diff --git a/src/wgt/step/encryption/step_encrypt_resources.cc b/src/wgt/step/encryption/step_encrypt_resources.cc index d7d2e9a..9c6b9d8 100644 --- a/src/wgt/step/encryption/step_encrypt_resources.cc +++ b/src/wgt/step/encryption/step_encrypt_resources.cc @@ -195,7 +195,7 @@ bool StepEncryptResources::EncryptFile(const bf::path &src) { == common_installer::RequestMode::GLOBAL) { ret = wae_encrypt_global_web_application( context_->pkgid.get().c_str(), - context_->is_preload_request.get() ? + context_->is_readonly_package.get() ? true : false, inChunk.get(), (size_t)bytesRead, diff --git a/src/wgt/step/encryption/step_remove_encryption_data.cc b/src/wgt/step/encryption/step_remove_encryption_data.cc index e398b23..7b3e9ac 100644 --- a/src/wgt/step/encryption/step_remove_encryption_data.cc +++ b/src/wgt/step/encryption/step_remove_encryption_data.cc @@ -18,7 +18,7 @@ common_installer::Step::Status StepRemoveEncryptionData::process() { int ret; if (context_->request_mode.get() == common_installer::RequestMode::GLOBAL) ret = wae_remove_global_app_dek(context_->pkgid.get().c_str(), - context_->is_preload_request.get() ? + context_->is_readonly_package.get() ? true : false); else ret = wae_remove_app_dek(context_->uid.get(), diff --git a/src/wgt/step/pkgmgr/step_generate_xml.cc b/src/wgt/step/pkgmgr/step_generate_xml.cc index 3e63560..d1d1e6f 100644 --- a/src/wgt/step/pkgmgr/step_generate_xml.cc +++ b/src/wgt/step/pkgmgr/step_generate_xml.cc @@ -341,7 +341,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()); diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 43fc80c..e87ec01 100755 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -222,6 +222,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, false); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -247,6 +248,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep( ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, ci::configuration::StepParseManifest::StoreLocation::BACKUP); + AddStep(); AddStep(); AddStep(); AddStep("res/wgt/"); -- 2.7.4 From 6d35edbd8c01d948ae06abbe4f2d76cc92adc2ff Mon Sep 17 00:00:00 2001 From: Bartlomiej Kunikowski Date: Mon, 17 Oct 2016 12:53:12 +0200 Subject: [PATCH 03/16] Fix smoke tests for hybrid packages Change-Id: I0d475b40ad6251184fcbef992e1cf5008c7fe2b6 --- src/unit_tests/smoke_test.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index ec1ab9d..4dab080 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -750,7 +750,8 @@ TEST_F(SmokeTest, DeinstallationMode_Hybrid) { std::string appid2 = "smokehyb03.Native"; ASSERT_EQ(Install(path, PackageType::HYBRID), ci::AppInstaller::Result::OK); - ASSERT_EQ(Uninstall(pkgid, PackageType::WGT), ci::AppInstaller::Result::OK); + ASSERT_EQ(Uninstall(pkgid, PackageType::HYBRID), + ci::AppInstaller::Result::OK); CheckPackageNonExistance(pkgid, {appid1, appid2}); } @@ -795,10 +796,10 @@ TEST_F(SmokeTest, MountUpdateMode_Hybrid) { std::string pkgid = "smokehyb06"; std::string appid1 = "smokehyb06.web"; std::string appid2 = "smokehyb06.service"; - ASSERT_EQ(MountInstall(path_old, PackageType::WGT), + ASSERT_EQ(MountInstall(path_old, PackageType::HYBRID), ci::AppInstaller::Result::OK); AddDataFiles(pkgid); - ASSERT_EQ(MountInstall(path_new, PackageType::WGT), + ASSERT_EQ(MountInstall(path_new, PackageType::HYBRID), ci::AppInstaller::Result::OK); ScopedTzipInterface interface(pkgid); ValidatePackage(pkgid, {appid1, appid2}); -- 2.7.4 From a729223f7143f2ff31e3f8b6ee508a6e51a242f9 Mon Sep 17 00:00:00 2001 From: Bartlomiej Kunikowski Date: Thu, 20 Oct 2016 10:34:21 +0200 Subject: [PATCH 04/16] Fix for MountUpdateMode_Rollback Requires: - https://review.tizen.org/gerrit/#/c/97897/ To verify run wgt-backend smoke test Change-Id: I08198a4003acd457f2a8282d143a8272df53feb2 --- src/wgt/step/filesystem/step_wgt_update_package_directory.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wgt/step/filesystem/step_wgt_update_package_directory.cc b/src/wgt/step/filesystem/step_wgt_update_package_directory.cc index 17e07d9..c762dc4 100644 --- a/src/wgt/step/filesystem/step_wgt_update_package_directory.cc +++ b/src/wgt/step/filesystem/step_wgt_update_package_directory.cc @@ -77,6 +77,12 @@ StepWgtUpdatePackageDirectory::RecoverBackupOfDirectories() { if (!bf::exists(directory_backup)) continue; LOG(DEBUG) << "Recover directory entry: " << entry; + bs::error_code error; + bf::remove_all(directory, error); + if (error) { + LOG(ERROR) << "Failed to remove fail-update directory: " << directory; + return Status::APP_DIR_ERROR; + } if (!ci::MoveDir(directory_backup, directory)) { LOG(ERROR) << "Failed to restore directory backup " << directory_backup; -- 2.7.4 From 5efd5d210268c584984dc8b1072c37270f16fe11 Mon Sep 17 00:00:00 2001 From: Bartlomiej Kunikowski Date: Fri, 18 Nov 2016 11:48:41 +0100 Subject: [PATCH 05/16] Fix for UpdateMode_Rollback_Hybrid and MountUpdateMode_Rollback_Hybrid There are unneeded step that remove all smack rules. There should be all smack rules as before an update. Verify: - # su - app_fw - $ /usr/bin/wgt-backend-ut/smoke-test Submit together: - https://review.tizen.org/gerrit/#/c/98725/ Requires: - https://review.tizen.org/gerrit/#/c/97903/ Change-Id: I5a0f4c929c9f90f06f67a68c3a1bcfc4939f9cc8 --- src/hybrid/hybrid_installer.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 324c771..0cd47f6 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -164,7 +164,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); AddStep( ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, ci::configuration::StepParseManifest::StoreLocation::BACKUP); @@ -360,7 +359,6 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); AddStep( ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, ci::configuration::StepParseManifest::StoreLocation::BACKUP); -- 2.7.4 From d331e90ba010054f9188371556678b209ccfadba Mon Sep 17 00:00:00 2001 From: Piotr Dabrowski Date: Mon, 28 Nov 2016 17:06:05 +0100 Subject: [PATCH 06/16] Change order of steps in wgt as in tpk StepRegisterSecurity StepRegisterApplication StepRunParserPlugin StepUpdateSecurity StepUpdateApplication StepRunParserPlugin Change-Id: I92c30d65c7af2b50c2ae2f32b8343ef522db2249 --- src/hybrid/hybrid_installer.cc | 6 +++--- src/wgt/wgt_installer.cc | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index 0cd47f6..dbd4244 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -136,8 +136,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Install); AddStep(); @@ -331,8 +331,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Install); AddStep(); @@ -405,8 +405,8 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep(); AddStep(); - AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Install); AddStep(); diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index e87ec01..dcb6910 100755 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -139,10 +139,10 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep( - ci::Plugin::ActionType::Install); AddStep(); AddStep(); + AddStep( + ci::Plugin::ActionType::Install); AddStep(); AddStep(); AddStep(); @@ -185,9 +185,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); AddStep(); AddStep(); break; @@ -281,9 +281,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); AddStep(); AddStep(); break; @@ -344,12 +344,12 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); - AddStep( - ci::Plugin::ActionType::Install); AddStep(); AddStep(); AddStep(); + AddStep(); + AddStep( + ci::Plugin::ActionType::Install); AddStep(); AddStep(); break; @@ -388,9 +388,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); AddStep(); AddStep(); break; @@ -413,9 +413,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep(); AddStep(); AddStep(ci::Plugin::ActionType::Install); - AddStep(); AddStep(); AddStep(); break; @@ -442,9 +442,9 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); + AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); AddStep(); AddStep(); break; -- 2.7.4 From a7dbc9bdb0c8b9e6070bd15214d111abdba381c7 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Thu, 1 Dec 2016 00:01:47 +0900 Subject: [PATCH 07/16] fix build error - this override function will be used. Change-Id: I7d28e1e8b0dbf98dda4482eb8bbbe62390f50eab Signed-off-by: jongmyeongko --- src/wgt/wgt_app_query_interface.cc | 4 ++++ src/wgt/wgt_app_query_interface.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/wgt/wgt_app_query_interface.cc b/src/wgt/wgt_app_query_interface.cc index be08ae1..8c75226 100644 --- a/src/wgt/wgt_app_query_interface.cc +++ b/src/wgt/wgt_app_query_interface.cc @@ -127,4 +127,8 @@ bool WgtAppQueryInterface::IsHybridApplication(const std::string& arg, return false; } +std::string WgtAppQueryInterface::GetPkgId(const std::string& arg) { + return GetPkgIdFromPath(arg); +} + } // namespace wgt diff --git a/src/wgt/wgt_app_query_interface.h b/src/wgt/wgt_app_query_interface.h index fe075fe..c7ca0ea 100644 --- a/src/wgt/wgt_app_query_interface.h +++ b/src/wgt/wgt_app_query_interface.h @@ -35,6 +35,8 @@ class WgtAppQueryInterface : public common_installer::AppQueryInterface { * \return true if package is hybrid */ bool IsHybridApplication(const std::string& arg, uid_t uid); + + std::string GetPkgId(const std::string& arg) override; }; } // namespace wgt -- 2.7.4 From eeff6059746db645244a60d612d314f2375bbd17 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Thu, 1 Dec 2016 01:53:01 +0900 Subject: [PATCH 08/16] change disable_pkg test Change-Id: Ie821fea7e3697e1f0381b1d76778f7b31fe29c40 Signed-off-by: jongmyeongko --- src/unit_tests/smoke_test.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 4dab080..c696ad8 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -538,9 +538,7 @@ TEST_F(SmokeTest, DisablePkg) { ci::AppInstaller::Result::OK); ASSERT_EQ(DisablePackage(pkgid, PackageType::WGT), ci::AppInstaller::Result::OK); - ASSERT_FALSE(ci::QueryIsPackageInstalled(pkgid, - ci::GetRequestMode(kTestUserId), - kTestUserId)); + ASSERT_TRUE(ci::QueryIsDisabledPackage(pkgid, kTestUserId)); ValidatePackageFS(pkgid, {appid}); } -- 2.7.4 From e8512c751441b6e15272764aef56e6ff234707eb Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Fri, 2 Dec 2016 17:05:01 +0900 Subject: [PATCH 09/16] Set missing manifest attribute: readonly, preload Change-Id: I4a9395a7f646dae6f67723c95b7e1d5cb2496e91 Signed-off-by: Sangyoon Jang --- src/wgt/step/pkgmgr/step_generate_xml.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wgt/step/pkgmgr/step_generate_xml.cc b/src/wgt/step/pkgmgr/step_generate_xml.cc index d1d1e6f..50a538d 100644 --- a/src/wgt/step/pkgmgr/step_generate_xml.cc +++ b/src/wgt/step/pkgmgr/step_generate_xml.cc @@ -420,6 +420,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) { -- 2.7.4 From 09628a8787ce460521356b2fb2164861eb95755e Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Thu, 1 Dec 2016 15:44:15 +0900 Subject: [PATCH 10/16] Fix smoke test Now gid of data, shared/data dir is system_share. Change-Id: Id69017b75af1f12cb61d6aa2fd24c1d528a43963 Signed-off-by: Sangyoon Jang --- src/unit_tests/smoke_test.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index c696ad8..7b185d3 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -43,6 +44,7 @@ namespace { const uid_t kTestUserId = tzplatform_getuid(TZ_SYS_DEFAULT_USER); const gid_t kTestGroupId = tzplatform_getgid(TZ_SYS_DEFAULT_USER); +const char kTestGroupName[] = "system_share"; const std::string kTestUserIdStr = std::to_string(kTestUserId); @@ -229,7 +231,12 @@ void ValidatePackageFS(const std::string& pkgid, struct stat stats; stat(iter->path().c_str(), &stats); ASSERT_EQ(kTestUserId, stats.st_uid) << "Invalid uid: " << iter->path(); - ASSERT_EQ(kTestGroupId, stats.st_gid) << "Invalid gid: " << iter->path(); + if (iter->path().filename() == "data") { + boost::optional gid = ci::GetGidByGroupName(kTestGroupName); + ASSERT_EQ(*gid, stats.st_gid) << "Invalid gid: " << iter->path(); + } else { + ASSERT_EQ(kTestGroupId, stats.st_gid) << "Invalid gid: " << iter->path(); + } } } -- 2.7.4 From 57df390b05a52494b9090d0fdc49ab7d22c6a4d1 Mon Sep 17 00:00:00 2001 From: Piotr Ganicz Date: Wed, 30 Nov 2016 13:48:52 +0100 Subject: [PATCH 11/16] Addition of main attribute for widget-application This commit repairs the issue with generating proper main attribute for widget-application element in manifest. Only one attribute can be set to "true" for list of apps (widget-application). Submit together: - https://review.tizen.org/gerrit/#/c/101269/ - https://review.tizen.org/gerrit/#/c/101267/ - https://review.tizen.org/gerrit/#/c/101266/ Change-Id: Icdc622d05b0d2b5787db8e099f1db978f130af97 --- src/wgt/step/pkgmgr/step_generate_xml.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wgt/step/pkgmgr/step_generate_xml.cc b/src/wgt/step/pkgmgr/step_generate_xml.cc index 50a538d..b34417b 100644 --- a/src/wgt/step/pkgmgr/step_generate_xml.cc +++ b/src/wgt/step/pkgmgr/step_generate_xml.cc @@ -94,6 +94,10 @@ bool WriteWidgetApplicationAttributesAndElements( if (app->multiple) xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple", BAD_CAST app->multiple); + if (app->mainapp) + xmlTextWriterWriteAttribute(writer, BAD_CAST "main", + BAD_CAST app->mainapp); + // FIXME: For hotfix, must be removed if (app->support_sizes) { for (auto& ss : GListRange(app->support_sizes)) { @@ -115,8 +119,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( -- 2.7.4 From 1629a3589d9f0545115d72c67fceb412936c5a76 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Tue, 15 Nov 2016 14:30:45 +0900 Subject: [PATCH 12/16] Add new steps for readonly update Change-Id: Iff1ffcd4cecea510b4a91ab3d0730e9f09c30db5 Signed-off-by: Sangyoon Jang --- src/wgt/CMakeLists.txt | 1 + src/wgt/step/configuration/step_parse.cc | 14 +++++ .../step_set_old_signature_files_location.cc | 35 +++++++++++ .../step_set_old_signature_files_location.h | 30 ++++++++++ src/wgt/wgt_app_query_interface.h | 5 ++ src/wgt/wgt_installer.cc | 68 ++++++++++++++++++++++ 6 files changed, 153 insertions(+) create mode 100644 src/wgt/step/configuration/step_set_old_signature_files_location.cc create mode 100644 src/wgt/step/configuration/step_set_old_signature_files_location.h diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt index 678dc70..8b21686 100755 --- a/src/wgt/CMakeLists.txt +++ b/src/wgt/CMakeLists.txt @@ -3,6 +3,7 @@ SET(SRCS step/configuration/step_check_rds_manifest.cc step/configuration/step_check_start_files.cc step/configuration/step_parse.cc + step/configuration/step_set_old_signature_files_location.cc step/encryption/step_encrypt_resources.cc step/encryption/step_remove_encryption_data.cc step/filesystem/step_copy_preview_icons.cc diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc index 8fcbcec..d2908fa 100644 --- a/src/wgt/step/configuration/step_parse.cc +++ b/src/wgt/step/configuration/step_parse.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +46,7 @@ #include "wgt/wgt_backend_data.h" namespace bf = boost::filesystem; +namespace ci = common_installer; namespace { @@ -271,6 +273,18 @@ bool StepParse::FillWidgetInfo(manifest_x* manifest) { manifest->installlocation = strdup("auto"); } + // set update true if package is updated preload package + ci::RequestType req_type = context_->request_type.get(); + if (req_type == ci::RequestType::ReadonlyUpdateInstall) + manifest->update = strdup("true"); + else if (req_type == ci::RequestType::ReadonlyUpdateUninstall) + manifest->update = strdup("false"); + else if (ci::QueryIsUpdatedReadonlyPackage(context_->pkgid.get(), + context_->uid.get())) + manifest->update = strdup("true"); + else + manifest->update = strdup("false"); + return true; } diff --git a/src/wgt/step/configuration/step_set_old_signature_files_location.cc b/src/wgt/step/configuration/step_set_old_signature_files_location.cc new file mode 100644 index 0000000..11ec209 --- /dev/null +++ b/src/wgt/step/configuration/step_set_old_signature_files_location.cc @@ -0,0 +1,35 @@ +// 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 + +#include + +#include + +namespace bf = boost::filesystem; +namespace ci = common_installer; + +namespace { + +const char kWgtPath[] = "res/wgt"; + +} // namespace + +namespace wgt { +namespace configuration { + +ci::Step::Status StepSetOldSignatureFilesLocation::process() { + // This step is required for checking signature files at StepCheckSignature. + // StepCheckSignature gets path of signature files from unpacked_dir from + // unpacked_dir, which is root directory of package, but signature files + // are not at root directory. + bf::path oldpath = context_->unpacked_dir_path.get(); + bf::path newpath = oldpath / kWgtPath; + context_->unpacked_dir_path.set(newpath); + return Status::OK; +} + +} // namespace configuration +} // namespace wgt diff --git a/src/wgt/step/configuration/step_set_old_signature_files_location.h b/src/wgt/step/configuration/step_set_old_signature_files_location.h new file mode 100644 index 0000000..4d8b5e4 --- /dev/null +++ b/src/wgt/step/configuration/step_set_old_signature_files_location.h @@ -0,0 +1,30 @@ +// 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_CONFIGURATION_STEP_SET_OLD_SIGNATURE_FILES_LOCATION_H_ +#define WGT_STEP_CONFIGURATION_STEP_SET_OLD_SIGNATURE_FILES_LOCATION_H_ + +#include + +#include + +namespace wgt { +namespace configuration { + +class StepSetOldSignatureFilesLocation : 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(SetOldSignatureFilesLocation) +}; + +} // namespace configuration +} // namespace wgt + +#endif // WGT_STEP_CONFIGURATION_STEP_SET_OLD_SIGNATURE_FILES_LOCATION_H_ diff --git a/src/wgt/wgt_app_query_interface.h b/src/wgt/wgt_app_query_interface.h index c7ca0ea..b8ed790 100644 --- a/src/wgt/wgt_app_query_interface.h +++ b/src/wgt/wgt_app_query_interface.h @@ -36,6 +36,11 @@ class WgtAppQueryInterface : public common_installer::AppQueryInterface { */ bool IsHybridApplication(const std::string& arg, uid_t uid); + /** + * \brief method for getting package id from package file + * + * \return package id + */ std::string GetPkgId(const std::string& arg) override; }; diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index dcb6910..63d8906 100755 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -79,6 +80,7 @@ #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/configuration/step_set_old_signature_files_location.h" #include "wgt/step/encryption/step_encrypt_resources.h" #include "wgt/step/encryption/step_remove_encryption_data.h" #include "wgt/step/filesystem/step_copy_preview_icons.h" @@ -449,6 +451,72 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); break; } + case ci::RequestType::ReadonlyUpdateInstall: { + AddStep(pkgmgr_); + AddStep(); + AddStep( + wgt::configuration::StepParse::ConfigLocation::PACKAGE, true); + AddStep(); + AddStep(); + AddStep(); + AddStep( + ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep( + ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, + ci::configuration::StepParseManifest::StoreLocation::BACKUP); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(ci::Plugin::ActionType::Upgrade); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::ReadonlyUpdateUninstall: { + AddStep(pkgmgr_); + AddStep(); + AddStep(); + AddStep( + ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, + ci::configuration::StepParseManifest::StoreLocation::BACKUP); + AddStep(); + AddStep( + ci::configuration::StepParseManifest::ManifestLocation::INSTALLED, + ci::configuration::StepParseManifest::StoreLocation::NORMAL); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(ci::Plugin::ActionType::Upgrade); + break; + } case ci::RequestType::Move: { AddStep(pkgmgr_); AddStep( -- 2.7.4 From 394de90cbc1480cd26c144066cf2a9e0bd9d90ea Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Fri, 2 Dec 2016 17:42:37 +0900 Subject: [PATCH 13/16] Fix CMakeLists.txt To make extendible for adding source & header files. Change-Id: I54198360f67882b6c644d13f027f155855e57d12 Signed-off-by: Sangyoon Jang --- src/hybrid/CMakeLists.txt | 14 +++++++------- src/wgt/CMakeLists.txt | 41 +++++++++++++---------------------------- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/src/hybrid/CMakeLists.txt b/src/hybrid/CMakeLists.txt index ccc7f4a..e65d713 100644 --- a/src/hybrid/CMakeLists.txt +++ b/src/hybrid/CMakeLists.txt @@ -1,10 +1,10 @@ -SET(SRCS - step/configuration/step_merge_tpk_config.cc - step/configuration/step_stash_tpk_config.cc - step/encryption/step_encrypt_resources.cc - hybrid_installer.cc -) -ADD_LIBRARY(${TARGET_LIBNAME_HYBRID} STATIC ${SRCS}) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} HYBRID_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/configuration HYBRID_STEP_CONFIGURATION_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/encryption HYBRID_STEP_ENCRYPTION_SRCS) +ADD_LIBRARY(${TARGET_LIBNAME_HYBRID} STATIC + ${HYBRID_SRCS} + ${HYBRID_STEP_CONFIGURATION_SRCS} + ${HYBRID_STEP_ENCRYPTION_SRCS}) TARGET_INCLUDE_DIRECTORIES(${TARGET_LIBNAME_HYBRID} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../") diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt index 8b21686..8334362 100755 --- a/src/wgt/CMakeLists.txt +++ b/src/wgt/CMakeLists.txt @@ -1,31 +1,10 @@ # Target - sources -SET(SRCS - step/configuration/step_check_rds_manifest.cc - step/configuration/step_check_start_files.cc - step/configuration/step_parse.cc - step/configuration/step_set_old_signature_files_location.cc - step/encryption/step_encrypt_resources.cc - step/encryption/step_remove_encryption_data.cc - step/filesystem/step_copy_preview_icons.cc - step/filesystem/step_create_symbolic_link.cc - step/filesystem/step_wgt_patch_icons.cc - step/filesystem/step_wgt_patch_storage_directories.cc - step/filesystem/step_wgt_prepare_package_directory.cc - step/filesystem/step_wgt_resource_directory.cc - step/filesystem/step_wgt_update_package_directory.cc - step/pkgmgr/step_generate_xml.cc - step/security/step_add_default_privileges.cc - step/security/step_check_settings_level.cc - 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 - step/security/step_check_extension_privileges.cc - step/security/step_wgt_recover_signature.cc - wgt_app_query_interface.cc - wgt_installer.cc - extension_config_parser.cc -) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} WGT_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/configuration WGT_STEP_CONFIGURATION_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/encryption WGT_STEP_ENCRYPTION_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/filesystem WGT_STEP_FILESYSTEM_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/pkgmgr WGT_STEP_PKGMGR_SRCS) +AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/step/security WGT_STEP_SECURITY_SRCS) IF(WRT_LAUNCHER) ADD_DEFINITIONS("-DWRT_LAUNCHER=\"${WRT_LAUNCHER}\"") @@ -35,7 +14,13 @@ ELSE(WRT_LAUNCHER) ENDIF(WRT_LAUNCHER) # Target - definition -ADD_LIBRARY(${TARGET_LIBNAME_WGT} STATIC ${SRCS}) +ADD_LIBRARY(${TARGET_LIBNAME_WGT} STATIC + ${WGT_SRCS} + ${WGT_STEP_CONFIGURATION_SRCS} + ${WGT_STEP_ENCRYPTION_SRCS} + ${WGT_STEP_FILESYSTEM_SRCS} + ${WGT_STEP_PKGMGR_SRCS} + ${WGT_STEP_SECURITY_SRCS}) # Target - includes TARGET_INCLUDE_DIRECTORIES(${TARGET_LIBNAME_WGT} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../") # Target - deps -- 2.7.4 From f61c56c2ae73489fb31b95d551d558d07e961b13 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Wed, 7 Dec 2016 15:42:00 +0900 Subject: [PATCH 14/16] Adjust to change of support ambient Requires: - https://review.tizen.org/gerrit/102774 Change-Id: I0f64c7eeb825fd82f25940c0829c4725356c2c9b Signed-off-by: Sangyoon Jang --- src/wgt/step/configuration/step_parse.cc | 8 ++++---- src/wgt/step/pkgmgr/step_generate_xml.cc | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wgt/step/configuration/step_parse.cc b/src/wgt/step/configuration/step_parse.cc index d2908fa..e1f817c 100644 --- a/src/wgt/step/configuration/step_parse.cc +++ b/src/wgt/step/configuration/step_parse.cc @@ -347,10 +347,10 @@ bool StepParse::FillMainApplicationInfo(manifest_x* manifest) { SetApplicationXDefaults(application); if (has_watch_category) - application->ambient_support = + application->support_ambient = strdup(app_info->ambient_support() ? "true" : "false"); else - application->ambient_support = strdup("false"); + application->support_ambient = strdup("false"); application->package = strdup(app_info->package().c_str()); application->exec = @@ -398,7 +398,7 @@ bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) { application->nodisplay = strdup("false"); application->taskmanage = strdup("true"); SetApplicationXDefaults(application); - application->ambient_support = strdup("false"); + application->support_ambient = strdup("false"); application->package = strdup(manifest->package); for (auto& pair : service_info.names()) { @@ -452,7 +452,7 @@ bool StepParse::FillWidgetApplicationInfo(manifest_x* manifest) { application->nodisplay = strdup("true"); application->taskmanage = strdup("false"); SetApplicationXDefaults(application); - application->ambient_support = strdup("false"); + application->support_ambient = strdup("false"); application->package = strdup(manifest->package); if (!app_widget.label.default_value.empty()) { diff --git a/src/wgt/step/pkgmgr/step_generate_xml.cc b/src/wgt/step/pkgmgr/step_generate_xml.cc index b34417b..a23e71e 100644 --- a/src/wgt/step/pkgmgr/step_generate_xml.cc +++ b/src/wgt/step/pkgmgr/step_generate_xml.cc @@ -161,9 +161,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 -- 2.7.4 From 068064e3410b19831e47bba6ff7a27fbd2b67f31 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Thu, 8 Dec 2016 15:29:31 +0900 Subject: [PATCH 15/16] Fix package icon path It should be under at shared/res for access by other applications. Change-Id: I1cdb835db681a98ea05987a52b9e55b23d5c8f17 Signed-off-by: Sangyoon Jang --- src/wgt/step/filesystem/step_wgt_patch_icons.cc | 53 ++++++++++++++++--------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/wgt/step/filesystem/step_wgt_patch_icons.cc b/src/wgt/step/filesystem/step_wgt_patch_icons.cc index ade10df..1a5b3cb 100644 --- a/src/wgt/step/filesystem/step_wgt_patch_icons.cc +++ b/src/wgt/step/filesystem/step_wgt_patch_icons.cc @@ -17,6 +17,33 @@ namespace { const char kDefaultIconPath[] = "/usr/share/wgt-backend/default.png"; +bool PatchIcon(icon_x* icon, const bf::path& dst_path) { + bs::error_code error; + bf::path icon_text(icon->text); + bf::path icon_path = dst_path; + if (strcmp(icon->lang, DEFAULT_LOCALE)) { + icon_path += "."; + icon_path += icon->lang; + } + if (icon_text.has_extension()) + icon_path += icon_text.extension(); + else + icon_path += ".png"; + + bf::copy_file(icon->text, icon_path, + bf::copy_option::overwrite_if_exists, error); + if (error) { + LOG(ERROR) << "Failed to move icon from " << icon->text << " to " + << icon_path; + return false; + } + if (icon->text) + free(const_cast(icon->text)); + icon->text = strdup(icon_path.c_str()); + + return true; +} + } // namespace namespace wgt { @@ -26,6 +53,12 @@ common_installer::Step::Status StepWgtPatchIcons::process() { bf::path common_icon_location = context_->pkg_path.get() / "shared" / "res"; bs::error_code error; bf::create_directories(common_icon_location, error); + for (icon_x* icon : + GListRange(context_->manifest_data.get()->icon)) { + bf::path icon_path = common_icon_location / context_->pkgid.get(); + if (!PatchIcon(icon, icon_path)) + return Status::ICON_ERROR; + } for (application_x* app : GListRange(context_->manifest_data.get()->application)) { if (strcmp(app->type, "webapp") != 0) @@ -33,27 +66,9 @@ common_installer::Step::Status StepWgtPatchIcons::process() { if (app->icon) { // edit icon->text and copy icons to common location for (auto& icon : GListRange(app->icon)) { - bf::path icon_text(icon->text); bf::path icon_path = common_icon_location / app->appid; - if (strcmp(icon->lang, DEFAULT_LOCALE)) { - icon_path += "."; - icon_path += icon->lang; - } - if (icon_text.has_extension()) - icon_path += icon_text.extension(); - else - icon_path += ".png"; - - bf::copy_file(icon->text, icon_path, - bf::copy_option::overwrite_if_exists, error); - if (error) { - LOG(ERROR) << "Failed to move icon from " << icon->text << " to " - << icon_path; + if (!PatchIcon(icon, icon_path)) return Status::ICON_ERROR; - } - if (icon->text) - free(const_cast(icon->text)); - icon->text = strdup(icon_path.c_str()); } } else { LOG(INFO) << "Application provides no icon. Using Tizen default icon."; -- 2.7.4 From 1ca8c3c81dcc7cf0ccb3c3ef05a2ea318d31cf46 Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Thu, 8 Dec 2016 21:42:38 +0900 Subject: [PATCH 16/16] change the name of StepChageOwner to StepChangeOwnershipAndPermission Change-Id: I6d6dc6bcf83b5be91b1bc4cb50aaf88a3a4e7742 Signed-off-by: jongmyeongko --- src/hybrid/hybrid_installer.cc | 16 ++++++++-------- src/wgt/wgt_installer.cc | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/hybrid/hybrid_installer.cc b/src/hybrid/hybrid_installer.cc index dbd4244..8da9357 100644 --- a/src/hybrid/hybrid_installer.cc +++ b/src/hybrid/hybrid_installer.cc @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -141,7 +141,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( ci::Plugin::ActionType::Install); AddStep(); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::Update: @@ -188,7 +188,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::Uninstall: @@ -267,7 +267,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::Recovery: @@ -336,7 +336,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( ci::Plugin::ActionType::Install); AddStep(); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::MountUpdate: @@ -382,7 +382,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::ManifestDirectInstall: @@ -410,7 +410,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep( ci::Plugin::ActionType::Install); AddStep(); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::ManifestDirectUpdate: @@ -441,7 +441,7 @@ HybridInstaller::HybridInstaller(common_installer::PkgMgrPtr pkgmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; case ci::RequestType::EnablePkg: diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 63d8906..7ca8306 100755 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include @@ -146,7 +146,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep( ci::Plugin::ActionType::Install); AddStep(); - AddStep(); + AddStep(); AddStep(); break; } @@ -190,7 +190,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; } @@ -238,7 +238,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); AddStep(); break; } @@ -286,7 +286,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; } @@ -352,7 +352,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::Plugin::ActionType::Install); - AddStep(); + AddStep(); AddStep(); break; } @@ -393,7 +393,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; } @@ -418,7 +418,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(ci::Plugin::ActionType::Install); - AddStep(); + AddStep(); AddStep(); break; } @@ -447,7 +447,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep( ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; } @@ -488,7 +488,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(ci::Plugin::ActionType::Upgrade); - AddStep(); + AddStep(); AddStep(); break; } -- 2.7.4