@openui5/sap.ui.fl 1.123.1 → 1.124.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/package.json +3 -3
  2. package/src/sap/ui/fl/.library +1 -1
  3. package/src/sap/ui/fl/ChangePersistence.js +39 -48
  4. package/src/sap/ui/fl/ChangePersistenceFactory.js +1 -1
  5. package/src/sap/ui/fl/FakeLrepConnectorLocalStorage.js +1 -1
  6. package/src/sap/ui/fl/FakeLrepConnectorSessionStorage.js +1 -1
  7. package/src/sap/ui/fl/FakeLrepLocalStorage.js +1 -1
  8. package/src/sap/ui/fl/FlexController.js +3 -34
  9. package/src/sap/ui/fl/FlexControllerFactory.js +1 -1
  10. package/src/sap/ui/fl/LayerUtils.js +1 -1
  11. package/src/sap/ui/fl/Utils.js +1 -1
  12. package/src/sap/ui/fl/apply/_internal/DelegateMediator.js +113 -270
  13. package/src/sap/ui/fl/apply/_internal/appVariant/DescriptorChangeTypes.js +2 -1
  14. package/src/sap/ui/fl/apply/_internal/changes/Applier.js +36 -3
  15. package/src/sap/ui/fl/apply/_internal/changes/FlexCustomData.js +1 -1
  16. package/src/sap/ui/fl/apply/_internal/changes/Utils.js +1 -1
  17. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Preprocessor.js +1 -1
  18. package/src/sap/ui/fl/apply/_internal/changes/descriptor/Registration.js +1 -1
  19. package/src/sap/ui/fl/apply/_internal/changes/descriptor/RegistrationBuild.js +1 -1
  20. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddAnnotationsToOData.js +1 -1
  21. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/AddNewInbound.js +1 -1
  22. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeDataSource.js +1 -1
  23. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/ChangeInbound.js +1 -1
  24. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/RemoveAllInboundsExceptOne.js +1 -1
  25. package/src/sap/ui/fl/apply/_internal/changes/descriptor/app/SetTitle.js +1 -1
  26. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetAbstract.js +1 -1
  27. package/src/sap/ui/fl/apply/_internal/changes/descriptor/fiori/SetRegistrationIds.js +1 -1
  28. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/AddNewCard.js +1 -1
  29. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/ChangeCard.js +1 -1
  30. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ovp/DeleteCard.js +1 -1
  31. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddComponentUsages.js +1 -1
  32. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddLibrary.js +1 -1
  33. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModel.js +1 -1
  34. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/AddNewModelEnhanceWith.js +1 -1
  35. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetFlexExtensionPointEnabled.js +1 -1
  36. package/src/sap/ui/fl/apply/_internal/changes/descriptor/ui5/SetMinUI5Version.js +49 -5
  37. package/src/sap/ui/fl/apply/_internal/connectors/ObjectStorageUtils.js +1 -1
  38. package/src/sap/ui/fl/apply/_internal/controlVariants/URLHandler.js +28 -27
  39. package/src/sap/ui/fl/apply/_internal/extensionPoint/Processor.js +1 -1
  40. package/src/sap/ui/fl/apply/_internal/extensionPoint/Registry.js +1 -1
  41. package/src/sap/ui/fl/apply/_internal/flexObjects/AppDescriptorChange.js +1 -1
  42. package/src/sap/ui/fl/apply/_internal/flexObjects/CompVariant.js +1 -1
  43. package/src/sap/ui/fl/apply/_internal/flexObjects/ControllerExtensionChange.js +1 -1
  44. package/src/sap/ui/fl/apply/_internal/flexObjects/FlVariant.js +1 -1
  45. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObject.js +1 -1
  46. package/src/sap/ui/fl/apply/_internal/flexObjects/FlexObjectFactory.js +1 -1
  47. package/src/sap/ui/fl/apply/_internal/flexObjects/UIChange.js +1 -1
  48. package/src/sap/ui/fl/apply/_internal/flexObjects/Variant.js +1 -1
  49. package/src/sap/ui/fl/apply/_internal/flexObjects/getVariantAuthor.js +1 -1
  50. package/src/sap/ui/fl/apply/_internal/flexState/FlexState.js +75 -41
  51. package/src/sap/ui/fl/apply/_internal/flexState/Loader.js +1 -1
  52. package/src/sap/ui/fl/apply/_internal/flexState/ManifestUtils.js +1 -1
  53. package/src/sap/ui/fl/apply/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  54. package/src/sap/ui/fl/apply/_internal/flexState/changes/DependencyHandler.js +30 -11
  55. package/src/sap/ui/fl/apply/_internal/flexState/changes/ExtensionPointState.js +67 -70
  56. package/src/sap/ui/fl/apply/_internal/flexState/changes/UIChangesState.js +14 -6
  57. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/CompVariantMerger.js +2 -2
  58. package/src/sap/ui/fl/apply/_internal/flexState/compVariants/Utils.js +4 -0
  59. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/Switcher.js +8 -7
  60. package/src/sap/ui/fl/apply/_internal/flexState/controlVariants/VariantManagementState.js +108 -41
  61. package/src/sap/ui/fl/apply/_internal/preprocessors/ControllerExtension.js +8 -15
  62. package/src/sap/ui/fl/apply/_internal/preprocessors/RegistrationDelegator.js +7 -12
  63. package/src/sap/ui/fl/apply/_internal/preprocessors/XmlPreprocessor.js +15 -19
  64. package/src/sap/ui/fl/apply/api/ControlVariantApplyAPI.js +1 -1
  65. package/src/sap/ui/fl/apply/api/DelegateMediatorAPI.js +13 -86
  66. package/src/sap/ui/fl/apply/api/FlexRuntimeInfoAPI.js +14 -11
  67. package/src/sap/ui/fl/changeHandler/AddIFrame.js +1 -1
  68. package/src/sap/ui/fl/changeHandler/AddXML.js +1 -1
  69. package/src/sap/ui/fl/changeHandler/AddXMLAtExtensionPoint.js +1 -1
  70. package/src/sap/ui/fl/changeHandler/Base.js +1 -1
  71. package/src/sap/ui/fl/changeHandler/BaseAddViaDelegate.js +14 -29
  72. package/src/sap/ui/fl/changeHandler/BaseAddXml.js +1 -1
  73. package/src/sap/ui/fl/changeHandler/BaseRename.js +1 -1
  74. package/src/sap/ui/fl/changeHandler/HideControl.js +1 -1
  75. package/src/sap/ui/fl/changeHandler/MoveControls.js +1 -1
  76. package/src/sap/ui/fl/changeHandler/MoveElements.js +1 -1
  77. package/src/sap/ui/fl/changeHandler/PropertyBindingChange.js +1 -1
  78. package/src/sap/ui/fl/changeHandler/PropertyChange.js +1 -1
  79. package/src/sap/ui/fl/changeHandler/StashControl.js +1 -1
  80. package/src/sap/ui/fl/changeHandler/UnhideControl.js +1 -1
  81. package/src/sap/ui/fl/changeHandler/UnstashControl.js +1 -1
  82. package/src/sap/ui/fl/changeHandler/UpdateIFrame.js +2 -2
  83. package/src/sap/ui/fl/changeHandler/common/createIFrame.js +5 -2
  84. package/src/sap/ui/fl/descriptorRelated/Utils.js +16 -7
  85. package/src/sap/ui/fl/descriptorRelated/api/DescriptorChangeFactory.js +4 -4
  86. package/src/sap/ui/fl/descriptorRelated/api/DescriptorInlineChangeFactory.js +1 -1
  87. package/src/sap/ui/fl/descriptorRelated/api/DescriptorVariantFactory.js +1 -1
  88. package/src/sap/ui/fl/designtime/util/IFrame.designtime.js +26 -0
  89. package/src/sap/ui/fl/designtime/util/editIFrame.js +8 -5
  90. package/src/sap/ui/fl/initial/_internal/FlexConfiguration.js +1 -1
  91. package/src/sap/ui/fl/initial/_internal/Storage.js +5 -2
  92. package/src/sap/ui/fl/initial/_internal/StorageFeaturesMerger.js +1 -1
  93. package/src/sap/ui/fl/initial/_internal/StorageUtils.js +1 -1
  94. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerRegistration.js +1 -1
  95. package/src/sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerStorage.js +1 -1
  96. package/src/sap/ui/fl/initial/_internal/connectors/KeyUserConnector.js +1 -1
  97. package/src/sap/ui/fl/initial/_internal/connectors/Utils.js +1 -1
  98. package/src/sap/ui/fl/initial/_internal/storageResultDisassemble.js +1 -1
  99. package/src/sap/ui/fl/interfaces/BaseLoadConnector.js +1 -1
  100. package/src/sap/ui/fl/interfaces/Delegate.js +1 -1
  101. package/src/sap/ui/fl/library.js +43 -43
  102. package/src/sap/ui/fl/messagebundle_sh.properties +9 -9
  103. package/src/sap/ui/fl/support/_internal/getAllUIChanges.js +1 -1
  104. package/src/sap/ui/fl/support/_internal/getChangeDependencies.js +1 -1
  105. package/src/sap/ui/fl/support/_internal/getFlexSettings.js +1 -1
  106. package/src/sap/ui/fl/support/api/SupportAPI.js +1 -1
  107. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetails.controller.js +1 -1
  108. package/src/sap/ui/fl/support/apps/contentbrowser/controller/ContentDetailsEdit.controller.js +1 -1
  109. package/src/sap/ui/fl/support/apps/contentbrowser/controller/LayerContentMaster.controller.js +1 -1
  110. package/src/sap/ui/fl/support/apps/contentbrowser/controller/Layers.controller.js +1 -1
  111. package/src/sap/ui/fl/support/apps/contentbrowser/lrepConnector/LRepConnector.js +1 -1
  112. package/src/sap/ui/fl/support/apps/contentbrowser/utils/DataUtils.js +1 -1
  113. package/src/sap/ui/fl/support/apps/contentbrowser/utils/ErrorUtils.js +1 -1
  114. package/src/sap/ui/fl/support/apps/contentbrowser/view/ContentDetails.view.xml +0 -1
  115. package/src/sap/ui/fl/support/apps/contentbrowser/view/ContentDetailsEdit.view.xml +0 -1
  116. package/src/sap/ui/fl/transport/TransportSelection.js +1 -1
  117. package/src/sap/ui/fl/util/IFrame.js +51 -64
  118. package/src/sap/ui/fl/util/IFrameRenderer.js +15 -9
  119. package/src/sap/ui/fl/util/ManagedObjectModel.js +1 -1
  120. package/src/sap/ui/fl/util/resolveBinding.js +1 -1
  121. package/src/sap/ui/fl/variants/VariantModel.js +5 -5
  122. package/src/sap/ui/fl/write/_internal/Storage.js +1 -1
  123. package/src/sap/ui/fl/write/_internal/Versions.js +1 -1
  124. package/src/sap/ui/fl/write/_internal/appVariant/AppVariant.js +1 -1
  125. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantFactory.js +1 -1
  126. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChange.js +1 -1
  127. package/src/sap/ui/fl/write/_internal/appVariant/AppVariantInlineChangeFactory.js +2 -2
  128. package/src/sap/ui/fl/write/_internal/condenser/Condenser.js +1 -1
  129. package/src/sap/ui/fl/write/_internal/condenser/UIReconstruction.js +1 -1
  130. package/src/sap/ui/fl/write/_internal/connectors/BackendConnector.js +1 -1
  131. package/src/sap/ui/fl/write/_internal/connectors/BtpServiceConnector.js +1 -1
  132. package/src/sap/ui/fl/write/_internal/connectors/KeyUserConnector.js +1 -1
  133. package/src/sap/ui/fl/write/_internal/connectors/LrepConnector.js +1 -1
  134. package/src/sap/ui/fl/write/_internal/connectors/NeoLrepConnector.js +1 -1
  135. package/src/sap/ui/fl/write/_internal/connectors/ObjectPathConnector.js +1 -1
  136. package/src/sap/ui/fl/write/_internal/connectors/PersonalizationConnector.js +1 -1
  137. package/src/sap/ui/fl/write/_internal/connectors/Utils.js +1 -1
  138. package/src/sap/ui/fl/write/_internal/delegates/ODataV2ReadDelegate.js +5 -5
  139. package/src/sap/ui/fl/write/_internal/extensionPoint/Processor.js +1 -1
  140. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPAccess.js +1 -1
  141. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariant.js +1 -1
  142. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ABAPExtensibilityVariantFactory.js +1 -1
  143. package/src/sap/ui/fl/write/_internal/fieldExtensibility/MultiTenantABAPExtensibilityVariant.js +1 -1
  144. package/src/sap/ui/fl/write/_internal/fieldExtensibility/ServiceValidation.js +1 -1
  145. package/src/sap/ui/fl/write/_internal/fieldExtensibility/SingleTenantABAPExtensibilityVariant.js +1 -1
  146. package/src/sap/ui/fl/write/_internal/fieldExtensibility/UriParser.js +1 -1
  147. package/src/sap/ui/fl/write/_internal/fieldExtensibility/Utils.js +12 -23
  148. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/CAPAccess.js +1 -1
  149. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/dialog/CustomFieldCAPDialog.js +1 -1
  150. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/booleanEditor/BooleanEditor.js +1 -1
  151. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/rangeEditor/RangeEditor.js +1 -1
  152. package/src/sap/ui/fl/write/_internal/fieldExtensibility/cap/editor/propertyEditor/timeEditor/TimeEditor.js +1 -1
  153. package/src/sap/ui/fl/write/_internal/flexState/FlexObjectState.js +63 -95
  154. package/src/sap/ui/fl/write/_internal/flexState/UI2Personalization/UI2PersonalizationState.js +1 -1
  155. package/src/sap/ui/fl/write/_internal/flexState/compVariants/CompVariantState.js +2 -1
  156. package/src/sap/ui/fl/write/_internal/transport/TransportSelection.js +1 -1
  157. package/src/sap/ui/fl/write/_internal/transport/Transports.js +1 -1
  158. package/src/sap/ui/fl/write/api/FieldExtensibility.js +1 -1
  159. package/src/sap/ui/fl/write/api/LocalResetAPI.js +9 -8
  160. package/src/sap/ui/fl/write/api/PersistenceWriteAPI.js +3 -7
  161. package/src/sap/ui/fl/write/api/SACIntegrationUpdateVariant.js +78 -0
  162. package/src/sap/ui/fl/write/api/connectors/ObjectStorageConnector.js +9 -1
  163. package/src/sap/ui/fl/apply/_internal/DelegateMediatorNew.js +0 -193
  164. package/src/sap/ui/fl/apply/_internal/flexState/appDescriptorChanges/prepareAppDescriptorMap.js +0 -39
@@ -6,23 +6,18 @@
6
6
 
7
7
  // Provides control sap.ui.fl.util.IFrame
8
8
  sap.ui.define([
9
- "../library",
10
9
  "sap/ui/core/Control",
11
10
  "sap/ui/model/json/JSONModel",
12
11
  "./getContainerUserInfo",
13
- "sap/base/util/extend",
14
- "sap/base/util/restricted/_CancelablePromise",
15
12
  "sap/base/security/URLListValidator",
16
13
  "sap/base/Log",
17
14
  "./IFrameRenderer",
15
+ "../library",
18
16
  "sap/ui/core/library"
19
17
  ], function(
20
- library,
21
18
  Control,
22
19
  JSONModel,
23
20
  getContainerUserInfo,
24
- extend,
25
- CancelablePromise,
26
21
  URLListValidator,
27
22
  Log,
28
23
  IFrameRenderer
@@ -53,7 +48,7 @@ sap.ui.define([
53
48
  * @extends sap.ui.core.Control
54
49
  *
55
50
  * @author SAP SE
56
- * @version 1.123.1
51
+ * @version 1.124.1
57
52
  *
58
53
  * @constructor
59
54
  * @private
@@ -95,11 +90,18 @@ sap.ui.define([
95
90
  renameInfo: {type: "object", group: "Data", defaultValue: null},
96
91
 
97
92
  /**
98
- * Define whether to set the URL by creating a new history entry (legacy) or replacing the current one.
93
+ * Contains the Iframe sandbox attributes
99
94
  */
100
- useLegacyNavigation: {
101
- type: "boolean",
102
- defaultValue: false
95
+ advancedSettings: {
96
+ type: "object",
97
+ defaultValue: {
98
+ allowForms: true,
99
+ allowPopups: true,
100
+ allowScripts: true,
101
+ allowModals: true,
102
+ allowSameOrigin: true,
103
+ additionalSandboxParameters: []
104
+ }
103
105
  },
104
106
 
105
107
  /**
@@ -108,7 +110,11 @@ sap.ui.define([
108
110
  * @private
109
111
  * @ui5-restricted sap.ui.fl
110
112
  */
111
- _settings: {type: "object", group: "Data", defaultValue: null}
113
+ _settings: {
114
+ type: "object",
115
+ group: "Data",
116
+ defaultValue: null
117
+ }
112
118
  },
113
119
 
114
120
  designtime: "sap/ui/fl/designtime/util/IFrame.designtime"
@@ -129,59 +135,26 @@ sap.ui.define([
129
135
  return this._oInitializePromise ? this._oInitializePromise : Promise.reject();
130
136
  },
131
137
 
132
- _setUrlLegacy(sEncodedUrl) {
133
- // Setting the url of the IFrame directly can lead to issues
134
- // if the change doesn't result in a reload of the embedded page
135
- // e.g. when a navigation parameter is changed
136
- // To avoid problems with the ushell and the embedded apps, it is safer
137
- // to unload the iframe content first and thus force a full browser reload
138
-
139
- if (this._oSetUrlPromise) {
140
- this._oSetUrlPromise.cancel();
141
- delete this._oSetUrlPromise;
142
- }
143
-
144
- this.setProperty("url", "");
145
-
146
- this._oSetUrlPromise = new CancelablePromise(function(fnResolve, fnReject, onCancel) {
147
- onCancel.shouldReject = false;
148
- // Use a timeout here to avoid issues with browser caching in Chrome
149
- // that seem to lead to a mismatch between IFrame content and src,
150
- // see Chromium issue 324102
151
- setTimeout(fnResolve, 0);
152
- });
153
-
154
- this._oSetUrlPromise.then(function() {
155
- delete this._oSetUrlPromise;
156
- this.setProperty("url", sEncodedUrl);
157
- }.bind(this));
158
- },
159
-
160
138
  setUrl(sUrl) {
161
139
  // Could contain special characters from bindings that need to be encoded
162
140
  // Make sure that it was not encoded before
163
141
  var sEncodedUrl = decodeURI(sUrl) === sUrl ? encodeURI(sUrl) : sUrl;
164
142
 
165
143
  if (IFrame.isValidUrl(sEncodedUrl).result) {
166
- if (this.getUseLegacyNavigation()) {
167
- // Set by pushing to the history
168
- this._setUrlLegacy(sEncodedUrl);
169
- } else {
170
- // Set by replacing the last entry
171
- const oNewUrl = IFrame._toUrl(sEncodedUrl);
172
- const oOldUrl = IFrame._toUrl(this.getUrl() || "about:blank");
173
- if (
174
- oOldUrl.origin === oNewUrl.origin
175
- && oOldUrl.pathname === oNewUrl.pathname
176
- && oOldUrl.search === oNewUrl.search
177
- && oOldUrl.hash !== oNewUrl.hash
178
- ) {
179
- // Only the hash changed, site is not going to reload automatically
180
- // Set an artificial frame buster search parameter to force a refresh
181
- oNewUrl.searchParams.append("sap-ui-xx-fl-forceEmbeddedContentRefresh", Date.now());
182
- }
183
- this.setProperty("url", oNewUrl.toString());
144
+ // Set by replacing the last entry
145
+ const oNewUrl = IFrame._toUrl(sEncodedUrl);
146
+ const oOldUrl = IFrame._toUrl(this.getUrl() || "about:blank");
147
+ if (
148
+ oOldUrl.origin === oNewUrl.origin
149
+ && oOldUrl.pathname === oNewUrl.pathname
150
+ && oOldUrl.search === oNewUrl.search
151
+ && oOldUrl.hash !== oNewUrl.hash
152
+ ) {
153
+ // Only the hash changed, site is not going to reload automatically
154
+ // Set an artificial frame buster search parameter to force a refresh
155
+ oNewUrl.searchParams.append("sap-ui-xx-fl-forceEmbeddedContentRefresh", Date.now());
184
156
  }
157
+ this.setProperty("url", oNewUrl.toString());
185
158
  } else {
186
159
  Log.error("Provided URL is not valid as an IFrame src");
187
160
  }
@@ -195,9 +168,23 @@ sap.ui.define([
195
168
  },
196
169
 
197
170
  onAfterRendering() {
198
- if (!this.getUseLegacyNavigation()) {
199
- this._replaceIframeLocation(this.getUrl());
200
- }
171
+ this._replaceIframeLocation(this.getUrl());
172
+
173
+ // The contentWindow might change without causing a rerender, e.g.
174
+ // when the parent element changes due to an appendChild call
175
+ // This will cause the iframe src to change and we need to replace the
176
+ // location again to ensure the correct content
177
+ this._oLastContentWindow = this.getDomRef().contentWindow;
178
+ this.getDomRef().addEventListener("load", () => {
179
+ if (!this.getDomRef()) {
180
+ // The iframe was removed before the load event was triggered
181
+ return;
182
+ }
183
+ if (this._oLastContentWindow !== this.getDomRef().contentWindow) {
184
+ this._oLastContentWindow = this.getDomRef().contentWindow;
185
+ this._replaceIframeLocation(this.getUrl());
186
+ }
187
+ });
201
188
  },
202
189
 
203
190
  applySettings(mSettings, ...aOtherArgs) {
@@ -205,9 +192,9 @@ sap.ui.define([
205
192
  Control.prototype.applySettings.apply(this, [mOtherSettings, ...aOtherArgs]);
206
193
  Control.prototype.applySettings.apply(this, [{ url }, ...aOtherArgs]);
207
194
  if (mSettings) {
208
- var mMergedSettings = this.getProperty("_settings") || {};
195
+ let mMergedSettings = {...this.getProperty("_settings") || {}};
209
196
  if (mSettings._settings) {
210
- extend(mMergedSettings, mSettings._settings);
197
+ mMergedSettings = {...mMergedSettings, ...mSettings._settings};
211
198
  } else {
212
199
  Object.keys(mSettings)
213
200
  .filter(function(sPropertyName) {
@@ -217,7 +204,7 @@ sap.ui.define([
217
204
  mMergedSettings[sPropertyName] = unbind(mSettings[sPropertyName]);
218
205
  });
219
206
  }
220
- this.setProperty("_settings", mMergedSettings);
207
+ this.setProperty("_settings", { ...mMergedSettings });
221
208
  }
222
209
  },
223
210
 
@@ -15,6 +15,13 @@ sap.ui.define([
15
15
  }
16
16
  }
17
17
 
18
+ function createsSandboxAttributesString(oAdvancedSettings) {
19
+ return Object.keys(oAdvancedSettings)
20
+ .filter((sKey) => oAdvancedSettings[sKey])
21
+ .map((sKey) => sKey.replace(/[A-Z]/g, "-$&").toLowerCase())
22
+ .join(" ");
23
+ }
24
+
18
25
  /**
19
26
  * IFrame renderer.
20
27
  * @namespace
@@ -39,15 +46,14 @@ sap.ui.define([
39
46
  oRm.style("display", "block");
40
47
  oRm.style("border", "none");
41
48
 
42
- oRm.attr("sandbox", "allow-forms allow-popups allow-scripts allow-same-origin allow-modals");
43
-
44
- if (oIFrame.getUseLegacyNavigation()) {
45
- oRm.attr("src", oIFrame.getUrl());
46
- } else {
47
- // With the new location.replace approach, the actual
48
- // target url will be set onAfterRendering
49
- oRm.attr("src", "about:blank");
50
- }
49
+ const oAdvancedSettings = oIFrame.getAdvancedSettings();
50
+ const { additionalSandboxParameters: aAdditionalSandboxParameters, ...oFilteredAdvancedSettings } = oAdvancedSettings;
51
+ const sAdditionalSandboxParameters = aAdditionalSandboxParameters?.join(" ");
52
+ const sSandboxAttributes = createsSandboxAttributesString(oFilteredAdvancedSettings);
53
+ const sCombinedSandboxAttributes = sAdditionalSandboxParameters ? `${sSandboxAttributes} ${sAdditionalSandboxParameters}` : sSandboxAttributes;
54
+ oRm.attr("sandbox", sCombinedSandboxAttributes);
55
+ // Always set the src to about:blank to avoid adding history entries when parameters are resolved
56
+ oRm.attr("src", "about:blank");
51
57
 
52
58
  var sTitle = oIFrame.getTitle();
53
59
  if (sTitle) {
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.core.Element
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.123.1
28
+ * @version 1.124.1
29
29
  *
30
30
  * @constructor
31
31
  * @private
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  *
35
35
  * @function
36
36
  * @author SAP SE
37
- * @version 1.123.1
37
+ * @version 1.124.1
38
38
  * @alias sap.ui.fl.util.resolveBinding
39
39
  * @since 1.91
40
40
  * @private
@@ -218,7 +218,7 @@ sap.ui.define([
218
218
  var oSettings = Settings.getInstanceOrUndef();
219
219
  var bUserIsAuthorized = oSettings &&
220
220
  (oSettings.isKeyUser() || !oSettings.getUserId() ||
221
- (oSettings.isPublicFlVariantEnabled() && oSettings.getUserId().toUpperCase() === oVariant.author.toUpperCase()));
221
+ (oSettings.isPublicFlVariantEnabled() && oSettings.getUserId().toUpperCase() === oVariant.instance.getSupportInformation().user.toUpperCase()));
222
222
  oVariant.remove = bUserIsAuthorized;
223
223
  oVariant.rename = bUserIsAuthorized;
224
224
  oVariant.change = bUserIsAuthorized;
@@ -253,14 +253,14 @@ sap.ui.define([
253
253
  Utils.getUShellService("UserInfo"),
254
254
  Utils.getUShellService("URLParsing"),
255
255
  Utils.getUShellService("Navigation"),
256
- Utils.getUShellService("ShellNavigation")
256
+ Utils.getUShellService("ShellNavigationInternal")
257
257
  ];
258
258
  return Promise.all(aServicePromises)
259
259
  .then(function(aServices) {
260
260
  setUShellService("UserInfo", aServices[0]);
261
261
  setUShellService("URLParsing", aServices[1]);
262
262
  setUShellService("Navigation", aServices[2]);
263
- setUShellService("ShellNavigation", aServices[3]);
263
+ setUShellService("ShellNavigationInternal", aServices[3]);
264
264
  })
265
265
  .catch(function(vError) {
266
266
  throw new Error(`Error getting service from Unified Shell: ${vError}`);
@@ -290,7 +290,7 @@ sap.ui.define([
290
290
  * @class Variant model implementation for JSON format.
291
291
  * @extends sap.ui.model.json.JSONModel
292
292
  * @author SAP SE
293
- * @version 1.123.1
293
+ * @version 1.124.1
294
294
  * @param {object} oData - Either the URL where to load the JSON from or a JS object
295
295
  * @param {object} mPropertyBag - Map of properties required for the constructor
296
296
  * @param {sap.ui.fl.FlexController} mPropertyBag.flexController - <code>FlexController</code> instance for the component which uses the variant model
@@ -333,7 +333,7 @@ sap.ui.define([
333
333
  this.updateData();
334
334
 
335
335
  const oLiveDependencyMap = UIChangesState.getLiveDependencyMap(this.sFlexReference);
336
- VariantManagementState.getInitialChanges(
336
+ VariantManagementState.getInitialUIChanges(
337
337
  {reference: this.sFlexReference},
338
338
  this.oAppComponent.getId(),
339
339
  this.sFlexReference
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  *
23
23
  * @namespace sap.ui.fl.write._internal.Storage
24
24
  * @since 1.67
25
- * @version 1.123.1
25
+ * @version 1.124.1
26
26
  * @private
27
27
  * @ui5-restricted sap.ui.fl
28
28
  */
@@ -198,7 +198,7 @@ sap.ui.define([
198
198
  *
199
199
  * @namespace sap.ui.fl.write._internal.Versions
200
200
  * @since 1.74
201
- * @version 1.123.1
201
+ * @version 1.124.1
202
202
  * @private
203
203
  * @ui5-restricted sap.ui.fl
204
204
  */
@@ -35,7 +35,7 @@ sap.ui.define([
35
35
  * @constructor
36
36
  * @alias sap.ui.fl.write._internal.appVariant.AppVariant
37
37
  * @author SAP SE
38
- * @version 1.123.1
38
+ * @version 1.124.1
39
39
  * @private
40
40
  * @ui5-restricted sap.ui.rta, smart business
41
41
  */
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @namespace
33
33
  * @alias sap.ui.fl.write._internal.appVariant.AppVariantFactory
34
34
  * @author SAP SE
35
- * @version 1.123.1
35
+ * @version 1.124.1
36
36
  * @private
37
37
  * @ui5-restricted sap.ui.rta, smart business
38
38
  */
@@ -28,7 +28,7 @@ sap.ui.define([
28
28
  * @constructor
29
29
  * @alias sap.ui.fl.write._internal.appVariant.AppVariantInlineChange
30
30
  * @author SAP SE
31
- * @version 1.123.1
31
+ * @version 1.124.1
32
32
  * @private
33
33
  * @ui5-restricted sap.ui.rta, smart business
34
34
  */
@@ -33,7 +33,7 @@ sap.ui.define([
33
33
  * @namespace
34
34
  * @alias sap.ui.fl.write._internal.appVariant.AppVariantInlineChangeFactory
35
35
  * @author SAP SE
36
- * @version 1.123.1
36
+ * @version 1.124.1
37
37
  * @private
38
38
  * @ui5-restricted sap.ui.rta, smart business
39
39
  */
@@ -774,7 +774,7 @@ sap.ui.define([
774
774
  * @ui5-restricted sap.ui.rta, smart business
775
775
  */
776
776
  AppVariantInlineChangeFactory.create_ui5_setMinUI5Version = function(mPropertyBag) {
777
- Utils.checkParameterAndType(mPropertyBag.content, "minUI5Version", "string");
777
+ Utils.checkParameterAndType(mPropertyBag.content, "minUI5Version", ["string", "array"]);
778
778
  return _createAppVariantInlineChange(mPropertyBag);
779
779
  };
780
780
 
@@ -51,7 +51,7 @@ sap.ui.define([
51
51
  * @namespace
52
52
  * @alias sap.ui.fl.write._internal.condenser.Condenser
53
53
  * @author SAP SE
54
- * @version 1.123.1
54
+ * @version 1.124.1
55
55
  */
56
56
  var Condenser = {};
57
57
 
@@ -31,7 +31,7 @@ sap.ui.define([
31
31
  * @namespace
32
32
  * @alias sap.ui.fl.write._internal.condenser.UIReconstruction
33
33
  * @author SAP SE
34
- * @version 1.123.1
34
+ * @version 1.124.1
35
35
  */
36
36
  var UIReconstruction = {};
37
37
 
@@ -74,7 +74,7 @@ sap.ui.define([
74
74
  *
75
75
  * @namespace sap.ui.fl.write._internal.connectors.BackendConnector
76
76
  * @since 1.72
77
- * @version 1.123.1
77
+ * @version 1.124.1
78
78
  * @private
79
79
  * @ui5-restricted sap.ui.fl.write._internal.connectors
80
80
  */
@@ -21,7 +21,7 @@ sap.ui.define([
21
21
  * Connector for saving and deleting data from SAPUI5 Flexibility KeyUser service - including personalization.
22
22
  *
23
23
  * @namespace sap.ui.fl.write._internal.connectors.BtpServiceConnector
24
- * @version 1.123.1
24
+ * @version 1.124.1
25
25
  * @private
26
26
  * @ui5-restricted sap.ui.fl.write._internal.Storage
27
27
  */
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  *
41
41
  * @namespace sap.ui.fl.write._internal.connectors.KeyUserConnector
42
42
  * @since 1.70
43
- * @version 1.123.1
43
+ * @version 1.124.1
44
44
  * @private
45
45
  * @ui5-restricted sap.ui.fl.write._internal.Storage
46
46
  */
@@ -167,7 +167,7 @@ sap.ui.define([
167
167
  *
168
168
  * @namespace sap.ui.fl.write._internal.connectors.LrepConnector
169
169
  * @since 1.67
170
- * @version 1.123.1
170
+ * @version 1.124.1
171
171
  * @private
172
172
  * @ui5-restricted sap.ui.fl.write._internal.Storage
173
173
  */
@@ -20,7 +20,7 @@ sap.ui.define([
20
20
  *
21
21
  * @namespace sap.ui.fl.write._internal.connectors.NeoLrepConnector
22
22
  * @since 1.81
23
- * @version 1.123.1
23
+ * @version 1.124.1
24
24
  * @private
25
25
  * @ui5-restricted sap.ui.fl.write._internal.Storage
26
26
  */
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  *
25
25
  * @namespace sap.ui.fl.write._internal.connectors.ObjectPathConnector
26
26
  * @since 1.73
27
- * @version 1.123.1
27
+ * @version 1.124.1
28
28
  * @private
29
29
  * @ui5-restricted sap.ui.fl.write._internal.Storage
30
30
  */
@@ -23,7 +23,7 @@ sap.ui.define([
23
23
  *
24
24
  * @namespace sap.ui.fl.write._internal.connectors.PersonalizationConnector
25
25
  * @since 1.70
26
- * @version 1.123.1
26
+ * @version 1.124.1
27
27
  * @private
28
28
  * @ui5-restricted sap.ui.fl.write._internal.Storage
29
29
  */
@@ -16,7 +16,7 @@ sap.ui.define([
16
16
  *
17
17
  * @namespace sap.ui.fl.write._internal.connectors.Utils
18
18
  * @since 1.70
19
- * @version 1.123.1
19
+ * @version 1.124.1
20
20
  * @private
21
21
  * @ui5-restricted sap.ui.fl.write._internal.connectors, sap.ui.fl.write._internal.transport
22
22
  */
@@ -166,12 +166,12 @@ sap.ui.define(["sap/ui/model/ListBinding"], function(ListBinding) {
166
166
  * @return {string} the binding path
167
167
  */
168
168
  function getBindingPath(oElement, sAggregationName, mPayload) {
169
- if (mPayload.path) {
170
- return mPayload.path;
169
+ if (mPayload?.path) {
170
+ return mPayload?.path;
171
171
  }
172
172
  return checkForAbsoluteAggregationBinding(oElement, sAggregationName)
173
- ? getDefaultModelBindingData(oElement, true, sAggregationName).path
174
- : getDefaultModelBindingData(oElement, false, sAggregationName).getPath();
173
+ ? getDefaultModelBindingData(oElement, true, sAggregationName)?.path
174
+ : getDefaultModelBindingData(oElement, false, sAggregationName)?.getPath();
175
175
  }
176
176
 
177
177
  /**
@@ -182,7 +182,7 @@ sap.ui.define(["sap/ui/model/ListBinding"], function(ListBinding) {
182
182
  * @return {Promise} A Promise that resolves with the OData meta model or null if not found
183
183
  */
184
184
  async function loadODataMetaModel(oElement, mPayload) {
185
- const oModel = oElement.getModel(mPayload.modelName);
185
+ const oModel = oElement.getModel(mPayload?.modelName);
186
186
  if (oModel && ["sap.ui.model.odata.ODataModel", "sap.ui.model.odata.v2.ODataModel"].includes(oModel.getMetadata().getName())) {
187
187
  const oMetaModel = oModel.getMetaModel();
188
188
  await oMetaModel.loaded();
@@ -35,7 +35,7 @@ function(
35
35
  * @class
36
36
  * @constructor
37
37
  * @author SAP SE
38
- * @version 1.123.1
38
+ * @version 1.124.1
39
39
  */
40
40
  var Processor = {
41
41
  applyExtensionPoint(oExtensionPoint) {
@@ -40,7 +40,7 @@ sap.ui.define([
40
40
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.ABAPAccess
41
41
  * @since 1.87.0
42
42
  * @author SAP SE
43
- * @version 1.123.1
43
+ * @version 1.124.1
44
44
  * @private
45
45
  */
46
46
  var ABAPAccess = {};
@@ -17,7 +17,7 @@ sap.ui.define([
17
17
  * @class
18
18
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.ABAPExtensibilityVariant
19
19
  * @since 1.87
20
- * @version 1.123.1
20
+ * @version 1.124.1
21
21
  * @public
22
22
  * @param {sap.ui.base.ManagedObject} oControl - Control to add extensions
23
23
  */
@@ -115,7 +115,7 @@ sap.ui.define([
115
115
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.ABAPExtensibilityVariantFactory
116
116
  * @since 1.87.0
117
117
  * @author SAP SE
118
- * @version 1.123.1
118
+ * @version 1.124.1
119
119
  * @private
120
120
  */
121
121
  var ABAPExtensibilityVariantFactory = {};
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  *
25
25
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.MultiTenantABAPExtensibilityVariant
26
26
  * @since 1.87
27
- * @version 1.123.1
27
+ * @version 1.124.1
28
28
  * @public
29
29
  */
30
30
 
@@ -19,7 +19,7 @@ sap.ui.define([
19
19
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.ServiceValidation
20
20
  * @since 1.87.0
21
21
  * @author SAP SE
22
- * @version 1.123.1
22
+ * @version 1.124.1
23
23
  * @private
24
24
  */
25
25
  var ServiceValidation = {};
@@ -43,7 +43,7 @@ sap.ui.define([
43
43
  *
44
44
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.SingleTenantABAPExtensibilityVariant
45
45
  * @since 1.87
46
- * @version 1.123.1
46
+ * @version 1.124.1
47
47
  * @public
48
48
  */
49
49
 
@@ -134,7 +134,7 @@ sap.ui.define([
134
134
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.UriParser
135
135
  * @since 1.87.0
136
136
  * @author SAP SE
137
- * @version 1.123.1
137
+ * @version 1.124.1
138
138
  * @private
139
139
  */
140
140
  var UriParser = {};
@@ -245,7 +245,7 @@ sap.ui.define([
245
245
  * @namespace sap.ui.fl.write._internal.fieldExtensibility.Utils
246
246
  * @since 1.87.0
247
247
  * @author SAP SE
248
- * @version 1.123.1
248
+ * @version 1.124.1
249
249
  * @private
250
250
  */
251
251
  var Utils = {};
@@ -351,14 +351,9 @@ sap.ui.define([
351
351
  * @param {Map} mIntent Given intent
352
352
  * @returns {Promise<string|null>} Resolves with navigation URI or null
353
353
  */
354
- Utils.getNavigationUriForIntent = function(mIntent) {
355
- return FlexUtils.getUShellService("Navigation").then(function(oUshellNavigationService) {
356
- if (oUshellNavigationService && oUshellNavigationService.getHref) {
357
- return oUshellNavigationService.getHref(mIntent);
358
- }
359
-
360
- return Promise.resolve(null);
361
- });
354
+ Utils.getNavigationUriForIntent = async function(mIntent) {
355
+ const oNavigationService = await FlexUtils.getUShellService("Navigation");
356
+ return oNavigationService?.getHref?.(mIntent) || null;
362
357
  };
363
358
 
364
359
  /**
@@ -415,21 +410,15 @@ sap.ui.define([
415
410
  * @param {Array} aIntents Given intents
416
411
  * @returns {Promise<Array<boolean>>} Resolves with an array of booleans
417
412
  */
418
- Utils.isNavigationSupportedForIntents = function(aIntents) {
419
- return FlexUtils.getUShellService("Navigation").then(function(oUshellNavigationService) {
420
- if (oUshellNavigationService && oUshellNavigationService.isNavigationSupported) {
421
- return oUshellNavigationService.isNavigationSupported(aIntents).then(function(aResults) {
422
- return aResults.map(function(oResult) {
423
- return oResult && oResult.supported === true;
424
- });
425
- });
426
- }
413
+ Utils.isNavigationSupportedForIntents = async function(aIntents) {
414
+ const oNavigationService = await FlexUtils.getUShellService("Navigation");
415
+ if (oNavigationService?.isNavigationSupported) {
416
+ const aResults = await oNavigationService.isNavigationSupported(aIntents);
417
+ return aResults.map((oResult) => oResult && oResult.supported === true);
418
+ }
427
419
 
428
- // we assume no navigation support
429
- return Promise.resolve(aIntents.map(function() {
430
- return false;
431
- }));
432
- });
420
+ // we assume no navigation support
421
+ return aIntents.map(() => false);
433
422
  };
434
423
 
435
424
  return Utils;
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @since 1.93
25
25
  * @private
26
26
  * @author SAP SE
27
- * @version 1.123.1
27
+ * @version 1.124.1
28
28
  */
29
29
  var CAPAccess = {};
30
30
 
@@ -82,7 +82,7 @@ sap.ui.define([
82
82
  * @extends sap.ui.base.ManagedObject
83
83
  * @alias sap.ui.fl.write._internal.fieldExtensibility.cap.dialog.CustomFieldCAPDialog
84
84
  * @author SAP SE
85
- * @version 1.123.1
85
+ * @version 1.124.1
86
86
  * @since 1.93
87
87
  * @private
88
88
  * @ui5-restricted