SEBSERV-329 new migration task with new SEB Settings

This commit is contained in:
anhefti 2023-01-26 16:02:21 +01:00
parent 558d6424f7
commit e998e40bc1
10 changed files with 202 additions and 42 deletions

View file

@ -21,6 +21,8 @@ public enum AttributeType {
PASSWORD_FIELD(TEXT),
/** Multiple lined text value */
TEXT_AREA(TEXT),
/** An editable list if TEXT_FIELD inputs stored in a comma separated String value */
TEXT_FIELD_LIST(TEXT),
/** Check Box or boolean type */
CHECKBOX(TEXT),

View file

@ -96,6 +96,9 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
final EntityKey templateKey = pageContext.getParentEntityKey();
final Long templateId = Long.valueOf(templateKey.modelId);
boolean modifyGrant = false;
boolean hasView = false;
try {
final ConfigurationNode template = this.restService
@ -104,9 +107,8 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
.call()
.onError(error -> pageContext.notifyLoadError(EntityType.CONFIGURATION_NODE, error))
.getOrThrow();
final EntityGrantCheck entityGrant = this.currentUser.entityGrantCheck(template);
final boolean modifyGrant = entityGrant.m();
modifyGrant = entityGrant.m();
// the attribute
final TemplateAttribute attribute = this.restService.getBuilder(GetTemplateAttribute.class)
@ -131,8 +133,8 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
FORM_TITLE);
final PageContext formContext = pageContext.copyOf(content);
final boolean hasView = attribute.getOrientation() != null;
hasView = attribute.getOrientation() != null;
final boolean _hasView = hasView;
this.pageService.formBuilder(formContext)
.readonly(true) // TODO change this for next version
@ -145,14 +147,14 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
FORM_TYPE_TEXT_KEY,
() -> this.resourceService.getAttributeTypeName(attribute)))
.addFieldIf(
() -> hasView,
() -> _hasView,
() -> FormBuilder.singleSelection(
Domain.ORIENTATION.ATTR_VIEW_ID,
FORM_VIEW_TEXT_KEY,
attribute.getViewModelId(),
() -> this.resourceService.getViewResources(templateKey.modelId)))
.addFieldIf(
() -> hasView,
() -> _hasView,
() -> FormBuilder.text(
Domain.ORIENTATION.ATTR_GROUP_ID,
FORM_GROUP_TEXT_KEY,
@ -201,37 +203,40 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
configuration.id,
Collections.singletonList(viewContext));
this.pageService.pageActionBuilder(formContext.clearEntityKeys())
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_FORM_SET_DEFAULT)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::resetToDefaults)
.ignoreMoveAwayFromEdit()
.publishIf(() -> modifyGrant)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_REMOVE_VIEW)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::removeFromView)
.ignoreMoveAwayFromEdit()
.publishIf(() -> modifyGrant && hasView)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_ATTACH_DEFAULT_VIEW)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::attachToDefaultView)
.ignoreMoveAwayFromEdit()
.publishIf(() -> modifyGrant && !hasView)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_FORM_EDIT_TEMPLATE)
.withEntityKey(templateKey)
.ignoreMoveAwayFromEdit()
.publish();
} catch (final Exception e) {
pageContext.notifyUnexpectedError(e);
}
final boolean _modifyGrant = modifyGrant;
final boolean _hasView = hasView;
this.pageService.pageActionBuilder(pageContext.clearEntityKeys())
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_FORM_SET_DEFAULT)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::resetToDefaults)
.ignoreMoveAwayFromEdit()
.publishIf(() -> _modifyGrant)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_REMOVE_VIEW)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::removeFromView)
.ignoreMoveAwayFromEdit()
.publishIf(() -> _modifyGrant && _hasView)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_ATTACH_DEFAULT_VIEW)
.withEntityKey(attributeKey)
.withParentEntityKey(templateKey)
.withExec(this.examConfigurationService::attachToDefaultView)
.ignoreMoveAwayFromEdit()
.publishIf(() -> _modifyGrant && !_hasView)
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_FORM_EDIT_TEMPLATE)
.withEntityKey(templateKey)
.ignoreMoveAwayFromEdit()
.publish();
}
private Orientation getDefaultOrientation(final TemplateAttribute attribute) {

View file

@ -382,7 +382,7 @@ public class ExamConfigurationMapDAOImpl implements ExamConfigurationMapDAO {
@Override
@Transactional(readOnly = true)
public Result<Boolean> checkNoActiveExamReferences(final Long configurationNodeId) {
return Result.tryCatch(() -> this.examConfigurationMapRecordMapper.selectByExample()
return Result.tryCatch(() -> !this.examConfigurationMapRecordMapper.selectByExample()
.where(
ExamConfigurationMapRecordDynamicSqlSupport.configurationNodeId,
isEqualTo(configurationNodeId))

View file

@ -332,7 +332,8 @@ public class ExamConfigXMLParser extends DefaultHandler {
// check if we have a simple values array
if (attribute != null && (attribute.type == AttributeType.MULTI_CHECKBOX_SELECTION
|| attribute.type == AttributeType.MULTI_SELECTION
|| attribute.type == AttributeType.TEXT_AREA)) {
|| attribute.type == AttributeType.TEXT_AREA
|| attribute.type == AttributeType.TEXT_FIELD_LIST)) {
saveValue(attrName, attribute, top.listIndex, (top.value == null) ? "" : top.value);
}

View file

@ -39,7 +39,8 @@ public class ArrayOfStringConverter implements AttributeValueConverter {
public static final Set<AttributeType> SUPPORTED_TYPES = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList(
AttributeType.MULTI_CHECKBOX_SELECTION,
AttributeType.MULTI_SELECTION)));
AttributeType.MULTI_SELECTION,
AttributeType.TEXT_FIELD_LIST)));
private static final String XML_TEMPLATE = "<key>%s</key><array>";
private static final String XML_TEMPLATE_ENTRY = "<string>%s</string>";

View file

@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.model.sebconfig.AttributeType;
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationAttribute;
import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationValue;
@ -45,7 +46,26 @@ public class DecimalTypeValidator implements ConfigurationValueValidator {
}
try {
Double.parseDouble(value.value);
final double val = Double.parseDouble(value.value);
final String resources = attribute.getResources();
if (!StringUtils.isBlank(resources)) {
final String[] split = StringUtils.split(resources, Constants.LIST_SEPARATOR);
if (split.length > 0) {
// check lower boundary
if (Double.parseDouble(split[0]) < val) {
return false;
}
if (split.length > 1) {
// check upper boundary
if (Double.parseDouble(split[1]) > val) {
return false;
}
}
}
}
return true;
} catch (final NumberFormatException nfe) {
return false;

View file

@ -0,0 +1,37 @@
-- -----------------------------------------------------------------
-- SEBSERV-329 starting with id 1550
-- -----------------------------------------------------------------
INSERT IGNORE INTO configuration_attribute VALUES
(1550, 'aacDnsPrePinning', 'CHECKBOX', null, null, null, null, 'false'),
(1551, 'allowedDisplayBuiltinEnforce', 'CHECKBOX', null, null, null, null, 'true'),
(1552, 'allowedDisplayBuiltinExceptDesktop', 'CHECKBOX', null, null, null, null, 'true'),
(1553, 'allowMacOSVersionNumberCheckFull', 'CHECKBOX', null, null, null, null, 'false'),
(1554, 'allowMacOSVersionNumberMajor', 'COMBO_SELECTION', null, '10,11,12,13,14', null, null, '10'),
(1555, 'allowMacOSVersionNumberMinor', 'COMBO_SELECTION', null, '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', null, null, '11'),
(1556, 'allowMacOSVersionNumberPatch', 'COMBO_SELECTION', null, '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', null, null, '0'),
(1557, 'allowScreenCapture', 'CHECKBOX', null, null, null, null, 'false'),
(1558, 'browserMediaAutoplay', 'CHECKBOX', null, null, null, null, 'true'),
(1559, 'browserMediaAutoplayAudio', 'CHECKBOX', null, null, null, null, 'true'),
(1560, 'browserMediaAutoplayVideo', 'CHECKBOX', null, null, null, null, 'true'),
(1561, 'browserMediaCaptureCamera', 'CHECKBOX', null, null, null, null, 'false'),
(1562, 'browserMediaCaptureMicrophone', 'CHECKBOX', null, null, null, null, 'false'),
(1563, 'browserMediaCaptureScreen', 'CHECKBOX', null, null, null, null, 'false'),
(1564, 'browserWindowWebView', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '2'),
(1565, 'defaultPageZoomLevel', 'DECIMAL', null, '0.25,4.0', 'DecimalTypeValidator', null, '1.0'),
(1566, 'defaultTextZoomLevel', 'DECIMAL', null, '0.9,3.5', 'DecimalTypeValidator', null, '1.0'),
(1567, 'enableMacOSAAC', 'CHECKBOX', null, null, null, null, 'false'),
(1568, 'enableRightMouseMac', 'CHECKBOX', null, null, null, null, 'false'),
(1569, 'mobileAllowInlineMediaPlayback', 'CHECKBOX', null, null, null, null, 'true'),
(1570, 'mobileCompactAllowInlineMediaPlayback', 'CHECKBOX', null, null, null, null, 'false'),
(1571, 'mobileSleepModeLockScreen', 'CHECKBOX', null, null, null, null, 'true'),
(1572, 'showQuitButton', 'CHECKBOX', null, null, null, null, 'true'),
(1573, 'showScrollLockButton', 'CHECKBOX', null, null, null, null, 'true'),
(1574, 'startURLAllowDeepLink', 'CHECKBOX', null, null, null, null, 'false'),
(1575, 'tabFocusesLinks', 'CHECKBOX', null, null, null, null, 'true'),
(1576, 'terminateProcesses', 'CHECKBOX', null, null, null, null, 'false'),
(1577, 'prohibitedProcesses.ignoreInAAC', 'CHECKBOX', 73, null, null, null, 'true'),
(1578, 'sebAllowedVersions', 'TEXT_FIELD_LIST', null, null, null, null, null)
;

View file

@ -1782,6 +1782,67 @@ sebserver.examconfig.props.validation.DecimalTypeValidator=Invalid decimal numbe
sebserver.examconfig.props.validation.ExitKeySequenceValidator=Key is already in sequence
sebserver.examconfig.props.validation.WindowsSizeValidator=Invalid number
sebserver.examconfig.props.label.aacDnsPrePinning=Use AAC with DNS pre-pinning
sebserver.examconfig.props.label.aacDnsPrePinning.tooltip=On macOS <12.1 DNS lookup doesn't work while in AAC.<br/>Pre-pinning resolves all domains from Start URL and URL filter rules before starting AAC to mitigate this bug.<br/>This allows to use AAC on macOS 11 - 12.0
sebserver.examconfig.props.label.allowedDisplayBuiltinEnforce=Enforce built-in display
sebserver.examconfig.props.label.allowedDisplayBuiltinEnforce.tooltip=Enforces using the built-in display: If none is available, refuses to run
sebserver.examconfig.props.label.allowedDisplayBuiltinExceptDesktop=Allow desktop Macs
sebserver.examconfig.props.label.allowedDisplayBuiltinExceptDesktop.tooltip=Allows to use Macs, which don't have a built-in display (like a Mac Mini or Mac Pro), even if enforcing it is enabled
sebserver.examconfig.props.label.allowMacOSVersionNumberCheckFull=Check full macOS version number
sebserver.examconfig.props.label.allowMacOSVersionNumberCheckFull.tooltip=In addition to major version, check also for allowed minor and patch version number
sebserver.examconfig.props.label.allowMacOSVersionNumberMajor=Major version number
sebserver.examconfig.props.label.allowMacOSVersionNumberMinor=Minor version number
sebserver.examconfig.props.label.allowMacOSVersionNumberPatch=Patch version number
sebserver.examconfig.props.label.allowScreenCapture=Allow screen capture/recording
sebserver.examconfig.props.label.allowScreenCapture.tooltip=Allows macOS screen capture (screen shots) and recording (cmd-shift-3/-4/-5)
sebserver.examconfig.props.label.browserMediaAutoplay=Media autoplay
sebserver.examconfig.props.label.browserMediaAutoplay.tooltip=Some video/audio content will start playing without user interaction.<br/>Some other content might not be playable without enabling this setting (but will not auto play)
sebserver.examconfig.props.label.browserMediaAutoplayAudio=Audio autoplay
sebserver.examconfig.props.label.browserMediaAutoplayAudio.tooltip=Using the modern WebView, audio autoplay can be controlled separately
sebserver.examconfig.props.label.browserMediaAutoplayVideo=Video autoplay
sebserver.examconfig.props.label.browserMediaAutoplayVideo.tootlip=Using the modern WebView, video autoplay can be controlled separately
sebserver.examconfig.props.label.browserMediaCaptureCamera=Allow camera capture
sebserver.examconfig.props.label.browserMediaCaptureCamera.tooltip=Allow web sites to access the camera, for WebRTC live streams or still pictures (only in modern WebView and on macOS 11.1/iOS 14.3 or newer)
sebserver.examconfig.props.label.browserMediaCaptureMicrophone=Allow microphone capture
sebserver.examconfig.props.label.browserMediaCaptureMicrophone.tooltip=Allow web sites to access the microphone, for WebRTC live streams or audio recording (only in modern WebView and on macOS 11.1/iOS 14.3 or newer)
sebserver.examconfig.props.label.browserMediaCaptureScreen=Allow screen capture
sebserver.examconfig.props.label.browserMediaCaptureScreen.tooltip=Allow web sites to capture the screen, for WebRTC live streams or still pictures (only in modern WebView and on macOS 11.1 or newer )
sebserver.examconfig.props.label.browserWindowWebView=Select Browser Engine Policy
sebserver.examconfig.props.label.browserWindowWebView.tooltip=The modern WKWebView browser engine currently doesn't support URL content filters (Network > URL Filter > Filter Embedded Content)<br/>and sending the Browser Exam and Config Key in HTTP headers (Exam Session > Use Browser & Config Keys).<br/>If one of these settings is enabled, the classic WebView is used in the Automatic policy.<br/>Prefer Modern ignores the 'Use Browser & Config Keys' option in new tabs on a different server or generally.
sebserver.examconfig.props.label.browserWindowWebView.0=Automatic
sebserver.examconfig.props.label.browserWindowWebView.1=Force Classic
sebserver.examconfig.props.label.browserWindowWebView.2=Prefer Modern in New Tab+Different Host
sebserver.examconfig.props.label.browserWindowWebView.3=Prefer Modern
sebserver.examconfig.props.label.defaultPageZoomLevel=Default page zoom level
sebserver.examconfig.props.label.defaultPageZoomLevel.tooltip=Zoom level to use by default on every page
sebserver.examconfig.props.label.defaultTextZoomLevel=Default text zoom level
sebserver.examconfig.props.label.defaultTextZoomLevel.tooltip=Zoom level to use by default on every page. When using the modern WebView, text zoom only works on some (simple) webpages<br/>and is only enabled when the page zoom level is 1.0
sebserver.examconfig.props.label.enableMacOSAAC=Prefer Assessment Mode (AAC)
sebserver.examconfig.props.label.enableMacOSAAC.tooltip=Automatic Assessment Configuration (AAC) Assessment Mode is available from macOS Monterey 12.1 (and Catalina 10.15.4 and >= 10.15.6).<br/>It blocks various macOS features (which cannot be allowed optionally, like screen capture/sharing, Siri, Dictation)
sebserver.examconfig.props.label.enableRightMouseMac=Enable right mouse button
sebserver.examconfig.props.label.enableRightMouseMac.tooltip=Enable to access context menu for Web Inspector in SEB for macOS (use ONLY for debugging).<br/>Disable to prevent right mouse button actions/context menu for sharing content (with modern WebView) and in browser plugins/video players
sebserver.examconfig.props.label.mobileAllowInlineMediaPlayback=Allow inline playback on iPad
sebserver.examconfig.props.label.mobileAllowInlineMediaPlayback.tooltip=Video content can be played inline on a web page or only in full screen.<br/>By disabling this option, HTML5 video players are forced to use the iOS user interface for controlling playback
sebserver.examconfig.props.label.mobileCompactAllowInlineMediaPlayback=Allow inline playback on iPhone
sebserver.examconfig.props.label.mobileCompactAllowInlineMediaPlayback.tooltip=Video content can be played inline on a web page or only in full screen.<br/>By disabling this option, HTML5 video players are forced to use the iOS user interface for controlling playback
sebserver.examconfig.props.label.mobileSleepModeLockScreen=Lock screen after sleep mode
sebserver.examconfig.props.label.mobileSleepModeLockScreen.tooltip=On devices with iOS <= 12, sleep mode can be activated while in AAC by for example closing an iPad case.<br/>Use this option to display a lock screen when the device is woken up
sebserver.examconfig.props.label.showQuitButton=Show quit button
sebserver.examconfig.props.label.showQuitButton.tooltip=Shows the Quit SEB/Session Dock button
sebserver.examconfig.props.label.showScrollLockButton=Show scroll lock button (iOS)
sebserver.examconfig.props.label.showScrollLockButton.tooltip=Shows the scroll lock button in the Dock if the scroll lock feature is enabled (iOS only)
sebserver.examconfig.props.label.startURLAllowDeepLink=Allow Deep Linking for Exams
sebserver.examconfig.props.label.startURLAllowDeepLink.tooltip=If using a Universal Link or an indirect seb(s):// link, SEB will search its path hierarchy for config files with this setting Longer<br/>UI description string: Deep linking allows to directly open various exams using just one exam config file placed<br/>somewhere in the path hierarchy of a sebs:// or Universal Link (those links need to start with the URL used in Start URL).
sebserver.examconfig.props.label.tabFocusesLinks=Tab focuses links
sebserver.examconfig.props.label.tabFocusesLinks.tooltip=Pressing the tab key moves focus to the next link and form control. Shift-tab moves focus to the previous control
sebserver.examconfig.props.label.terminateProcesses=Require to quit all applications
sebserver.examconfig.props.label.terminateProcesses.tooltip=SEB will attempt to quit applications/processes which are not permitted to run during an exam and require to terminate those which are prohibited
sebserver.examconfig.props.label.prohibitedProcesses.ignoreInAAC=Ignore in AAC
sebserver.examconfig.props.label.prohibitedProcesses.ignoreInAAC.tooltip=When using the AAC kiosk mode (which prevents network and screen access for other processes), ignore this prohibited process
sebserver.examconfig.props.label.sebAllowedVersions=Allowed SEB Versions
sebserver.examconfig.props.label.sebAllowedVersions.tooltip=List of text inputs which represent either a specific or a minimal SEB version which is allowed to access the (exam) session using current settings.<br/>The version string has the following format: [OS.mayor.minor.patch(.minimal)], OS and mayor version are mandatory,<br/>"minimal" indicates if version shall be interpreted as minimal version this and all above are valid.
################################
# SEB Exam Configuration Template
################################
@ -1828,6 +1889,7 @@ sebserver.configtemplate.attr.type.FILE_UPLOAD=File Upload
sebserver.configtemplate.attr.type.TABLE=Table
sebserver.configtemplate.attr.type.INLINE_TABLE=Table
sebserver.configtemplate.attr.type.COMPOSITE_TABLE=Table
sebserver.configtemplate.attr.type.TEXT_FIELD_LIST=Text Field List
sebserver.configtemplate.attrs.list.title=Exam Configuration Attributes
sebserver.configtemplate.attrs.list.title.subtitle=Table of all exam configuration attributes of this template

View file

@ -87,7 +87,7 @@ public class ConfigurationAttributeAPITest extends AdministrationAPIIntegrationT
assertNotNull(names);
assertFalse(names.isEmpty());
assertEquals("241", String.valueOf(names.size()));
assertEquals("270", String.valueOf(names.size()));
this.params.clear();
this.params.add(ConfigurationAttribute.FILTER_ATTR_TYPE, AttributeType.CHECKBOX.name());
@ -99,7 +99,7 @@ public class ConfigurationAttributeAPITest extends AdministrationAPIIntegrationT
assertNotNull(names);
assertFalse(names.isEmpty());
assertEquals("139", String.valueOf(names.size()));
assertEquals("161", String.valueOf(names.size()));
}
@Test
@ -122,7 +122,7 @@ public class ConfigurationAttributeAPITest extends AdministrationAPIIntegrationT
forIds = this.configurationAttributeController.getForIds(null);
assertNotNull(forIds);
assertEquals("241", String.valueOf(forIds.size()));
assertEquals("270", String.valueOf(forIds.size()));
}
@Test

View file

@ -306,7 +306,39 @@ INSERT IGNORE INTO configuration_attribute VALUES
(933, 'startResource', 'TEXT_FIELD', null, null, null, null, ''),
(1000, 'originatorVersion', 'TEXT_FIELD', null, null, null, null, 'SEB_Server_0.3.0'),
(1001, 'sebConfigPurpose', 'RADIO_SELECTION', null, '0,1', null, null, '0')
(1001, 'sebConfigPurpose', 'RADIO_SELECTION', null, '0,1', null, null, '0'),
(1550, 'aacDnsPrePinning', 'CHECKBOX', null, null, null, null, 'false'),
(1551, 'allowedDisplayBuiltinEnforce', 'CHECKBOX', null, null, null, null, 'true'),
(1552, 'allowedDisplayBuiltinExceptDesktop', 'CHECKBOX', null, null, null, null, 'true'),
(1553, 'allowMacOSVersionNumberCheckFull', 'CHECKBOX', null, null, null, null, 'false'),
(1554, 'allowMacOSVersionNumberMajor', 'COMBO_SELECTION', null, '10,11,12,13,14', null, null, '10'),
(1555, 'allowMacOSVersionNumberMinor', 'COMBO_SELECTION', null, '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', null, null, '11'),
(1556, 'allowMacOSVersionNumberPatch', 'COMBO_SELECTION', null, '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20', null, null, '0'),
(1557, 'allowScreenCapture', 'CHECKBOX', null, null, null, null, 'false'),
(1558, 'browserMediaAutoplay', 'CHECKBOX', null, null, null, null, 'true'),
(1559, 'browserMediaAutoplayAudio', 'CHECKBOX', null, null, null, null, 'true'),
(1560, 'browserMediaAutoplayVideo', 'CHECKBOX', null, null, null, null, 'true'),
(1561, 'browserMediaCaptureCamera', 'CHECKBOX', null, null, null, null, 'false'),
(1562, 'browserMediaCaptureMicrophone', 'CHECKBOX', null, null, null, null, 'false'),
(1563, 'browserMediaCaptureScreen', 'CHECKBOX', null, null, null, null, 'false'),
(1564, 'browserWindowWebView', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '2'),
(1565, 'defaultPageZoomLevel', 'DECIMAL', null, '0.25,4.0', 'DecimalTypeValidator', null, '1.0'),
(1566, 'defaultTextZoomLevel', 'DECIMAL', null, '0.9,3.5', 'DecimalTypeValidator', null, '1.0'),
(1567, 'enableMacOSAAC', 'CHECKBOX', null, null, null, null, 'false'),
(1568, 'enableRightMouseMac', 'CHECKBOX', null, null, null, null, 'false'),
(1569, 'mobileAllowInlineMediaPlayback', 'CHECKBOX', null, null, null, null, 'true'),
(1570, 'mobileCompactAllowInlineMediaPlayback', 'CHECKBOX', null, null, null, null, 'false'),
(1571, 'mobileSleepModeLockScreen', 'CHECKBOX', null, null, null, null, 'true'),
(1572, 'showQuitButton', 'CHECKBOX', null, null, null, null, 'true'),
(1573, 'showScrollLockButton', 'CHECKBOX', null, null, null, null, 'true'),
(1574, 'startURLAllowDeepLink', 'CHECKBOX', null, null, null, null, 'false'),
(1575, 'tabFocusesLinks', 'CHECKBOX', null, null, null, null, 'true'),
(1576, 'terminateProcesses', 'CHECKBOX', null, null, null, null, 'false'),
(1577, 'prohibitedProcesses.ignoreInAAC', 'CHECKBOX', 73, null, null, null, 'true'),
(1578, 'sebAllowedVersions', 'TEXT_FIELD_LIST', null, null, null, null, null)
;