0b0fd63120e47ecf5bc5601aa4354532b31e15be
[platform/core/appfw/wgt-backend.git] / src / wgt / wgt_installer.cc
1 // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
4
5 #include "wgt/wgt_installer.h"
6
7 #include <common/pkgmgr_interface.h>
8
9 #include <common/privileges.h>
10 #include <common/step/backup/step_backup_icons.h>
11 #include <common/step/backup/step_backup_manifest.h>
12 #include <common/step/backup/step_copy_backup.h>
13 #include <common/step/configuration/step_block_cross_update.h>
14 #include <common/step/configuration/step_check_install_location.h>
15 #include <common/step/configuration/step_check_tizen_version.h>
16 #include <common/step/configuration/step_configure.h>
17 #include <common/step/configuration/step_fail.h>
18 #include <common/step/configuration/step_parse_manifest.h>
19 #include <common/step/configuration/step_parse_preload.h>
20 #include <common/step/configuration/step_switch_readonly_mode.h>
21 #include <common/step/filesystem/step_acquire_external_storage.h>
22 #include <common/step/filesystem/step_optional_acquire_external_storage.h>
23 #include <common/step/filesystem/step_change_ownership_and_permission.h>
24 #include <common/step/filesystem/step_copy.h>
25 #include <common/step/filesystem/step_copy_storage_directories.h>
26 #include <common/step/filesystem/step_copy_tep.h>
27 #include <common/step/filesystem/step_create_icons.h>
28 #include <common/step/filesystem/step_create_globalapp_symlinks.h>
29 #include <common/step/filesystem/step_create_per_user_storage_directories.h>
30 #include <common/step/filesystem/step_create_storage_directories.h>
31 #include <common/step/filesystem/step_delta_patch.h>
32 #include <common/step/filesystem/step_disable_external_mount.h>
33 #include <common/step/filesystem/step_enable_external_mount.h>
34 #include <common/step/filesystem/step_migrate_legacy_external_image.h>
35 #include <common/step/filesystem/step_move_installed_storage.h>
36 #include <common/step/filesystem/step_recover_change_owner.h>
37 #include <common/step/filesystem/step_recover_files.h>
38 #include <common/step/filesystem/step_recover_globalapp_symlinks.h>
39 #include <common/step/filesystem/step_recover_icons.h>
40 #include <common/step/filesystem/step_recover_manifest.h>
41 #include <common/step/filesystem/step_recover_external_storage.h>
42 #include <common/step/filesystem/step_recover_storage_directories.h>
43 #include <common/step/filesystem/step_recover_per_user_storage_directories.h>
44 #include <common/step/filesystem/step_remove_files.h>
45 #include <common/step/filesystem/step_remove_icons.h>
46 #include <common/step/filesystem/step_remove_globalapp_symlinks.h>
47 #include <common/step/filesystem/step_remove_per_user_storage_directories.h>
48 #include <common/step/filesystem/step_remove_temporary_directory.h>
49 #include <common/step/filesystem/step_remove_tep.h>
50 #include <common/step/filesystem/step_remove_zip_image.h>
51 #include <common/step/filesystem/step_unzip.h>
52 #include <common/step/filesystem/step_update_per_user_storage_directories.h>
53 #include <common/step/filesystem/step_update_storage_directories.h>
54 #include <common/step/filesystem/step_update_tep.h>
55 #include <common/step/mount/step_mount_install.h>
56 #include <common/step/mount/step_mount_recover.h>
57 #include <common/step/mount/step_mount_unpacked.h>
58 #include <common/step/mount/step_mount_update.h>
59 #include <common/step/pkgmgr/step_check_force_clean.h>
60 #include <common/step/pkgmgr/step_check_installable.h>
61 #include <common/step/pkgmgr/step_check_removable.h>
62 #include <common/step/pkgmgr/step_check_restriction.h>
63 #include <common/step/pkgmgr/step_kill_apps.h>
64 #include <common/step/pkgmgr/step_recover_application.h>
65 #include <common/step/pkgmgr/step_register_app.h>
66 #include <common/step/pkgmgr/step_remove_manifest.h>
67 #include <common/step/pkgmgr/step_run_parser_plugins.h>
68 #include <common/step/pkgmgr/step_unregister_app.h>
69 #include <common/step/pkgmgr/step_update_app.h>
70 #include <common/step/pkgmgr/step_update_pkg_disable_info.h>
71 #include <common/step/rds/step_rds_modify.h>
72 #include <common/step/rds/step_rds_parse.h>
73 #include <common/step/recovery/step_open_recovery_file.h>
74 #include <common/step/security/step_check_old_certificate.h>
75 #include <common/step/security/step_check_signature.h>
76 #include <common/step/security/step_privacy_privilege.h>
77 #include <common/step/security/step_privilege_compatibility.h>
78 #include <common/step/security/step_recover_privilege_compatibility.h>
79 #include <common/step/security/step_recover_security.h>
80 #include <common/step/security/step_register_security.h>
81 #include <common/step/security/step_revoke_security.h>
82 #include <common/step/security/step_rollback_installation_security.h>
83 #include <common/step/security/step_update_security.h>
84 #include <common/step/security/step_register_trust_anchor.h>
85 #include <common/step/security/step_revoke_trust_anchor.h>
86 #include <common/step/security/step_save_signature.h>
87 #include <common/step/security/step_unregister_trust_anchor.h>
88
89 #include <wgt_manifest_handlers/widget_config_parser.h>
90
91 #include "wgt/shared_dirs.h"
92 #include "wgt/step/configuration/step_check_rds_manifest.h"
93 #include "wgt/step/configuration/step_check_start_files.h"
94 #include "wgt/step/configuration/step_parse.h"
95 #include "wgt/step/configuration/step_set_old_signature_files_location.h"
96 #include "wgt/step/encryption/step_encrypt_resources.h"
97 #include "wgt/step/encryption/step_remove_encryption_data.h"
98 #include "wgt/step/filesystem/step_copy_preview_icons.h"
99 #include "wgt/step/filesystem/step_create_symbolic_link.h"
100 #include "wgt/step/filesystem/step_wgt_patch_icons.h"
101 #include "wgt/step/filesystem/step_wgt_patch_storage_directories.h"
102 #include "wgt/step/filesystem/step_wgt_prepare_package_directory.h"
103 #include "wgt/step/filesystem/step_wgt_resource_directory.h"
104 #include "wgt/step/filesystem/step_wgt_undo_patch_storage_directories.h"
105 #include "wgt/step/filesystem/step_wgt_update_package_directory.h"
106 #include "wgt/step/pkgmgr/step_generate_xml.h"
107 #include "wgt/step/security/step_add_default_privileges.h"
108 #include "wgt/step/security/step_check_settings_level.h"
109 #include "wgt/step/security/step_check_wgt_background_category.h"
110 #include "wgt/step/security/step_check_wgt_notification_category.h"
111 #include "wgt/step/security/step_check_wgt_ime_privilege.h"
112 #include "wgt/step/security/step_direct_manifest_check_signature.h"
113 #include "wgt/step/security/step_check_extension_privileges.h"
114 #include "wgt/step/security/step_wgt_recover_signature.h"
115
116 namespace ci = common_installer;
117
118 namespace wgt {
119
120 WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
121     : AppInstaller("wgt", pkgrmgr) {
122   context_->backend_data.set(new WgtBackendData());
123
124   /* treat the request */
125   switch (pkgmgr_->GetRequestType()) {
126     case ci::RequestType::Install : {
127       InstallSteps();
128       break;
129     }
130     case ci::RequestType::Update: {
131       UpdateSteps();
132       break;
133     }
134     case ci::RequestType::Uninstall: {
135       UninstallSteps();
136       break;
137     }
138     case ci::RequestType::Reinstall: {
139       ReinstallSteps();
140       break;
141     }
142     case ci::RequestType::Delta: {
143       DeltaSteps();
144       break;
145     }
146     case ci::RequestType::Recovery: {
147       RecoverySteps();
148       break;
149     }
150     case ci::RequestType::MountInstall: {
151       MountInstallSteps();
152       break;
153     }
154     case ci::RequestType::MountUpdate: {
155       MountUpdateSteps();
156       break;
157     }
158     case ci::RequestType::ManifestDirectInstall: {
159       ManifestDirectInstallSteps();
160       break;
161     }
162     case ci::RequestType::ManifestDirectUpdate: {
163       ManifestDirectUpdateSteps();
164       break;
165     }
166     case ci::RequestType::ReadonlyUpdateInstall: {
167       ReadonlyUpdateInstallSteps();
168       break;
169     }
170     case ci::RequestType::ReadonlyUpdateUninstall: {
171       ReadonlyUpdateUninstallSteps();
172       break;
173     }
174     case ci::RequestType::ManifestPartialInstall: {
175       ManifestPartialInstallSteps();
176       break;
177     }
178     case ci::RequestType::ManifestPartialUpdate: {
179       ManifestPartialUpdateSteps();
180       break;
181     }
182     case ci::RequestType::PartialUninstall: {
183       ManifestPartialUninstallSteps();
184       break;
185     }
186     case ci::RequestType::Move: {
187       MoveSteps();
188       break;
189     }
190     case ci::RequestType::EnablePkg: {
191       EnablePkgSteps();
192       break;
193     }
194     case ci::RequestType::DisablePkg: {
195       DisablePkgSteps();
196       break;
197     }
198     case ci::RequestType::MigrateExtImg: {
199       MigrateExtImgSteps();
200       break;
201     }
202     default: {
203       DefaultSteps();
204     }
205   }
206 }
207   void WgtInstaller::InstallSteps() {
208       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
209       AddStep<ci::filesystem::StepUnzip>();
210       AddStep<wgt::configuration::StepParse>(
211         wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
212       AddStep<ci::configuration::StepCheckInstallLocation>();
213       AddStep<ci::pkgmgr::StepCheckInstallable>();
214       AddStep<ci::configuration::StepParsePreload>();
215       AddStep<ci::pkgmgr::StepCheckRestriction>();
216       AddStep<ci::configuration::StepCheckTizenVersion>();
217       AddStep<ci::security::StepCheckSignature>();
218       AddStep<ci::security::StepSaveSignature>();
219       AddStep<ci::security::StepPrivilegeCompatibility>(
220           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
221       AddStep<wgt::security::StepCheckSettingsLevel>();
222       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
223       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
224       AddStep<wgt::security::StepCheckWgtImePrivilege>();
225       AddStep<wgt::encryption::StepEncryptResources>();
226       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
227       AddStep<ci::security::StepRollbackInstallationSecurity>();
228       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
229       AddStep<ci::filesystem::StepAcquireExternalStorage>(false);
230       AddStep<ci::filesystem::StepCopy>();
231       AddStep<ci::filesystem::StepCopyTep>();
232       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
233       AddStep<ci::filesystem::StepCreateStorageDirectories>();
234       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
235       AddStep<wgt::filesystem::StepWgtPatchIcons>();
236       AddStep<ci::filesystem::StepCreateIcons>();
237       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
238       AddStep<wgt::security::StepCheckExtensionPrivileges>();
239       AddStep<wgt::pkgmgr::StepGenerateXml>();
240       AddStep<ci::pkgmgr::StepRegisterApplication>();
241       AddStep<ci::security::StepRegisterTrustAnchor>(
242           ci::security::StepRegisterTrustAnchor::RegisterType::INSTALL);
243       AddStep<ci::security::StepPrivacyPrivilege>(
244           ci::security::StepPrivacyPrivilege::ActionType::Install);
245       AddStep<ci::security::StepRegisterSecurity>();
246       AddStep<ci::pkgmgr::StepRunParserPlugin>(
247           ci::Plugin::ActionType::Install);
248       AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>(
249           wgt::filesystem::WgtAdditionalSharedDirs);
250       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
251       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
252   }
253
254   void WgtInstaller::UpdateSteps() {
255       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
256       AddStep<ci::filesystem::StepUnzip>();
257       AddStep<wgt::configuration::StepParse>(
258           wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
259       AddStep<ci::configuration::StepCheckInstallLocation>();
260       AddStep<ci::configuration::StepParsePreload>();
261       AddStep<ci::configuration::StepCheckTizenVersion>();
262       AddStep<ci::security::StepCheckSignature>();
263       AddStep<ci::security::StepSaveSignature>();
264       AddStep<ci::security::StepPrivilegeCompatibility>(
265           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
266       AddStep<wgt::security::StepCheckSettingsLevel>();
267       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
268       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
269       AddStep<wgt::security::StepCheckWgtImePrivilege>();
270       AddStep<ci::security::StepCheckOldCertificate>();
271       AddStep<wgt::encryption::StepEncryptResources>();
272       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
273       AddStep<ci::configuration::StepParseManifest>(
274           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
275           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
276       AddStep<ci::configuration::StepBlockCrossUpdate>();
277       AddStep<ci::pkgmgr::StepKillApps>();
278       AddStep<ci::backup::StepBackupManifest>();
279       AddStep<ci::backup::StepBackupIcons>();
280       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
281       AddStep<ci::filesystem::StepAcquireExternalStorage>(true);
282       AddStep<ci::security::StepRevokeTrustAnchor>();
283       AddStep<ci::backup::StepCopyBackup>();
284       AddStep<ci::filesystem::StepUpdateTep>();
285       AddStep<ci::filesystem::StepUpdateStorageDirectories>();
286       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
287       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
288       AddStep<wgt::filesystem::StepWgtPatchIcons>();
289       AddStep<ci::filesystem::StepCreateIcons>();
290       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
291       AddStep<ci::filesystem::StepCopyStorageDirectories>();
292       AddStep<wgt::security::StepCheckExtensionPrivileges>();
293       AddStep<wgt::pkgmgr::StepGenerateXml>();
294       AddStep<ci::pkgmgr::StepUpdateApplication>();
295       AddStep<ci::security::StepRegisterTrustAnchor>(
296           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
297       AddStep<ci::security::StepPrivacyPrivilege>(
298           ci::security::StepPrivacyPrivilege::ActionType::Update);
299       AddStep<ci::security::StepUpdateSecurity>();
300       AddStep<ci::pkgmgr::StepRunParserPlugin>(
301           ci::Plugin::ActionType::Upgrade);
302       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
303       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
304       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
305   }
306
307   void WgtInstaller::UninstallSteps() {
308       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
309       AddStep<ci::pkgmgr::StepCheckRestriction>();
310       AddStep<ci::pkgmgr::StepCheckRemovable>();
311       AddStep<ci::pkgmgr::StepCheckForceClean>();
312       AddStep<ci::configuration::StepParseManifest>(
313           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
314           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
315       AddStep<ci::configuration::StepCheckInstallLocation>();
316       AddStep<ci::pkgmgr::StepKillApps>();
317       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
318       AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
319       AddStep<ci::pkgmgr::StepRunParserPlugin>(
320           ci::Plugin::ActionType::Uninstall);
321       AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>();
322       AddStep<ci::pkgmgr::StepUnregisterApplication>();
323       AddStep<ci::filesystem::StepRemoveTep>();
324       AddStep<ci::filesystem::StepRemoveFiles>();
325       AddStep<ci::filesystem::StepRemoveZipImage>();
326       AddStep<ci::filesystem::StepRemoveIcons>();
327       AddStep<wgt::encryption::StepRemoveEncryptionData>();
328       AddStep<ci::security::StepUnregisterTrustAnchor>();
329       AddStep<ci::security::StepPrivacyPrivilege>(
330           ci::security::StepPrivacyPrivilege::ActionType::Uninstall);
331       AddStep<ci::security::StepRevokeSecurity>();
332       AddStep<ci::pkgmgr::StepRemoveManifest>();
333       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
334   }
335
336   void WgtInstaller::ReinstallSteps() {
337       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
338       AddStep<wgt::configuration::StepCheckRDSManifest>();
339       AddStep<wgt::configuration::StepParse>(
340           wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, false);
341       AddStep<ci::configuration::StepCheckInstallLocation>();
342       AddStep<ci::configuration::StepParsePreload>();
343       AddStep<ci::pkgmgr::StepCheckRestriction>();
344       AddStep<ci::configuration::StepCheckTizenVersion>();
345       AddStep<ci::pkgmgr::StepKillApps>();
346       AddStep<ci::configuration::StepParseManifest>(
347           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
348           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
349       AddStep<ci::configuration::StepBlockCrossUpdate>();
350       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
351       AddStep<ci::security::StepRevokeTrustAnchor>();
352       AddStep<ci::rds::StepRDSParse>();
353       AddStep<ci::filesystem::StepUpdateTep>();
354       AddStep<ci::rds::StepRDSModify>();
355       AddStep<wgt::security::StepCheckExtensionPrivileges>();
356       AddStep<ci::security::StepRegisterTrustAnchor>(
357           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
358       AddStep<ci::security::StepPrivacyPrivilege>(
359           ci::security::StepPrivacyPrivilege::ActionType::Update);
360       AddStep<ci::security::StepUpdateSecurity>();
361       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
362       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
363   }
364
365   void WgtInstaller::DeltaSteps() {
366       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
367       AddStep<ci::filesystem::StepUnzip>();
368       AddStep<wgt::configuration::StepParse>(
369             wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
370       AddStep<ci::configuration::StepCheckInstallLocation>();
371       AddStep<ci::configuration::StepParseManifest>(
372           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
373           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
374       AddStep<ci::configuration::StepParsePreload>();
375       AddStep<ci::configuration::StepCheckTizenVersion>();
376       AddStep<ci::filesystem::StepEnableExternalMount>();
377       AddStep<wgt::filesystem::StepWgtUndoPatchStorageDirectories>();
378       AddStep<ci::filesystem::StepDeltaPatch>("res/wgt/");
379       AddStep<ci::filesystem::StepDisableExternalMount>();
380       AddStep<wgt::configuration::StepCheckStartFiles>();
381       AddStep<ci::security::StepCheckSignature>();
382       AddStep<ci::security::StepSaveSignature>();
383       AddStep<ci::security::StepPrivilegeCompatibility>(
384           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
385       AddStep<wgt::security::StepCheckSettingsLevel>();
386       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
387       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
388       AddStep<wgt::security::StepCheckWgtImePrivilege>();
389       AddStep<ci::security::StepCheckOldCertificate>();
390       AddStep<wgt::encryption::StepEncryptResources>();
391       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
392       AddStep<ci::configuration::StepBlockCrossUpdate>();
393       AddStep<ci::pkgmgr::StepKillApps>();
394       AddStep<ci::backup::StepBackupManifest>();
395       AddStep<ci::backup::StepBackupIcons>();
396       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
397       AddStep<ci::filesystem::StepAcquireExternalStorage>(true);
398       AddStep<ci::security::StepRevokeTrustAnchor>();
399       AddStep<ci::backup::StepCopyBackup>();
400       AddStep<ci::filesystem::StepUpdateTep>();
401       AddStep<ci::filesystem::StepUpdateStorageDirectories>();
402       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
403       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
404       AddStep<wgt::filesystem::StepWgtPatchIcons>();
405       AddStep<ci::filesystem::StepCreateIcons>();
406       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
407       AddStep<ci::filesystem::StepCopyStorageDirectories>();
408       AddStep<wgt::security::StepCheckExtensionPrivileges>();
409       AddStep<wgt::pkgmgr::StepGenerateXml>();
410       AddStep<ci::pkgmgr::StepUpdateApplication>();
411       AddStep<ci::security::StepRegisterTrustAnchor>(
412           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
413       AddStep<ci::security::StepPrivacyPrivilege>(
414           ci::security::StepPrivacyPrivilege::ActionType::Update);
415       AddStep<ci::security::StepUpdateSecurity>();
416       AddStep<ci::pkgmgr::StepRunParserPlugin>(
417           ci::Plugin::ActionType::Upgrade);
418       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
419       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
420       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
421   }
422
423   void WgtInstaller::RecoverySteps() {
424       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
425       AddStep<ci::recovery::StepOpenRecoveryFile>();
426       AddStep<ci::filesystem::StepRemoveTemporaryDirectory>();
427       AddStep<ci::configuration::StepParseManifest>(
428           ci::configuration::StepParseManifest::ManifestLocation::RECOVERY,
429           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
430       AddStep<ci::filesystem::StepRecoverIcons>();
431       AddStep<ci::filesystem::StepRecoverManifest>();
432       AddStep<ci::filesystem::StepRecoverExternalStorage>();
433       AddStep<ci::filesystem::StepRecoverStorageDirectories>();
434       AddStep<ci::filesystem::StepRecoverPerUserStorageDirectories>();
435       AddStep<ci::filesystem::StepRecoverGlobalAppSymlinks>();
436       AddStep<ci::filesystem::StepRecoverFiles>();
437       AddStep<ci::mount::StepMountRecover>();
438       AddStep<wgt::security::StepWgtRecoverSignature>();
439       AddStep<ci::security::StepRecoverPrivilegeCompatibility>(
440           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
441       AddStep<ci::filesystem::StepRecoverChangeOwner>();
442       AddStep<ci::security::StepRecoverSecurity>();
443       AddStep<ci::pkgmgr::StepRecoverApplication>();
444       AddStep<ci::security::StepRegisterTrustAnchor>(
445           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
446
447   }
448
449   void WgtInstaller::MountInstallSteps() {
450       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
451       AddStep<ci::mount::StepMountUnpacked>();
452       AddStep<wgt::configuration::StepParse>(
453           wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
454       AddStep<ci::configuration::StepCheckInstallLocation>();
455       AddStep<ci::pkgmgr::StepCheckInstallable>();
456       AddStep<ci::configuration::StepParsePreload>();
457       AddStep<ci::pkgmgr::StepCheckRestriction>();
458       AddStep<ci::configuration::StepCheckTizenVersion>();
459       AddStep<ci::security::StepCheckSignature>();
460       AddStep<ci::security::StepSaveSignature>();
461       AddStep<ci::security::StepPrivilegeCompatibility>(
462           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
463       AddStep<wgt::security::StepCheckSettingsLevel>();
464       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
465       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
466       AddStep<wgt::security::StepCheckWgtImePrivilege>();
467       AddStep<wgt::encryption::StepEncryptResources>();
468       AddStep<ci::security::StepRollbackInstallationSecurity>();
469       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
470       AddStep<ci::mount::StepMountInstall>();
471       AddStep<wgt::filesystem::StepWgtPreparePackageDirectory>();
472       AddStep<ci::filesystem::StepCopyTep>();
473       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
474       AddStep<ci::filesystem::StepCreateStorageDirectories>();
475       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
476       AddStep<wgt::filesystem::StepWgtPatchIcons>();
477       AddStep<ci::filesystem::StepCreateIcons>();
478       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
479       AddStep<wgt::pkgmgr::StepGenerateXml>();
480       AddStep<wgt::security::StepCheckExtensionPrivileges>();
481       AddStep<ci::pkgmgr::StepRegisterApplication>();
482       AddStep<ci::security::StepRegisterTrustAnchor>(
483           ci::security::StepRegisterTrustAnchor::RegisterType::INSTALL);
484       AddStep<ci::security::StepPrivacyPrivilege>(
485           ci::security::StepPrivacyPrivilege::ActionType::Install);
486       AddStep<ci::security::StepRegisterSecurity>();
487       AddStep<ci::pkgmgr::StepRunParserPlugin>(
488           ci::Plugin::ActionType::Install);
489       AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>(
490           wgt::filesystem::WgtAdditionalSharedDirs);
491       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>(true);
492       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
493   }
494
495   void WgtInstaller::MountUpdateSteps() {
496       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
497       AddStep<ci::mount::StepMountUnpacked>();
498       AddStep<wgt::configuration::StepParse>(
499           wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
500       AddStep<ci::configuration::StepCheckInstallLocation>();
501       AddStep<ci::configuration::StepParsePreload>();
502       AddStep<ci::configuration::StepCheckTizenVersion>();
503       AddStep<ci::security::StepCheckSignature>();
504       AddStep<ci::security::StepSaveSignature>();
505       AddStep<ci::security::StepPrivilegeCompatibility>(
506           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
507       AddStep<wgt::security::StepCheckSettingsLevel>();
508       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
509       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
510       AddStep<wgt::security::StepCheckWgtImePrivilege>();
511       AddStep<ci::security::StepCheckOldCertificate>();
512       AddStep<ci::configuration::StepParseManifest>(
513           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
514           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
515       AddStep<ci::configuration::StepBlockCrossUpdate>();
516       AddStep<ci::security::StepRevokeTrustAnchor>();
517       AddStep<ci::pkgmgr::StepKillApps>();
518       AddStep<ci::backup::StepBackupManifest>();
519       AddStep<ci::backup::StepBackupIcons>();
520       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
521       AddStep<ci::mount::StepMountUpdate>();
522       AddStep<wgt::filesystem::StepWgtUpdatePackageDirectory>();
523       AddStep<ci::filesystem::StepUpdateTep>();
524       AddStep<ci::filesystem::StepUpdateStorageDirectories>();
525       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
526       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
527       AddStep<wgt::filesystem::StepWgtPatchIcons>();
528       AddStep<ci::filesystem::StepCreateIcons>();
529       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
530       AddStep<wgt::security::StepCheckExtensionPrivileges>();
531       AddStep<wgt::pkgmgr::StepGenerateXml>();
532       AddStep<ci::pkgmgr::StepUpdateApplication>();
533       AddStep<ci::security::StepRegisterTrustAnchor>(
534           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
535       AddStep<ci::security::StepPrivacyPrivilege>(
536           ci::security::StepPrivacyPrivilege::ActionType::Update);
537       AddStep<ci::security::StepUpdateSecurity>();
538       AddStep<ci::pkgmgr::StepRunParserPlugin>(
539           ci::Plugin::ActionType::Upgrade);
540       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
541       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>(true);
542       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
543   }
544
545   void WgtInstaller::ManifestDirectInstallSteps() {
546       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
547       AddStep<wgt::configuration::StepParse>(
548           wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
549       AddStep<ci::pkgmgr::StepCheckInstallable>();
550       AddStep<ci::configuration::StepParsePreload>();
551       AddStep<ci::configuration::StepCheckTizenVersion>();
552       AddStep<wgt::security::StepDirectManifestCheckSignature>();
553       AddStep<ci::security::StepSaveSignature>();
554       AddStep<ci::security::StepPrivilegeCompatibility>(
555           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
556       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
557       AddStep<wgt::security::StepCheckWgtImePrivilege>();
558       AddStep<wgt::security::StepCheckSettingsLevel>();
559       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
560       AddStep<ci::security::StepRollbackInstallationSecurity>();
561       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
562       AddStep<wgt::filesystem::StepWgtPatchIcons>();
563       AddStep<wgt::pkgmgr::StepGenerateXml>();
564       AddStep<ci::pkgmgr::StepRegisterApplication>();
565       AddStep<ci::security::StepRegisterTrustAnchor>(
566           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
567       AddStep<ci::security::StepPrivacyPrivilege>(
568           ci::security::StepPrivacyPrivilege::ActionType::Install);
569       AddStep<ci::security::StepRegisterSecurity>();
570       AddStep<ci::pkgmgr::StepRunParserPlugin>(ci::Plugin::ActionType::Install);
571       AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>(
572           wgt::filesystem::WgtAdditionalSharedDirs);
573       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
574       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
575   }
576
577   void WgtInstaller::ManifestDirectUpdateSteps() {
578       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
579       AddStep<wgt::configuration::StepParse>(
580           wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
581       AddStep<ci::configuration::StepParsePreload>();
582       AddStep<ci::configuration::StepCheckTizenVersion>();
583       AddStep<wgt::security::StepDirectManifestCheckSignature>();
584       AddStep<ci::security::StepSaveSignature>();
585       AddStep<ci::security::StepPrivilegeCompatibility>(
586           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
587       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
588       AddStep<wgt::security::StepCheckWgtImePrivilege>();
589       AddStep<wgt::security::StepCheckSettingsLevel>();
590       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
591       AddStep<ci::configuration::StepParseManifest>(
592           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
593           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
594       AddStep<ci::pkgmgr::StepKillApps>();
595       AddStep<ci::filesystem::StepCopyTep>();
596       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
597       AddStep<wgt::filesystem::StepWgtPatchIcons>();
598       AddStep<wgt::pkgmgr::StepGenerateXml>();
599       AddStep<ci::pkgmgr::StepUpdateApplication>();
600       AddStep<ci::security::StepRegisterTrustAnchor>(
601           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
602       AddStep<ci::security::StepPrivacyPrivilege>(
603           ci::security::StepPrivacyPrivilege::ActionType::Update);
604       AddStep<ci::security::StepUpdateSecurity>();
605       AddStep<ci::pkgmgr::StepRunParserPlugin>(
606           ci::Plugin::ActionType::Upgrade);
607       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
608       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
609       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
610   }
611
612   void WgtInstaller::ReadonlyUpdateInstallSteps() {
613       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
614       AddStep<ci::filesystem::StepUnzip>();
615       AddStep<wgt::configuration::StepParse>(
616           wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
617       AddStep<ci::configuration::StepParsePreload>();
618       AddStep<ci::configuration::StepCheckTizenVersion>();
619       AddStep<ci::security::StepCheckSignature>();
620       AddStep<ci::security::StepPrivilegeCompatibility>(
621           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
622       AddStep<wgt::security::StepCheckSettingsLevel>();
623       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
624       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
625       AddStep<wgt::security::StepCheckWgtImePrivilege>();
626       AddStep<ci::security::StepCheckOldCertificate>();
627       AddStep<wgt::encryption::StepEncryptResources>();
628       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
629       AddStep<ci::security::StepRollbackInstallationSecurity>();
630       AddStep<ci::configuration::StepSwitchReadonlyMode>();
631       AddStep<ci::configuration::StepParseManifest>(
632           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
633           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
634       AddStep<ci::configuration::StepSwitchReadonlyMode>();
635       AddStep<ci::configuration::StepBlockCrossUpdate>();
636       AddStep<ci::pkgmgr::StepKillApps>();
637       AddStep<ci::filesystem::StepCopy>();
638       AddStep<ci::filesystem::StepCopyTep>();
639       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
640       AddStep<ci::filesystem::StepCreateStorageDirectories>();
641       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
642       AddStep<wgt::filesystem::StepWgtPatchIcons>();
643       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
644       AddStep<wgt::security::StepCheckExtensionPrivileges>();
645       AddStep<wgt::pkgmgr::StepGenerateXml>();
646       AddStep<ci::pkgmgr::StepUpdateApplication>();
647       AddStep<ci::security::StepRegisterTrustAnchor>(
648           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
649       AddStep<ci::security::StepPrivacyPrivilege>(
650           ci::security::StepPrivacyPrivilege::ActionType::Update);
651       AddStep<ci::security::StepUpdateSecurity>();
652       AddStep<ci::pkgmgr::StepRunParserPlugin>(ci::Plugin::ActionType::Upgrade);
653       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
654       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
655   }
656
657   void WgtInstaller::ReadonlyUpdateUninstallSteps() {
658       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
659       AddStep<ci::pkgmgr::StepCheckRestriction>();
660       AddStep<ci::pkgmgr::StepCheckRemovable>();
661       AddStep<ci::configuration::StepParseManifest>(
662           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
663           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
664       AddStep<ci::configuration::StepSwitchReadonlyMode>();
665       AddStep<ci::configuration::StepParseManifest>(
666           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
667           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
668       AddStep<ci::configuration::StepParsePreload>();
669       AddStep<wgt::configuration::StepSetOldSignatureFilesLocation>();
670       AddStep<ci::security::StepCheckSignature>();
671       AddStep<ci::security::StepSaveSignature>();
672       AddStep<ci::security::StepPrivilegeCompatibility>(
673           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
674       AddStep<ci::configuration::StepSwitchReadonlyMode>();
675       AddStep<ci::pkgmgr::StepKillApps>();
676       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
677       AddStep<ci::filesystem::StepRemoveTep>();
678       AddStep<ci::filesystem::StepRemoveFiles>();
679       AddStep<ci::filesystem::StepRemoveZipImage>();
680       AddStep<ci::pkgmgr::StepUpdateApplication>();
681       AddStep<ci::configuration::StepSwitchReadonlyMode>();
682       AddStep<ci::security::StepRevokeTrustAnchor>();
683       AddStep<ci::security::StepRegisterTrustAnchor>(
684           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
685       AddStep<ci::security::StepPrivacyPrivilege>(
686           ci::security::StepPrivacyPrivilege::ActionType::Update);
687       AddStep<ci::security::StepUpdateSecurity>();
688       AddStep<ci::pkgmgr::StepRemoveManifest>();
689       AddStep<ci::pkgmgr::StepRunParserPlugin>(ci::Plugin::ActionType::Upgrade);
690   }
691
692   void WgtInstaller::ManifestPartialInstallSteps() {
693       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
694       AddStep<wgt::configuration::StepParse>(
695           wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
696       AddStep<ci::configuration::StepParsePreload>();
697       AddStep<ci::security::StepCheckSignature>();
698       AddStep<ci::security::StepSaveSignature>();
699       AddStep<ci::security::StepPrivilegeCompatibility>(
700           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
701       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
702       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
703       AddStep<ci::pkgmgr::StepRegisterApplication>();
704       AddStep<ci::security::StepRegisterTrustAnchor>(
705           ci::security::StepRegisterTrustAnchor::RegisterType::INSTALL);
706       AddStep<ci::security::StepPrivacyPrivilege>(
707           ci::security::StepPrivacyPrivilege::ActionType::Install);
708       AddStep<ci::security::StepRegisterSecurity>();
709       AddStep<ci::pkgmgr::StepRunParserPlugin>(ci::Plugin::ActionType::Install);
710       AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>(
711           wgt::filesystem::WgtAdditionalSharedDirs);
712       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
713   }
714
715   void WgtInstaller::ManifestPartialUpdateSteps() {
716       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
717       AddStep<wgt::configuration::StepParse>(
718           wgt::configuration::StepParse::ConfigLocation::INSTALLED, true);
719       AddStep<ci::configuration::StepParsePreload>();
720       AddStep<ci::configuration::StepParseManifest>(
721           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
722           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
723       AddStep<ci::security::StepCheckSignature>();
724       AddStep<ci::security::StepSaveSignature>();
725       AddStep<ci::security::StepPrivilegeCompatibility>(
726           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
727       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
728       AddStep<ci::pkgmgr::StepKillApps>();
729       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
730       AddStep<ci::pkgmgr::StepUpdateApplication>();
731       AddStep<ci::security::StepRegisterTrustAnchor>(
732           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
733       AddStep<ci::security::StepPrivacyPrivilege>(
734           ci::security::StepPrivacyPrivilege::ActionType::Update);
735       AddStep<ci::security::StepUpdateSecurity>();
736       AddStep<ci::pkgmgr::StepRunParserPlugin>(
737           ci::Plugin::ActionType::Upgrade);
738       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
739       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
740   }
741
742   void WgtInstaller::ManifestPartialUninstallSteps() {
743       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
744       AddStep<ci::pkgmgr::StepCheckRestriction>();
745       AddStep<ci::pkgmgr::StepCheckRemovable>();
746       AddStep<ci::pkgmgr::StepCheckForceClean>();
747       AddStep<ci::configuration::StepParseManifest>(
748           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
749           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
750       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
751       AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
752       AddStep<ci::pkgmgr::StepRunParserPlugin>(
753           ci::Plugin::ActionType::Uninstall);
754       AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>();
755       AddStep<ci::pkgmgr::StepUnregisterApplication>();
756       AddStep<wgt::encryption::StepRemoveEncryptionData>();
757       AddStep<ci::security::StepUnregisterTrustAnchor>();
758       AddStep<ci::security::StepPrivacyPrivilege>(
759           ci::security::StepPrivacyPrivilege::ActionType::Uninstall);
760       AddStep<ci::security::StepRevokeSecurity>();
761   }
762
763   void WgtInstaller::MoveSteps() {
764       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
765       AddStep<ci::configuration::StepParseManifest>(
766           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
767           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
768       AddStep<ci::configuration::StepCheckInstallLocation>();
769       AddStep<ci::pkgmgr::StepKillApps>();
770       AddStep<ci::filesystem::StepMoveInstalledStorage>();
771       AddStep<ci::security::StepRegisterSecurity>();
772   }
773
774   void WgtInstaller::EnablePkgSteps() {
775       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
776       AddStep<ci::configuration::StepParseManifest>(
777           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
778           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
779       AddStep<ci::pkgmgr::StepKillApps>();
780       AddStep<ci::pkgmgr::StepUpdatePkgDisableInfo>(
781         ci::pkgmgr::StepUpdatePkgDisableInfo::ActionType::Enable);
782       AddStep<ci::pkgmgr::StepRunParserPlugin>(
783         ci::Plugin::ActionType::Uninstall);
784   }
785
786   void WgtInstaller::DisablePkgSteps() {
787       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
788       AddStep<ci::configuration::StepParseManifest>(
789           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
790           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
791       AddStep<ci::pkgmgr::StepKillApps>();
792       AddStep<ci::pkgmgr::StepUpdatePkgDisableInfo>(
793         ci::pkgmgr::StepUpdatePkgDisableInfo::ActionType::Disable);
794       AddStep<ci::pkgmgr::StepRunParserPlugin>(
795         ci::Plugin::ActionType::Uninstall);
796   }
797
798   void WgtInstaller::MigrateExtImgSteps() {
799       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
800       AddStep<ci::security::StepMigrateLegacyExtImage>();
801       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
802   }
803
804   void WgtInstaller::DefaultSteps() {
805       AddStep<ci::configuration::StepFail>();
806   }
807
808 }  // namespace wgt