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