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