40a63f7457cf1e58e79ee0ca796c3d26901d7365
[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_wgt_patch_icons.h"
102 #include "wgt/step/filesystem/step_wgt_patch_storage_directories.h"
103 #include "wgt/step/filesystem/step_wgt_prepare_package_directory.h"
104 #include "wgt/step/filesystem/step_wgt_resource_directory.h"
105 #include "wgt/step/filesystem/step_wgt_undo_patch_storage_directories.h"
106 #include "wgt/step/filesystem/step_wgt_update_package_directory.h"
107 #include "wgt/step/pkgmgr/step_generate_xml.h"
108 #include "wgt/step/security/step_add_default_privileges.h"
109 #include "wgt/step/security/step_check_settings_level.h"
110 #include "wgt/step/security/step_check_wgt_background_category.h"
111 #include "wgt/step/security/step_check_wgt_notification_category.h"
112 #include "wgt/step/security/step_check_wgt_ime_privilege.h"
113 #include "wgt/step/security/step_direct_manifest_check_signature.h"
114 #include "wgt/step/security/step_check_extension_privileges.h"
115 #include "wgt/step/security/step_wgt_recover_signature.h"
116
117 namespace ci = common_installer;
118
119 namespace wgt {
120
121 WgtInstaller::WgtInstaller(ci::PkgMgrPtr pkgrmgr)
122     : AppInstaller("wgt", pkgrmgr) {
123   context_->backend_data.set(new WgtBackendData());
124
125   /* treat the request */
126   switch (pkgmgr_->GetRequestType()) {
127     case ci::RequestType::Install : {
128       InstallSteps();
129       break;
130     }
131     case ci::RequestType::Update: {
132       UpdateSteps();
133       break;
134     }
135     case ci::RequestType::Uninstall: {
136       UninstallSteps();
137       break;
138     }
139     case ci::RequestType::Reinstall: {
140       ReinstallSteps();
141       break;
142     }
143     case ci::RequestType::Delta: {
144       DeltaSteps();
145       break;
146     }
147     case ci::RequestType::Recovery: {
148       RecoverySteps();
149       break;
150     }
151     case ci::RequestType::MountInstall: {
152       MountInstallSteps();
153       break;
154     }
155     case ci::RequestType::MountUpdate: {
156       MountUpdateSteps();
157       break;
158     }
159     case ci::RequestType::ManifestDirectInstall: {
160       ManifestDirectInstallSteps();
161       break;
162     }
163     case ci::RequestType::ManifestDirectUpdate: {
164       ManifestDirectUpdateSteps();
165       break;
166     }
167     case ci::RequestType::ReadonlyUpdateInstall: {
168       ReadonlyUpdateInstallSteps();
169       break;
170     }
171     case ci::RequestType::ReadonlyUpdateUninstall: {
172       ReadonlyUpdateUninstallSteps();
173       break;
174     }
175     case ci::RequestType::ManifestPartialInstall: {
176       ManifestPartialInstallSteps();
177       break;
178     }
179     case ci::RequestType::ManifestPartialUpdate: {
180       ManifestPartialUpdateSteps();
181       break;
182     }
183     case ci::RequestType::PartialUninstall: {
184       ManifestPartialUninstallSteps();
185       break;
186     }
187     case ci::RequestType::Move: {
188       MoveSteps();
189       break;
190     }
191     case ci::RequestType::EnablePkg: {
192       EnablePkgSteps();
193       break;
194     }
195     case ci::RequestType::DisablePkg: {
196       DisablePkgSteps();
197       break;
198     }
199     case ci::RequestType::MigrateExtImg: {
200       MigrateExtImgSteps();
201       break;
202     }
203     default: {
204       DefaultSteps();
205     }
206   }
207 }
208   void WgtInstaller::InstallSteps() {
209       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
210       AddStep<ci::filesystem::StepUnzip>();
211       AddStep<wgt::configuration::StepParse>(
212         wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
213       AddStep<ci::configuration::StepCheckInstallLocation>();
214       AddStep<ci::pkgmgr::StepCheckInstallable>();
215       AddStep<ci::configuration::StepParsePreload>();
216       AddStep<ci::pkgmgr::StepCheckRestriction>();
217       AddStep<ci::configuration::StepCheckTizenVersion>();
218       AddStep<ci::security::StepCheckSignature>();
219       AddStep<ci::security::StepSaveSignature>();
220       AddStep<ci::security::StepPrivilegeCompatibility>(
221           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
222       AddStep<wgt::security::StepCheckSettingsLevel>();
223       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
224       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
225       AddStep<wgt::security::StepCheckWgtImePrivilege>();
226       AddStep<wgt::encryption::StepEncryptResources>();
227       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
228       AddStep<ci::security::StepRollbackInstallationSecurity>();
229       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
230       AddStep<ci::filesystem::StepAcquireExternalStorage>(false);
231       AddStep<ci::filesystem::StepCopy>();
232       AddStep<ci::filesystem::StepCopyTep>();
233       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
234       AddStep<ci::filesystem::StepCreateStorageDirectories>();
235       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
236       AddStep<wgt::filesystem::StepWgtPatchIcons>();
237       AddStep<ci::filesystem::StepCreateIcons>();
238       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
239       AddStep<wgt::security::StepCheckExtensionPrivileges>();
240       AddStep<wgt::pkgmgr::StepGenerateXml>();
241       AddStep<ci::pkgmgr::StepRegisterApplication>();
242       AddStep<ci::security::StepRegisterTrustAnchor>(
243           ci::security::StepRegisterTrustAnchor::RegisterType::INSTALL);
244       AddStep<ci::security::StepPrivacyPrivilege>(
245           ci::security::StepPrivacyPrivilege::ActionType::Install);
246       AddStep<ci::security::StepRegisterSecurity>();
247       AddStep<ci::pkgmgr::StepRunParserPlugin>(
248           ci::Plugin::ActionType::Install);
249       AddStep<ci::filesystem::StepCreatePerUserStorageDirectories>(
250           wgt::filesystem::WgtAdditionalSharedDirs);
251       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
252       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
253   }
254
255   void WgtInstaller::UpdateSteps() {
256       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
257       AddStep<ci::filesystem::StepUnzip>();
258       AddStep<wgt::configuration::StepParse>(
259           wgt::configuration::StepParse::ConfigLocation::PACKAGE, true);
260       AddStep<ci::configuration::StepCheckInstallLocation>();
261       AddStep<ci::configuration::StepParsePreload>();
262       AddStep<ci::configuration::StepCheckTizenVersion>();
263       AddStep<ci::security::StepCheckSignature>();
264       AddStep<ci::security::StepSaveSignature>();
265       AddStep<ci::security::StepPrivilegeCompatibility>(
266           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
267       AddStep<wgt::security::StepCheckSettingsLevel>();
268       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
269       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
270       AddStep<wgt::security::StepCheckWgtImePrivilege>();
271       AddStep<ci::security::StepCheckOldCertificate>();
272       AddStep<wgt::encryption::StepEncryptResources>();
273       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
274       AddStep<ci::configuration::StepParseManifest>(
275           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
276           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
277       AddStep<ci::configuration::StepBlockCrossUpdate>();
278       AddStep<ci::pkgmgr::StepKillApps>();
279       AddStep<ci::backup::StepBackupManifest>();
280       AddStep<ci::backup::StepBackupIcons>();
281       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
282       AddStep<ci::filesystem::StepAcquireExternalStorage>(true);
283       AddStep<ci::security::StepRevokeTrustAnchor>();
284       AddStep<ci::backup::StepCopyBackup>();
285       AddStep<ci::filesystem::StepUpdateTep>();
286       AddStep<ci::filesystem::StepUpdateStorageDirectories>();
287       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
288       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
289       AddStep<wgt::filesystem::StepWgtPatchIcons>();
290       AddStep<ci::filesystem::StepCreateIcons>();
291       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
292       AddStep<ci::filesystem::StepCopyStorageDirectories>();
293       AddStep<wgt::security::StepCheckExtensionPrivileges>();
294       AddStep<wgt::pkgmgr::StepGenerateXml>();
295       AddStep<ci::pkgmgr::StepUpdateApplication>();
296       AddStep<ci::security::StepRegisterTrustAnchor>(
297           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
298       AddStep<ci::security::StepPrivacyPrivilege>(
299           ci::security::StepPrivacyPrivilege::ActionType::Update);
300       AddStep<ci::security::StepUpdateSecurity>();
301       AddStep<ci::pkgmgr::StepRunParserPlugin>(
302           ci::Plugin::ActionType::Upgrade);
303       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
304       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
305       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
306   }
307
308   void WgtInstaller::UninstallSteps() {
309       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
310       AddStep<ci::pkgmgr::StepCheckRestriction>();
311       AddStep<ci::pkgmgr::StepCheckRemovable>();
312       AddStep<ci::pkgmgr::StepCheckForceClean>();
313       AddStep<ci::configuration::StepParseManifest>(
314           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
315           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
316       AddStep<ci::configuration::StepCheckInstallLocation>();
317       AddStep<ci::pkgmgr::StepKillApps>();
318       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
319       AddStep<ci::filesystem::StepOptionalAcquireExternalStorage>();
320       AddStep<ci::pkgmgr::StepRunParserPlugin>(
321           ci::Plugin::ActionType::Uninstall);
322       AddStep<ci::filesystem::StepRemovePerUserStorageDirectories>(
323           wgt::filesystem::WgtAdditionalSharedDirs);
324       AddStep<ci::pkgmgr::StepUnregisterApplication>();
325       AddStep<ci::filesystem::StepRemoveTep>();
326       AddStep<ci::filesystem::StepRemoveFiles>();
327       AddStep<ci::filesystem::StepRemoveZipImage>();
328       AddStep<ci::filesystem::StepRemoveIcons>();
329       AddStep<wgt::encryption::StepRemoveEncryptionData>();
330       AddStep<ci::security::StepUnregisterTrustAnchor>();
331       AddStep<ci::security::StepPrivacyPrivilege>(
332           ci::security::StepPrivacyPrivilege::ActionType::Uninstall);
333       AddStep<ci::security::StepRevokeSecurity>();
334       AddStep<ci::pkgmgr::StepRemoveManifest>();
335       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
336   }
337
338   void WgtInstaller::ReinstallSteps() {
339       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
340       AddStep<wgt::configuration::StepCheckRDSManifest>();
341       AddStep<wgt::configuration::StepParse>(
342           wgt::configuration::StepParse::ConfigLocation::RESOURCE_WGT, false);
343       AddStep<ci::configuration::StepCheckInstallLocation>();
344       AddStep<ci::configuration::StepParsePreload>();
345       AddStep<ci::pkgmgr::StepCheckRestriction>();
346       AddStep<ci::configuration::StepCheckTizenVersion>();
347       AddStep<ci::pkgmgr::StepKillApps>();
348       AddStep<ci::configuration::StepParseManifest>(
349           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
350           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
351       AddStep<ci::configuration::StepBlockCrossUpdate>();
352       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
353       AddStep<ci::security::StepRevokeTrustAnchor>();
354       AddStep<ci::rds::StepRDSParse>();
355       AddStep<ci::filesystem::StepUpdateTep>();
356       AddStep<ci::rds::StepRDSModify>();
357       AddStep<wgt::security::StepCheckExtensionPrivileges>();
358       AddStep<ci::security::StepRegisterTrustAnchor>(
359           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
360       AddStep<ci::security::StepPrivacyPrivilege>(
361           ci::security::StepPrivacyPrivilege::ActionType::Update);
362       AddStep<ci::security::StepUpdateSecurity>();
363       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
364       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
365   }
366
367   void WgtInstaller::DeltaSteps() {
368       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
369       AddStep<ci::filesystem::StepUnzip>();
370       AddStep<wgt::configuration::StepParse>(
371             wgt::configuration::StepParse::ConfigLocation::PACKAGE, false);
372       AddStep<ci::configuration::StepCheckInstallLocation>();
373       AddStep<ci::configuration::StepParseManifest>(
374           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
375           ci::configuration::StepParseManifest::StoreLocation::BACKUP);
376       AddStep<ci::configuration::StepParsePreload>();
377       AddStep<ci::configuration::StepCheckTizenVersion>();
378       AddStep<ci::filesystem::StepEnableExternalMount>();
379       AddStep<wgt::filesystem::StepWgtUndoPatchStorageDirectories>();
380       AddStep<ci::filesystem::StepDeltaPatch>("res/wgt/");
381       AddStep<ci::filesystem::StepDisableExternalMount>();
382       AddStep<wgt::configuration::StepCheckStartFiles>();
383       AddStep<ci::security::StepCheckSignature>();
384       AddStep<ci::security::StepSaveSignature>();
385       AddStep<ci::security::StepPrivilegeCompatibility>(
386           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
387       AddStep<wgt::security::StepCheckSettingsLevel>();
388       AddStep<wgt::security::StepCheckWgtBackgroundCategory>();
389       AddStep<wgt::security::StepCheckWgtNotificationCategory>();
390       AddStep<wgt::security::StepCheckWgtImePrivilege>();
391       AddStep<ci::security::StepCheckOldCertificate>();
392       AddStep<wgt::encryption::StepEncryptResources>();
393       AddStep<wgt::filesystem::StepWgtResourceDirectory>();
394       AddStep<ci::configuration::StepBlockCrossUpdate>();
395       AddStep<ci::pkgmgr::StepKillApps>();
396       AddStep<ci::backup::StepBackupManifest>();
397       AddStep<ci::backup::StepBackupIcons>();
398       AddStep<ci::filesystem::StepRemoveGlobalAppSymlinks>();
399       AddStep<ci::filesystem::StepAcquireExternalStorage>(true);
400       AddStep<ci::security::StepRevokeTrustAnchor>();
401       AddStep<ci::backup::StepCopyBackup>();
402       AddStep<ci::filesystem::StepUpdateTep>();
403       AddStep<ci::filesystem::StepUpdateStorageDirectories>();
404       AddStep<wgt::filesystem::StepWgtPatchStorageDirectories>();
405       AddStep<wgt::filesystem::StepCreateSymbolicLink>();
406       AddStep<wgt::filesystem::StepWgtPatchIcons>();
407       AddStep<ci::filesystem::StepCreateIcons>();
408       AddStep<wgt::filesystem::StepCopyPreviewIcons>();
409       AddStep<ci::filesystem::StepCopyStorageDirectories>();
410       AddStep<wgt::security::StepCheckExtensionPrivileges>();
411       AddStep<wgt::pkgmgr::StepGenerateXml>();
412       AddStep<ci::pkgmgr::StepUpdateApplication>();
413       AddStep<ci::security::StepRegisterTrustAnchor>(
414           ci::security::StepRegisterTrustAnchor::RegisterType::UPDATE);
415       AddStep<ci::security::StepPrivacyPrivilege>(
416           ci::security::StepPrivacyPrivilege::ActionType::Update);
417       AddStep<ci::security::StepUpdateSecurity>();
418       AddStep<ci::pkgmgr::StepRunParserPlugin>(
419           ci::Plugin::ActionType::Upgrade);
420       AddStep<ci::filesystem::StepUpdatePerUserStorageDirectories>();
421       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
422       AddStep<ci::filesystem::StepCreateGlobalAppSymlinks>();
423   }
424
425   void WgtInstaller::RecoverySteps() {
426       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
427       AddStep<ci::recovery::StepOpenRecoveryFile>();
428       AddStep<ci::filesystem::StepRemoveTemporaryDirectory>();
429       AddStep<ci::configuration::StepParseManifest>(
430           ci::configuration::StepParseManifest::ManifestLocation::RECOVERY,
431           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
432       AddStep<ci::filesystem::StepRecoverIcons>();
433       AddStep<ci::filesystem::StepRecoverManifest>();
434       AddStep<ci::filesystem::StepRecoverExternalStorage>();
435       AddStep<ci::filesystem::StepRecoverStorageDirectories>();
436       AddStep<ci::filesystem::StepRecoverPerUserStorageDirectories>();
437       AddStep<ci::filesystem::StepRecoverGlobalAppSymlinks>();
438       AddStep<ci::filesystem::StepRecoverFiles>();
439       AddStep<ci::mount::StepMountRecover>();
440       AddStep<wgt::security::StepWgtRecoverSignature>();
441       AddStep<ci::security::StepRecoverPrivilegeCompatibility>(
442           ci::security::StepPrivilegeCompatibility::InternalPrivType::WGT);
443       AddStep<ci::filesystem::StepRecoverChangeOwner>();
444       AddStep<ci::security::StepRecoverSecurity>();
445       AddStep<ci::pkgmgr::StepRecoverApplication>();
446       AddStep<ci::security::StepRecoverTrustAnchor>();
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           wgt::filesystem::WgtAdditionalSharedDirs);
756       AddStep<ci::pkgmgr::StepUnregisterApplication>();
757       AddStep<wgt::encryption::StepRemoveEncryptionData>();
758       AddStep<ci::security::StepUnregisterTrustAnchor>();
759       AddStep<ci::security::StepPrivacyPrivilege>(
760           ci::security::StepPrivacyPrivilege::ActionType::Uninstall);
761       AddStep<ci::security::StepRevokeSecurity>();
762   }
763
764   void WgtInstaller::MoveSteps() {
765       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
766       AddStep<ci::configuration::StepParseManifest>(
767           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
768           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
769       AddStep<ci::configuration::StepCheckInstallLocation>();
770       AddStep<ci::pkgmgr::StepKillApps>();
771       AddStep<ci::filesystem::StepMoveInstalledStorage>();
772       AddStep<ci::security::StepRegisterSecurity>();
773   }
774
775   void WgtInstaller::EnablePkgSteps() {
776       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
777       AddStep<ci::configuration::StepParseManifest>(
778           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
779           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
780       AddStep<ci::pkgmgr::StepKillApps>();
781       AddStep<ci::pkgmgr::StepUpdatePkgDisableInfo>(
782         ci::pkgmgr::StepUpdatePkgDisableInfo::ActionType::Enable);
783       AddStep<ci::pkgmgr::StepRunParserPlugin>(
784         ci::Plugin::ActionType::Uninstall);
785   }
786
787   void WgtInstaller::DisablePkgSteps() {
788       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
789       AddStep<ci::configuration::StepParseManifest>(
790           ci::configuration::StepParseManifest::ManifestLocation::INSTALLED,
791           ci::configuration::StepParseManifest::StoreLocation::NORMAL);
792       AddStep<ci::pkgmgr::StepKillApps>();
793       AddStep<ci::pkgmgr::StepUpdatePkgDisableInfo>(
794         ci::pkgmgr::StepUpdatePkgDisableInfo::ActionType::Disable);
795       AddStep<ci::pkgmgr::StepRunParserPlugin>(
796         ci::Plugin::ActionType::Uninstall);
797   }
798
799   void WgtInstaller::MigrateExtImgSteps() {
800       AddStep<ci::configuration::StepConfigure>(pkgmgr_);
801       AddStep<ci::security::StepMigrateLegacyExtImage>();
802       AddStep<ci::filesystem::StepChangeOwnershipAndPermission>();
803   }
804
805   void WgtInstaller::DefaultSteps() {
806       AddStep<ci::configuration::StepFail>();
807   }
808
809 }  // namespace wgt