From c6e1bd9a28d18c88b335c07e4da1e4246f704bd8 Mon Sep 17 00:00:00 2001 From: Pawel Sikorski Date: Fri, 18 Dec 2015 10:50:50 +0100 Subject: [PATCH 2/7] Adding initial files to repository Adding: * LICENSE, AUTHORS * check-coding-style tool * packaging spec file (now empty) Change-Id: I15e52b9c6af8741fc06513290ca93210f703a8c6 --- AUTHORS | 1 + LICENSE | 203 +++++++++++++++++++++++++++++++++++++++++++++ packaging/wgt-backend.spec | 17 ++++ tools/check-coding-style | 28 +++++++ 4 files changed, 249 insertions(+) create mode 100644 AUTHORS create mode 100644 LICENSE create mode 100644 packaging/wgt-backend.spec create mode 100755 tools/check-coding-style diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..d115209 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +p.sikorski@samsung.com diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..53779e4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,203 @@ +// 2015, Copyright (c) Samsung Electronics Co., Ltd All Rights Reserved + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packaging/wgt-backend.spec b/packaging/wgt-backend.spec new file mode 100644 index 0000000..3c17083 --- /dev/null +++ b/packaging/wgt-backend.spec @@ -0,0 +1,17 @@ +#Available values for profile: mobile, wearable, tv, ivi, common +%{!?profile:%define profile tv} + +Name: wgt-backend +Summary: Application installer backend for WGT +Version: 0.1 +Release: 1 +Group: Application Framework/Package Management +License: Apache-2.0 +Source0: %{name}-%{version}.tar.gz + + +%changelog +* Thu Dec 18 2015 Pawel Sikorski 0.1-1 +- initial files creation + + diff --git a/tools/check-coding-style b/tools/check-coding-style new file mode 100755 index 0000000..fd60481 --- /dev/null +++ b/tools/check-coding-style @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +if [ ! `which cpplint.py` ]; then + echo -e "\nPlease make sure cpplint.py is in your PATH. It is part of depot_tools inside Chromium repository." + exit 1 +fi + +OLDPWD=$PWD +BASE=`dirname $0` +cd $BASE/.. + +# filters +FILTERS="-readability/streams,-build/c++11" + +cpplint.py --root=src --filter="$FILTERS" $(find . \( -name '*.h' -o -name '*.cc' \) ) +RET=$? + +JS_RET_VAL=$? +cd $OLDPWD + +if [ "x$RET" == "x0" ]; then + exit 0 +else + exit 1 +fi -- 2.7.4 From 19dd0a66cfd6569cf120233e7d8e3672e7f97670 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Mon, 14 Dec 2015 13:58:10 +0100 Subject: [PATCH 3/7] Move wgt-backend implementation from app-installers Requires to be submitted with: - https://review.tizen.org/gerrit/#/c/54291/ Aligned with app-installer's commit: 532a4707928d6d137c2cb93ae3523f25f0ac06ee Change-Id: I30347bd6ca66026d3e363bb16000a44e2d791f39 --- CMakeLists.txt | 48 ++ cmake/Modules/ApplyPkgConfig.cmake | 35 ++ packaging/wgt-backend-tests.manifest | 8 + packaging/wgt-backend.manifest | 8 + packaging/wgt-backend.spec | 54 +- src/CMakeLists.txt | 2 + src/unit_tests/CMakeLists.txt | 22 + src/unit_tests/smoke_test.cc | 473 +++++++++++++++++ .../test_samples/smoke/DeinstallationMode.wgt | Bin 0 -> 33312 bytes .../smoke/DeinstallationMode_Rollback.wgt | Bin 0 -> 33320 bytes src/unit_tests/test_samples/smoke/DeltaMode.delta | Bin 0 -> 1070 bytes src/unit_tests/test_samples/smoke/DeltaMode.wgt | Bin 0 -> 34283 bytes .../test_samples/smoke/InstallationMode.wgt | Bin 0 -> 33311 bytes .../smoke/InstallationMode_GoodSignature.wgt | Bin 0 -> 38029 bytes .../smoke/InstallationMode_Rollback.wgt | Bin 0 -> 33320 bytes .../smoke/InstallationMode_WrongSignature.wgt | Bin 0 -> 37906 bytes src/unit_tests/test_samples/smoke/RDSMode.wgt | Bin 0 -> 34275 bytes .../smoke/RecoveryMode_ForInstallation.wgt | Bin 0 -> 33322 bytes .../test_samples/smoke/RecoveryMode_ForUpdate.wgt | Bin 0 -> 34140 bytes .../smoke/RecoveryMode_ForUpdate_2.wgt | Bin 0 -> 34140 bytes src/unit_tests/test_samples/smoke/UpdateMode.wgt | Bin 0 -> 34134 bytes src/unit_tests/test_samples/smoke/UpdateMode_2.wgt | Bin 0 -> 34134 bytes .../test_samples/smoke/UpdateMode_Rollback.wgt | Bin 0 -> 34141 bytes .../test_samples/smoke/UpdateMode_Rollback_2.wgt | Bin 0 -> 34141 bytes .../test_samples/smoke/delta_dir/.rds_delta | 6 + src/unit_tests/test_samples/smoke/delta_dir/ADDED | 0 .../test_samples/smoke/delta_dir/MODIFIED | 1 + .../test_samples/smoke/delta_dir/config.xml | 9 + src/wgt/CMakeLists.txt | 51 ++ src/wgt/rds_parser.cc | 61 +++ src/wgt/rds_parser.h | 63 +++ src/wgt/step/step_add_default_privileges.cc | 38 ++ src/wgt/step/step_add_default_privileges.h | 59 +++ src/wgt/step/step_check_settings_level.cc | 47 ++ src/wgt/step/step_check_settings_level.h | 59 +++ src/wgt/step/step_check_wgt_background_category.cc | 30 ++ src/wgt/step/step_check_wgt_background_category.h | 31 ++ src/wgt/step/step_create_symbolic_link.cc | 71 +++ src/wgt/step/step_create_symbolic_link.h | 61 +++ src/wgt/step/step_encrypt_resources.cc | 215 ++++++++ src/wgt/step/step_encrypt_resources.h | 66 +++ src/wgt/step/step_generate_xml.cc | 494 ++++++++++++++++++ src/wgt/step/step_generate_xml.h | 45 ++ src/wgt/step/step_parse.cc | 574 +++++++++++++++++++++ src/wgt/step/step_parse.h | 100 ++++ src/wgt/step/step_parse_recovery.cc | 56 ++ src/wgt/step/step_parse_recovery.h | 63 +++ src/wgt/step/step_rds_modify.cc | 226 ++++++++ src/wgt/step/step_rds_modify.h | 87 ++++ src/wgt/step/step_rds_parse.cc | 50 ++ src/wgt/step/step_rds_parse.h | 61 +++ src/wgt/step/step_remove_encryption_data.cc | 54 ++ src/wgt/step/step_remove_encryption_data.h | 57 ++ src/wgt/step/step_wgt_copy_storage_directories.cc | 172 ++++++ src/wgt/step/step_wgt_copy_storage_directories.h | 58 +++ src/wgt/step/step_wgt_create_icons.cc | 22 + src/wgt/step/step_wgt_create_icons.h | 36 ++ .../step/step_wgt_create_storage_directories.cc | 102 ++++ src/wgt/step/step_wgt_create_storage_directories.h | 77 +++ src/wgt/step/step_wgt_resource_directory.cc | 44 ++ src/wgt/step/step_wgt_resource_directory.h | 62 +++ src/wgt/wgt_app_query_interface.cc | 101 ++++ src/wgt/wgt_app_query_interface.h | 33 ++ src/wgt/wgt_backend.cc | 23 + src/wgt/wgt_backend_data.h | 47 ++ src/wgt/wgt_installer.cc | 179 +++++++ src/wgt/wgt_installer.h | 31 ++ 67 files changed, 4370 insertions(+), 2 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/Modules/ApplyPkgConfig.cmake create mode 100644 packaging/wgt-backend-tests.manifest create mode 100644 packaging/wgt-backend.manifest create mode 100644 src/CMakeLists.txt create mode 100644 src/unit_tests/CMakeLists.txt create mode 100644 src/unit_tests/smoke_test.cc create mode 100644 src/unit_tests/test_samples/smoke/DeinstallationMode.wgt create mode 100644 src/unit_tests/test_samples/smoke/DeinstallationMode_Rollback.wgt create mode 100644 src/unit_tests/test_samples/smoke/DeltaMode.delta create mode 100644 src/unit_tests/test_samples/smoke/DeltaMode.wgt create mode 100644 src/unit_tests/test_samples/smoke/InstallationMode.wgt create mode 100644 src/unit_tests/test_samples/smoke/InstallationMode_GoodSignature.wgt create mode 100644 src/unit_tests/test_samples/smoke/InstallationMode_Rollback.wgt create mode 100644 src/unit_tests/test_samples/smoke/InstallationMode_WrongSignature.wgt create mode 100644 src/unit_tests/test_samples/smoke/RDSMode.wgt create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForInstallation.wgt create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForUpdate.wgt create mode 100644 src/unit_tests/test_samples/smoke/RecoveryMode_ForUpdate_2.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode_2.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode_Rollback.wgt create mode 100644 src/unit_tests/test_samples/smoke/UpdateMode_Rollback_2.wgt create mode 100644 src/unit_tests/test_samples/smoke/delta_dir/.rds_delta create mode 100644 src/unit_tests/test_samples/smoke/delta_dir/ADDED create mode 100644 src/unit_tests/test_samples/smoke/delta_dir/MODIFIED create mode 100644 src/unit_tests/test_samples/smoke/delta_dir/config.xml create mode 100644 src/wgt/CMakeLists.txt create mode 100644 src/wgt/rds_parser.cc create mode 100644 src/wgt/rds_parser.h create mode 100644 src/wgt/step/step_add_default_privileges.cc create mode 100644 src/wgt/step/step_add_default_privileges.h create mode 100644 src/wgt/step/step_check_settings_level.cc create mode 100644 src/wgt/step/step_check_settings_level.h create mode 100644 src/wgt/step/step_check_wgt_background_category.cc create mode 100644 src/wgt/step/step_check_wgt_background_category.h create mode 100644 src/wgt/step/step_create_symbolic_link.cc create mode 100644 src/wgt/step/step_create_symbolic_link.h create mode 100644 src/wgt/step/step_encrypt_resources.cc create mode 100644 src/wgt/step/step_encrypt_resources.h create mode 100644 src/wgt/step/step_generate_xml.cc create mode 100644 src/wgt/step/step_generate_xml.h create mode 100644 src/wgt/step/step_parse.cc create mode 100644 src/wgt/step/step_parse.h create mode 100644 src/wgt/step/step_parse_recovery.cc create mode 100644 src/wgt/step/step_parse_recovery.h create mode 100644 src/wgt/step/step_rds_modify.cc create mode 100644 src/wgt/step/step_rds_modify.h create mode 100644 src/wgt/step/step_rds_parse.cc create mode 100644 src/wgt/step/step_rds_parse.h create mode 100644 src/wgt/step/step_remove_encryption_data.cc create mode 100644 src/wgt/step/step_remove_encryption_data.h create mode 100644 src/wgt/step/step_wgt_copy_storage_directories.cc create mode 100644 src/wgt/step/step_wgt_copy_storage_directories.h create mode 100644 src/wgt/step/step_wgt_create_icons.cc create mode 100644 src/wgt/step/step_wgt_create_icons.h create mode 100644 src/wgt/step/step_wgt_create_storage_directories.cc create mode 100644 src/wgt/step/step_wgt_create_storage_directories.h create mode 100644 src/wgt/step/step_wgt_resource_directory.cc create mode 100644 src/wgt/step/step_wgt_resource_directory.h create mode 100644 src/wgt/wgt_app_query_interface.cc create mode 100644 src/wgt/wgt_app_query_interface.h create mode 100644 src/wgt/wgt_backend.cc create mode 100644 src/wgt/wgt_backend_data.h create mode 100644 src/wgt/wgt_installer.cc create mode 100644 src/wgt/wgt_installer.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..565d531 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,48 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) +PROJECT(WgtBackend) +SET(PREFIX "${CMAKE_INSTALL_PREFIX}") +SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin") +SET(LIBDIR "${CMAKE_INSTALL_LIBDIR}") +SET(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share") +SET(INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/include") +SET(VERSION_MAJOR 0) +SET(VERSION "${VERSION_MAJOR}.1.0") + +IF(NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE "Release") +ENDIF(NOT CMAKE_BUILD_TYPE) + +# Compiler flags +SET(CMAKE_C_FLAGS_PROFILING "-O2") +SET(CMAKE_CXX_FLAGS_PROFILING "-O2 -std=c++11") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -std=c++11 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2 -g") +SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -std=c++11 -g") +SET(CMAKE_CXX_FLAGS_CCOV "-O0 -std=c++11 -g --coverage") + +# Targets +SET(TARGET_LIBNAME_WGT "wgt-installer") +SET(TARGET_WGT_BACKEND "wgt-backend") +SET(TARGET_SMOKE_TEST "smoke_test") + +ADD_DEFINITIONS("-Wall") +ADD_DEFINITIONS("-Wextra") +ADD_DEFINITIONS("-fPIE") +ADD_DEFINITIONS("-fPIC") + +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/") +INCLUDE(FindPkgConfig) +INCLUDE(ApplyPkgConfig) + +# Find all needed packages once +PKG_CHECK_MODULES(APP_INSTALLERS_DEPS REQUIRED app-installers) +PKG_CHECK_MODULES(MANIFEST_HANDLERS_DEPS REQUIRED manifest-handlers) +PKG_CHECK_MODULES(MANIFEST_PARSER_DEPS REQUIRED manifest-parser) +PKG_CHECK_MODULES(PKGMGR_INSTALLER_DEPS REQUIRED pkgmgr-installer) +PKG_CHECK_MODULES(ENCRYPTION_DEPS REQUIRED libwebappenc) + +FIND_PACKAGE(Boost REQUIRED COMPONENTS system filesystem regex program_options) +FIND_PACKAGE(GTest REQUIRED) + +ADD_SUBDIRECTORY(src) diff --git a/cmake/Modules/ApplyPkgConfig.cmake b/cmake/Modules/ApplyPkgConfig.cmake new file mode 100644 index 0000000..97679d7 --- /dev/null +++ b/cmake/Modules/ApplyPkgConfig.cmake @@ -0,0 +1,35 @@ +# Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# +# This function applies external (out of source tree) dependencies +# to given target. Arguments are: +# TARGET - valid cmake target +# PRIVACY - dependency can be inherited by dependent targets or not: +# PUBLIC - this should be used by default, cause compile/link flags passing +# PRIVATE - do not passes any settings to dependent targets, +# may be usefull for static libraries from the inside of the project +# Argument ARGV2 and following are supposed to be names of checked pkg config +# packages. This function will use variables created by check_pkg_modules(). +# - ${DEP_NAME}_LIBRARIES +# - ${DEP_NAME}_INCLUDE_DIRS +# - ${DEP_NAME}_CFLAGS +# +FUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY) + MATH(EXPR DEST_INDEX "${ARGC}-1") + FOREACH(I RANGE 2 ${DEST_INDEX}) + IF(NOT ${ARGV${I}}_FOUND) + MESSAGE(FATAL_ERROR "Not found dependency - ${ARGV${I}}_FOUND") + ENDIF(NOT ${ARGV${I}}_FOUND) + TARGET_LINK_LIBRARIES(${TARGET} ${PRIVACY} "${${ARGV${I}}_LIBRARIES}") + TARGET_INCLUDE_DIRECTORIES(${TARGET} ${PRIVACY} SYSTEM "${${ARGV${I}}_INCLUDE_DIRS}") + STRING(REPLACE ";" " " CFLAGS_STR "${${ARGV${I}}_CFLAGS}") + SET(CFLAGS_LIST ${CFLAGS_STR}) + SEPARATE_ARGUMENTS(CFLAGS_LIST) + FOREACH(OPTION ${CFLAGS_LIST}) + TARGET_COMPILE_OPTIONS(${TARGET} ${PRIVACY} ${OPTION}) + ENDFOREACH(OPTION) + SET_TARGET_PROPERTIES(${TARGET} PROPERTIES SKIP_BUILD_RPATH true) + ENDFOREACH(I RANGE 2 ${DEST_INDEX}) +ENDFUNCTION(APPLY_PKG_CONFIG TARGET PRIVACY) diff --git a/packaging/wgt-backend-tests.manifest b/packaging/wgt-backend-tests.manifest new file mode 100644 index 0000000..6c0eb4f --- /dev/null +++ b/packaging/wgt-backend-tests.manifest @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packaging/wgt-backend.manifest b/packaging/wgt-backend.manifest new file mode 100644 index 0000000..55125da --- /dev/null +++ b/packaging/wgt-backend.manifest @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packaging/wgt-backend.spec b/packaging/wgt-backend.spec index 3c17083..9c001e1 100644 --- a/packaging/wgt-backend.spec +++ b/packaging/wgt-backend.spec @@ -9,9 +9,59 @@ Group: Application Framework/Package Management License: Apache-2.0 Source0: %{name}-%{version}.tar.gz +Source1000: wgt-backend.manifest +Source1001: wgt-backend-tests.manifest + +BuildRequires: boost-devel +BuildRequires: cmake +BuildRequires: gtest-devel +BuildRequires: pkgconfig(app-installers) +BuildRequires: pkgconfig(manifest-parser) +BuildRequires: pkgconfig(manifest-handlers) +BuildRequires: pkgconfig(pkgmgr-installer) +BuildRequires: pkgconfig(libwebappenc) + +%description +This is a package that installs the WGT backend of pkgmgr. + +%package tests +Summary: Unit tests for wgt-backend +Requires: %{name} = %{version} + +%description tests +Unit tests for wgt-backend + +%prep +%setup -q + +cp %{SOURCE1000} . +cp %{SOURCE1001} . + +%build +#Variable for setting symlink to runtime +runtime_path=%{_bindir}/xwalk-launcher +%if "%{profile}" == "mobile" || "%{profile}" == "wearable" || "%{profile}" == "tv" +runtime_path=%{_bindir}/wrt +%endif +%cmake . -DCMAKE_BUILD_TYPE=%{?build_type:%build_type} -DWRT_LAUNCHER=${runtime_path} +make %{?_smp_mflags} + +%install +%make_install +mkdir -p %{buildroot}/etc/package-manager/backend +ln -s %{_bindir}/wgt-backend %{buildroot}%{_sysconfdir}/package-manager/backend/wgt + +%files +%manifest wgt-backend.manifest +%license LICENSE +%{_sysconfdir}/package-manager/backend/wgt +%{_bindir}/wgt-backend + +%files tests +%manifest wgt-backend-tests.manifest +%{_bindir}/wgt-backend-ut/* +%{_datadir}/wgt-backend-ut/* %changelog * Thu Dec 18 2015 Pawel Sikorski 0.1-1 - initial files creation - - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..f0e3653 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,2 @@ +ADD_SUBDIRECTORY(wgt) +ADD_SUBDIRECTORY(unit_tests) diff --git a/src/unit_tests/CMakeLists.txt b/src/unit_tests/CMakeLists.txt new file mode 100644 index 0000000..9c92d11 --- /dev/null +++ b/src/unit_tests/CMakeLists.txt @@ -0,0 +1,22 @@ +SET(DESTINATION_DIR wgt-backend-ut) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../) + +# Executables +ADD_EXECUTABLE(${TARGET_SMOKE_TEST} + smoke_test.cc +) + +INSTALL(DIRECTORY test_samples/ DESTINATION ${SHAREDIR}/${DESTINATION_DIR}/test_samples) + +APPLY_PKG_CONFIG(smoke_test PUBLIC + Boost + GTEST +) + +# FindGTest module do not sets all needed libraries in GTEST_LIBRARIES and +# GTest main libraries is still missing, so additional linking of +# GTEST_MAIN_LIBRARIES is needed. +target_link_libraries(smoke_test PRIVATE ${TARGET_LIBNAME_WGT} ${GTEST_MAIN_LIBRARIES}) + +INSTALL(TARGETS smoke_test DESTINATION ${BINDIR}/${DESTINATION_DIR}) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc new file mode 100644 index 0000000..38f8e33 --- /dev/null +++ b/src/unit_tests/smoke_test.cc @@ -0,0 +1,473 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "wgt/wgt_app_query_interface.h" +#include "wgt/wgt_installer.h" + +#define SIZEOFARRAY(ARR) \ + sizeof(ARR) / sizeof(ARR[0]) \ + +namespace bf = boost::filesystem; +namespace bs = boost::system; +namespace ci = common_installer; + +namespace { + +const char kApplicationDir[] = ".applications"; +const char kApplicationDirBackup[] = ".applications.bck"; +const char KUserAppsDir[] = "apps_rw"; +const char KUserAppsDirBackup[] = "apps_rw.bck"; + +enum class RequestResult { + NORMAL, + FAIL, + CRASH +}; + +class StepCrash : public ci::Step { + public: + using Step::Step; + + ci::Step::Status process() override { + raise(SIGSEGV); + return Status::OK; + } + ci::Step::Status clean() override { return ci::Step::Status::OK; } + ci::Step::Status undo() override { return ci::Step::Status::OK; } + ci::Step::Status precheck() override { return ci::Step::Status::OK; } +}; + +void RemoveAllRecoveryFiles() { + bf::path root_path = ci::GetRootAppPath(); + for (auto& dir_entry : boost::make_iterator_range( + bf::directory_iterator(root_path), bf::directory_iterator())) { + if (bf::is_regular_file(dir_entry)) { + if (dir_entry.path().string().find("/recovery") != std::string::npos) { + bs::error_code error; + bf::remove(dir_entry.path(), error); + } + } + } +} + +bf::path FindRecoveryFile() { + bf::path root_path = ci::GetRootAppPath(); + for (auto& dir_entry : boost::make_iterator_range( + bf::directory_iterator(root_path), bf::directory_iterator())) { + if (bf::is_regular_file(dir_entry)) { + if (dir_entry.path().string().find("/recovery") != std::string::npos) { + return dir_entry.path(); + } + } + } + return {}; +} + +bool ValidateFileContentInPackage(const std::string& pkgid, + const std::string& relative, + const std::string& expected) { + bf::path root_path = ci::GetRootAppPath(); + bf::path file_path = root_path / pkgid / relative; + if (!bf::exists(file_path)) { + LOG(ERROR) << file_path << " doesn't exist"; + return false; + } + FILE* handle = fopen(file_path.c_str(), "r"); + if (!handle) { + LOG(ERROR) << file_path << " cannot be open"; + return false; + } + std::string content; + std::array buffer; + while (fgets(buffer.data(), buffer.size(), handle)) { + content += buffer.data(); + } + fclose(handle); + return content == expected; +} + +void ValidatePackageFS(const std::string& pkgid, const std::string& appid) { + bf::path root_path = ci::GetRootAppPath(); + bf::path package_path = root_path / pkgid; + bf::path binary_path = package_path / "bin" / appid; + bf::path data_path = package_path / "data"; + bf::path shared_path = package_path / "shared"; + bf::path cache_path = package_path / "cache"; + ASSERT_TRUE(bf::exists(root_path)); + ASSERT_TRUE(bf::exists(package_path)); + ASSERT_TRUE(bf::exists(binary_path)); + ASSERT_TRUE(bf::exists(data_path)); + ASSERT_TRUE(bf::exists(shared_path)); + ASSERT_TRUE(bf::exists(cache_path)); + + bf::path manifest_path = + bf::path(getUserManifestPath(getuid())) / (pkgid + ".xml"); + bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); + ASSERT_TRUE(bf::exists(manifest_path)); + ASSERT_TRUE(bf::exists(icon_path)); + + bf::path widget_root_path = package_path / "res" / "wgt"; + bf::path config_path = widget_root_path / "config.xml"; + ASSERT_TRUE(bf::exists(widget_root_path)); + ASSERT_TRUE(bf::exists(config_path)); + + bf::path private_tmp_path = package_path / "tmp"; + ASSERT_TRUE(bf::exists(private_tmp_path)); + + // backups should not exist + bf::path package_backup = ci::GetBackupPathForPackagePath(package_path); + bf::path manifest_backup = ci::GetBackupPathForManifestFile(manifest_path); + bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); + ASSERT_FALSE(bf::exists(package_backup)); + ASSERT_FALSE(bf::exists(manifest_backup)); + ASSERT_FALSE(bf::exists(icon_backup)); +} + +void PackageCheckCleanup(const std::string& pkgid, const std::string& appid) { + bf::path root_path = ci::GetRootAppPath(); + bf::path package_path = root_path / pkgid; + ASSERT_FALSE(bf::exists(package_path)); + + bf::path manifest_path = + bf::path(getUserManifestPath(getuid())) / (pkgid + ".xml"); + bf::path icon_path = bf::path(getIconPath(getuid())) / (appid + ".png"); + ASSERT_FALSE(bf::exists(manifest_path)); + ASSERT_FALSE(bf::exists(icon_path)); + + // backups should not exist + bf::path package_backup = ci::GetBackupPathForPackagePath(package_path); + bf::path manifest_backup = ci::GetBackupPathForManifestFile(manifest_path); + bf::path icon_backup = ci::GetBackupPathForIconFile(icon_path); + ASSERT_FALSE(bf::exists(package_backup)); + ASSERT_FALSE(bf::exists(manifest_backup)); + ASSERT_FALSE(bf::exists(icon_backup)); +} + +void ValidatePackage(const std::string& pkgid, const std::string& appid) { + ASSERT_TRUE(ci::IsPackageInstalled(pkgid, ci::GetRequestMode())); + ValidatePackageFS(pkgid, appid); +} + +void CheckPackageNonExistance(const std::string& pkgid, + const std::string& appid) { + ASSERT_FALSE(ci::IsPackageInstalled(pkgid, ci::GetRequestMode())); + PackageCheckCleanup(pkgid, appid); +} + +std::unique_ptr CreateQueryInterface() { + std::unique_ptr query_interface( + new wgt::WgtAppQueryInterface()); + return query_interface; +} + +std::unique_ptr CreateInstaller(ci::PkgMgrPtr pkgmgr) { + std::unique_ptr installer(new wgt::WgtInstaller(pkgmgr)); + return installer; +} + +ci::AppInstaller::Result RunInstallerWithPkgrmgr(ci::PkgMgrPtr pkgmgr, + RequestResult mode) { + std::unique_ptr installer = CreateInstaller(pkgmgr); + switch (mode) { + case RequestResult::FAIL: + installer->AddStep(); + break; + case RequestResult::CRASH: + installer->AddStep(); + default: + break; + } + return installer->Run(); +} + +ci::AppInstaller::Result Install(const bf::path& path, + RequestResult mode = RequestResult::NORMAL) { + const char* argv[] = {"", "-i", path.c_str()}; + std::unique_ptr query_interface = + CreateQueryInterface(); + auto pkgmgr = + ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), + query_interface.get()); + if (!pkgmgr) { + LOG(ERROR) << "Failed to initialize pkgmgr interface"; + return ci::AppInstaller::Result::UNKNOWN; + } + return RunInstallerWithPkgrmgr(pkgmgr, mode); +} + +ci::AppInstaller::Result Update(const bf::path& path_old, + const bf::path& path_new, + RequestResult mode = RequestResult::NORMAL) { + if (Install(path_old) != ci::AppInstaller::Result::OK) { + LOG(ERROR) << "Failed to install application. Cannot update"; + return ci::AppInstaller::Result::UNKNOWN; + } + return Install(path_new, mode); +} + +ci::AppInstaller::Result Uninstall(const std::string& pkgid, + RequestResult mode = RequestResult::NORMAL) { + const char* argv[] = {"", "-d", pkgid.c_str()}; + std::unique_ptr query_interface = + CreateQueryInterface(); + auto pkgmgr = + ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), + query_interface.get()); + if (!pkgmgr) { + LOG(ERROR) << "Failed to initialize pkgmgr interface"; + return ci::AppInstaller::Result::UNKNOWN; + } + return RunInstallerWithPkgrmgr(pkgmgr, mode); +} + +ci::AppInstaller::Result Reinstall(const bf::path& path, + const bf::path& delta_dir, + RequestResult mode = RequestResult::NORMAL) { + if (Install(path) != 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()}; + std::unique_ptr query_interface = + CreateQueryInterface(); + auto pkgmgr = + ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), + query_interface.get()); + if (!pkgmgr) { + LOG(ERROR) << "Failed to initialize pkgmgr interface"; + return ci::AppInstaller::Result::UNKNOWN; + } + return RunInstallerWithPkgrmgr(pkgmgr, mode); +} + +ci::AppInstaller::Result DeltaInstall(const bf::path& path, + const bf::path& delta_package) { + if (Install(path) != ci::AppInstaller::Result::OK) { + LOG(ERROR) << "Failed to install application. Cannot perform RDS"; + return ci::AppInstaller::Result::UNKNOWN; + } + return Install(delta_package); +} + +ci::AppInstaller::Result Recover(const bf::path& recovery_file, + RequestResult mode = RequestResult::NORMAL) { + const char* argv[] = {"", "-e", recovery_file.c_str()}; + std::unique_ptr query_interface = + CreateQueryInterface(); + auto pkgmgr = + ci::PkgMgrInterface::Create(SIZEOFARRAY(argv), const_cast(argv), + query_interface.get()); + if (!pkgmgr) { + LOG(ERROR) << "Failed to initialize pkgmgr interface"; + return ci::AppInstaller::Result::UNKNOWN; + } + return RunInstallerWithPkgrmgr(pkgmgr, mode); +} + +} // namespace + +namespace common_installer { + +class SmokeEnvironment : public testing::Environment { + public: + explicit SmokeEnvironment(const bf::path& home) : home_(home) { + } + void SetUp() override { + bs::error_code error; + bf::remove_all(home_ / kApplicationDirBackup, error); + bf::remove_all(home_ / KUserAppsDirBackup, error); + if (bf::exists(home_ / KUserAppsDir)) { + bf::rename(home_ / KUserAppsDir, home_ / KUserAppsDirBackup, error); + assert(!error); + } + if (bf::exists(home_ / kApplicationDir)) { + bf::rename(home_ / kApplicationDir, home_ / kApplicationDirBackup, error); + assert(!error); + } + } + void TearDown() override { + bs::error_code error; + bf::remove_all(home_ / kApplicationDir, error); + bf::remove_all(home_ / KUserAppsDir, error); + if (bf::exists(home_ / KUserAppsDirBackup)) + bf::rename(home_ / KUserAppsDirBackup, home_ / KUserAppsDir, error); + if (bf::exists(home_ / kApplicationDirBackup)) + bf::rename(home_ / kApplicationDirBackup, home_ / kApplicationDir, error); + } + + private: + bf::path home_; +}; + +class SmokeTest : public testing::Test { +}; + +TEST_F(SmokeTest, InstallationMode) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode.wgt"; // NOLINT + std::string pkgid = "smokeapp03"; + std::string appid = "smokeapp03.InstallationMode"; + ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, appid); +} + +TEST_F(SmokeTest, UpdateMode) { + bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode.wgt"; // NOLINT + bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_2.wgt"; // NOLINT + std::string pkgid = "smokeapp04"; + std::string appid = "smokeapp04.UpdateMode"; + ASSERT_EQ(Update(path_old, path_new), ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, appid); + + ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "2\n")); +} + +TEST_F(SmokeTest, DeinstallationMode) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeinstallationMode.wgt"; // NOLINT + std::string pkgid = "smokeapp05"; + std::string appid = "smokeapp05.DeinstallationMode"; + ASSERT_EQ(Install(path), + ci::AppInstaller::Result::OK); + ASSERT_EQ(Uninstall(pkgid), ci::AppInstaller::Result::OK); + CheckPackageNonExistance(pkgid, appid); +} + +TEST_F(SmokeTest, RDSMode) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/RDSMode.wgt"; // NOLINT + std::string delta_directory = "/usr/share/app-installers-ut/test_samples/smoke/delta_dir/"; // NOLINT + std::string pkgid = "smokeapp11"; + std::string appid = "smokeapp11.RDSMode"; + ASSERT_EQ(Reinstall(path, delta_directory), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, appid); + + // Check delta modifications + bf::path root_path = ci::GetRootAppPath(); + ASSERT_FALSE(bf::exists(root_path / pkgid / "res" / "wgt" / "DELETED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "ADDED")); + ValidateFileContentInPackage(pkgid, "res/wgt/MODIFIED", "2\n"); +} + +TEST_F(SmokeTest, DeltaMode) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeltaMode.wgt"; // NOLINT + std::string delta_package = "/usr/share/app-installers-ut/test_samples/smoke/DeltaMode.delta"; // NOLINT + std::string pkgid = "smokeapp17"; + std::string appid = "smokeapp17.DeltaMode"; + ASSERT_EQ(DeltaInstall(path, delta_package), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, appid); + + // Check delta modifications + bf::path root_path = ci::GetRootAppPath(); + ASSERT_FALSE(bf::exists(root_path / pkgid / "res" / "wgt" / "DELETED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "ADDED")); + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "css" / "style.css")); // NOLINT + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "images" / "tizen_32.png")); // NOLINT + ASSERT_TRUE(bf::exists(root_path / pkgid / "res" / "wgt" / "js" / "main.js")); + ValidateFileContentInPackage(pkgid, "res/wgt/MODIFIED", "version 2\n"); +} + +TEST_F(SmokeTest, RecoveryMode_ForInstallation) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForInstallation.wgt"; // NOLINT + ASSERT_DEATH(Install(path, RequestResult::CRASH), ".*"); + + std::string pkgid = "smokeapp09"; + std::string appid = "smokeapp09.RecoveryModeForInstallation"; + bf::path recovery_file = FindRecoveryFile(); + ASSERT_FALSE(recovery_file.empty()); + ASSERT_EQ(Recover(recovery_file), + ci::AppInstaller::Result::OK); + CheckPackageNonExistance(pkgid, appid); +} + +TEST_F(SmokeTest, RecoveryMode_ForUpdate) { + bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForUpdate.wgt"; // NOLINT + bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForUpdate_2.wgt"; // NOLINT + RemoveAllRecoveryFiles(); + ASSERT_DEATH(Update(path_old, path_new, RequestResult::CRASH), ".*"); + + std::string pkgid = "smokeapp10"; + std::string appid = "smokeapp10.RecoveryModeForUpdate"; + bf::path recovery_file = FindRecoveryFile(); + ASSERT_FALSE(recovery_file.empty()); + ASSERT_EQ(Recover(recovery_file), + ci::AppInstaller::Result::OK); + ValidatePackage(pkgid, appid); + + ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n")); +} + +TEST_F(SmokeTest, InstallationMode_GoodSignature) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_GoodSignature.wgt"; // NOLINT + ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); +} + +TEST_F(SmokeTest, InstallationMode_WrongSignature) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_WrongSignature.wgt"; // NOLINT + ASSERT_EQ(Install(path), ci::AppInstaller::Result::ERROR); +} + +TEST_F(SmokeTest, InstallationMode_Rollback) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_Rollback.wgt"; // NOLINT + std::string pkgid = "smokeapp06"; + std::string appid = "smokeapp06.InstallationModeRollback"; + ASSERT_EQ(Install(path, RequestResult::FAIL), + ci::AppInstaller::Result::ERROR); + CheckPackageNonExistance(pkgid, appid); +} + +TEST_F(SmokeTest, UpdateMode_Rollback) { + bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_Rollback.wgt"; // NOLINT + bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_Rollback_2.wgt"; // NOLINT + std::string pkgid = "smokeapp07"; + std::string appid = "smokeapp07.UpdateModeRollback"; + ASSERT_EQ(Update(path_old, path_new, RequestResult::FAIL), + ci::AppInstaller::Result::ERROR); + ValidatePackage(pkgid, appid); + + ASSERT_TRUE(ValidateFileContentInPackage(pkgid, "res/wgt/VERSION", "1\n")); +} + +TEST_F(SmokeTest, DeinstallationMode_Rollback) { + bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeinstallationMode_Rollback.wgt"; // NOLINT + std::string pkgid = "smokeapp08"; + std::string appid = "smokeapp08.DeinstallationModeRollback"; + ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); + ASSERT_EQ(Uninstall(pkgid, RequestResult::FAIL), + ci::AppInstaller::Result::ERROR); + ValidatePackage(pkgid, appid); +} + +} // namespace common_installer + +int main(int argc, char** argv) { + testing::InitGoogleTest(&argc, argv); + const char* directory = getenv("HOME"); + if (!directory) { + LOG(ERROR) << "Cannot get $HOME value"; + return 1; + } + testing::AddGlobalTestEnvironment( + new common_installer::SmokeEnvironment(directory)); + return RUN_ALL_TESTS(); +} diff --git a/src/unit_tests/test_samples/smoke/DeinstallationMode.wgt b/src/unit_tests/test_samples/smoke/DeinstallationMode.wgt new file mode 100644 index 0000000000000000000000000000000000000000..bf5b7d09b866ae23921708bc071ffe32536cb8cc GIT binary patch literal 33312 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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 literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/DeltaMode.wgt b/src/unit_tests/test_samples/smoke/DeltaMode.wgt new file mode 100644 index 0000000000000000000000000000000000000000..283700050272e10ca310cb82d75ee1794da7dd59 GIT binary patch literal 34283 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

BT%}l%Zycqo% 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 mWC-&b8daJYkg^=mG*Fhq2slKItI!d7T< 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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 literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/InstallationMode_GoodSignature.wgt b/src/unit_tests/test_samples/smoke/InstallationMode_GoodSignature.wgt new file mode 100644 index 0000000000000000000000000000000000000000..87604e7f416521fb99b6dc381f35a5c911041bde GIT binary patch literal 38029 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⪻~V!vWscQSTVx`IZqKBW{E+z&E8$ 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%0A9@3V&;q@sN;bEzwM5rePQ;Ne5K% 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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 literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/RecoveryMode_ForInstallation.wgt b/src/unit_tests/test_samples/smoke/RecoveryMode_ForInstallation.wgt new file mode 100644 index 0000000000000000000000000000000000000000..1244cf5c30d65c2029ae898da559ecdada788c1d GIT binary patch literal 33322 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

egx4!dORJ>p=~%BDFL<-^~#hcLj4vi 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 Qz~Dg}0;mN9|9@WnUq1Jr4*&oF literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/RecoveryMode_ForUpdate.wgt b/src/unit_tests/test_samples/smoke/RecoveryMode_ForUpdate.wgt new file mode 100644 index 0000000000000000000000000000000000000000..d1f0b4b68a87e3f09caa4addcad359b91a4063f3 GIT binary patch literal 34140 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 Z%z>6M0=!w-Kq-w22*sHh7&MzeJOJ)d#CHGy literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/UpdateMode_2.wgt b/src/unit_tests/test_samples/smoke/UpdateMode_2.wgt new file mode 100644 index 0000000000000000000000000000000000000000..39ab8a813ee94f3139f2ca63f46d21915c0ab228 GIT binary patch literal 34134 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 i*U7Z8dw0~1LThz9^iu*;VK literal 0 HcmV?d00001 diff --git a/src/unit_tests/test_samples/smoke/UpdateMode_Rollback_2.wgt b/src/unit_tests/test_samples/smoke/UpdateMode_Rollback_2.wgt new file mode 100644 index 0000000000000000000000000000000000000000..20efef268ed1eb50c834ad50e775a2cbaf935ac6 GIT binary patch literal 34141 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 + + + + + + smokeapp1 + + diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt new file mode 100644 index 0000000..6bd0300 --- /dev/null +++ b/src/wgt/CMakeLists.txt @@ -0,0 +1,51 @@ +# Target - sources +SET(SRCS + rds_parser.cc + step/step_check_settings_level.cc + step/step_check_wgt_background_category.cc + step/step_create_symbolic_link.cc + step/step_encrypt_resources.cc + step/step_generate_xml.cc + step/step_parse.cc + step/step_remove_encryption_data.cc + step/step_parse_recovery.cc + step/step_rds_parse.cc + step/step_rds_modify.cc + step/step_wgt_create_icons.cc + step/step_wgt_create_storage_directories.cc + step/step_wgt_copy_storage_directories.cc + step/step_wgt_resource_directory.cc + step/step_add_default_privileges.cc + wgt_app_query_interface.cc + wgt_installer.cc +) + +IF(WRT_LAUNCHER) + ADD_DEFINITIONS("-DWRT_LAUNCHER=\"${WRT_LAUNCHER}\"") + MESSAGE( "WRT LAUNCHER binary path is set to ${WRT_LAUNCHER}") +ELSE(WRT_LAUNCHER) + MESSAGE(FATAL_ERROR, "WRT LAUNCHER binary path is not set") +ENDIF(WRT_LAUNCHER) + +# Target - definition +ADD_LIBRARY(${TARGET_LIBNAME_WGT} STATIC ${SRCS}) +ADD_EXECUTABLE(${TARGET_WGT_BACKEND} "wgt_backend.cc") +# Target - includes +TARGET_INCLUDE_DIRECTORIES(${TARGET_LIBNAME_WGT} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../") +TARGET_INCLUDE_DIRECTORIES(${TARGET_WGT_BACKEND} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../") +# Target - deps +APPLY_PKG_CONFIG(${TARGET_LIBNAME_WGT} PUBLIC + APP_INSTALLERS_DEPS + MANIFEST_HANDLERS_DEPS + MANIFEST_PARSER_DEPS + PKGMGR_INSTALLER_DEPS + ENCRYPTION_DEPS + Boost +) + +# Target - in-package deps +TARGET_LINK_LIBRARIES(${TARGET_WGT_BACKEND} PRIVATE ${TARGET_LIBNAME_WGT}) + +# Install +INSTALL(TARGETS ${TARGET_LIBNAME_WGT} DESTINATION ${LIB_INSTALL_DIR}) +INSTALL(TARGETS ${TARGET_WGT_BACKEND} DESTINATION ${BINDIR}) diff --git a/src/wgt/rds_parser.cc b/src/wgt/rds_parser.cc new file mode 100644 index 0000000..9f2fbb7 --- /dev/null +++ b/src/wgt/rds_parser.cc @@ -0,0 +1,61 @@ +// Copyright (c) 2015 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/rds_parser.h" + +#include + +namespace { +const char kAdd[] = "#add"; +const char kModify[] = "#modify"; +const char kDelete[] = "#delete"; +} + +namespace wgt { +namespace rds_parser { + +RDSParser::RDSParser(const std::string& path_to_delta) + : path_to_delta_(path_to_delta) {} + +bool RDSParser::Parse() { + std::vector* current_container = nullptr; + std::string line; + + std::ifstream file_to_parse(path_to_delta_); + if (!file_to_parse.is_open()) + return false; + while (getline(file_to_parse, line)) { + if (line.compare(kDelete) == 0) { + current_container = &files_to_delete_; + continue; + } + if (line.compare(kAdd) == 0) { + current_container = &files_to_add_; + continue; + } + if (line.compare(kModify) == 0) { + current_container = &files_to_modify_; + continue; + } + if (current_container) + current_container->push_back(line); + } + file_to_parse.close(); + return true; +} + +const std::vector& RDSParser::files_to_modify() const { + return files_to_modify_; +} + +const std::vector& RDSParser::files_to_add() const { + return files_to_add_; +} + +const std::vector& RDSParser::files_to_delete() const { + return files_to_delete_; +} + +} // namespace rds_parser +} // namespace wgt diff --git a/src/wgt/rds_parser.h b/src/wgt/rds_parser.h new file mode 100644 index 0000000..7c412d1 --- /dev/null +++ b/src/wgt/rds_parser.h @@ -0,0 +1,63 @@ +// Copyright (c) 2015 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_RDS_PARSER_H_ +#define WGT_RDS_PARSER_H_ + +#include +#include +namespace wgt { +namespace rds_parser { + +/** + * \brief Parse RDS config file + */ +class RDSParser { + public: + /** + * \brief Explicit constructor + * + * \param path_to_delta path to directory + */ + explicit RDSParser(const std::string& path_to_delta); + + /** + * \brief Parse package xml + * + * \return true if parsing was successful + */ + bool Parse(); + + /** + * \brief Accessor to vector of files to modify + * + * \return files to modify + */ + const std::vector& files_to_modify() const; + + /** + * \brief Accessor to vector of files to add + * + * \return files to add + */ + const std::vector& files_to_add() const; + + /** + * \brief Accessor to vector of files to delete + * + * \return files to delete + */ + const std::vector& files_to_delete() const; + + private: + std::string path_to_delta_; + std::vector files_to_modify_; + std::vector files_to_add_; + std::vector files_to_delete_; +}; + +} // namespace rds_parser +} // namespace wgt + +#endif // WGT_RDS_PARSER_H_ diff --git a/src/wgt/step/step_add_default_privileges.cc b/src/wgt/step/step_add_default_privileges.cc new file mode 100644 index 0000000..18eb902 --- /dev/null +++ b/src/wgt/step/step_add_default_privileges.cc @@ -0,0 +1,38 @@ +// Copyright (c) 2015 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/step_add_default_privileges.h" + +#include + +#include +#include +#include + +namespace { + +const char kPrivForWebApp[] = + "http://tizen.org/privilege/internal/webappdefault"; + +} // namespace + +namespace wgt { +namespace security { + +common_installer::Step::Status StepAddDefaultPrivileges::precheck() { + if (!context_->manifest_data.get()) { + LOG(ERROR) << "Manifest data is not set"; + return Status::ERROR; + } + return Status::OK; +} + +common_installer::Step::Status StepAddDefaultPrivileges::process() { + manifest_x* m = context_->manifest_data.get(); + m->privileges = g_list_append(m->privileges, strdup(kPrivForWebApp)); + return Status::OK; +} + +} // namespace security +} // namespace wgt diff --git a/src/wgt/step/step_add_default_privileges.h b/src/wgt/step/step_add_default_privileges.h new file mode 100644 index 0000000..928ab84 --- /dev/null +++ b/src/wgt/step/step_add_default_privileges.h @@ -0,0 +1,59 @@ +// Copyright (c) 2015 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_STEP_ADD_DEFAULT_PRIVILEGES_H_ +#define WGT_STEP_STEP_ADD_DEFAULT_PRIVILEGES_H_ + +#include + +#include +#include +#include + +namespace wgt { +namespace security { + +/** + * \brief Step that add default privileges during installation + */ +class StepAddDefaultPrivileges : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Add default privileges + * + * \return Status::OK + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Check requirements for this step + * + * \return Status::ERROR when rmanifest data are missing, + * Status::OK otherwise + */ + Status precheck() override; + + SCOPE_LOG_TAG(AddDefaultPrivileges) +}; + +} // namespace security +} // namespace wgt + +#endif // WGT_STEP_STEP_ADD_DEFAULT_PRIVILEGES_H_ diff --git a/src/wgt/step/step_check_settings_level.cc b/src/wgt/step/step_check_settings_level.cc new file mode 100644 index 0000000..664e376 --- /dev/null +++ b/src/wgt/step/step_check_settings_level.cc @@ -0,0 +1,47 @@ +// Copyright (c) 2015 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/step_check_settings_level.h" + +#include +#include + +#include + +#include "wgt/wgt_backend_data.h" + +namespace { + +bool ValidateSettingsForLevel(common_installer::PrivilegeLevel level, + const wgt::parse::SettingInfo& settings) { + if (settings.background_vibration()) { + common_installer::PrivilegeLevel required_level = + common_installer::PrivilegeLevel::PARTNER; + if (!common_installer::SatifiesPrivilegeLevel(required_level, level)) { + LOG(ERROR) << "background_vibration requires visibility level: " + << common_installer::PrivilegeLevelToString(required_level); + return false; + } + LOG(INFO) << "Setting: 'background-vibration' allowed"; + } + return true; +} + +} // namespace + +namespace wgt { +namespace security { + +common_installer::Step::Status StepCheckSettingsLevel::process() { + if (!ValidateSettingsForLevel(context_->privilege_level.get(), + static_cast( + context_->backend_data.get())->settings.get())) { + return Status::ERROR; + } + LOG(INFO) << "Settings privilege level checked"; + return Status::OK; +} + +} // namespace security +} // namespace wgt diff --git a/src/wgt/step/step_check_settings_level.h b/src/wgt/step/step_check_settings_level.h new file mode 100644 index 0000000..bac5bf2 --- /dev/null +++ b/src/wgt/step/step_check_settings_level.h @@ -0,0 +1,59 @@ +// Copyright (c) 2015 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_STEP_CHECK_SETTINGS_LEVEL_H_ +#define WGT_STEP_STEP_CHECK_SETTINGS_LEVEL_H_ + +#include + +#include +#include +#include + +namespace wgt { +namespace security { + +/** + * \brief Step that check privileges level for settings + */ +class StepCheckSettingsLevel : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Check privileges level for settings + * + * \return Status::ERROR when invalid privileges detected, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + SCOPE_LOG_TAG(CheckSettingsLevel) +}; + +} // namespace security +} // namespace wgt + +#endif // WGT_STEP_STEP_CHECK_SETTINGS_LEVEL_H_ diff --git a/src/wgt/step/step_check_wgt_background_category.cc b/src/wgt/step/step_check_wgt_background_category.cc new file mode 100644 index 0000000..c652fc2 --- /dev/null +++ b/src/wgt/step/step_check_wgt_background_category.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2015 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/step_check_wgt_background_category.h" + +#include +#include + +#include "wgt/wgt_backend_data.h" + +namespace { +namespace ci_sec = common_installer::security; +} // namespace + +namespace wgt { +namespace security { + +StepCheckWgtBackgroundCategory::StepCheckWgtBackgroundCategory( + common_installer::InstallerContext* context) : + ci_sec::StepCheckBackgroundCategory(context) {} + +bool StepCheckWgtBackgroundCategory::GetBackgroundSupport() { + const wgt::parse::SettingInfo& settings = static_cast( + context_->backend_data.get())->settings.get(); + return settings.background_support_enabled(); +} + +} // namespace security +} // namespace wgt diff --git a/src/wgt/step/step_check_wgt_background_category.h b/src/wgt/step/step_check_wgt_background_category.h new file mode 100644 index 0000000..33b5b23 --- /dev/null +++ b/src/wgt/step/step_check_wgt_background_category.h @@ -0,0 +1,31 @@ +// Copyright (c) 2015 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_STEP_CHECK_WGT_BACKGROUND_CATEGORY_H_ +#define WGT_STEP_STEP_CHECK_WGT_BACKGROUND_CATEGORY_H_ + +#include +#include + +namespace wgt { +namespace security { + +/** + * \brief This step check background category value and modify it depending on + * required version, cert level, background support, and value itself + */ +class StepCheckWgtBackgroundCategory : + public common_installer::security::StepCheckBackgroundCategory { + public: + explicit StepCheckWgtBackgroundCategory( + common_installer::InstallerContext* context); + + protected: + bool GetBackgroundSupport() override; +}; + +} // namespace security +} // namespace wgt + +#endif // WGT_STEP_STEP_CHECK_WGT_BACKGROUND_CATEGORY_H_ diff --git a/src/wgt/step/step_create_symbolic_link.cc b/src/wgt/step/step_create_symbolic_link.cc new file mode 100644 index 0000000..1a3eda2 --- /dev/null +++ b/src/wgt/step/step_create_symbolic_link.cc @@ -0,0 +1,71 @@ +/* 2014, Copyright © Eurogiciel Coporation, APACHE-2.0, see LICENSE file */ +// Copyright (c) 2015 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/step_create_symbolic_link.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + + +namespace { + +const char kWrtServiceBinaryPath[] = "/usr/bin/wrt-service"; + +} // namespace + +namespace wgt { +namespace filesystem { + +namespace bf = boost::filesystem; + +common_installer::Step::Status StepCreateSymbolicLink::process() { + assert(context_->manifest_data.get()); + boost::system::error_code error; + for (application_x* app : + GListRange(context_->manifest_data.get()->application)) { + // binary is a symbolic link named and is located in / + bf::path exec_path = + context_->pkg_path.get() + / bf::path("bin"); + common_installer::CreateDir(exec_path); + + exec_path /= bf::path(app->appid); + + if (strcmp(app->component_type, "uiapp") == 0) { + bf::create_symlink(bf::path(WRT_LAUNCHER), exec_path, error); + } else { + bf::create_symlink(kWrtServiceBinaryPath, exec_path, error); + } + if (error) { + LOG(ERROR) << "Failed to set symbolic link " + << boost::system::system_error(error).what(); + return Step::Status::ERROR; + } + } + LOG(DEBUG) << "Successfully parse tizen manifest xml"; + + return Status::OK; +} + +common_installer::Step::Status StepCreateSymbolicLink::undo() { + for (application_x* app : + GListRange(context_->manifest_data.get()->application)) { + bf::path exec_path = context_->pkg_path.get() / "bin" / app->appid; + if (bf::exists(exec_path)) + bf::remove_all(exec_path); + } + return Status::OK; +} + +} // namespace filesystem +} // namespace wgt diff --git a/src/wgt/step/step_create_symbolic_link.h b/src/wgt/step/step_create_symbolic_link.h new file mode 100644 index 0000000..df51fde --- /dev/null +++ b/src/wgt/step/step_create_symbolic_link.h @@ -0,0 +1,61 @@ +// Copyright (c) 2015 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_STEP_CREATE_SYMBOLIC_LINK_H_ +#define WGT_STEP_STEP_CREATE_SYMBOLIC_LINK_H_ + +#include + +#include + +#include +#include +#include + +namespace wgt { +namespace filesystem { + +/** + * \brief Step that create symbolic link to application + */ +class StepCreateSymbolicLink : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Create symbolic link + * + * \return Status::ERROR when failed to create symbolic link, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Delete created symbolic link + * + * \return Status::OK + */ + Status undo() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + SCOPE_LOG_TAG(SymbolicLink) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_CREATE_SYMBOLIC_LINK_H_ diff --git a/src/wgt/step/step_encrypt_resources.cc b/src/wgt/step/step_encrypt_resources.cc new file mode 100644 index 0000000..08f659d --- /dev/null +++ b/src/wgt/step/step_encrypt_resources.cc @@ -0,0 +1,215 @@ +// Copyright (c) 2015 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/step_encrypt_resources.h" + +#include + +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + + +namespace { + +const std::set encryptSet { ".html", ".htm", ".css", ".js"}; + +} // namespace + + +namespace wgt { +namespace encrypt { + +namespace bf = boost::filesystem; +namespace bs = boost::system; + +common_installer::Step::Status StepEncryptResources::precheck() { + backend_data_ = static_cast(context_->backend_data.get()); + if (!backend_data_) { + LOG(ERROR) << "no backend data"; + return common_installer::Step::Status::ERROR; + } + + input_ = context_->unpacked_dir_path.get(); + + if (input_.empty()) { + LOG(ERROR) << "unpacked_dir_path attribute is empty"; + return Step::Status::INVALID_VALUE; + } + if (!bf::exists(input_)) { + LOG(ERROR) << "unpacked_dir_path (" << input_ << ") path does not exist"; + return Step::Status::INVALID_VALUE; + } + + return common_installer::Step::Status::OK; +} + +common_installer::Step::Status StepEncryptResources::process() { + if (!backend_data_->settings.get().encryption_enabled()) { + LOG(DEBUG) << "no encryption"; + return common_installer::Step::Status::OK; + } + LOG(DEBUG) << "Encrypting"; + + if (!Encrypt(input_)) { + LOG(ERROR) << "Error during encryption"; + return common_installer::Step::Status::ERROR; + } + + return common_installer::Step::Status::OK; +} + +bool StepEncryptResources::Encrypt(const bf::path &src) { + // traversing through src dir (recurrence if subdir found) + // for every file found, check if it should be encrypted (ToBeEncrypted) + // if yes, encrypt it (and replace original one) + // if not, leave it + for (bf::directory_iterator file(src); + file != bf::directory_iterator(); + ++file) { + bs::error_code error_code; + bf::path current(file->path()); + + bool is_dir = bf::is_directory(current, error_code); + if (error_code) + return false; + if (is_dir) { + if (!Encrypt(current)) + return false; + continue; + } + + bool is_sym = bf::is_symlink(current, error_code); + if (error_code) + return false; + if (is_sym) + continue; // TODO(p.sikorski) is it enough? + + // it is regular file (not dir, not symlink) + if (ToBeEncrypted(current)) { + LOG(INFO) << "File for encryption: " << current; + if (!EncryptFile(current)) + return false; + } + } + return true; +} + +bool StepEncryptResources::EncryptFile(const bf::path &src) { + FILE *input = fopen(src.string().c_str(), "rb"); + if (!input) { + LOG(ERROR) << "Cannot open file for encryption: " << src; + return false; + } + + // read size + fseek(input , 0 , SEEK_END); + size_t length = ftell(input); + + // don't encrypt empty files because libwebappenc doesn't support it + if (length == 0) { + fclose(input); + return true; + } + + rewind(input); + + char *input_buffer = new char[length]; + if (length != fread(input_buffer, sizeof(char), length, input)) { + LOG(ERROR) << "Read error, file: " << src; + fclose(input); + delete []input_buffer; + return false; + } + fclose(input); + + unsigned char* encrypted_data = nullptr; + size_t enc_data_len = 0; + // TODO(p.sikorski) check if it is Preloaded + wae_app_type_e enc_type = + context_->request_mode.get() == common_installer::RequestMode::GLOBAL ? + WAE_DOWNLOADED_GLOBAL_APP : WAE_DOWNLOADED_NORMAL_APP; + + + int ret = wae_encrypt_web_application( + context_->pkgid.get().c_str(), + enc_type, + reinterpret_cast(input_buffer), + length, + &encrypted_data, + &enc_data_len); + delete []input_buffer; + if (WAE_ERROR_NONE != ret) { + switch (ret) { + case WAE_ERROR_INVALID_PARAMETER: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_INVALID_PARAMETER"; + break; + case WAE_ERROR_PERMISSION_DENIED: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_PERMISSION_DENIED"; + break; + case WAE_ERROR_NO_KEY: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_NO_KEY"; + break; + case WAE_ERROR_KEY_MANAGER: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_KEY_MANAGER"; + break; + case WAE_ERROR_CRYPTO: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_CRYPTO"; + break; + case WAE_ERROR_UNKNOWN: + LOG(ERROR) << "Error during encrypting: WAE_ERROR_UNKNOWN"; + break; + default: + LOG(ERROR) << "Error during encrypting: UNKNOWN"; + break; + } + return false; + } + + // original file is treated as destination! + FILE *output = fopen(src.string().c_str(), "wb"); + if (!output) { + LOG(ERROR) << "Cannot create encrypted file: " << src; + free(encrypted_data); + return false; + } + + if (enc_data_len != fwrite(reinterpret_cast(encrypted_data), + sizeof(char), + enc_data_len, + output)) { + LOG(ERROR) << "Write error, file: " << src; + free(encrypted_data); + fclose(output); + return false; + } + + + fclose(output); + free(encrypted_data); + return true; +} + +bool StepEncryptResources::ToBeEncrypted(const bf::path &file) { + size_t found_key = file.string().rfind("."); + if (std::string::npos != found_key) { + std::string mimeType = file.string().substr(found_key); + std::transform(mimeType.begin(), mimeType.end(), mimeType.begin(), + ::tolower); + return encryptSet.count(mimeType) > 0; + } + return false; +} + +} // namespace encrypt +} // namespace wgt diff --git a/src/wgt/step/step_encrypt_resources.h b/src/wgt/step/step_encrypt_resources.h new file mode 100644 index 0000000..2d64a51 --- /dev/null +++ b/src/wgt/step/step_encrypt_resources.h @@ -0,0 +1,66 @@ +// Copyright (c) 2015 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_STEP_ENCRYPT_RESOURCES_H_ +#define WGT_STEP_STEP_ENCRYPT_RESOURCES_H_ + +#include + +#include +#include + +#include "wgt/wgt_backend_data.h" + +namespace wgt { +namespace encrypt { + +/** + * \brief Step that encrypt application resources files if flagged to do so + */ +class StepEncryptResources : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Encrypt files + * + * \return Status::ERROR when error occurred during encryption, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Check requirements for this step + * + * \return Status::ERROR when manifest data are missing, + * Status::INVALID_VALUE when requirements are not meet, + * Status::OK otherwise + */ + Status precheck() override; + + private: + bool Encrypt(const boost::filesystem::path &src); + bool EncryptFile(const boost::filesystem::path &src); + bool ToBeEncrypted(const boost::filesystem::path &file); + WgtBackendData* backend_data_; + boost::filesystem::path input_; + SCOPE_LOG_TAG(EncryptResources) +}; +} // namespace encrypt +} // namespace wgt +#endif // WGT_STEP_STEP_ENCRYPT_RESOURCES_H_ diff --git a/src/wgt/step/step_generate_xml.cc b/src/wgt/step/step_generate_xml.cc new file mode 100644 index 0000000..055fd3f --- /dev/null +++ b/src/wgt/step/step_generate_xml.cc @@ -0,0 +1,494 @@ +/* 2014, Copyright © Intel Coporation, license APACHE-2.0, see LICENSE file */ +// Copyright (c) 2015 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/step_generate_xml.h" + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +namespace bs = boost::system; +namespace bf = boost::filesystem; + +namespace { + +void WriteUIApplicationAttributes( + xmlTextWriterPtr writer, application_x *app) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "taskmanage", + BAD_CAST "true"); + if (app->nodisplay) + xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay", + BAD_CAST app->nodisplay); + if (app->multiple) + xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple", + BAD_CAST app->multiple); + if (app->launch_mode && strlen(app->launch_mode)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "launch_mode", + BAD_CAST app->launch_mode); + if (app->ui_gadget && strlen(app->ui_gadget)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "ui-gadget", + BAD_CAST app->ui_gadget); + if (app->submode && strlen(app->submode)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "submode", + BAD_CAST app->submode); + if (app->submode_mainid && strlen(app->submode_mainid)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "submode-mainid", + BAD_CAST app->submode_mainid); + if (app->indicatordisplay && strlen(app->indicatordisplay)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "indicatordisplay", + BAD_CAST app->indicatordisplay); + if (app->portraitimg && strlen(app->portraitimg)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "portrait-effectimage", + BAD_CAST app->portraitimg); + if (app->landscapeimg && strlen(app->landscapeimg)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "landscape-effectimage", + BAD_CAST app->landscapeimg); + if (app->effectimage_type && strlen(app->effectimage_type)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "effectimage-type", + BAD_CAST app->effectimage_type); + if (app->hwacceleration && strlen(app->hwacceleration)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "hwacceleration", + BAD_CAST app->hwacceleration); +} + +void WriteServiceApplicationAttributes( + xmlTextWriterPtr writer, application_x *app) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "auto-restart", + BAD_CAST(app->autorestart ? app->autorestart : "false")); + xmlTextWriterWriteAttribute(writer, BAD_CAST "on-boot", + BAD_CAST(app->onboot ? app->onboot : "false")); + xmlTextWriterWriteAttribute(writer, BAD_CAST "taskmanage", + BAD_CAST "false"); +} + +void WriteWidgetApplicationAttributes( + xmlTextWriterPtr writer, application_x *app) { + if (app->nodisplay) + xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay", + BAD_CAST app->nodisplay); + if (app->multiple) + xmlTextWriterWriteAttribute(writer, BAD_CAST "multiple", + BAD_CAST app->multiple); +} + +} // namespace + +namespace wgt { +namespace pkgmgr { + +common_installer::Step::Status StepGenerateXml::GenerateApplicationCommonXml( + application_x* app, xmlTextWriterPtr writer, AppCompType type) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "appid", BAD_CAST app->appid); + + // binary is a symbolic link named and is located in / + bf::path exec_path = context_->pkg_path.get() + / bf::path("bin") / bf::path(app->appid); + xmlTextWriterWriteAttribute(writer, BAD_CAST "exec", + BAD_CAST exec_path.string().c_str()); + if (app->type) + xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST app->type); + else + xmlTextWriterWriteAttribute(writer, BAD_CAST "type", BAD_CAST "capp"); + + if (app->process_pool && strlen(app->process_pool)) + xmlTextWriterWriteAttribute(writer, BAD_CAST "process-pool", + BAD_CAST app->process_pool); + // app-specific attributes + switch (type) { + case AppCompType::UIAPP: + WriteServiceApplicationAttributes(writer, app); + break; + case AppCompType::SVCAPP: + WriteUIApplicationAttributes(writer, app); + break; + case AppCompType::WIDGETAPP: + WriteWidgetApplicationAttributes(writer, app); + break; + } + + for (label_x* label : GListRange(app->label)) { + xmlTextWriterStartElement(writer, BAD_CAST "label"); + if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + BAD_CAST label->lang); + } + xmlTextWriterWriteString(writer, BAD_CAST label->name); + xmlTextWriterEndElement(writer); + } + + // icon is renamed to + if (app->icon) { + icon_x* iconx = reinterpret_cast(app->icon->data); + bf::path app_icon = context_->pkg_path.get(); + // TODO(t.iwanek): type should not be used here + if (context_->pkg_type.get() == "wgt") { + app_icon /= "res/wgt"; + } else { + app_icon /= "shared/res"; + } + app_icon /= iconx->text; + bf::path icon = app->appid; + if (app_icon.has_extension()) + icon += app_icon.extension(); + else + icon += bf::path(".png"); + + if (bf::exists(app_icon)) { + xmlTextWriterWriteFormatElement(writer, BAD_CAST "icon", + "%s", BAD_CAST icon.c_str()); + } + } else { + // Default icon setting is role of the platform + LOG(DEBUG) << "Icon was not found in package"; + } + + for (image_x* image : GListRange(app->image)) { + xmlTextWriterStartElement(writer, BAD_CAST "image"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", + BAD_CAST image->name); + if (image->lang && strcmp(DEFAULT_LOCALE, image->lang) != 0) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + + BAD_CAST image->lang); + } + if (image->section) + xmlTextWriterWriteAttribute(writer, BAD_CAST "section", + BAD_CAST image->section); + xmlTextWriterEndElement(writer); + } + + for (appcontrol_x* appc : GListRange(app->appcontrol)) { + xmlTextWriterStartElement(writer, BAD_CAST "app-control"); + + if (appc->operation) { + xmlTextWriterStartElement(writer, BAD_CAST "operation"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", + BAD_CAST appc->operation); + xmlTextWriterEndElement(writer); + } + + if (appc->uri) { + xmlTextWriterStartElement(writer, BAD_CAST "uri"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", + BAD_CAST appc->uri); + xmlTextWriterEndElement(writer); + } + + if (appc->mime) { + xmlTextWriterStartElement(writer, BAD_CAST "mime"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", + BAD_CAST appc->mime); + xmlTextWriterEndElement(writer); + } + + xmlTextWriterEndElement(writer); + } + + for (datacontrol_x* datacontrol : + GListRange(app->datacontrol)) { + xmlTextWriterStartElement(writer, BAD_CAST "datacontrol"); + if (datacontrol->access) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "access", + BAD_CAST datacontrol->access); + } + if (datacontrol->providerid) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "providerid", + BAD_CAST datacontrol->providerid); + } + if (datacontrol->type) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "type", + BAD_CAST datacontrol->type); + } + xmlTextWriterEndElement(writer); + } + + for (metadata_x* meta : GListRange(app->metadata)) { + xmlTextWriterStartElement(writer, BAD_CAST "metadata"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "key", + BAD_CAST meta->key); + if (meta->value) + xmlTextWriterWriteAttribute(writer, BAD_CAST "value", + BAD_CAST meta->value); + xmlTextWriterEndElement(writer); + } + + for (const char* category : GListRange(app->category)) { + xmlTextWriterStartElement(writer, BAD_CAST "category"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", BAD_CAST category); + xmlTextWriterEndElement(writer); + } + + for (const char* background_category : GListRange( + app->background_category)) { + xmlTextWriterStartElement(writer, BAD_CAST "background-category"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "value", + BAD_CAST background_category); + xmlTextWriterEndElement(writer); + } + + return Step::Status::OK; +} + +common_installer::Step::Status StepGenerateXml::precheck() { + if (!context_->manifest_data.get()) { + LOG(ERROR) << "manifest_data attribute is empty"; + return Step::Status::INVALID_VALUE; + } + if (context_->pkgid.get().empty()) { + LOG(ERROR) << "pkgid attribute is empty"; + return Step::Status::INVALID_VALUE; } + + if (!context_->manifest_data.get()->application) { + LOG(ERROR) << "No application in package"; + return Step::Status::INVALID_VALUE; + } + // TODO(p.sikorski) check context_->uid.get() + + return Step::Status::OK; +} + +common_installer::Step::Status StepGenerateXml::process() { + bf::path xml_path = bf::path(getUserManifestPath(context_->uid.get())) + / bf::path(context_->pkgid.get()); + xml_path += ".xml"; + context_->xml_path.set(xml_path.string()); + + bs::error_code error; + if (!bf::exists(xml_path.parent_path(), error)) { + if (!common_installer::CreateDir(xml_path.parent_path())) { + LOG(ERROR) << + "Directory for manifest xml is missing and cannot be created"; + return Status::ERROR; + } + } + + xmlTextWriterPtr writer; + + writer = xmlNewTextWriterFilename(context_->xml_path.get().c_str(), 0); + if (!writer) { + LOG(ERROR) << "Failed to create new file"; + return Step::Status::ERROR; + } + + xmlTextWriterStartDocument(writer, nullptr, nullptr, nullptr); + + xmlTextWriterSetIndent(writer, 1); + + // add manifest Element + xmlTextWriterStartElement(writer, BAD_CAST "manifest"); + + xmlTextWriterWriteAttribute(writer, BAD_CAST "xmlns", + BAD_CAST "http://tizen.org/ns/packages"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "package", + BAD_CAST context_->manifest_data.get()->package); + xmlTextWriterWriteAttribute(writer, BAD_CAST "type", + BAD_CAST context_->manifest_data.get()->type); + xmlTextWriterWriteAttribute(writer, BAD_CAST "version", + BAD_CAST context_->manifest_data.get()->version); + xmlTextWriterWriteAttribute(writer, BAD_CAST "api-version", + BAD_CAST context_->manifest_data.get()->api_version); + xmlTextWriterWriteAttribute(writer, BAD_CAST "nodisplay-setting", + BAD_CAST context_->manifest_data.get()->nodisplay_setting); + + for (label_x* label : + GListRange(context_->manifest_data.get()->label)) { + xmlTextWriterStartElement(writer, BAD_CAST "label"); + if (label->lang && strcmp(DEFAULT_LOCALE, label->lang) != 0) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + BAD_CAST label->lang); + } + xmlTextWriterWriteString(writer, BAD_CAST label->name); + xmlTextWriterEndElement(writer); + } + + for (author_x* author : + GListRange(context_->manifest_data.get()->author)) { + xmlTextWriterStartElement(writer, BAD_CAST "author"); + if (author->email && strlen(author->email)) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "email", + BAD_CAST author->email); + } + if (author->href && strlen(author->href)) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "href", + BAD_CAST author->href); + } + xmlTextWriterWriteString(writer, BAD_CAST author->text); + xmlTextWriterEndElement(writer); + } + + for (description_x* description : + GListRange(context_->manifest_data.get()->description)) { + xmlTextWriterStartElement(writer, BAD_CAST "description"); + if (description->lang && strcmp(DEFAULT_LOCALE, description->lang) != 0) { + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + BAD_CAST description->lang); + } + xmlTextWriterWriteString(writer, BAD_CAST description->text); + xmlTextWriterEndElement(writer); + } + + // add application + for (application_x* app : + GListRange(context_->manifest_data.get()->application)) { + AppCompType type; + if (strcmp(app->component_type, "uiapp") == 0) { + type = AppCompType::UIAPP; + xmlTextWriterStartElement(writer, BAD_CAST "ui-application"); + } else if (strcmp(app->component_type, "svcapp") == 0) { + type = AppCompType::SVCAPP; + xmlTextWriterStartElement(writer, BAD_CAST "service-application"); + } else if (strcmp(app->component_type, "widgetapp") == 0) { + type = AppCompType::WIDGETAPP; + xmlTextWriterStartElement(writer, BAD_CAST "widget-application"); + } else { + LOG(ERROR) << "Unknown application component_type"; + xmlFreeTextWriter(writer); + return Status::ERROR; + } + GenerateApplicationCommonXml(app, writer, type); + xmlTextWriterEndElement(writer); + } + + // add privilege element + if (context_->manifest_data.get()->privileges) { + xmlTextWriterStartElement(writer, BAD_CAST "privileges"); + for (const char* priv : + GListRange(context_->manifest_data.get()->privileges)) { + xmlTextWriterWriteFormatElement(writer, BAD_CAST "privilege", + "%s", BAD_CAST priv); + } + xmlTextWriterEndElement(writer); + } + + const auto& accounts = + context_->manifest_plugins_data.get().account_info.get().accounts(); + if (!accounts.empty()) { + xmlTextWriterStartElement(writer, BAD_CAST "account"); + // add account info + for (auto& account : accounts) { + xmlTextWriterStartElement(writer, BAD_CAST "account-provider"); + + xmlTextWriterWriteAttribute(writer, BAD_CAST "appid", + BAD_CAST account.appid.c_str()); + + if (!account.providerid.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "providerid", + BAD_CAST account.providerid.c_str()); + + if (account.multiple_account_support) + xmlTextWriterWriteAttribute(writer, + BAD_CAST "multiple-accounts-support", + BAD_CAST "true"); + for (auto& icon_pair : account.icon_paths) { + xmlTextWriterStartElement(writer, BAD_CAST "icon"); + if (icon_pair.first == "AccountSmall") + xmlTextWriterWriteAttribute(writer, BAD_CAST "section", + BAD_CAST "account-small"); + else + xmlTextWriterWriteAttribute(writer, BAD_CAST "section", + BAD_CAST "account"); + xmlTextWriterWriteString(writer, BAD_CAST icon_pair.second.c_str()); + xmlTextWriterEndElement(writer); + } + + for (auto& name_pair : account.names) { + xmlTextWriterStartElement(writer, BAD_CAST "label"); + if (!name_pair.second.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + BAD_CAST name_pair.second.c_str()); + xmlTextWriterWriteString(writer, BAD_CAST name_pair.first.c_str()); + xmlTextWriterEndElement(writer); + } + + for (auto& capability : account.capabilities) { + xmlTextWriterWriteFormatElement(writer, BAD_CAST "capability", + "%s", BAD_CAST capability.c_str()); + } + + xmlTextWriterEndElement(writer); + } + xmlTextWriterEndElement(writer); + } + + for (const char* profile : + GListRange(context_->manifest_data.get()->deviceprofile)) { + xmlTextWriterStartElement(writer, BAD_CAST "profile"); + xmlTextWriterWriteAttribute(writer, BAD_CAST "name", + BAD_CAST profile); + xmlTextWriterEndElement(writer); + } + + const auto& shortcuts = + context_->manifest_plugins_data.get().shortcut_info.get(); + if (!shortcuts.empty()) { + xmlTextWriterStartElement(writer, BAD_CAST "shortcut-list"); + for (auto& shortcut : shortcuts) { + xmlTextWriterStartElement(writer, BAD_CAST "shortcut"); + if (!shortcut.app_id.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "appid", + BAD_CAST shortcut.app_id.c_str()); + if (!shortcut.app_id.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_data", + BAD_CAST shortcut.extra_data.c_str()); + if (!shortcut.app_id.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "extra_key", + BAD_CAST shortcut.extra_key.c_str()); + if (!shortcut.icon.empty()) { + xmlTextWriterStartElement(writer, BAD_CAST "icon"); + xmlTextWriterWriteString(writer, BAD_CAST shortcut.icon.c_str()); + xmlTextWriterEndElement(writer); + } + for (auto& label : shortcut.labels) { + xmlTextWriterStartElement(writer, BAD_CAST "label"); + if (!label.first.empty()) + xmlTextWriterWriteAttribute(writer, BAD_CAST "xml:lang", + BAD_CAST label.first.c_str()); + xmlTextWriterWriteString(writer, BAD_CAST label.second.c_str()); + xmlTextWriterEndElement(writer); + } + xmlTextWriterEndElement(writer); + } + xmlTextWriterEndElement(writer); + } + + xmlTextWriterEndElement(writer); + + xmlTextWriterEndDocument(writer); + xmlFreeTextWriter(writer); + + if (pkgmgr_parser_check_manifest_validation( + context_->xml_path.get().c_str()) != 0) { + LOG(ERROR) << "Manifest is not valid"; + return Step::Status::ERROR; + } + + LOG(DEBUG) << "Successfully create manifest xml " + << context_->xml_path.get(); + return Status::OK; +} + +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); + return Status::OK; +} + +} // namespace pkgmgr +} // namespace wgt diff --git a/src/wgt/step/step_generate_xml.h b/src/wgt/step/step_generate_xml.h new file mode 100644 index 0000000..5351991 --- /dev/null +++ b/src/wgt/step/step_generate_xml.h @@ -0,0 +1,45 @@ +/* 2014, Copyright © Intel Coporation, license APACHE-2.0, see LICENSE file */ +// Copyright (c) 2015 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_STEP_GENERATE_XML_H_ +#define WGT_STEP_STEP_GENERATE_XML_H_ + +#include + +#include + +#include +#include + +namespace wgt { +namespace pkgmgr { + +class StepGenerateXml : public common_installer::Step { + public: + using Step::Step; + + Status process() override; + Status clean() override { return Status::OK; } + Status undo() override; + Status precheck() override; + + private: + enum class AppCompType { + UIAPP, + SVCAPP, + WIDGETAPP + }; + + Step::Status GenerateApplicationCommonXml(application_x* app, + xmlTextWriterPtr writer, + AppCompType type); + + SCOPE_LOG_TAG(GenerateXML) +}; + +} // namespace pkgmgr +} // namespace wgt + +#endif // WGT_STEP_STEP_GENERATE_XML_H_ diff --git a/src/wgt/step/step_parse.cc b/src/wgt/step/step_parse.cc new file mode 100644 index 0000000..ac36e10 --- /dev/null +++ b/src/wgt/step/step_parse.cc @@ -0,0 +1,574 @@ +/* 2014, Copyright © Intel Coporation, license APACHE-2.0, see LICENSE file */ +// Copyright (c) 2015 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/step_parse.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "wgt/wgt_backend_data.h" + +namespace { + +const std::string kManifestVersion = "1.0.0"; +const char kTizenPackageXmlNamespace[] = "http://tizen.org/ns/packages"; + +GList* GenerateMetadataListX(const wgt::parse::MetaDataInfo& meta_info) { + GList* list = nullptr; + for (auto& meta : meta_info.metadata()) { + 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()); + list = g_list_append(list, new_meta); + } + return list; +} + +void SetApplicationXDefaults(application_x* application) { + application->ambient_support = strdup("false"); + application->effectimage_type = strdup("image"); + application->enabled = strdup("true"); + application->guestmode_visibility = strdup("true"); + application->hwacceleration = strdup("default"); + application->indicatordisplay = strdup("true"); + application->launchcondition = strdup("false"); + application->permission_type = strdup("normal"); + application->process_pool = strdup("false"); + application->recentimage = strdup("false"); + application->screenreader = strdup("use-system-setting"); + application->submode = strdup("false"); + application->support_disable = strdup("false"); + application->taskmanage = strdup("true"); + application->ui_gadget = strdup("false"); +} + +} // namespace + +namespace wgt { +namespace parse { + +namespace app_keys = wgt::application_widget_keys; +namespace sc = std::chrono; + +StepParse::StepParse(common_installer::InstallerContext* context, + bool check_start_file) + : Step(context), + check_start_file_(check_start_file) { +} + +std::set StepParse::ExtractPrivileges( + std::shared_ptr perm_info) const { + return perm_info->GetAPIPermissions(); +} + +const std::string& StepParse::GetPackageVersion( + const std::string& manifest_version) { + if (!manifest_version.empty()) + return manifest_version; + return kManifestVersion; +} + +bool StepParse::FillInstallationInfo(manifest_x* manifest) { + manifest->root_path = strdup( + (context_->root_application_path.get() / manifest->package).c_str()); + manifest->installed_time = + strdup(std::to_string(sc::system_clock::to_time_t( + sc::system_clock::now())).c_str()); + return true; +} + +bool StepParse::FillIconPaths(manifest_x* manifest) { + std::shared_ptr icons_info = + std::static_pointer_cast( + parser_->GetManifestData(app_keys::kIconsKey)); + if (icons_info.get()) { + for (auto& application_icon : icons_info->icons()) { + icon_x* icon = reinterpret_cast (calloc(1, sizeof(icon_x))); + icon->text = strdup(application_icon.path().c_str()); + icon->lang = strdup(DEFAULT_LOCALE); + manifest->icon = g_list_append(manifest->icon, icon); + } + } + return true; +} + +bool StepParse::FillWidgetInfo(manifest_x* manifest) { + std::shared_ptr wgt_info = + std::static_pointer_cast(parser_->GetManifestData( + app_keys::kWidgetKey)); + if (!wgt_info.get()) { + LOG(ERROR) << "Widget info manifest data has not been found."; + return false; + } + + const std::string& version = wgt_info->version(); + + manifest->ns = strdup(kTizenPackageXmlNamespace); + manifest->version = strdup(GetPackageVersion(version).c_str()); + + for (auto& item : wgt_info->description_set()) { + description_x* description = reinterpret_cast + (calloc(1, sizeof(description_x))); + description->text = strdup(item.second.c_str()); + description->lang = !item.first.empty() ? + strdup(item.first.c_str()) : strdup(DEFAULT_LOCALE); + manifest->description = g_list_append(manifest->description, description); + } + + for (auto& item : wgt_info->name_set()) { + label_x* label = reinterpret_cast(calloc(1, sizeof(label_x))); + label->name = strdup(item.second.c_str()); + label->text = strdup(item.second.c_str()); + label->lang = !item.first.empty() ? + strdup(item.first.c_str()) : strdup(DEFAULT_LOCALE); + manifest->label = g_list_append(manifest->label, label); + } + + manifest->type = strdup("wgt"); + manifest->appsetting = strdup("false"); + manifest->nodisplay_setting = strdup("false"); + + // For wgt package use the long name + for (auto& item : wgt_info->name_set()) { + application_x* app = + reinterpret_cast(manifest->application->data); + label_x* label = reinterpret_cast(calloc(1, sizeof(label_x))); + label->name = strdup(item.second.c_str()); + label->text = strdup(item.second.c_str()); + label->lang = !item.first.empty() ? + strdup(item.first.c_str()) : strdup(DEFAULT_LOCALE); + app->label = g_list_append(app->label, label); + } + + author_x* author = reinterpret_cast(calloc(1, sizeof(author_x))); + if (!wgt_info->author().empty()) + author->text = strdup(wgt_info->author().c_str()); + if (!wgt_info->author_email().empty()) + author->email = strdup(wgt_info->author_email().c_str()); + if (!wgt_info->author_href().empty()) + author->href = strdup(wgt_info->author_href().c_str()); + author->lang = strdup(DEFAULT_LOCALE); + manifest->author = g_list_append(manifest->author, author); + + std::shared_ptr settings_info = + std::static_pointer_cast( + parser_->GetManifestData( + wgt::application_widget_keys::kTizenSettingKey)); + if (settings_info) { + switch (settings_info->install_location()) { + case wgt::parse::SettingInfo::InstallLocation::AUTO: { + manifest->installlocation = strdup("auto"); + break; + } + case wgt::parse::SettingInfo::InstallLocation::INTERNAL: { + manifest->installlocation = strdup("internal-only"); + break; + } + case wgt::parse::SettingInfo::InstallLocation::EXTERNAL: { + manifest->installlocation = strdup("prefer-external"); + break; + } + } + } else { + manifest->installlocation = strdup("auto"); + } + + return true; +} + +bool StepParse::FillUIApplicationInfo(manifest_x* manifest) { + std::shared_ptr app_info = + std::static_pointer_cast( + parser_->GetManifestData(app_keys::kTizenApplicationKey)); + if (!app_info) { + LOG(ERROR) << "Application info manifest data has not been found."; + return false; + } + // application data + application_x* application = reinterpret_cast( + calloc(1, sizeof(application_x))); + application->component_type = strdup("uiapp"); + application->mainapp = strdup("true"); + application->nodisplay = strdup("false"); + application->multiple = strdup("false"); + application->appid = strdup(app_info->id().c_str()); + SetApplicationXDefaults(application); + application->package = strdup(app_info->package().c_str()); + + application->exec = + strdup((context_->root_application_path.get() / app_info->package() + / "bin" / application->appid).c_str()); + application->type = strdup("webapp"); + application->onboot = strdup("false"); + application->autorestart = strdup("false"); + + application->launch_mode = strdup(app_info->launch_mode().c_str()); + if (manifest->icon) { + icon_x* icon = reinterpret_cast(manifest->icon->data); + icon_x* app_icon = reinterpret_cast(calloc(1, sizeof(icon_x))); + app_icon->text = strdup(icon->text); + app_icon->lang = strdup(icon->lang); + application->icon = g_list_append(application->icon, app_icon); + } + manifest->application = g_list_append(manifest->application, application); + + manifest->package = strdup(app_info->package().c_str()); + manifest->mainapp_id = strdup(app_info->id().c_str()); + return true; +} + +bool StepParse::FillServiceApplicationInfo(manifest_x* manifest) { + std::shared_ptr service_list = + std::static_pointer_cast( + parser_->GetManifestData(app_keys::kTizenServiceKey)); + if (!service_list) + return true; + for (auto& service_info : service_list->services) { + application_x* application = reinterpret_cast + (calloc(1, sizeof(application_x))); + application->component_type = strdup("svcapp"); + application->mainapp = strdup("false"); + application->nodisplay = strdup("false"); + application->multiple = strdup("false"); + application->appid = strdup(service_info.id().c_str()); + application->exec = + strdup((context_->root_application_path.get() / manifest->package + / "bin" / application->appid).c_str()); + application->type = strdup("webapp"); + application->onboot = + service_info.on_boot() ? strdup("true") : strdup("false"); + application->autorestart = + service_info.auto_restart() ? strdup("true") : strdup("false"); + SetApplicationXDefaults(application); + application->package = strdup(manifest->package); + + for (auto& pair : service_info.names()) { + label_x* label = reinterpret_cast(calloc(1, sizeof(label_x))); + label->lang = !pair.first.empty() ? + strdup(pair.first.c_str()) : strdup(DEFAULT_LOCALE); + label->name = strdup(pair.second.c_str()); + label->text = strdup(pair.second.c_str()); + application->label = g_list_append(application->label, label); + } + + if (!service_info.icon().empty()) { + icon_x* icon = reinterpret_cast(calloc(1, sizeof(icon_x))); + icon->text = strdup(service_info.icon().c_str()); + icon->lang = strdup(DEFAULT_LOCALE); + application->icon = g_list_append(application->icon, icon); + } + + // TODO(t.iwanek): what about description, how is it different from name? + + for (auto& category : service_info.categories()) { + application->category = g_list_append(application->category, + strdup(category.c_str())); + } + + for (auto& pair : service_info.metadata_set()) { + metadata_x* item = reinterpret_cast( + calloc(1, sizeof(metadata_x))); + item->key = strdup(pair.first.c_str()); + if (!pair.second.empty()) + item->value = strdup(pair.second.c_str()); + application->metadata = g_list_append(application->metadata, item); + } + + manifest->application = g_list_append(manifest->application, application); + } + return true; +} + +bool StepParse::FillBackgroundCategoryInfo(manifest_x* manifest) { + auto manifest_data = parser_->GetManifestData( + app_keys::kTizenBackgroundCategoryKey); + std::shared_ptr bc_list = + std::static_pointer_cast(manifest_data); + + if (!bc_list) + return true; + + application_x* app = + reinterpret_cast(manifest->application->data); + + for (auto& background_category : bc_list->background_categories) { + app->background_category = g_list_append( + app->background_category, strdup(background_category.value().c_str())); + } + + return true; +} + +bool StepParse::FillAppControl(manifest_x* manifest) { + std::shared_ptr app_info_list = + std::static_pointer_cast( + parser_->GetManifestData(app_keys::kTizenApplicationAppControlsKey)); + + application_x* app = + reinterpret_cast(manifest->application->data); + if (app_info_list) { + for (const auto& control : app_info_list->controls) { + appcontrol_x* app_control = + static_cast(calloc(1, sizeof(appcontrol_x))); + app_control->operation = strdup(control.operation().c_str()); + app_control->mime = strdup(control.mime().c_str()); + app_control->uri = strdup(control.uri().c_str()); + app->appcontrol = g_list_append(app->appcontrol, app_control); + } + } + return true; +} + +bool StepParse::FillPrivileges(manifest_x* manifest) { + std::shared_ptr perm_info = + std::static_pointer_cast(parser_->GetManifestData( + app_keys::kTizenPermissionsKey)); + std::set privileges; + if (perm_info) + privileges = ExtractPrivileges(perm_info); + + for (auto& priv : privileges) { + manifest->privileges = + g_list_append(manifest->privileges, strdup(priv.c_str())); + } + return true; +} + +bool StepParse::FillCategories(manifest_x* manifest) { + std::shared_ptr category_info = + std::static_pointer_cast(parser_->GetManifestData( + app_keys::kTizenCategoryKey)); + if (!category_info) + return true; + + application_x* app = + reinterpret_cast(manifest->application->data); + // there is one app atm + for (auto& category : category_info->categories) { + app->category = g_list_append(app->category, strdup(category.c_str())); + } + return true; +} + +bool StepParse::FillMetadata(manifest_x* manifest) { + std::shared_ptr meta_info = + std::static_pointer_cast(parser_->GetManifestData( + app_keys::kTizenMetaDataKey)); + if (!meta_info) + return true; + + for (application_x* app : GListRange(manifest->application)) { + app->metadata = GenerateMetadataListX(*meta_info); + } + return true; +} + +bool StepParse::FillAccounts(manifest_x* manifest) { + std::shared_ptr account_info = + std::static_pointer_cast(parser_->GetManifestData( + app_keys::kAccountKey)); + if (!account_info) + return true; + common_installer::AccountInfo info; + for (auto& account : account_info->accounts()) { + common_installer::SingleAccountInfo single_info; + single_info.capabilities = account.capabilities; + single_info.icon_paths = account.icon_paths; + single_info.multiple_account_support = account.multiple_account_support; + single_info.names = account.names; + // wgt can contain only one app so this assumes mainapp_id is valid here + single_info.appid = manifest->mainapp_id; + info.set_account(single_info); + } + context_->manifest_plugins_data.get().account_info.set(info); + return true; +} + +bool StepParse::FillExtraManifestInfo(manifest_x* manifest) { + return FillAccounts(manifest); +} + +bool StepParse::FillManifestX(manifest_x* manifest) { + if (!FillIconPaths(manifest)) + return false; + if (!FillUIApplicationInfo(manifest)) + return false; + if (!FillWidgetInfo(manifest)) + return false; + if (!FillInstallationInfo(manifest)) + return false; + if (!FillPrivileges(manifest)) + return false; + if (!FillAppControl(manifest)) + return false; + if (!FillCategories(manifest)) + return false; + if (!FillMetadata(manifest)) + return false; + // TODO(t.iwanek): fix adding ui application element + // for now adding application service is added here because rest of code + // assumes that there is one application at manifest->application + // so this must execute last + if (!FillServiceApplicationInfo(manifest)) + return false; + if (!FillBackgroundCategoryInfo(manifest)) + return false; + if (!FillExtraManifestInfo(manifest)) + return false; + return true; +} + +bool StepParse::LocateConfigFile() { + return StepParse::Check(context_->unpacked_dir_path.get()); +} + +common_installer::Step::Status StepParse::process() { + if (!LocateConfigFile()) { + LOG(ERROR) << "No config.xml"; + return common_installer::Step::Status::ERROR; + } + + parser_.reset(new wgt::parse::WidgetConfigParser()); + if (!parser_->ParseManifest(config_)) { + LOG(ERROR) << "[Parse] Parse failed. " << parser_->GetErrorMessage(); + return common_installer::Step::Status::ERROR; + } + if (check_start_file_) { + if (!parser_->HasValidStartFile()) { + LOG(ERROR) << parser_->GetErrorMessage(); + return common_installer::Step::Status::ERROR; + } + if (!parser_->HasValidServicesStartFiles()) { + LOG(ERROR) << parser_->GetErrorMessage(); + return common_installer::Step::Status::ERROR; + } + } + + manifest_x* manifest = + static_cast(calloc(1, sizeof(manifest_x))); + if (!FillManifestX(manifest)) { + LOG(ERROR) << "[Parse] Storing manifest_x failed. " + << parser_->GetErrorMessage(); + return common_installer::Step::Status::ERROR; + } + + // Copy data from ManifestData to InstallerContext + std::shared_ptr info = + std::static_pointer_cast( + parser_->GetManifestData( + wgt::application_widget_keys::kTizenApplicationKey)); + std::shared_ptr wgt_info = + std::static_pointer_cast( + parser_->GetManifestData( + wgt::application_widget_keys::kTizenWidgetKey)); + + std::string name; + const auto& name_set = wgt_info->name_set(); + if (name_set.find("") != name_set.end()) + name = name_set.find("")->second; + if (name_set.begin() != name_set.end()) + name = name_set.begin()->second; + + std::string short_name; + const auto& short_name_set = wgt_info->short_name_set(); + if (short_name_set.find("") != short_name_set.end()) + short_name = short_name_set.find("")->second; + if (short_name_set.begin() != short_name_set.end()) + short_name = short_name_set.begin()->second; + + const std::string& package_version = wgt_info->version(); + const std::string& required_api_version = info->required_version(); + + manifest->api_version = strdup(required_api_version.c_str()); + context_->pkgid.set(manifest->package); + + // write pkgid for recovery file + if (context_->recovery_info.get().recovery_file) { + context_->recovery_info.get().recovery_file->set_pkgid(manifest->package); + context_->recovery_info.get().recovery_file->WriteAndCommitFileContent(); + } + + std::shared_ptr perm_info = + std::static_pointer_cast( + parser_->GetManifestData( + wgt::application_widget_keys::kTizenPermissionsKey)); + parser::PermissionSet permissions; + if (perm_info) + permissions = perm_info->GetAPIPermissions(); + + std::unique_ptr backend_data(new WgtBackendData()); + + std::shared_ptr settings_info = + std::static_pointer_cast( + parser_->GetManifestData( + wgt::application_widget_keys::kTizenSettingKey)); + if (settings_info) + backend_data->settings.set(*settings_info); + + context_->backend_data.set(backend_data.release()); + + LOG(DEBUG) << " Read data -[ "; + LOG(DEBUG) << "App id: " << info->id(); + LOG(DEBUG) << " package = " << info->package(); + LOG(DEBUG) << " id = " << info->id(); + LOG(DEBUG) << " name = " << name; + LOG(DEBUG) << " short_name = " << short_name; + LOG(DEBUG) << " aplication version = " << package_version; + LOG(DEBUG) << " api_version = " << info->required_version(); + LOG(DEBUG) << " launch_mode = " << info->launch_mode(); + LOG(DEBUG) << " privileges -["; + for (const auto& p : permissions) { + LOG(DEBUG) << " " << p; + } + LOG(DEBUG) << " ]-"; + LOG(DEBUG) << "]-"; + + context_->manifest_data.set(manifest); + return common_installer::Step::Status::OK; +} + +bool StepParse::Check(const boost::filesystem::path& widget_path) { + boost::filesystem::path config = widget_path; + config /= "config.xml"; + + LOG(DEBUG) << "config.xml path: " << config; + + if (!boost::filesystem::exists(config)) + return false; + + config_ = config; + return true; +} + +} // namespace parse +} // namespace wgt diff --git a/src/wgt/step/step_parse.h b/src/wgt/step/step_parse.h new file mode 100644 index 0000000..115ccf0 --- /dev/null +++ b/src/wgt/step/step_parse.h @@ -0,0 +1,100 @@ +// Copyright (c) 2015 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_STEP_PARSE_H_ +#define WGT_STEP_STEP_PARSE_H_ + +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +namespace wgt { +namespace parse { + +/** + * \brief This step parse manifest.xml document + */ +class StepParse : public common_installer::Step { + public: + /** + * \brief Explicit constructor + * + * \param context Installer context + * \param check_start_file Flag if start file should be validated + */ + explicit StepParse(common_installer::InstallerContext* context, + bool check_start_file); + + /** + * \brief + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + protected: + virtual bool LocateConfigFile(); + bool Check(const boost::filesystem::path& widget_path); + + boost::filesystem::path config_; + + private: + std::set ExtractPrivileges( + std::shared_ptr perm_info) const; + + const std::string& GetPackageVersion(const std::string& manifest_version); + + bool FillInstallationInfo(manifest_x* manifest); + bool FillIconPaths(manifest_x* manifest); + bool FillWidgetInfo(manifest_x* manifest); + bool FillUIApplicationInfo(manifest_x* manifest); + bool FillServiceApplicationInfo(manifest_x* manifest); + bool FillAppControl(manifest_x* manifest); + bool FillPrivileges(manifest_x* manifest); + bool FillCategories(manifest_x* manifest); + bool FillMetadata(manifest_x* manifest); + bool FillExtraManifestInfo(manifest_x* manifest); + bool FillAccounts(manifest_x* manifest); + bool FillBackgroundCategoryInfo(manifest_x* manifest); + bool FillManifestX(manifest_x* manifest); + + std::unique_ptr parser_; + bool check_start_file_; + + SCOPE_LOG_TAG(Parse) +}; + +} // namespace parse +} // namespace wgt + +#endif // WGT_STEP_STEP_PARSE_H_ diff --git a/src/wgt/step/step_parse_recovery.cc b/src/wgt/step/step_parse_recovery.cc new file mode 100644 index 0000000..7fe4a10 --- /dev/null +++ b/src/wgt/step/step_parse_recovery.cc @@ -0,0 +1,56 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_parse_recovery.h" + +#include +#include + +namespace { + +const char kResWgtPath[] = "res/wgt"; + +} + +namespace wgt { +namespace parse { + +StepParseRecovery::StepParseRecovery( + common_installer::InstallerContext* context) + : StepParse(context, false) { +} + +common_installer::Step::Status StepParseRecovery::process() { + (void) StepParse::process(); + return Status::OK; +} + +common_installer::Step::Status StepParseRecovery::precheck() { + if (context_->root_application_path.get().empty()) { + LOG(ERROR) << "Root path of packages in not set"; + return Status::ERROR; + } + if (context_->pkgid.get().empty()) { + LOG(WARNING) << "Pkgid is not set. Parsing skipped"; + return Status::OK; + } + return Status::OK; +} + +bool StepParseRecovery::LocateConfigFile() { + context_->pkg_path.set( + context_->root_application_path.get() / context_->pkgid.get()); + + if (Check(common_installer::GetBackupPathForPackagePath( + context_->pkg_path.get()) / kResWgtPath)) + return true; + + if (Check(context_->pkg_path.get() / kResWgtPath)) + return true; + + return false; +} + +} // namespace parse +} // namespace wgt diff --git a/src/wgt/step/step_parse_recovery.h b/src/wgt/step/step_parse_recovery.h new file mode 100644 index 0000000..b5ed147 --- /dev/null +++ b/src/wgt/step/step_parse_recovery.h @@ -0,0 +1,63 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_PARSE_RECOVERY_H_ +#define WGT_STEP_STEP_PARSE_RECOVERY_H_ + +#include + +#include "wgt/step/step_parse.h" + +namespace wgt { +namespace parse { +/** + * \brief The StepParseRecovery class + * Retrievies package information from config.xml during RECOVERY. + * + * Step is used in recovery mode. + * + * Parse config.xml file by guessing possible locations: + * - backup package directory + * - package installation directory + * to get information about widget package to be recovered. + * + */ +class StepParseRecovery : public StepParse { + public: + /** + * \brief Explicit constructor + * + * \param context installer context + */ + explicit StepParseRecovery(common_installer::InstallerContext* context); + + /** + * \brief Parse config.xml + * + * \return Status::OK + */ + Status process() override; + + /** + * \brief Validate requirements for this step + * + * \return Status::ERROR when root path of packages is missing, + * Status::OK otherwise + */ + Status precheck() override; + + /** + * \brief Locate config.xml file + * + * \return true if config.xml is found + */ + bool LocateConfigFile() override; + + SCOPE_LOG_TAG(ParseRecovery) +}; + +} // namespace parse +} // namespace wgt + +#endif // WGT_STEP_STEP_PARSE_RECOVERY_H_ diff --git a/src/wgt/step/step_rds_modify.cc b/src/wgt/step/step_rds_modify.cc new file mode 100644 index 0000000..41b9bc1 --- /dev/null +++ b/src/wgt/step/step_rds_modify.cc @@ -0,0 +1,226 @@ +// Copyright (c) 2015 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/step_rds_modify.h" + +#include + +#include + +#include + +namespace wgt { +namespace rds { + +namespace bf = boost::filesystem; +namespace bs = boost::system; +namespace cu = common_installer; + +StepRDSModify::StepRDSModify(common_installer::InstallerContext* context) + : Step(context), + backend_data_(nullptr) {} + +common_installer::Step::Status StepRDSModify::precheck() { + if (context_->unpacked_dir_path.get().empty()) { + LOG(ERROR) << "unpacked dir path is not set"; + return common_installer::Step::Status::ERROR; + } + if (!bf::exists(context_->unpacked_dir_path.get())) { + LOG(ERROR) << "unpacked_dir_path (" + << context_->unpacked_dir_path.get() + << ") path does not exist"; + return common_installer::Step::Status::ERROR; + } + if (context_->pkgid.get().empty()) { + LOG(ERROR) << "pkgid is not set"; + return common_installer::Step::Status::ERROR; + } + if (!context_->manifest_data.get()) { + LOG(ERROR) << "no manifest info available"; + return common_installer::Step::Status::ERROR; + } + // TODO(w.kosowicz): check if config of installed app was encrypted + backend_data_ = static_cast(context_->backend_data.get()); + if (!backend_data_) { + LOG(ERROR) << "no backend data"; + return common_installer::Step::Status::ERROR; + } + return common_installer::Step::Status::OK; +} + +common_installer::Step::Status StepRDSModify::process() { + LOG(INFO) << "entered process of step modify"; + if (!SetUpTempBackupDir()) { + LOG(ERROR) << "unable to setup temp directory"; + return common_installer::Step::Status::ERROR; + } + context_->pkg_path.set( + context_->root_application_path.get() /context_->pkgid.get()); + bf::path install_path = context_->pkg_path.get() / "res" / "wgt"; + bf::path unzip_path = context_->unpacked_dir_path.get(); + if (!AddFiles(unzip_path, install_path) || + !ModifyFiles(unzip_path, install_path) || + !DeleteFiles(install_path)) { + LOG(ERROR) << "error during file operation"; + return common_installer::Step::Status::ERROR; + } + return common_installer::Step::Status::OK; +} + +common_installer::Step::Status StepRDSModify::undo() { + RestoreFiles(); + return common_installer::Step::Status::OK; +} + +common_installer::Step::Status StepRDSModify::clean() { + if (bf::exists(backup_temp_dir_)) + bf::remove_all(backup_temp_dir_); + return common_installer::Step::Status::OK; +} + +bool StepRDSModify::AddFiles(bf::path unzip_path, bf::path install_path) { + LOG(INFO) << "about to add files"; + bs::error_code error; + for (const auto& file : backend_data_->files_to_add.get()) { + if (!PerformBackup(file, Operation::ADD)) { + LOG(ERROR) << "unable to perform backup of added file"; + return false; + } + bf::path temp_install_path(install_path / file); + if (bf::is_directory(temp_install_path)) { + if (!bf::exists(temp_install_path) && + (!cu::CreateDir(temp_install_path))) { + LOG(ERROR) << "unable to create dir for temp backup data"; + return false; + } + } else { + if (!bf::exists(temp_install_path.parent_path()) && + !cu::CreateDir(temp_install_path.parent_path())) { + LOG(ERROR) << "unable to create dir for temp backup data"; + return false; + } + bf::path temp_unzip_path(unzip_path / file); + bf::copy_file(temp_unzip_path, temp_install_path, error); + if (error) { + LOG(ERROR) << "unable to add file " << error.message(); + return false; + } + } + } + return true; +} + +bool StepRDSModify::ModifyFiles(bf::path unzip_path, bf::path install_path) { + LOG(INFO) << "about to modify files"; + bs::error_code error; + for (const auto& file : backend_data_->files_to_modify.get()) { + bf::path temp_install_path(install_path / file); + bf::path temp_unzip_path(unzip_path / file); + if (!PerformBackup(file, Operation::MODIFY)) { + LOG(ERROR) << "unable to perform backup of to be modified file"; + return false; + } + bf::copy_file(temp_unzip_path, temp_install_path, + bf::copy_option::overwrite_if_exists, error); + if (error) { + LOG(ERROR) << "unable to modify file " << error.message(); + return false; + } + } + return true; +} + +bool StepRDSModify::DeleteFiles(bf::path install_path) { + LOG(INFO) << "about to delete files"; + bs::error_code error; + for (const auto& file : backend_data_->files_to_delete.get()) { + if (!PerformBackup(file, Operation::DELETE)) { + LOG(ERROR) << "unable to perform backup of to be deleted file"; + return false; + } + bf::remove(install_path / file, error); + if (error) { + LOG(ERROR) <<"unable to delete files " << error.message(); + return false; + } + } + return true; +} + +bool StepRDSModify::SetUpTempBackupDir() { + LOG(INFO) << "about to setup tmp backup dir"; + bs::error_code error; + backup_temp_dir_ = "/tmp/" / + bf::unique_path("%%%%-%%%%-%%%%-%%%%", error); + if (error || !cu::CreateDir(backup_temp_dir_)) { + LOG(ERROR) << "unable to create backup data temp dir"; + return false; + } + + return true; +} + +bool StepRDSModify::PerformBackup(std::string relative_path, + Operation operation) { + if (backup_temp_dir_.empty()) + return false; + if (operation == Operation::DELETE || operation == Operation::MODIFY) { + bf::path app_path = context_->pkg_path.get() / "res" / "wgt"; + bf::path source_path = app_path / relative_path; + if (bf::is_directory(source_path)) { + if (!cu::CreateDir(backup_temp_dir_ / relative_path)) { + LOG(ERROR) << "unable to create dir for temp backup data"; + return false; + } + } else { + bs::error_code error; + bf::path tmp_dest_path = backup_temp_dir_ / relative_path; + if (!bf::exists((tmp_dest_path).parent_path()) && + (!cu::CreateDir((tmp_dest_path).parent_path()))) { + LOG(ERROR) << "unable to create dir for temp backup data"; + return false; + } + bf::copy_file(source_path, tmp_dest_path, error); + if (error) { + LOG(ERROR) << "unable to backup file: " + << source_path << " : " << error.message(); + return false; + } + } + } + success_modifications_.push_back(std::make_pair(relative_path, operation)); + return true; +} + +void StepRDSModify::RestoreFiles() { + LOG(ERROR) << "error occured about to restore files"; + bf::path app_path(context_->pkg_path.get()); + for (std::pair& modification : + success_modifications_) { + bf::path source_path(backup_temp_dir_ / modification.first); + bf::path destination_path(app_path / modification.first); + if (modification.second == Operation::ADD) { + if (bf::is_directory(source_path)) { + bf::remove_all(destination_path); + } else { + bf::remove(destination_path); + } + } else if (modification.second == Operation::MODIFY) { + bf::copy_file(source_path, destination_path, + bf::copy_option::overwrite_if_exists); + } else { + if (bf::is_directory(source_path)) { + cu::CreateDir(destination_path); + } else { + bf::copy_file(source_path, destination_path, + bf::copy_option::overwrite_if_exists); + } + } + } + // after files are restore delete temporary location + bf::remove_all(backup_temp_dir_); +} + +} // namespace rds +} // namespace wgt diff --git a/src/wgt/step/step_rds_modify.h b/src/wgt/step/step_rds_modify.h new file mode 100644 index 0000000..4f0a289 --- /dev/null +++ b/src/wgt/step/step_rds_modify.h @@ -0,0 +1,87 @@ +// Copyright (c) 2015 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_STEP_RDS_MODIFY_H_ +#define WGT_STEP_STEP_RDS_MODIFY_H_ + +#include +#include +#include +#include +#include + +#include "wgt/wgt_backend_data.h" + +namespace wgt { +namespace rds { + +/** + * \brief Step that apply RDS modification during reinstallation process + */ +class StepRDSModify : public common_installer::Step { + public: + /** + * \brief Explicit constructor + * + * \param context Installer context + */ + explicit StepRDSModify(common_installer::InstallerContext* context); + + /** + * \brief + * + * \return + */ + Status process() override; + + /** + * \brief Remove files from temporary location + * + * \return Status::OK + */ + Status clean() override; + + /** + * \brief Restore files to the state from before RDS installation + * + * \return Status::OK + */ + Status undo() override; + + /** + * \brief + * + * \return Status::ERROR when manifest is missing, pkgid is missing, + * or when path to the unpacked directory is missing or not exist, + * Status::OK otherwise + */ + Status precheck() override; + + private: + enum class Operation { + ADD, + MODIFY, + DELETE + }; + + bool AddFiles(boost::filesystem::path unzip_path, + boost::filesystem::path install_path); + bool ModifyFiles(boost::filesystem::path unzip_path, + boost::filesystem::path install_path); + bool DeleteFiles(boost::filesystem::path install_path); + bool SetUpTempBackupDir(); + void DeleteTempBackupDir(); + bool PerformBackup(std::string relative_path, Operation operation); + void RestoreFiles(); + + WgtBackendData* backend_data_; + std::vector> success_modifications_; + boost::filesystem::path backup_temp_dir_; + std::vector files_to_modify_; + std::vector files_to_add_; + std::vector files_to_delete_; +}; +} // namespace rds +} // namespace wgt +#endif // WGT_STEP_STEP_RDS_MODIFY_H_ diff --git a/src/wgt/step/step_rds_parse.cc b/src/wgt/step/step_rds_parse.cc new file mode 100644 index 0000000..b98900e --- /dev/null +++ b/src/wgt/step/step_rds_parse.cc @@ -0,0 +1,50 @@ +// Copyright (c) 2015 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/step_rds_parse.h" + +#include + +#include + +#include "wgt/rds_parser.h" +#include "wgt/wgt_backend_data.h" + + +namespace wgt { +namespace rds { + +namespace bf = boost::filesystem; + +common_installer::Step::Status StepRDSParse::precheck() { + bf::path rdsPath(context_->unpacked_dir_path.get() / ".rds_delta"); + if (!bf::exists(rdsPath)) { + LOG(ERROR) << "no rds_delta file"; + return common_installer::Step::Status::ERROR; + } + rds_file_path_ = rdsPath; + return common_installer::Step::Status::OK; +} + +common_installer::Step::Status StepRDSParse::process() { + wgt::rds_parser::RDSParser parser(rds_file_path_.native()); + if (!parser.Parse()) { + LOG(ERROR) << "parsing of rds delta failed"; + return common_installer::Step::Status::ERROR; + } + + WgtBackendData* backend_data = + static_cast(context_->backend_data.get()); + if (!backend_data) { + LOG(ERROR) << "no wgt backend data available"; + return common_installer::Step::Status::ERROR; + } + backend_data->files_to_modify.set(parser.files_to_modify()); + backend_data->files_to_add.set(parser.files_to_add()); + backend_data->files_to_delete.set(parser.files_to_delete()); + return common_installer::Step::Status::OK; +} + +} // namespace rds +} // namespace wgt diff --git a/src/wgt/step/step_rds_parse.h b/src/wgt/step/step_rds_parse.h new file mode 100644 index 0000000..5aea60e --- /dev/null +++ b/src/wgt/step/step_rds_parse.h @@ -0,0 +1,61 @@ +// Copyright (c) 2015 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_STEP_RDS_PARSE_H_ +#define WGT_STEP_STEP_RDS_PARSE_H_ + +#include + +#include +#include +#include + +namespace wgt { +namespace rds { + +/** + * \brief This step parse .rds_delta file + * + * This is to prepare RDS installation process + */ +class StepRDSParse : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Parse .rds_delta file + * + * \return Status::ERROR when wgt backend data are missing, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Validate if .rds_delta file exist + * + * \return Status::Error if file not exist, + * Status::OK otherwise + */ + Status precheck() override; + + private: + boost::filesystem::path rds_file_path_; +}; +} // namespace rds +} // namespace wgt +#endif // WGT_STEP_STEP_RDS_PARSE_H_ diff --git a/src/wgt/step/step_remove_encryption_data.cc b/src/wgt/step/step_remove_encryption_data.cc new file mode 100644 index 0000000..452f32b --- /dev/null +++ b/src/wgt/step/step_remove_encryption_data.cc @@ -0,0 +1,54 @@ +// Copyright (c) 2015 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/step_remove_encryption_data.h" + +#include + +#include + +namespace wgt { +namespace encrypt { + +common_installer::Step::Status StepRemoveEncryptionData::clean() { + wae_app_type_e enc_type = + context_->request_mode.get() == common_installer::RequestMode::GLOBAL ? + WAE_DOWNLOADED_GLOBAL_APP : WAE_DOWNLOADED_NORMAL_APP; + + // There is no check, if application was encrypted or not + // (it is not saved anywhere in tizen manifest) + // so, if WAE_ERROR_NO_KEY error, then application was not encrypted + int ret = wae_remove_app_dek(context_->pkgid.get().c_str(), enc_type); + if (WAE_ERROR_NONE == ret || WAE_ERROR_NO_KEY == ret) { + LOG(DEBUG) << "Encryption data removed (if existed)"; + return common_installer::Step::Status::OK; + } + + switch (ret) { + case WAE_ERROR_INVALID_PARAMETER: + LOG(ERROR) << "Error while removing encryption data: " + "WAE_ERROR_INVALID_PARAMETER"; + break; + case WAE_ERROR_PERMISSION_DENIED: + LOG(ERROR) << "Error while removing encryption data: " + "WAE_ERROR_PERMISSION_DENIED"; + break; + case WAE_ERROR_KEY_MANAGER: + LOG(ERROR) << "Error while removing encryption data: " + "WAE_ERROR_KEY_MANAGER"; + break; + case WAE_ERROR_UNKNOWN: + LOG(ERROR) << "Error while removing encryption data: " + "WAE_ERROR_UNKNOWN"; + break; + default: + LOG(ERROR) << "Error while removing encryption data: " + "UNKNOWN"; + break; + } + return common_installer::Step::Status::ERROR; +} + +} // namespace encrypt +} // namespace wgt diff --git a/src/wgt/step/step_remove_encryption_data.h b/src/wgt/step/step_remove_encryption_data.h new file mode 100644 index 0000000..291b92e --- /dev/null +++ b/src/wgt/step/step_remove_encryption_data.h @@ -0,0 +1,57 @@ +// Copyright (c) 2015 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_STEP_REMOVE_ENCRYPTION_DATA_H_ +#define WGT_STEP_STEP_REMOVE_ENCRYPTION_DATA_H_ + +#include + +#include + +namespace wgt { +namespace encrypt { + +/** + * This step remove encryption keys used for encryption during installation + * + * This step is called during uninstallation process + */ +class StepRemoveEncryptionData : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Empty method - the actual work is done in clean() to delay it + * + * \return Status::OK + */ + Status process() override { return Status::OK; } + + /** + * \brief Remove encryption keys from database + * + * \return Status::ERROR in case of failure, + * Status::OK otherwise + */ + Status clean() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + SCOPE_LOG_TAG(RemoveEncryptionData) +}; +} // namespace encrypt +} // namespace wgt +#endif // WGT_STEP_STEP_REMOVE_ENCRYPTION_DATA_H_ diff --git a/src/wgt/step/step_wgt_copy_storage_directories.cc b/src/wgt/step/step_wgt_copy_storage_directories.cc new file mode 100644 index 0000000..c1929c7 --- /dev/null +++ b/src/wgt/step/step_wgt_copy_storage_directories.cc @@ -0,0 +1,172 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_wgt_copy_storage_directories.h" + +#include +#include +#include + +#include + +namespace bf = boost::filesystem; +namespace bs = boost::system; + +namespace { + +const char kDataLocation[] = "data"; +const char kSharedLocation[] = "shared"; +const char kSharedDataLocation[] = "shared/data"; +const char kSharedTrustedLocation[] = "shared/trusted"; +const char kResWgtSubPath[] = "res/wgt"; +const char kTemporaryData[] = "tmp"; +} // namespace + +namespace wgt { +namespace filesystem { + +common_installer::Step::Status StepWgtCopyStorageDirectories::process() { + Status status = CreatePrivateTmpDir(); + if (status != Status::OK) + return status; + if (!CacheDir()) + return Status::ERROR; + + int version = context_->manifest_data.get()->api_version[0] - '0'; + if (version < 3) { + LOG(DEBUG) << "Shared directory coping for tizen 2.x"; + return StepCopyStorageDirectories::process(); + } + + LOG(DEBUG) << "Shared directory coping for tizen 3.x"; + status = CopySharedDirectory(); + if (status != Status::OK) + return status; + + return CopyDataDirectory(); +} + +common_installer::Step::Status StepWgtCopyStorageDirectories::undo() { + int version = context_->manifest_data.get()->api_version[0] - '0'; + if (version < 3) { + LOG(DEBUG) << "Shared directory coping for tizen 2.x"; + return StepCopyStorageDirectories::undo(); + } + + UndoSharedDirectory(); + UndoDataDirectory(); + return Status::OK; +} + +void StepWgtCopyStorageDirectories::UndoSharedDirectory() { + if (!MoveAppStorage(context_->pkg_path.get(), + backup_path_, + kSharedDataLocation)) { + LOG(ERROR) << + "Failed to undo moving of shared/data directory for widget in update"; + } + + if (!MoveAppStorage(context_->pkg_path.get(), + backup_path_, + kSharedTrustedLocation)) { + LOG(ERROR) << "Failed to undo moving of shared/trusted directory" + << "for widget in update"; + } +} + +void StepWgtCopyStorageDirectories::UndoDataDirectory() { + if (!MoveAppStorage(context_->pkg_path.get(), + backup_path_, + kDataLocation)) { + LOG(ERROR) + << "Failed to undo moving of private directory for widget in update"; + } +} + +common_installer::Step::Status +StepWgtCopyStorageDirectories::HandleWgtSharedDirectory() { + bf::path res_wgt_path = context_->pkg_path.get() / kResWgtSubPath; + bf::path shared_source = res_wgt_path / kSharedLocation; + bf::path shared_destination = context_->pkg_path.get() / kSharedLocation; + + // Move shared if exist in wgt + if (bf::exists(shared_source)) { + if (!common_installer::MoveDir(shared_source, shared_destination)) { + LOG(ERROR) << "Failed to move shared data from res/wgt to shared"; + return Status::ERROR; + } + } + + // Create shared directory if not present yet + if (!bf::exists(shared_destination)) { + bs::error_code error_code; + bf::create_directory(shared_destination, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create shared storage directory"; + return Status::ERROR; + } + } + + // Symlink created shared directory + bs::error_code error_code; + bf::create_symlink(shared_destination, shared_source, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create symbolic link for shared dir" + << boost::system::system_error(error_code).what(); + return Status::ERROR; + } + return Status::OK; +} + +common_installer::Step::Status +StepWgtCopyStorageDirectories::CopySharedDirectory() { + Status status = HandleWgtSharedDirectory(); + if (status != Status::OK) + return status; + + if (!MoveAppStorage(backup_path_, + context_->pkg_path.get(), + kSharedDataLocation)) { + LOG(ERROR) << + "Failed to restore shared/data directory for widget in update"; + return Status::ERROR; + } + + if (!MoveAppStorage(backup_path_, + context_->pkg_path.get(), + kSharedTrustedLocation)) { + LOG(ERROR) << + "Failed to restore shared/trusted directory for widget in update"; + return Status::ERROR; + } + + return Status::OK; +} + +common_installer::Step::Status +StepWgtCopyStorageDirectories::CopyDataDirectory() { + if (!MoveAppStorage(backup_path_, + context_->pkg_path.get(), + kDataLocation)) { + LOG(ERROR) << "Failed to restore private directory for widget in update"; + return Status::ERROR; + } + return Status::OK; +} + +common_installer::Step::Status +StepWgtCopyStorageDirectories::CreatePrivateTmpDir() { + bs::error_code error_code; + bf::path tmp_path = context_->pkg_path.get() / kTemporaryData; + bf::create_directory(tmp_path, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create private temporary directory for package"; + return Status::ERROR; + } + return Status::OK; +} + +} // namespace filesystem +} // namespace wgt + diff --git a/src/wgt/step/step_wgt_copy_storage_directories.h b/src/wgt/step/step_wgt_copy_storage_directories.h new file mode 100644 index 0000000..18eac47 --- /dev/null +++ b/src/wgt/step/step_wgt_copy_storage_directories.h @@ -0,0 +1,58 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_WGT_COPY_STORAGE_DIRECTORIES_H_ +#define WGT_STEP_STEP_WGT_COPY_STORAGE_DIRECTORIES_H_ + +#include + +#include + +namespace wgt { +namespace filesystem { + +/** + * \brief Update installation (WGT). + * Responsible for coping shared and data directories. + * It extends StepCopyStorageDirectories (it adds distinction between + * 2.x and 3.x shared dir handling + */ +class StepWgtCopyStorageDirectories + : public common_installer::filesystem::StepCopyStorageDirectories { + public: + using StepCopyStorageDirectories::StepCopyStorageDirectories; + + /** + * \brief Create shared and private directories, + * and copy/restore widget files to appropriate directory + * + * \return Status::ERROR when failed to create temporary location, + * private temporary location, or failed to restore + * shared/private directory for widget, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Move files from shared/private directories back to source directory + * + * \return Status::OK + */ + Status undo() override; + + private: + Status CopySharedDirectory(); + Status CopyDataDirectory(); + Status HandleWgtSharedDirectory(); + void UndoSharedDirectory(); + void UndoDataDirectory(); + Status CreatePrivateTmpDir(); + + SCOPE_LOG_TAG(CopyWgtStorageDirectories) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_COPY_STORAGE_DIRECTORIES_H_ diff --git a/src/wgt/step/step_wgt_create_icons.cc b/src/wgt/step/step_wgt_create_icons.cc new file mode 100644 index 0000000..f62588c --- /dev/null +++ b/src/wgt/step/step_wgt_create_icons.cc @@ -0,0 +1,22 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_wgt_create_icons.h" + +namespace { + +const char kResWgt[] = "res/wgt"; + +} + +namespace wgt { +namespace filesystem { + +boost::filesystem::path StepWgtCreateIcons::GetIconRoot() const { + return context_->pkg_path.get() / kResWgt; +} + +} // namespace filesystem +} // namespace wgt + diff --git a/src/wgt/step/step_wgt_create_icons.h b/src/wgt/step/step_wgt_create_icons.h new file mode 100644 index 0000000..46c3a8c --- /dev/null +++ b/src/wgt/step/step_wgt_create_icons.h @@ -0,0 +1,36 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_WGT_CREATE_ICONS_H_ +#define WGT_STEP_STEP_WGT_CREATE_ICONS_H_ + +#include + +#include + +namespace wgt { +namespace filesystem { + +/** + * \brief This step return path to widget icon + */ +class StepWgtCreateIcons + : public common_installer::filesystem::StepCreateIcons { + public: + using StepCreateIcons::StepCreateIcons; + + /** + * \brief Return path to widget icon + * + * \return path to widget icon + */ + boost::filesystem::path GetIconRoot() const override; + + SCOPE_LOG_TAG(WgtCreateIcons) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_CREATE_ICONS_H_ diff --git a/src/wgt/step/step_wgt_create_storage_directories.cc b/src/wgt/step/step_wgt_create_storage_directories.cc new file mode 100644 index 0000000..708cd12 --- /dev/null +++ b/src/wgt/step/step_wgt_create_storage_directories.cc @@ -0,0 +1,102 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache 2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_wgt_create_storage_directories.h" + +#include +#include +#include + +#include + +namespace bf = boost::filesystem; +namespace bs = boost::system; + +namespace { + +const char kSharedLocation[] = "shared"; +const char kResWgtSubPath[] = "res/wgt"; +const char kTemporaryData[] = "tmp"; + +} // namespace + +namespace wgt { +namespace filesystem { + +common_installer::Step::Status StepWgtCreateStorageDirectories::process() { + if (!PrivateDir()) + return Status::ERROR; + + char version = context_->manifest_data.get()->api_version[0]; + + if ((version-'0') < 3) { + LOG(DEBUG) << "Shared directory preparation for tizen 2.x"; + if (!ShareDir()) + return Status::ERROR; + } else { + LOG(DEBUG) << "Shared directory preparation for tizen 3.x"; + if (!ShareDirFor3x()) + return Status::ERROR; + } + + if (!SubShareDir()) + return Status::ERROR; + + if (!CreatePrivateTmpDir()) + return Status::ERROR; + + if (!CacheDir()) + return Status::ERROR; + + return Status::OK; +} + +bool StepWgtCreateStorageDirectories::ShareDirFor2x() { + bs::error_code error_code; + bf::path shared_path = context_->pkg_path.get() / kSharedLocation; + bf::create_directory(shared_path, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create shared directory for widget"; + return false; + } + return true; +} + +bool StepWgtCreateStorageDirectories::ShareDirFor3x() { + bf::path res_wgt_path = context_->pkg_path.get() / kResWgtSubPath; + if (!bf::exists(res_wgt_path / kSharedLocation)) { + if (!ShareDir()) + return false; + } else { + bf::path src = res_wgt_path / kSharedLocation; + bf::path dst = context_->pkg_path.get() / kSharedLocation; + if (!common_installer::MoveDir(src, dst)) { + LOG(ERROR) << "Failed to move shared data from res/wgt to shared"; + return false; + } + + bs::error_code error_code; + bf::create_symlink(dst, src, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create symbolic link for shared dir" + << boost::system::system_error(error_code).what(); + return false; + } + } // else + return true; +} + +bool StepWgtCreateStorageDirectories::CreatePrivateTmpDir() { + bs::error_code error_code; + bf::path tmp_path = context_->pkg_path.get() / kTemporaryData; + bf::create_directory(tmp_path, error_code); + if (error_code) { + LOG(ERROR) << "Failed to create private temporary directory for package"; + return false; + } + return true; +} + +} // namespace filesystem +} // namespace wgt diff --git a/src/wgt/step/step_wgt_create_storage_directories.h b/src/wgt/step/step_wgt_create_storage_directories.h new file mode 100644 index 0000000..789c5ee --- /dev/null +++ b/src/wgt/step/step_wgt_create_storage_directories.h @@ -0,0 +1,77 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache 2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_WGT_CREATE_STORAGE_DIRECTORIES_H_ +#define WGT_STEP_STEP_WGT_CREATE_STORAGE_DIRECTORIES_H_ + +#include + +#include + +namespace wgt { +namespace filesystem { + +/** + * \brief Installation (WGT). + * Responsible for creating shared and data directories. + * It extends StepCreateStorageDirectories (it adds distinction between + * 2.x and 3.x shared dir handling + * + * process method implements creation of shared and data directories. + * Depending on tizen required version it can also move "shared" resources + * from ./res/wgt/shared to ./shared dir (and create symlink back + * to ./res/wgt/shared). + * + * StepWgtCreateStorageDirectories works on following directory: + * * TZ_SYS_RW/PKGID (/usr/apps/PKGID) + * * TZ_SER_APPS/PKGID (/{HOME}/apps_rw/PKGID) + */ +class StepWgtCreateStorageDirectories : + public common_installer::filesystem::StepCreateStorageDirectories { + public: + using StepCreateStorageDirectories::StepCreateStorageDirectories; + + /** + * \brief Create shared and private directories + * + * \return Status::ERROR when failed to create temporary location, or + * private temporary location + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + private: + bool ShareDirFor2x(); + bool ShareDirFor3x(); + + bool CreatePrivateTmpDir(); + + SCOPE_LOG_TAG(CreateWgtStorageDirectories) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_CREATE_STORAGE_DIRECTORIES_H_ diff --git a/src/wgt/step/step_wgt_resource_directory.cc b/src/wgt/step/step_wgt_resource_directory.cc new file mode 100644 index 0000000..190051f --- /dev/null +++ b/src/wgt/step/step_wgt_resource_directory.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2015 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/step_wgt_resource_directory.h" + +#include + +#include + +namespace bf = boost::filesystem; +namespace bs = boost::system; + +namespace wgt { +namespace filesystem { + +common_installer::Step::Status StepWgtResourceDirectory::process() { + bf::path temp_path = context_->unpacked_dir_path.get(); + temp_path += ".temp"; + bf::path resource_path = context_->unpacked_dir_path.get() / "res/wgt"; + + if (!common_installer::MoveDir(context_->unpacked_dir_path.get(), + temp_path)) { + LOG(ERROR) << "Failed to move: " << context_->unpacked_dir_path.get() + << " to: " << temp_path; + return Status::ERROR; + } + bs::error_code error; + bf::create_directories(resource_path.parent_path(), error); + if (error) { + LOG(ERROR) << "Failed to create proper directory structure in widget"; + return Status::ERROR; + } + if (!common_installer::MoveDir(temp_path, resource_path)) { + LOG(ERROR) << "Failed to move: " << temp_path << " to: " << resource_path; + return Status::ERROR; + } + + LOG(INFO) << "Widget content moved to res/wgt subdirectory"; + return Status::OK; +} + +} // namespace filesystem +} // namespace wgt diff --git a/src/wgt/step/step_wgt_resource_directory.h b/src/wgt/step/step_wgt_resource_directory.h new file mode 100644 index 0000000..60717ec --- /dev/null +++ b/src/wgt/step/step_wgt_resource_directory.h @@ -0,0 +1,62 @@ +// Copyright (c) 2015 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_STEP_WGT_RESOURCE_DIRECTORY_H_ +#define WGT_STEP_STEP_WGT_RESOURCE_DIRECTORY_H_ + +#include + +#include +#include +#include + +namespace wgt { +namespace filesystem { + +/** + * \brief This step fixes unpacked directory structure so that all widget + * content is moved from root path to res/wgt before we copy whole directory in + * StepCopy + */ +class StepWgtResourceDirectory : public common_installer::Step { + public: + using Step::Step; + + /** + * \brief Create directory structure and copy content of widget package + * + * \return Status::ERROR when failed to create proper directory structure or + * move source directory to destination directory, + * Status::OK otherwise + */ + Status process() override; + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status clean() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status undo() override { return Status::OK; } + + /** + * \brief Empty method + * + * \return Status::OK + */ + Status precheck() override { return Status::OK; } + + SCOPE_LOG_TAG(CreateWgtResourceDirectory) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_RESOURCE_DIRECTORY_H_ diff --git a/src/wgt/wgt_app_query_interface.cc b/src/wgt/wgt_app_query_interface.cc new file mode 100644 index 0000000..2a8e046 --- /dev/null +++ b/src/wgt/wgt_app_query_interface.cc @@ -0,0 +1,101 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache 2.0 license that can be +// found in the LICENSE file. + +#include "wgt/wgt_app_query_interface.h" + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + + +namespace bf = boost::filesystem; +namespace bs = boost::system; +namespace ci = common_installer; + +namespace { + +std::string GetInstallationPackagePath(int argc, char** argv) { + std::string path; + for (int i = 0; i < argc; ++i) { + if (!strcmp(argv[i], "-i")) { + if (i + 1 < argc) { + path = argv[i + 1]; + break; + } + } + } + return path; +} + +std::string GetPkgIdFromPath(const std::string& path) { + bf::path tmp_path = common_installer::GenerateTmpDir("/tmp"); + bs::error_code code; + bf::create_directories(tmp_path, code); + if (code) + return {}; + if (!common_installer::ExtractToTmpDir(path.c_str(), tmp_path, + "config.xml")) { + bf::remove_all(tmp_path, code); + return {}; + } + bf::path config_path = tmp_path / "config.xml"; + std::vector handlers = { + new wgt::parse::WidgetHandler(), + new wgt::parse::TizenApplicationHandler() + }; + std::unique_ptr registry( + new parser::ManifestHandlerRegistry(handlers)); + std::unique_ptr parser( + new parser::ManifestParser(std::move(registry))); + if (!parser->ParseManifest(config_path)) { + bf::remove_all(tmp_path, code); + return {}; + } + auto info = std::static_pointer_cast( + parser->GetManifestData( + wgt::application_widget_keys::kTizenApplicationKey)); + if (!info) { + bf::remove_all(tmp_path, code); + return {}; + } + std::string pkg_id = info->package(); + + bf::remove_all(tmp_path, code); + return pkg_id; +} + +} // namespace + +namespace wgt { + +bool WgtAppQueryInterface::IsAppInstalledByArgv(int argc, char** argv) { + std::string path = GetInstallationPackagePath(argc, argv); + if (path.empty()) { + // not the installaton + return false; + } + std::string pkg_id = GetPkgIdFromPath(path); + if (pkg_id.empty()) + return false; + return ci::IsPackageInstalled(pkg_id, ci::GetRequestMode()); +} + +} // namespace wgt diff --git a/src/wgt/wgt_app_query_interface.h b/src/wgt/wgt_app_query_interface.h new file mode 100644 index 0000000..40a9a07 --- /dev/null +++ b/src/wgt/wgt_app_query_interface.h @@ -0,0 +1,33 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache 2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_WGT_APP_QUERY_INTERFACE_H_ +#define WGT_WGT_APP_QUERY_INTERFACE_H_ + +#include + +namespace wgt { + +/** + * \brief Helper functionalities used before + * configuring app-installer steps. + * Eg. it is used to check, if package is to be installed or updated + */ +class WgtAppQueryInterface : public common_installer::AppQueryInterface { + public: + /** + * \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; +}; + +} // namespace wgt + +#endif // WGT_WGT_APP_QUERY_INTERFACE_H_ diff --git a/src/wgt/wgt_backend.cc b/src/wgt/wgt_backend.cc new file mode 100644 index 0000000..576e861 --- /dev/null +++ b/src/wgt/wgt_backend.cc @@ -0,0 +1,23 @@ +/* 2014, Copyright © Intel Coporation, license APACHE-2.0, see LICENSE file */ +// Copyright (c) 2015 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 "wgt/wgt_app_query_interface.h" +#include "wgt/wgt_installer.h" + +namespace ci = common_installer; + +int main(int argc, char** argv) { + wgt::WgtAppQueryInterface query_interface; + auto pkgmgr = ci::PkgMgrInterface::Create(argc, argv, &query_interface); + if (!pkgmgr) { + LOG(ERROR) << "Options of pkgmgr installer cannot be parsed"; + return EINVAL; + } + wgt::WgtInstaller installer(pkgmgr); + return (installer.Run() == ci::AppInstaller::Result::OK) ? 0 : 1; +} diff --git a/src/wgt/wgt_backend_data.h b/src/wgt/wgt_backend_data.h new file mode 100644 index 0000000..e3c281b --- /dev/null +++ b/src/wgt/wgt_backend_data.h @@ -0,0 +1,47 @@ +// Copyright (c) 2015 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_WGT_BACKEND_DATA_H_ +#define WGT_WGT_BACKEND_DATA_H_ + +#include +#include + +#include + +#include +#include + +namespace wgt { + +/** + * \brief Class that is used within specific backends to keep additional + * information regarding package + */ +class WgtBackendData : public common_installer::BackendData { + public: + /** + * \brief Property of vector of files to add + */ + Property> files_to_add; + + /** + * \brief Property of vector of files to modify + */ + Property> files_to_modify; + + /** + * \brief Property of vector of files to delete + */ + Property> files_to_delete; + + /** + * \brief Property of SettingInfo + */ + Property settings; +}; + +} // namespace wgt + +#endif // WGT_WGT_BACKEND_DATA_H_ diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc new file mode 100644 index 0000000..9d494b9 --- /dev/null +++ b/src/wgt/wgt_installer.cc @@ -0,0 +1,179 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include "wgt/wgt_installer.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "wgt/step/step_add_default_privileges.h" +#include "wgt/step/step_check_settings_level.h" +#include "wgt/step/step_check_wgt_background_category.h" +#include "wgt/step/step_create_symbolic_link.h" +#include "wgt/step/step_encrypt_resources.h" +#include "wgt/step/step_generate_xml.h" +#include "wgt/step/step_parse.h" +#include "wgt/step/step_parse_recovery.h" +#include "wgt/step/step_rds_modify.h" +#include "wgt/step/step_rds_parse.h" +#include "wgt/step/step_remove_encryption_data.h" +#include "wgt/step/step_wgt_copy_storage_directories.h" +#include "wgt/step/step_wgt_create_icons.h" +#include "wgt/step/step_wgt_create_storage_directories.h" +#include "wgt/step/step_wgt_resource_directory.h" + +namespace ci = common_installer; + +namespace wgt { + +WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) + : AppInstaller("wgt", pkgrmgr) { + /* treat the request */ + switch (pkgmgr_->GetRequestType()) { + case ci::RequestType::Install : { + AddStep(pkgmgr_); + AddStep(); + AddStep(true); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::Update: { + AddStep(pkgmgr_); + AddStep(); + AddStep(true); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::Uninstall: { + AddStep(pkgmgr_); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::Reinstall: { + AddStep(pkgmgr_); + AddStep(false); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::Delta: { + AddStep(pkgmgr_); + AddStep(); + // TODO(t.iwanek): manifest is parsed twice... + AddStep(false); // start file may not have changed + AddStep("res/wgt/"); + AddStep(true); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + case ci::RequestType::Recovery: { + AddStep(pkgmgr_); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + AddStep(); + break; + } + default: { + AddStep(); + } + } +} + +} // namespace wgt diff --git a/src/wgt/wgt_installer.h b/src/wgt/wgt_installer.h new file mode 100644 index 0000000..7a06a31 --- /dev/null +++ b/src/wgt/wgt_installer.h @@ -0,0 +1,31 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_WGT_INSTALLER_H_ +#define WGT_WGT_INSTALLER_H_ + +#include + +namespace wgt { + +/** + * \brief The WgtInstaller class + * Subclass of AppInstaller class dedicated for handling wgt request + * + * Performs all types of requests of wgt packages and sets required sequence of + * steps + */ +class WgtInstaller : public common_installer::AppInstaller { + public: + /** + * \brief Explicit constructor + * + * \param pkgmgr pointer to pkgmgr + */ + explicit WgtInstaller(common_installer::PkgMgrPtr pkgrmgr); +}; + +} // namespace wgt + +#endif // WGT_WGT_INSTALLER_H_ -- 2.7.4 From 5fced8b90793ed8d8b84e1098c2caf3f21b31a00 Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Thu, 7 Jan 2016 16:05:28 +0100 Subject: [PATCH 4/7] Fix paths in smoke tests Change-Id: Ie186f82dd997567e3850150a090f399bd717ba24 --- src/unit_tests/smoke_test.cc | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/unit_tests/smoke_test.cc b/src/unit_tests/smoke_test.cc index 38f8e33..ee47203 100644 --- a/src/unit_tests/smoke_test.cc +++ b/src/unit_tests/smoke_test.cc @@ -34,6 +34,9 @@ namespace ci = common_installer; namespace { +const bf::path kSmokePackagesDirectory = + "/usr/share/wgt-backend-ut/test_samples/smoke/"; + const char kApplicationDir[] = ".applications"; const char kApplicationDirBackup[] = ".applications.bck"; const char KUserAppsDir[] = "apps_rw"; @@ -324,7 +327,7 @@ class SmokeTest : public testing::Test { }; TEST_F(SmokeTest, InstallationMode) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "InstallationMode.wgt"; std::string pkgid = "smokeapp03"; std::string appid = "smokeapp03.InstallationMode"; ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); @@ -332,8 +335,8 @@ TEST_F(SmokeTest, InstallationMode) { } TEST_F(SmokeTest, UpdateMode) { - bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode.wgt"; // NOLINT - bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_2.wgt"; // NOLINT + bf::path path_old = kSmokePackagesDirectory / "UpdateMode.wgt"; + bf::path path_new = kSmokePackagesDirectory / "UpdateMode_2.wgt"; std::string pkgid = "smokeapp04"; std::string appid = "smokeapp04.UpdateMode"; ASSERT_EQ(Update(path_old, path_new), ci::AppInstaller::Result::OK); @@ -343,7 +346,7 @@ TEST_F(SmokeTest, UpdateMode) { } TEST_F(SmokeTest, DeinstallationMode) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeinstallationMode.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "DeinstallationMode.wgt"; std::string pkgid = "smokeapp05"; std::string appid = "smokeapp05.DeinstallationMode"; ASSERT_EQ(Install(path), @@ -353,8 +356,8 @@ TEST_F(SmokeTest, DeinstallationMode) { } TEST_F(SmokeTest, RDSMode) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/RDSMode.wgt"; // NOLINT - std::string delta_directory = "/usr/share/app-installers-ut/test_samples/smoke/delta_dir/"; // NOLINT + 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), @@ -369,8 +372,8 @@ TEST_F(SmokeTest, RDSMode) { } TEST_F(SmokeTest, DeltaMode) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeltaMode.wgt"; // NOLINT - std::string delta_package = "/usr/share/app-installers-ut/test_samples/smoke/DeltaMode.delta"; // NOLINT + bf::path path = kSmokePackagesDirectory / "DeltaMode.wgt"; + bf::path delta_package = kSmokePackagesDirectory / "DeltaMode.delta"; std::string pkgid = "smokeapp17"; std::string appid = "smokeapp17.DeltaMode"; ASSERT_EQ(DeltaInstall(path, delta_package), @@ -388,7 +391,7 @@ TEST_F(SmokeTest, DeltaMode) { } TEST_F(SmokeTest, RecoveryMode_ForInstallation) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForInstallation.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "RecoveryMode_ForInstallation.wgt"; ASSERT_DEATH(Install(path, RequestResult::CRASH), ".*"); std::string pkgid = "smokeapp09"; @@ -401,8 +404,8 @@ TEST_F(SmokeTest, RecoveryMode_ForInstallation) { } TEST_F(SmokeTest, RecoveryMode_ForUpdate) { - bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForUpdate.wgt"; // NOLINT - bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/RecoveryMode_ForUpdate_2.wgt"; // NOLINT + bf::path path_old = kSmokePackagesDirectory / "RecoveryMode_ForUpdate.wgt"; + bf::path path_new = kSmokePackagesDirectory / "RecoveryMode_ForUpdate_2.wgt"; RemoveAllRecoveryFiles(); ASSERT_DEATH(Update(path_old, path_new, RequestResult::CRASH), ".*"); @@ -418,17 +421,17 @@ TEST_F(SmokeTest, RecoveryMode_ForUpdate) { } TEST_F(SmokeTest, InstallationMode_GoodSignature) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_GoodSignature.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "InstallationMode_GoodSignature.wgt"; // NOLINT ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); } TEST_F(SmokeTest, InstallationMode_WrongSignature) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_WrongSignature.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "InstallationMode_WrongSignature.wgt"; // NOLINT ASSERT_EQ(Install(path), ci::AppInstaller::Result::ERROR); } TEST_F(SmokeTest, InstallationMode_Rollback) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/InstallationMode_Rollback.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "InstallationMode_Rollback.wgt"; std::string pkgid = "smokeapp06"; std::string appid = "smokeapp06.InstallationModeRollback"; ASSERT_EQ(Install(path, RequestResult::FAIL), @@ -437,8 +440,8 @@ TEST_F(SmokeTest, InstallationMode_Rollback) { } TEST_F(SmokeTest, UpdateMode_Rollback) { - bf::path path_old = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_Rollback.wgt"; // NOLINT - bf::path path_new = "/usr/share/app-installers-ut/test_samples/smoke/UpdateMode_Rollback_2.wgt"; // NOLINT + bf::path path_old = kSmokePackagesDirectory / "UpdateMode_Rollback.wgt"; + bf::path path_new = kSmokePackagesDirectory / "UpdateMode_Rollback_2.wgt"; std::string pkgid = "smokeapp07"; std::string appid = "smokeapp07.UpdateModeRollback"; ASSERT_EQ(Update(path_old, path_new, RequestResult::FAIL), @@ -449,7 +452,7 @@ TEST_F(SmokeTest, UpdateMode_Rollback) { } TEST_F(SmokeTest, DeinstallationMode_Rollback) { - bf::path path = "/usr/share/app-installers-ut/test_samples/smoke/DeinstallationMode_Rollback.wgt"; // NOLINT + bf::path path = kSmokePackagesDirectory / "DeinstallationMode_Rollback.wgt"; std::string pkgid = "smokeapp08"; std::string appid = "smokeapp08.DeinstallationModeRollback"; ASSERT_EQ(Install(path), ci::AppInstaller::Result::OK); -- 2.7.4 From d45e47b7a9622c9d4a89051120379c4ce7ba87bb Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Tue, 12 Jan 2016 08:24:18 +0900 Subject: [PATCH 5/7] change some returning error-codes Change-Id: I4beb6ffa93969228db64d0f8de714733ac1f747c Signed-off-by: jongmyeongko --- src/wgt/step/step_check_settings_level.cc | 2 +- src/wgt/step/step_generate_xml.cc | 8 ++++---- src/wgt/step/step_parse.cc | 10 +++++----- src/wgt/step/step_parse_recovery.cc | 2 +- src/wgt/step/step_rds_modify.cc | 8 ++++---- src/wgt/step/step_rds_parse.cc | 6 +++--- src/wgt/step/step_wgt_copy_storage_directories.cc | 2 +- src/wgt/step/step_wgt_create_storage_directories.cc | 12 ++++++------ src/wgt/step/step_wgt_resource_directory.cc | 6 +++--- 9 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/wgt/step/step_check_settings_level.cc b/src/wgt/step/step_check_settings_level.cc index 664e376..0d88bb2 100644 --- a/src/wgt/step/step_check_settings_level.cc +++ b/src/wgt/step/step_check_settings_level.cc @@ -37,7 +37,7 @@ common_installer::Step::Status StepCheckSettingsLevel::process() { if (!ValidateSettingsForLevel(context_->privilege_level.get(), static_cast( context_->backend_data.get())->settings.get())) { - return Status::ERROR; + return Status::PRIVILEGE_ERROR; } LOG(INFO) << "Settings privilege level checked"; return Status::OK; diff --git a/src/wgt/step/step_generate_xml.cc b/src/wgt/step/step_generate_xml.cc index 055fd3f..6be0750 100644 --- a/src/wgt/step/step_generate_xml.cc +++ b/src/wgt/step/step_generate_xml.cc @@ -252,7 +252,7 @@ common_installer::Step::Status StepGenerateXml::precheck() { } if (context_->pkgid.get().empty()) { LOG(ERROR) << "pkgid attribute is empty"; - return Step::Status::INVALID_VALUE; } + return Step::Status::PACKAGE_NOT_FOUND; } if (!context_->manifest_data.get()->application) { LOG(ERROR) << "No application in package"; @@ -274,7 +274,7 @@ common_installer::Step::Status StepGenerateXml::process() { if (!common_installer::CreateDir(xml_path.parent_path())) { LOG(ERROR) << "Directory for manifest xml is missing and cannot be created"; - return Status::ERROR; + return Status::MANIFEST_ERROR; } } @@ -283,7 +283,7 @@ common_installer::Step::Status StepGenerateXml::process() { writer = xmlNewTextWriterFilename(context_->xml_path.get().c_str(), 0); if (!writer) { LOG(ERROR) << "Failed to create new file"; - return Step::Status::ERROR; + return Step::Status::MANIFEST_ERROR; } xmlTextWriterStartDocument(writer, nullptr, nullptr, nullptr); @@ -475,7 +475,7 @@ common_installer::Step::Status StepGenerateXml::process() { if (pkgmgr_parser_check_manifest_validation( context_->xml_path.get().c_str()) != 0) { LOG(ERROR) << "Manifest is not valid"; - return Step::Status::ERROR; + return Step::Status::MANIFEST_ERROR; } LOG(DEBUG) << "Successfully create manifest xml " diff --git a/src/wgt/step/step_parse.cc b/src/wgt/step/step_parse.cc index ac36e10..315a46d 100644 --- a/src/wgt/step/step_parse.cc +++ b/src/wgt/step/step_parse.cc @@ -455,22 +455,22 @@ bool StepParse::LocateConfigFile() { common_installer::Step::Status StepParse::process() { if (!LocateConfigFile()) { LOG(ERROR) << "No config.xml"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::MANIFEST_NOT_FOUND; } parser_.reset(new wgt::parse::WidgetConfigParser()); if (!parser_->ParseManifest(config_)) { LOG(ERROR) << "[Parse] Parse failed. " << parser_->GetErrorMessage(); - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } if (check_start_file_) { if (!parser_->HasValidStartFile()) { LOG(ERROR) << parser_->GetErrorMessage(); - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } if (!parser_->HasValidServicesStartFiles()) { LOG(ERROR) << parser_->GetErrorMessage(); - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } } @@ -479,7 +479,7 @@ common_installer::Step::Status StepParse::process() { if (!FillManifestX(manifest)) { LOG(ERROR) << "[Parse] Storing manifest_x failed. " << parser_->GetErrorMessage(); - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } // Copy data from ManifestData to InstallerContext diff --git a/src/wgt/step/step_parse_recovery.cc b/src/wgt/step/step_parse_recovery.cc index 7fe4a10..218c2d5 100644 --- a/src/wgt/step/step_parse_recovery.cc +++ b/src/wgt/step/step_parse_recovery.cc @@ -29,7 +29,7 @@ common_installer::Step::Status StepParseRecovery::process() { common_installer::Step::Status StepParseRecovery::precheck() { if (context_->root_application_path.get().empty()) { LOG(ERROR) << "Root path of packages in not set"; - return Status::ERROR; + return Status::INVALID_VALUE; } if (context_->pkgid.get().empty()) { LOG(WARNING) << "Pkgid is not set. Parsing skipped"; diff --git a/src/wgt/step/step_rds_modify.cc b/src/wgt/step/step_rds_modify.cc index 41b9bc1..95fab9f 100644 --- a/src/wgt/step/step_rds_modify.cc +++ b/src/wgt/step/step_rds_modify.cc @@ -24,21 +24,21 @@ StepRDSModify::StepRDSModify(common_installer::InstallerContext* context) common_installer::Step::Status StepRDSModify::precheck() { if (context_->unpacked_dir_path.get().empty()) { LOG(ERROR) << "unpacked dir path is not set"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::INVALID_VALUE; } if (!bf::exists(context_->unpacked_dir_path.get())) { LOG(ERROR) << "unpacked_dir_path (" << context_->unpacked_dir_path.get() << ") path does not exist"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::INVALID_VALUE; } if (context_->pkgid.get().empty()) { LOG(ERROR) << "pkgid is not set"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PACKAGE_NOT_FOUND; } if (!context_->manifest_data.get()) { LOG(ERROR) << "no manifest info available"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::INVALID_VALUE; } // TODO(w.kosowicz): check if config of installed app was encrypted backend_data_ = static_cast(context_->backend_data.get()); diff --git a/src/wgt/step/step_rds_parse.cc b/src/wgt/step/step_rds_parse.cc index b98900e..2a459a0 100644 --- a/src/wgt/step/step_rds_parse.cc +++ b/src/wgt/step/step_rds_parse.cc @@ -21,7 +21,7 @@ common_installer::Step::Status StepRDSParse::precheck() { bf::path rdsPath(context_->unpacked_dir_path.get() / ".rds_delta"); if (!bf::exists(rdsPath)) { LOG(ERROR) << "no rds_delta file"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::INVALID_VALUE; } rds_file_path_ = rdsPath; return common_installer::Step::Status::OK; @@ -31,14 +31,14 @@ common_installer::Step::Status StepRDSParse::process() { wgt::rds_parser::RDSParser parser(rds_file_path_.native()); if (!parser.Parse()) { LOG(ERROR) << "parsing of rds delta failed"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } WgtBackendData* backend_data = static_cast(context_->backend_data.get()); if (!backend_data) { LOG(ERROR) << "no wgt backend data available"; - return common_installer::Step::Status::ERROR; + return common_installer::Step::Status::PARSE_ERROR; } backend_data->files_to_modify.set(parser.files_to_modify()); backend_data->files_to_add.set(parser.files_to_add()); diff --git a/src/wgt/step/step_wgt_copy_storage_directories.cc b/src/wgt/step/step_wgt_copy_storage_directories.cc index c1929c7..fc2e366 100644 --- a/src/wgt/step/step_wgt_copy_storage_directories.cc +++ b/src/wgt/step/step_wgt_copy_storage_directories.cc @@ -31,7 +31,7 @@ common_installer::Step::Status StepWgtCopyStorageDirectories::process() { if (status != Status::OK) return status; if (!CacheDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; int version = context_->manifest_data.get()->api_version[0] - '0'; if (version < 3) { diff --git a/src/wgt/step/step_wgt_create_storage_directories.cc b/src/wgt/step/step_wgt_create_storage_directories.cc index 708cd12..d50d072 100644 --- a/src/wgt/step/step_wgt_create_storage_directories.cc +++ b/src/wgt/step/step_wgt_create_storage_directories.cc @@ -26,28 +26,28 @@ namespace filesystem { common_installer::Step::Status StepWgtCreateStorageDirectories::process() { if (!PrivateDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; char version = context_->manifest_data.get()->api_version[0]; if ((version-'0') < 3) { LOG(DEBUG) << "Shared directory preparation for tizen 2.x"; if (!ShareDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; } else { LOG(DEBUG) << "Shared directory preparation for tizen 3.x"; if (!ShareDirFor3x()) - return Status::ERROR; + return Status::APP_DIR_ERROR; } if (!SubShareDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; if (!CreatePrivateTmpDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; if (!CacheDir()) - return Status::ERROR; + return Status::APP_DIR_ERROR; return Status::OK; } diff --git a/src/wgt/step/step_wgt_resource_directory.cc b/src/wgt/step/step_wgt_resource_directory.cc index 190051f..33671e7 100644 --- a/src/wgt/step/step_wgt_resource_directory.cc +++ b/src/wgt/step/step_wgt_resource_directory.cc @@ -23,17 +23,17 @@ common_installer::Step::Status StepWgtResourceDirectory::process() { temp_path)) { LOG(ERROR) << "Failed to move: " << context_->unpacked_dir_path.get() << " to: " << temp_path; - return Status::ERROR; + return Status::APP_DIR_ERROR; } bs::error_code error; bf::create_directories(resource_path.parent_path(), error); if (error) { LOG(ERROR) << "Failed to create proper directory structure in widget"; - return Status::ERROR; + return Status::APP_DIR_ERROR; } if (!common_installer::MoveDir(temp_path, resource_path)) { LOG(ERROR) << "Failed to move: " << temp_path << " to: " << resource_path; - return Status::ERROR; + return Status::APP_DIR_ERROR; } LOG(INFO) << "Widget content moved to res/wgt subdirectory"; -- 2.7.4 From 2ac7a035612a687616ce9eaa8da20f03648829cf Mon Sep 17 00:00:00 2001 From: Tomasz Iwanek Date: Thu, 14 Jan 2016 11:31:51 +0100 Subject: [PATCH 6/7] Add overlaod for StepCreateIcons::GetAppTypeForIcons Needs to be submitted with: - https://review.tizen.org/gerrit/#/c/56920 Change-Id: Ic0f5a18513b4157df06e5c411011ef64f283127e --- src/wgt/step/step_wgt_create_icons.cc | 4 ++++ src/wgt/step/step_wgt_create_icons.h | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/wgt/step/step_wgt_create_icons.cc b/src/wgt/step/step_wgt_create_icons.cc index f62588c..936e3a8 100644 --- a/src/wgt/step/step_wgt_create_icons.cc +++ b/src/wgt/step/step_wgt_create_icons.cc @@ -17,6 +17,10 @@ boost::filesystem::path StepWgtCreateIcons::GetIconRoot() const { return context_->pkg_path.get() / kResWgt; } +std::string StepWgtCreateIcons::GetAppTypeForIcons() const { + return "webapp"; +} + } // namespace filesystem } // namespace wgt diff --git a/src/wgt/step/step_wgt_create_icons.h b/src/wgt/step/step_wgt_create_icons.h index 46c3a8c..ee71942 100644 --- a/src/wgt/step/step_wgt_create_icons.h +++ b/src/wgt/step/step_wgt_create_icons.h @@ -9,6 +9,8 @@ #include +#include + namespace wgt { namespace filesystem { @@ -27,6 +29,13 @@ class StepWgtCreateIcons */ boost::filesystem::path GetIconRoot() const override; + /** + * \brief Return type of application for which icons should be created + * + * \return application type + */ + std::string GetAppTypeForIcons() const override; + SCOPE_LOG_TAG(WgtCreateIcons) }; -- 2.7.4 From ef65dc0a416da1bf81addbdbec4231b155d1126e Mon Sep 17 00:00:00 2001 From: Lukasz Wysocki Date: Fri, 8 Jan 2016 13:00:06 +0100 Subject: [PATCH 7/7] Web app icon path change This change will copy Web app icons into {HOME}/.applications/icons , and {APP_ROOT}/shared/res directories When some projects will be changed and stop using {HOME} directory, this change can be reworked. This commit require following changes: - https://review.tizen.org/gerrit/#/c/56488/ Change-Id: I9343adf5af1228a0b8ee660f50012eb7ac9b3bee --- src/wgt/CMakeLists.txt | 2 ++ src/wgt/step/step_wgt_backup_icons.cc | 30 ++++++++++++++++++++++++++++ src/wgt/step/step_wgt_backup_icons.h | 36 ++++++++++++++++++++++++++++++++++ src/wgt/step/step_wgt_create_icons.cc | 35 ++++++++++++++++++++++++++++++--- src/wgt/step/step_wgt_create_icons.h | 2 ++ src/wgt/step/step_wgt_recover_icons.cc | 31 +++++++++++++++++++++++++++++ src/wgt/step/step_wgt_recover_icons.h | 35 +++++++++++++++++++++++++++++++++ src/wgt/wgt_installer.cc | 10 +++++----- 8 files changed, 173 insertions(+), 8 deletions(-) create mode 100644 src/wgt/step/step_wgt_backup_icons.cc create mode 100644 src/wgt/step/step_wgt_backup_icons.h create mode 100644 src/wgt/step/step_wgt_recover_icons.cc create mode 100644 src/wgt/step/step_wgt_recover_icons.h diff --git a/src/wgt/CMakeLists.txt b/src/wgt/CMakeLists.txt index 6bd0300..d1201bb 100644 --- a/src/wgt/CMakeLists.txt +++ b/src/wgt/CMakeLists.txt @@ -11,9 +11,11 @@ SET(SRCS step/step_parse_recovery.cc step/step_rds_parse.cc step/step_rds_modify.cc + step/step_wgt_backup_icons.cc step/step_wgt_create_icons.cc step/step_wgt_create_storage_directories.cc step/step_wgt_copy_storage_directories.cc + step/step_wgt_recover_icons.cc step/step_wgt_resource_directory.cc step/step_add_default_privileges.cc wgt_app_query_interface.cc diff --git a/src/wgt/step/step_wgt_backup_icons.cc b/src/wgt/step/step_wgt_backup_icons.cc new file mode 100644 index 0000000..c1d63e0 --- /dev/null +++ b/src/wgt/step/step_wgt_backup_icons.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2015 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/step_wgt_backup_icons.h" + +#include + +namespace { +const char kSharedRes[] = "shared/res"; + +namespace bf = boost::filesystem; +} // namespace + +namespace wgt { +namespace backup { + +common_installer::Step::Status StepWgtBackupIcons::process() { + // TODO (l.wysocki): As a temporary solution this will move icons into two + // destinations respectively {HOME}/.applications/icons, + // and {APP_ROOT}/shared/res, when some project will stop using old + // location ({HOME}/.applications/icons) then it can be removed from here. + std::vector paths { getIconPath(context_->uid.get()), + context_->root_application_path.get() + / context_->pkgid.get() / kSharedRes }; + return MoveIcons(paths); +} + +} // namespace backup +} // namespace wgt diff --git a/src/wgt/step/step_wgt_backup_icons.h b/src/wgt/step/step_wgt_backup_icons.h new file mode 100644 index 0000000..dc62760 --- /dev/null +++ b/src/wgt/step/step_wgt_backup_icons.h @@ -0,0 +1,36 @@ +// Copyright (c) 2015 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_STEP_WGT_BACKUP_ICONS_H_ +#define WGT_STEP_STEP_WGT_BACKUP_ICONS_H_ + +#include +#include + +namespace wgt { +namespace backup { + +/** + *\brief Step responsible for creating backup for icons during update and + * uninstallation. + * Used by WGT backend + */ +class StepWgtBackupIcons : public common_installer::backup::StepBackupIcons { + public: + using StepBackupIcons::StepBackupIcons; + + /** + * \brief main logic of backuping icons + * + * \return Status::OK, if successful backup, Status::ERROR otherwise + */ + Status process() override; + + SCOPE_LOG_TAG(WgtBackupIcons) +}; + +} // namespace backup +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_BACKUP_ICONS_H_ diff --git a/src/wgt/step/step_wgt_create_icons.cc b/src/wgt/step/step_wgt_create_icons.cc index 936e3a8..1bd73eb 100644 --- a/src/wgt/step/step_wgt_create_icons.cc +++ b/src/wgt/step/step_wgt_create_icons.cc @@ -4,15 +4,44 @@ #include "wgt/step/step_wgt_create_icons.h" -namespace { +#include -const char kResWgt[] = "res/wgt"; +#include "common/utils/glist_range.h" -} +namespace bf = boost::filesystem; +namespace ci = common_installer; + +namespace { +const char kResWgt[] = "res/wgt"; +} // namespace namespace wgt { namespace filesystem { +common_installer::Step::Status StepWgtCreateIcons::process() { + // TODO (l.wysocki): As a temporary solution this will copy icons into two + // destinations respectively {HOME}/.applications/icons, + // and {APP_ROOT}/shared/res, when some project will stop using old + // location ({HOME}/.applications/icons) then it can be removed from here. + std::vector paths { getIconPath(context_->uid.get()), + StepCreateIcons::GetIconRoot() }; + + // explicit step for wgt apps to add absolute path to icon in order to + // store it in db + ci::Step::Status result = CopyIcons(paths); + for (application_x* app : + GListRange(context_->manifest_data.get()->application)) { + if (app->icon) { + icon_x* icon = reinterpret_cast(app->icon->data); + bf::path icon_path = StepCreateIcons::GetIconRoot() / icon->text; + if (icon->text) + free((void *)icon->text); + icon->text = strdup(icon_path.c_str()); + } + } + return result; +} + boost::filesystem::path StepWgtCreateIcons::GetIconRoot() const { return context_->pkg_path.get() / kResWgt; } diff --git a/src/wgt/step/step_wgt_create_icons.h b/src/wgt/step/step_wgt_create_icons.h index ee71942..a9501a3 100644 --- a/src/wgt/step/step_wgt_create_icons.h +++ b/src/wgt/step/step_wgt_create_icons.h @@ -22,6 +22,8 @@ class StepWgtCreateIcons public: using StepCreateIcons::StepCreateIcons; + Status process() override; + /** * \brief Return path to widget icon * diff --git a/src/wgt/step/step_wgt_recover_icons.cc b/src/wgt/step/step_wgt_recover_icons.cc new file mode 100644 index 0000000..0149b78 --- /dev/null +++ b/src/wgt/step/step_wgt_recover_icons.cc @@ -0,0 +1,31 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#include "wgt/step/step_wgt_recover_icons.h" + +#include + +namespace { +const char kSharedRes[] = "shared/res"; + +namespace bf = boost::filesystem; +} // namespace + +namespace wgt { +namespace filesystem { + +std::vector StepWgtRecoverIcons::GetIconsPaths() { + // TODO (l.wysocki): As a temporary solution this will move icons into two + // destinations respectively {HOME}/.applications/icons, + // and {APP_ROOT}/shared/res, when some project will stop using old + // location ({HOME}/.applications/icons) then it can be removed from here. + std::vector paths { bf::path(getIconPath(context_->uid.get())), + context_->root_application_path.get() + / context_->pkgid.get() / kSharedRes }; + return paths; +} + +} // namespace filesystem +} // namespace wgt + diff --git a/src/wgt/step/step_wgt_recover_icons.h b/src/wgt/step/step_wgt_recover_icons.h new file mode 100644 index 0000000..cf63981 --- /dev/null +++ b/src/wgt/step/step_wgt_recover_icons.h @@ -0,0 +1,35 @@ +// Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved +// Use of this source code is governed by an apache-2.0 license that can be +// found in the LICENSE file. + +#ifndef WGT_STEP_STEP_WGT_RECOVER_ICONS_H_ +#define WGT_STEP_STEP_WGT_RECOVER_ICONS_H_ + +#include + +namespace wgt { +namespace filesystem { + +/** + * @brief The StepRecoverIcons class + * Fixes state of platform icon files in recovery mode. + * + * For recovery of new installation, all icons files are removed. + * For recovery of update installation, all icons of applications of package are + * restored to its previous locations. + */ +class StepWgtRecoverIcons : + public common_installer::filesystem::StepRecoverIcons { + public: + using StepRecoverIcons::StepRecoverIcons; + + protected: + virtual std::vector GetIconsPaths(); + + SCOPE_LOG_TAG(WgtRecoverIcons) +}; + +} // namespace filesystem +} // namespace wgt + +#endif // WGT_STEP_STEP_WGT_RECOVER_ICONS_H_ diff --git a/src/wgt/wgt_installer.cc b/src/wgt/wgt_installer.cc index 9d494b9..f2be1cd 100644 --- a/src/wgt/wgt_installer.cc +++ b/src/wgt/wgt_installer.cc @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -22,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -52,9 +50,11 @@ #include "wgt/step/step_rds_modify.h" #include "wgt/step/step_rds_parse.h" #include "wgt/step/step_remove_encryption_data.h" +#include "wgt/step/step_wgt_backup_icons.h" #include "wgt/step/step_wgt_copy_storage_directories.h" #include "wgt/step/step_wgt_create_icons.h" #include "wgt/step/step_wgt_create_storage_directories.h" +#include "wgt/step/step_wgt_recover_icons.h" #include "wgt/step/step_wgt_resource_directory.h" namespace ci = common_installer; @@ -98,7 +98,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -147,7 +147,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); AddStep(); AddStep(); AddStep(); @@ -163,7 +163,7 @@ WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr) AddStep(); AddStep(); AddStep(); - AddStep(); + AddStep(); AddStep(); AddStep(); AddStep(); -- 2.7.4