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