SEBWIN-414: Implemented new feature to control displaying and logging of URLs in browser.

This commit is contained in:
Damian Büchel 2020-09-29 14:01:17 +02:00
parent 3a23cec2c2
commit 68decb740c
21 changed files with 1282 additions and 1024 deletions

View file

@ -16,6 +16,7 @@ using SafeExamBrowser.Browser.Contracts.Events;
using SafeExamBrowser.Browser.Handlers;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.UserInterface.Contracts.Browser.Data;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
@ -25,18 +26,20 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
public class DownloadHandlerTests
{
private AppConfig appConfig;
private BrowserSettings settings;
private Mock<ILogger> logger;
private BrowserSettings settings;
private WindowSettings windowSettings;
private DownloadHandler sut;
[TestInitialize]
public void Initialize()
{
appConfig = new AppConfig();
settings = new BrowserSettings();
logger = new Mock<ILogger>();
settings = new BrowserSettings();
windowSettings = new WindowSettings();
sut = new DownloadHandler(appConfig, settings, logger.Object);
sut = new DownloadHandler(appConfig, logger.Object, settings, windowSettings);
}
[TestMethod]

View file

@ -14,6 +14,7 @@ using SafeExamBrowser.Browser.Handlers;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.Settings.Browser.Filter;
using SafeExamBrowser.Settings.Browser.Proxy;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
@ -29,6 +30,7 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
private Mock<IRequestFilter> filter;
private Mock<ILogger> logger;
private BrowserSettings settings;
private WindowSettings windowSettings;
private ResourceHandler resourceHandler;
private Mock<IText> text;
private TestableRequestHandler sut;
@ -40,10 +42,11 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
filter = new Mock<IRequestFilter>();
logger = new Mock<ILogger>();
settings = new BrowserSettings();
windowSettings = new WindowSettings();
text = new Mock<IText>();
resourceHandler = new ResourceHandler(appConfig, settings, filter.Object, logger.Object, text.Object);
resourceHandler = new ResourceHandler(appConfig, filter.Object, logger.Object, settings, windowSettings, text.Object);
sut = new TestableRequestHandler(appConfig, filter.Object, logger.Object, settings, resourceHandler, text.Object);
sut = new TestableRequestHandler(appConfig, filter.Object, logger.Object, resourceHandler, settings, windowSettings, text.Object);
}
[TestMethod]
@ -201,9 +204,10 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
AppConfig appConfig,
IRequestFilter filter,
ILogger logger,
BrowserSettings settings,
ResourceHandler resourceHandler,
IText text) : base(appConfig, filter, logger, settings, resourceHandler, text)
BrowserSettings settings,
WindowSettings windowSettings,
IText text) : base(appConfig, filter, logger, resourceHandler, settings, windowSettings, text)
{
}

View file

@ -16,6 +16,7 @@ using SafeExamBrowser.Browser.Contracts.Filters;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.Settings.Browser.Filter;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
using Request = SafeExamBrowser.Browser.Contracts.Filters.Request;
@ -27,9 +28,10 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
public class ResourceHandlerTests
{
private AppConfig appConfig;
private BrowserSettings settings;
private Mock<IRequestFilter> filter;
private Mock<ILogger> logger;
private BrowserSettings settings;
private WindowSettings windowSettings;
private Mock<IText> text;
private TestableResourceHandler sut;
@ -37,12 +39,13 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
public void Initialize()
{
appConfig = new AppConfig();
settings = new BrowserSettings();
filter = new Mock<IRequestFilter>();
logger = new Mock<ILogger>();
settings = new BrowserSettings();
windowSettings = new WindowSettings();
text = new Mock<IText>();
sut = new TestableResourceHandler(appConfig, settings, filter.Object, logger.Object, text.Object);
sut = new TestableResourceHandler(appConfig, filter.Object, logger.Object, settings, windowSettings, text.Object);
}
[TestMethod]
@ -156,7 +159,13 @@ namespace SafeExamBrowser.Browser.UnitTests.Handlers
private class TestableResourceHandler : ResourceHandler
{
internal TestableResourceHandler(AppConfig appConfig, BrowserSettings settings, IRequestFilter filter, ILogger logger, IText text) : base(appConfig, settings, filter, logger, text)
internal TestableResourceHandler(
AppConfig appConfig,
IRequestFilter filter,
ILogger logger,
BrowserSettings settings,
WindowSettings windowSettings,
IText text) : base(appConfig, filter, logger, settings, windowSettings, text)
{
}

View file

@ -21,6 +21,7 @@ using SafeExamBrowser.Browser.Events;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.Settings.Browser.Proxy;
using SafeExamBrowser.Settings.Logging;
using SafeExamBrowser.UserInterface.Contracts;
@ -339,7 +340,7 @@ namespace SafeExamBrowser.Browser
private void Instance_PopupRequested(PopupRequestedEventArgs args)
{
logger.Info($"Received request to create new instance for '{args.Url}'...");
logger.Info($"Received request to create new instance{(settings.AdditionalWindow.UrlPolicy.CanLog() ? $" for '{args.Url}'" : "")}...");
CreateNewInstance(args.Url);
}

View file

@ -123,13 +123,13 @@ namespace SafeExamBrowser.Browser
var dialogHandler = new DialogHandler();
var displayHandler = new DisplayHandler();
var downloadLogger = logger.CloneFor($"{nameof(DownloadHandler)} #{Id}");
var downloadHandler = new DownloadHandler(appConfig, settings, downloadLogger);
var downloadHandler = new DownloadHandler(appConfig, downloadLogger, settings, WindowSettings);
var keyboardHandler = new KeyboardHandler();
var lifeSpanHandler = new LifeSpanHandler();
var requestFilter = new RequestFilter();
var requestLogger = logger.CloneFor($"{nameof(RequestHandler)} #{Id}");
var resourceHandler = new ResourceHandler(appConfig, settings, requestFilter, logger, text);
var requestHandler = new RequestHandler(appConfig, requestFilter, requestLogger, settings, resourceHandler, text);
var resourceHandler = new ResourceHandler(appConfig, requestFilter, logger, settings, WindowSettings, text);
var requestHandler = new RequestHandler(appConfig, requestFilter, requestLogger, resourceHandler, settings, WindowSettings, text);
Icon = new BrowserIconResource();
@ -191,7 +191,7 @@ namespace SafeExamBrowser.Browser
rule.Initialize(new FilterRuleSettings { Expression = settings.StartUrl, Result = FilterResult.Allow });
requestFilter.Load(rule);
logger.Debug($"Automatically created filter rule to allow start URL '{settings.StartUrl}'.");
logger.Debug($"Automatically created filter rule to allow start URL{(WindowSettings.UrlPolicy.CanLog() ? $" '{settings.StartUrl}'" : "")}.");
}
}
}
@ -219,30 +219,37 @@ namespace SafeExamBrowser.Browser
private void Control_AddressChanged(string address)
{
logger.Debug($"Navigated to '{address}'.");
logger.Debug($"Navigated{(WindowSettings.UrlPolicy.CanLog() ? $" to '{address}'" : "")}.");
window.UpdateAddress(address);
if (WindowSettings.UrlPolicy == UrlPolicy.Always || WindowSettings.UrlPolicy == UrlPolicy.BeforeTitle)
{
Title = address;
window.UpdateTitle(address);
TitleChanged?.Invoke(address);
}
}
private void Control_LoadFailed(int errorCode, string errorText, string url)
{
if (errorCode == (int) CefErrorCode.None)
{
logger.Info($"Request for '{url}' was successful.");
logger.Info($"Request{(WindowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} was successful.");
}
else if (errorCode == (int) CefErrorCode.Aborted)
{
logger.Info($"Request for '{url}' was aborted.");
logger.Info($"Request{(WindowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} was aborted.");
}
else if (errorCode == (int) CefErrorCode.UnknownUrlScheme)
{
logger.Info($"Request for '{url}' contains unknown URL scheme and will be handled by the OS.");
logger.Info($"Request{(WindowSettings.UrlPolicy.CanLog() ? $" for '{url}'" : "")} contains unknown URL scheme and will be handled by the OS.");
}
else
{
var title = text.Get(TextKey.Browser_LoadErrorTitle);
var message = text.Get(TextKey.Browser_LoadErrorMessage).Replace("%%URL%%", url) + $" {errorText} ({errorCode})";
var message = text.Get(TextKey.Browser_LoadErrorMessage).Replace("%%URL%%", WindowSettings.UrlPolicy.CanLogError() ? url : "") + $" {errorText} ({errorCode})";
logger.Warn($"Request for '{url}' failed: {errorText} ({errorCode}).");
logger.Warn($"Request{(WindowSettings.UrlPolicy.CanLogError() ? $" for '{url}'" : "")} failed: {errorText} ({errorCode}).");
Task.Run(() => messageBox.Show(message, title, icon: MessageBoxIcon.Error, parent: window)).ContinueWith(_ => control.NavigateBackwards());
}
@ -257,9 +264,12 @@ namespace SafeExamBrowser.Browser
private void Control_TitleChanged(string title)
{
Title = title;
window.UpdateTitle(Title);
TitleChanged?.Invoke(Title);
if (WindowSettings.UrlPolicy != UrlPolicy.Always)
{
Title = title;
window.UpdateTitle(Title);
TitleChanged?.Invoke(Title);
}
}
private void DialogHandler_DialogRequested(DialogRequestedEventArgs args)
@ -374,20 +384,20 @@ namespace SafeExamBrowser.Browser
{
case PopupPolicy.Allow:
case PopupPolicy.AllowSameHost when sameHost:
logger.Debug($"Forwarding request to open new window for '{args.Url}'...");
logger.Debug($"Forwarding request to open new window{(WindowSettings.UrlPolicy.CanLog() ? $" for '{args.Url}'" : "")}...");
PopupRequested?.Invoke(args);
break;
case PopupPolicy.AllowSameWindow:
case PopupPolicy.AllowSameHostAndWindow when sameHost:
logger.Info($"Discarding request to open new window and loading '{args.Url}' directly...");
logger.Info($"Discarding request to open new window and loading{(WindowSettings.UrlPolicy.CanLog() ? $" '{args.Url}'" : "")} directly...");
control.NavigateTo(args.Url);
break;
case PopupPolicy.AllowSameHost when !sameHost:
case PopupPolicy.AllowSameHostAndWindow when !sameHost:
logger.Info($"Blocked request to open new window for '{args.Url}' as it targets a different host.");
logger.Info($"Blocked request to open new window{(WindowSettings.UrlPolicy.CanLog() ? $" for '{args.Url}'" : "")} as it targets a different host.");
break;
default:
logger.Info($"Blocked request to open new window for '{args.Url}'.");
logger.Info($"Blocked request to open new window{(WindowSettings.UrlPolicy.CanLog() ? $" for '{args.Url}'" : "")}.");
break;
}
}
@ -412,17 +422,17 @@ namespace SafeExamBrowser.Browser
if (terminate)
{
logger.Info($"User confirmed termination via quit URL '{url}', forwarding request...");
logger.Info($"User confirmed termination via quit URL{(WindowSettings.UrlPolicy.CanLog() ? $" '{url}'" : "")}, forwarding request...");
TerminationRequested?.Invoke();
}
else
{
logger.Info($"User aborted termination via quit URL '{url}'.");
logger.Info($"User aborted termination via quit URL{(WindowSettings.UrlPolicy.CanLog() ? $" '{url}'" : "")}.");
}
}
else
{
logger.Info($"Automatically requesting termination due to quit URL '{url}'...");
logger.Info($"Automatically requesting termination due to quit URL{(WindowSettings.UrlPolicy.CanLog() ? $" '{url}'" : "")}...");
TerminationRequested?.Invoke();
}
}
@ -433,7 +443,7 @@ namespace SafeExamBrowser.Browser
{
Task.Run(() =>
{
var message = text.Get(TextKey.MessageBox_BrowserNavigationBlocked).Replace("%%URL%%", url);
var message = text.Get(TextKey.MessageBox_BrowserNavigationBlocked).Replace("%%URL%%", WindowSettings.UrlPolicy.CanLogError() ? url : "");
var title = text.Get(TextKey.MessageBox_BrowserNavigationBlockedTitle);
control.TitleChanged -= Control_TitleChanged;

View file

@ -15,6 +15,7 @@ using SafeExamBrowser.Browser.Contracts.Events;
using SafeExamBrowser.Browser.Events;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.UserInterface.Contracts.Browser.Data;
using Syroot.Windows.IO;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
@ -25,6 +26,7 @@ namespace SafeExamBrowser.Browser.Handlers
{
private AppConfig appConfig;
private BrowserSettings settings;
private WindowSettings windowSettings;
private ConcurrentDictionary<int, DownloadFinishedCallback> callbacks;
private ConcurrentDictionary<int, Guid> downloads;
private ILogger logger;
@ -32,13 +34,14 @@ namespace SafeExamBrowser.Browser.Handlers
internal event DownloadRequestedEventHandler ConfigurationDownloadRequested;
internal event DownloadUpdatedEventHandler DownloadUpdated;
internal DownloadHandler(AppConfig appConfig, BrowserSettings settings, ILogger logger)
internal DownloadHandler(AppConfig appConfig, ILogger logger, BrowserSettings settings, WindowSettings windowSettings)
{
this.appConfig = appConfig;
this.callbacks = new ConcurrentDictionary<int, DownloadFinishedCallback>();
this.downloads = new ConcurrentDictionary<int, Guid>();
this.logger = logger;
this.settings = settings;
this.windowSettings = windowSettings;
}
public void OnBeforeDownload(IWebBrowser webBrowser, IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
@ -52,7 +55,7 @@ namespace SafeExamBrowser.Browser.Handlers
isConfigurationFile |= string.Equals(appConfig.ConfigurationFileExtension, uriExtension, StringComparison.OrdinalIgnoreCase);
isConfigurationFile |= string.Equals(appConfig.ConfigurationFileMimeType, downloadItem.MimeType, StringComparison.OrdinalIgnoreCase);
logger.Debug($"Detected download request for '{uri}'.");
logger.Debug($"Detected download request{(windowSettings.UrlPolicy.CanLog() ? $" for '{uri}'" : "")}.");
if (isConfigurationFile)
{
@ -64,7 +67,7 @@ namespace SafeExamBrowser.Browser.Handlers
}
else
{
logger.Info($"Aborted download request for '{uri}', as downloading is not allowed.");
logger.Info($"Aborted download request{(windowSettings.UrlPolicy.CanLog() ? $" for '{uri}'" : "")}, as downloading is not allowed.");
}
}
@ -88,7 +91,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (downloadItem.IsComplete || downloadItem.IsCancelled)
{
logger.Debug($"Download of '{downloadItem.Url}' {(downloadItem.IsComplete ? "is complete" : "was cancelled")}.");
logger.Debug($"Download of '{downloadItem.FullPath}' {(downloadItem.IsComplete ? "is complete" : "was cancelled")}.");
if (callbacks.TryRemove(downloadItem.Id, out DownloadFinishedCallback finished) && finished != null)
{

View file

@ -14,6 +14,7 @@ using SafeExamBrowser.Browser.Events;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.Settings.Browser.Filter;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
using Request = SafeExamBrowser.Browser.Contracts.Filters.Request;
@ -26,6 +27,7 @@ namespace SafeExamBrowser.Browser.Handlers
private ILogger logger;
private string quitUrlPattern;
private ResourceHandler resourceHandler;
private WindowSettings windowSettings;
private BrowserSettings settings;
internal event UrlEventHandler QuitUrlVisited;
@ -35,14 +37,16 @@ namespace SafeExamBrowser.Browser.Handlers
AppConfig appConfig,
IRequestFilter filter,
ILogger logger,
BrowserSettings settings,
ResourceHandler resourceHandler,
BrowserSettings settings,
WindowSettings windowSettings,
IText text)
{
this.filter = filter;
this.logger = logger;
this.settings = settings;
this.resourceHandler = resourceHandler;
this.settings = settings;
this.windowSettings = windowSettings;
}
protected override bool GetAuthCredentials(IWebBrowser webBrowser, IBrowser browser, string originUrl, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
@ -105,7 +109,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (isQuitUrl)
{
logger.Debug($"Detected quit URL '{request.Url}'.");
logger.Debug($"Detected quit URL{(windowSettings.UrlPolicy.CanLog() ? $"'{request.Url}'" : "")}.");
}
}
@ -123,7 +127,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (result == FilterResult.Block)
{
block = true;
logger.Info($"Blocked main request for '{request.Url}' ({request.ResourceType}, {request.TransitionType}).");
logger.Info($"Blocked main request{(windowSettings.UrlPolicy.CanLog() ? $" for '{request.Url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
}
}
@ -134,7 +138,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (result == FilterResult.Block)
{
block = true;
logger.Info($"Blocked content request for '{request.Url}' ({request.ResourceType}, {request.TransitionType}).");
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{request.Url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
}
}

View file

@ -22,6 +22,7 @@ using SafeExamBrowser.Browser.Pages;
using SafeExamBrowser.Configuration.Contracts;
using SafeExamBrowser.I18n.Contracts;
using SafeExamBrowser.Logging.Contracts;
using SafeExamBrowser.Settings.Browser;
using SafeExamBrowser.Settings.Browser.Filter;
using BrowserSettings = SafeExamBrowser.Settings.Browser.BrowserSettings;
using Request = SafeExamBrowser.Browser.Contracts.Filters.Request;
@ -39,11 +40,18 @@ namespace SafeExamBrowser.Browser.Handlers
private ILogger logger;
private IResourceHandler pageHandler;
private BrowserSettings settings;
private WindowSettings windowSettings;
private IText text;
internal event SessionIdentifierDetectedEventHandler SessionIdentifierDetected;
internal ResourceHandler(AppConfig appConfig, BrowserSettings settings, IRequestFilter filter, ILogger logger, IText text)
internal ResourceHandler(
AppConfig appConfig,
IRequestFilter filter,
ILogger logger,
BrowserSettings settings,
WindowSettings windowSettings,
IText text)
{
this.appConfig = appConfig;
this.algorithm = new SHA256Managed();
@ -51,6 +59,7 @@ namespace SafeExamBrowser.Browser.Handlers
this.htmlLoader = new HtmlLoader(text);
this.logger = logger;
this.settings = settings;
this.windowSettings = windowSettings;
this.text = text;
}
@ -138,7 +147,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (result == FilterResult.Block)
{
block = true;
logger.Info($"Blocked content request for '{request.Url}' ({request.ResourceType}, {request.TransitionType}).");
logger.Info($"Blocked content request{(windowSettings.UrlPolicy.CanLog() ? $" for '{request.Url}'" : "")} ({request.ResourceType}, {request.TransitionType}).");
}
}
@ -183,7 +192,7 @@ namespace SafeExamBrowser.Browser.Handlers
if (redirect)
{
logger.Info($"Redirecting to '{url}' to disable PDF reader toolbar.");
logger.Info($"Redirecting{(windowSettings.UrlPolicy.CanLog() ? $" to '{url}'" : "")} to disable PDF reader toolbar.");
}
return redirect;

View file

@ -57,6 +57,9 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
case Keys.Browser.AdditionalWindow.ShowReloadWarning:
MapShowReloadWarningAdditionalWindow(settings, value);
break;
case Keys.Browser.AdditionalWindow.UrlPolicy:
MapUrlPolicy(settings.Browser.AdditionalWindow, value);
break;
case Keys.Browser.AdditionalWindow.WindowHeight:
MapWindowHeightAdditionalWindow(settings, value);
break;
@ -102,6 +105,9 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
case Keys.Browser.MainWindow.ShowReloadWarning:
MapShowReloadWarning(settings, value);
break;
case Keys.Browser.MainWindow.UrlPolicy:
MapUrlPolicy(settings.Browser.MainWindow, value);
break;
case Keys.Browser.MainWindow.WindowHeight:
MapWindowHeightMainWindow(settings, value);
break;
@ -434,6 +440,33 @@ namespace SafeExamBrowser.Configuration.ConfigurationData.DataMapping
}
}
private void MapUrlPolicy(WindowSettings settings, object value)
{
const int ALWAYS = 3;
const int BEFORE_TITLE = 2;
const int LOAD_ERROR = 1;
const int NEVER = 0;
if (value is int policy)
{
switch (policy)
{
case ALWAYS:
settings.UrlPolicy = UrlPolicy.Always;
break;
case BEFORE_TITLE:
settings.UrlPolicy = UrlPolicy.BeforeTitle;
break;
case LOAD_ERROR:
settings.UrlPolicy = UrlPolicy.LoadError;
break;
case NEVER:
settings.UrlPolicy = UrlPolicy.Never;
break;
}
}
}
private void MapUserAgentMode(IDictionary<string, object> rawData, AppSettings settings)
{
const int DEFAULT = 0;

View file

@ -114,6 +114,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
settings.Browser.AdditionalWindow.RelativeWidth = 50;
settings.Browser.AdditionalWindow.ShowReloadWarning = false;
settings.Browser.AdditionalWindow.ShowToolbar = false;
settings.Browser.AdditionalWindow.UrlPolicy = UrlPolicy.Never;
settings.Browser.AllowConfigurationDownloads = true;
settings.Browser.AllowCustomDownAndUploadLocation = false;
settings.Browser.AllowDownloads = true;
@ -136,6 +137,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
settings.Browser.MainWindow.RelativeWidth = 100;
settings.Browser.MainWindow.ShowReloadWarning = true;
settings.Browser.MainWindow.ShowToolbar = false;
settings.Browser.MainWindow.UrlPolicy = UrlPolicy.Never;
settings.Browser.PopupPolicy = PopupPolicy.Allow;
settings.Browser.Proxy.Policy = ProxyPolicy.System;
settings.Browser.ResetOnQuitUrl = false;

View file

@ -78,6 +78,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
internal const string AllowNavigation = "newBrowserWindowNavigation";
internal const string AllowReload = "newBrowserWindowAllowReload";
internal const string ShowReloadWarning = "newBrowserWindowShowReloadWarning";
internal const string UrlPolicy = "newBrowserWindowShowURL";
internal const string WindowHeight = "newBrowserWindowByLinkHeight";
internal const string WindowWidth = "newBrowserWindowByLinkWidth";
internal const string WindowPosition = "newBrowserWindowByLinkPositioning";
@ -100,6 +101,7 @@ namespace SafeExamBrowser.Configuration.ConfigurationData
internal const string AllowNavigation = "allowBrowsingBackForward";
internal const string AllowReload = "browserWindowAllowReload";
internal const string ShowReloadWarning = "showReloadWarning";
internal const string UrlPolicy = "browserWindowShowURL";
internal const string WindowHeight = "mainBrowserWindowHeight";
internal const string WindowMode = "browserViewMode";
internal const string WindowWidth = "mainBrowserWindowWidth";

View file

@ -0,0 +1,55 @@
/*
* Copyright (c) 2020 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
namespace SafeExamBrowser.Settings.Browser
{
/// <summary>
/// Defines all policies for handling of URLs in the user interface and log.
/// </summary>
public enum UrlPolicy
{
/// <summary>
/// Always show the URL of a resource instead of the title. Log URLs normally.
/// </summary>
Always,
/// <summary>
/// Show the URL until the title of a resource is available. Log URLs normally.
/// </summary>
BeforeTitle,
/// <summary>
/// Only show the URL on load errors, otherwise show the title of a resource. Only log URLs in error messages.
/// </summary>
LoadError,
/// <summary>
/// Never show the URL of a resource and do not log any URLs.
/// </summary>
Never
}
public static class UrlPolicyExtensions
{
/// <summary>
/// Indicates whether URLs may be logged normally.
/// </summary>
public static bool CanLog(this UrlPolicy policy)
{
return policy == UrlPolicy.Always || policy == UrlPolicy.BeforeTitle;
}
/// <summary>
/// Indicates whether URLs may be logged in case of an error.
/// </summary>
public static bool CanLogError(this UrlPolicy policy)
{
return policy.CanLog() || policy == UrlPolicy.LoadError;
}
}
}

View file

@ -80,5 +80,10 @@ namespace SafeExamBrowser.Settings.Browser
/// Determines whether the window toolbar is visible.
/// </summary>
public bool ShowToolbar { get; set; }
/// <summary>
/// Determines how URLs are handled in the user interface and log.
/// </summary>
public UrlPolicy UrlPolicy { get; set; }
}
}

View file

@ -59,6 +59,7 @@
<Compile Include="Applications\WhitelistApplication.cs" />
<Compile Include="Browser\FilterSettings.cs" />
<Compile Include="Browser\BrowserSettings.cs" />
<Compile Include="Browser\UrlPolicy.cs" />
<Compile Include="Browser\WindowPosition.cs" />
<Compile Include="Browser\WindowSettings.cs" />
<Compile Include="Browser\Filter\FilterResult.cs" />

View file

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:fa="http://schemas.fontawesome.io/icons/"
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Desktop.Controls"
mc:Ignorable="d" Title="BrowserWindow" Background="#FFF0F0F0" Height="500" Width="750" MinHeight="250" MinWidth="250" Icon="../Images/SafeExamBrowser.ico">
mc:Ignorable="d" Background="#FFF0F0F0" Height="500" Width="750" MinHeight="250" MinWidth="250" Icon="../Images/SafeExamBrowser.ico">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View file

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:fa="http://schemas.fontawesome.io/icons/"
xmlns:local="clr-namespace:SafeExamBrowser.UserInterface.Mobile.Controls"
mc:Ignorable="d" Title="BrowserWindow" Background="#FFF0F0F0" FontSize="16" Height="500" Width="750" MinHeight="250" MinWidth="250" Icon="../Images/SafeExamBrowser.ico">
mc:Ignorable="d" Background="#FFF0F0F0" FontSize="16" Height="500" Width="750" MinHeight="250" MinWidth="250" Icon="../Images/SafeExamBrowser.ico">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>

View file

@ -145,6 +145,8 @@ namespace SebWindowsConfig
public const String KeyNewBrowserWindowByLinkWidth = "newBrowserWindowByLinkWidth";
public const String KeyNewBrowserWindowByLinkHeight = "newBrowserWindowByLinkHeight";
public const String KeyNewBrowserWindowByLinkPositioning = "newBrowserWindowByLinkPositioning";
public const String KeyNewBrowserWindowUrlPolicy = "newBrowserWindowShowURL";
public const String KeyMainBrowserWindowUrlPolicy = "browserWindowShowURL";
public const String KeyEnablePlugIns = "enablePlugIns";
public const String KeyEnableJava = "enableJava";
public const String KeyEnableJavaScript = "enableJavaScript";
@ -658,7 +660,9 @@ namespace SebWindowsConfig
SEBSettings.settingsDefault.Add(SEBSettings.KeyNewBrowserWindowByLinkWidth , "1000");
SEBSettings.settingsDefault.Add(SEBSettings.KeyNewBrowserWindowByLinkHeight , "100%");
SEBSettings.settingsDefault.Add(SEBSettings.KeyNewBrowserWindowByLinkPositioning , 2);
SEBSettings.settingsDefault.Add(SEBSettings.KeyNewBrowserWindowUrlPolicy , 0);
SEBSettings.settingsDefault.Add(SEBSettings.KeyMainBrowserWindowUrlPolicy, 0);
SEBSettings.settingsDefault.Add(SEBSettings.KeyEnablePlugIns , true);
SEBSettings.settingsDefault.Add(SEBSettings.KeyEnableJava , false);
SEBSettings.settingsDefault.Add(SEBSettings.KeyEnableJavaScript , true);

View file

@ -30,8 +30,8 @@ namespace SebWindowsConfig
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SebWindowsConfigForm));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle();
this.openFileDialogSebConfigFile = new System.Windows.Forms.OpenFileDialog();
this.saveFileDialogSebConfigFile = new System.Windows.Forms.SaveFileDialog();
this.imageListTabIcons = new System.Windows.Forms.ImageList(this.components);
@ -229,6 +229,9 @@ namespace SebWindowsConfig
this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.checkBoxMonitorProcesses = new System.Windows.Forms.CheckBox();
this.tabPageExam = new System.Windows.Forms.TabPage();
this.groupBox17 = new System.Windows.Forms.GroupBox();
this.label23 = new System.Windows.Forms.Label();
this.checkBoxUseStartUrlQuery = new System.Windows.Forms.CheckBox();
this.groupBox15 = new System.Windows.Forms.GroupBox();
this.label22 = new System.Windows.Forms.Label();
this.textBoxReconfigurationUrl = new System.Windows.Forms.TextBox();
@ -275,6 +278,18 @@ namespace SebWindowsConfig
this.checkBoxOpenDownloads = new System.Windows.Forms.CheckBox();
this.checkBoxAllowDownUploads = new System.Windows.Forms.CheckBox();
this.tabPageBrowser = new System.Windows.Forms.TabPage();
this.groupBox19 = new System.Windows.Forms.GroupBox();
this.label25 = new System.Windows.Forms.Label();
this.comboBoxUrlPolicyNewWindow = new System.Windows.Forms.ComboBox();
this.checkBoxAllowNavigationNewWindow = new System.Windows.Forms.CheckBox();
this.checkBoxAllowReloadNewWindow = new System.Windows.Forms.CheckBox();
this.checkBoxShowReloadWarningNewWindow = new System.Windows.Forms.CheckBox();
this.groupBox18 = new System.Windows.Forms.GroupBox();
this.label24 = new System.Windows.Forms.Label();
this.comboBoxUrlPolicyMainWindow = new System.Windows.Forms.ComboBox();
this.checkBoxAllowBrowsingBackForward = new System.Windows.Forms.CheckBox();
this.checkBoxShowReloadWarning = new System.Windows.Forms.CheckBox();
this.checkBoxAllowReload = new System.Windows.Forms.CheckBox();
this.label12 = new System.Windows.Forms.Label();
this.textBoxUserAgent = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
@ -299,16 +314,10 @@ namespace SebWindowsConfig
this.groupBox11 = new System.Windows.Forms.GroupBox();
this.checkBoxAllowFind = new System.Windows.Forms.CheckBox();
this.checkBoxAllowPdfReaderToolbar = new System.Windows.Forms.CheckBox();
this.checkBoxShowReloadWarningNewWindow = new System.Windows.Forms.CheckBox();
this.checkBoxAllowReloadNewWindow = new System.Windows.Forms.CheckBox();
this.checkBoxAllowVideoCapture = new System.Windows.Forms.CheckBox();
this.checkBoxAllowReload = new System.Windows.Forms.CheckBox();
this.checkBoxAllowNavigationNewWindow = new System.Windows.Forms.CheckBox();
this.checkBoxAllowAudioCapture = new System.Windows.Forms.CheckBox();
this.checkBoxShowReloadWarning = new System.Windows.Forms.CheckBox();
this.checkBoxDisableLocalStorage = new System.Windows.Forms.CheckBox();
this.checkBoxRemoveProfile = new System.Windows.Forms.CheckBox();
this.checkBoxAllowBrowsingBackForward = new System.Windows.Forms.CheckBox();
this.checkBoxEnablePlugIns = new System.Windows.Forms.CheckBox();
this.checkBoxBlockPopUpWindows = new System.Windows.Forms.CheckBox();
this.checkBoxEnableJavaScript = new System.Windows.Forms.CheckBox();
@ -447,9 +456,6 @@ namespace SebWindowsConfig
this.editDuplicateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.configureClientToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.applyAndStartSEBToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.groupBox17 = new System.Windows.Forms.GroupBox();
this.checkBoxUseStartUrlQuery = new System.Windows.Forms.CheckBox();
this.label23 = new System.Windows.Forms.Label();
this.tabPageHookedKeys.SuspendLayout();
this.groupBoxFunctionKeys.SuspendLayout();
this.groupBoxSpecialKeys.SuspendLayout();
@ -477,6 +483,7 @@ namespace SebWindowsConfig
this.groupBoxProhibitedProcess.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridViewProhibitedProcesses)).BeginInit();
this.tabPageExam.SuspendLayout();
this.groupBox17.SuspendLayout();
this.groupBox15.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox9.SuspendLayout();
@ -484,6 +491,8 @@ namespace SebWindowsConfig
this.groupBox7.SuspendLayout();
this.tabPageDownUploads.SuspendLayout();
this.tabPageBrowser.SuspendLayout();
this.groupBox19.SuspendLayout();
this.groupBox18.SuspendLayout();
this.groupBox14.SuspendLayout();
this.groupBox13.SuspendLayout();
this.groupBox12.SuspendLayout();
@ -505,7 +514,6 @@ namespace SebWindowsConfig
this.groupBoxExitSequence.SuspendLayout();
this.tabControlSebWindowsConfig.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.groupBox17.SuspendLayout();
this.SuspendLayout();
//
// openFileDialogSebConfigFile
@ -1820,8 +1828,8 @@ namespace SebWindowsConfig
//
// Type
//
dataGridViewCellStyle3.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle3;
dataGridViewCellStyle11.BackColor = System.Drawing.Color.Silver;
this.Type.DefaultCellStyle = dataGridViewCellStyle11;
this.Type.HeaderText = "Type";
this.Type.Name = "Type";
this.Type.ReadOnly = true;
@ -3032,6 +3040,38 @@ namespace SebWindowsConfig
this.tabPageExam.Text = " Exam";
this.tabPageExam.UseVisualStyleBackColor = true;
//
// groupBox17
//
this.groupBox17.Controls.Add(this.label23);
this.groupBox17.Controls.Add(this.checkBoxUseStartUrlQuery);
this.groupBox17.Location = new System.Drawing.Point(605, 471);
this.groupBox17.Name = "groupBox17";
this.groupBox17.Size = new System.Drawing.Size(610, 86);
this.groupBox17.TabIndex = 124;
this.groupBox17.TabStop = false;
this.groupBox17.Text = "Query String Parameter";
//
// label23
//
this.label23.Location = new System.Drawing.Point(12, 24);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(592, 27);
this.label23.TabIndex = 1;
this.label23.Text = resources.GetString("label23.Text");
//
// checkBoxUseStartUrlQuery
//
this.checkBoxUseStartUrlQuery.AutoSize = true;
this.checkBoxUseStartUrlQuery.Location = new System.Drawing.Point(15, 59);
this.checkBoxUseStartUrlQuery.Name = "checkBoxUseStartUrlQuery";
this.checkBoxUseStartUrlQuery.Size = new System.Drawing.Size(133, 17);
this.checkBoxUseStartUrlQuery.TabIndex = 0;
this.checkBoxUseStartUrlQuery.Text = "Allow Query Parameter";
this.toolTip1.SetToolTip(this.checkBoxUseStartUrlQuery, "If a seb(s):// link contains an additional query string, SEB appends it to the ex" +
"am\'s Start URL");
this.checkBoxUseStartUrlQuery.UseVisualStyleBackColor = true;
this.checkBoxUseStartUrlQuery.CheckedChanged += new System.EventHandler(this.checkBoxUseStartUrlQuery_CheckedChanged);
//
// groupBox15
//
this.groupBox15.Controls.Add(this.label22);
@ -3597,6 +3637,8 @@ namespace SebWindowsConfig
//
// tabPageBrowser
//
this.tabPageBrowser.Controls.Add(this.groupBox19);
this.tabPageBrowser.Controls.Add(this.groupBox18);
this.tabPageBrowser.Controls.Add(this.label12);
this.tabPageBrowser.Controls.Add(this.textBoxUserAgent);
this.tabPageBrowser.Controls.Add(this.label11);
@ -3621,6 +3663,156 @@ namespace SebWindowsConfig
this.tabPageBrowser.Text = "Browser";
this.tabPageBrowser.UseVisualStyleBackColor = true;
//
// groupBox19
//
this.groupBox19.Controls.Add(this.label25);
this.groupBox19.Controls.Add(this.comboBoxUrlPolicyNewWindow);
this.groupBox19.Controls.Add(this.checkBoxAllowNavigationNewWindow);
this.groupBox19.Controls.Add(this.checkBoxAllowReloadNewWindow);
this.groupBox19.Controls.Add(this.checkBoxShowReloadWarningNewWindow);
this.groupBox19.Location = new System.Drawing.Point(281, 342);
this.groupBox19.Name = "groupBox19";
this.groupBox19.Size = new System.Drawing.Size(265, 108);
this.groupBox19.TabIndex = 128;
this.groupBox19.TabStop = false;
this.groupBox19.Text = "Restrictions in Additional Windows";
//
// label25
//
this.label25.AutoSize = true;
this.label25.Location = new System.Drawing.Point(38, 82);
this.label25.Name = "label25";
this.label25.Size = new System.Drawing.Size(64, 13);
this.label25.TabIndex = 15;
this.label25.Text = "Show URLs";
this.toolTip1.SetToolTip(this.label25, "For some exam scenarios, you might want to keep URLs secret");
//
// comboBoxUrlPolicyNewWindow
//
this.comboBoxUrlPolicyNewWindow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxUrlPolicyNewWindow.FormattingEnabled = true;
this.comboBoxUrlPolicyNewWindow.Location = new System.Drawing.Point(126, 79);
this.comboBoxUrlPolicyNewWindow.Name = "comboBoxUrlPolicyNewWindow";
this.comboBoxUrlPolicyNewWindow.Size = new System.Drawing.Size(121, 21);
this.comboBoxUrlPolicyNewWindow.TabIndex = 14;
this.toolTip1.SetToolTip(this.comboBoxUrlPolicyNewWindow, "For some exam scenarios, you might want to keep URLs secret");
this.comboBoxUrlPolicyNewWindow.SelectedIndexChanged += new System.EventHandler(this.comboBoxUrlPolicyNewWindow_SelectedIndexChanged);
//
// checkBoxAllowNavigationNewWindow
//
this.checkBoxAllowNavigationNewWindow.AutoSize = true;
this.checkBoxAllowNavigationNewWindow.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowNavigationNewWindow.Location = new System.Drawing.Point(12, 20);
this.checkBoxAllowNavigationNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowNavigationNewWindow.Name = "checkBoxAllowNavigationNewWindow";
this.checkBoxAllowNavigationNewWindow.Size = new System.Drawing.Size(206, 17);
this.checkBoxAllowNavigationNewWindow.TabIndex = 8;
this.checkBoxAllowNavigationNewWindow.Text = "Allow navigating in additional windows";
this.toolTip1.SetToolTip(this.checkBoxAllowNavigationNewWindow, resources.GetString("checkBoxAllowNavigationNewWindow.ToolTip"));
this.checkBoxAllowNavigationNewWindow.UseVisualStyleBackColor = true;
this.checkBoxAllowNavigationNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxAllowNavigationNewWindow_CheckedChanged);
//
// checkBoxAllowReloadNewWindow
//
this.checkBoxAllowReloadNewWindow.AutoSize = true;
this.checkBoxAllowReloadNewWindow.Location = new System.Drawing.Point(12, 41);
this.checkBoxAllowReloadNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowReloadNewWindow.Name = "checkBoxAllowReloadNewWindow";
this.checkBoxAllowReloadNewWindow.Size = new System.Drawing.Size(186, 17);
this.checkBoxAllowReloadNewWindow.TabIndex = 12;
this.checkBoxAllowReloadNewWindow.Text = "Allow reload in additional windows";
this.toolTip1.SetToolTip(this.checkBoxAllowReloadNewWindow, "Allow reloading additional windows with F5 or reload button (if displayed)");
this.checkBoxAllowReloadNewWindow.UseVisualStyleBackColor = true;
this.checkBoxAllowReloadNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxAllowReloadNewWindow_CheckedChanged);
//
// checkBoxShowReloadWarningNewWindow
//
this.checkBoxShowReloadWarningNewWindow.AutoSize = true;
this.checkBoxShowReloadWarningNewWindow.Location = new System.Drawing.Point(12, 60);
this.checkBoxShowReloadWarningNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxShowReloadWarningNewWindow.Name = "checkBoxShowReloadWarningNewWindow";
this.checkBoxShowReloadWarningNewWindow.Size = new System.Drawing.Size(228, 17);
this.checkBoxShowReloadWarningNewWindow.TabIndex = 13;
this.checkBoxShowReloadWarningNewWindow.Text = "Show reload warning in additional windows";
this.toolTip1.SetToolTip(this.checkBoxShowReloadWarningNewWindow, "User has to confirm reloading a web page with F5 or reload button");
this.checkBoxShowReloadWarningNewWindow.UseVisualStyleBackColor = true;
this.checkBoxShowReloadWarningNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxShowReloadWarningNewWindow_CheckedChanged);
//
// groupBox18
//
this.groupBox18.Controls.Add(this.label24);
this.groupBox18.Controls.Add(this.comboBoxUrlPolicyMainWindow);
this.groupBox18.Controls.Add(this.checkBoxAllowBrowsingBackForward);
this.groupBox18.Controls.Add(this.checkBoxShowReloadWarning);
this.groupBox18.Controls.Add(this.checkBoxAllowReload);
this.groupBox18.Location = new System.Drawing.Point(24, 342);
this.groupBox18.Name = "groupBox18";
this.groupBox18.Size = new System.Drawing.Size(239, 108);
this.groupBox18.TabIndex = 127;
this.groupBox18.TabStop = false;
this.groupBox18.Text = "Restrictions in Exam Window";
//
// label24
//
this.label24.AutoSize = true;
this.label24.Location = new System.Drawing.Point(21, 82);
this.label24.Name = "label24";
this.label24.Size = new System.Drawing.Size(64, 13);
this.label24.TabIndex = 11;
this.label24.Text = "Show URLs";
this.toolTip1.SetToolTip(this.label24, "For some exam scenarios, you might want to keep URLs secret");
//
// comboBoxUrlPolicyMainWindow
//
this.comboBoxUrlPolicyMainWindow.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBoxUrlPolicyMainWindow.FormattingEnabled = true;
this.comboBoxUrlPolicyMainWindow.Location = new System.Drawing.Point(102, 80);
this.comboBoxUrlPolicyMainWindow.Name = "comboBoxUrlPolicyMainWindow";
this.comboBoxUrlPolicyMainWindow.Size = new System.Drawing.Size(121, 21);
this.comboBoxUrlPolicyMainWindow.TabIndex = 10;
this.toolTip1.SetToolTip(this.comboBoxUrlPolicyMainWindow, "For some exam scenarios, you might want to keep URLs secret");
this.comboBoxUrlPolicyMainWindow.SelectedIndexChanged += new System.EventHandler(this.comboBoxUrlPolicyMainWindow_SelectedIndexChanged);
//
// checkBoxAllowBrowsingBackForward
//
this.checkBoxAllowBrowsingBackForward.AutoSize = true;
this.checkBoxAllowBrowsingBackForward.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowBrowsingBackForward.Location = new System.Drawing.Point(14, 20);
this.checkBoxAllowBrowsingBackForward.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowBrowsingBackForward.Name = "checkBoxAllowBrowsingBackForward";
this.checkBoxAllowBrowsingBackForward.Size = new System.Drawing.Size(209, 17);
this.checkBoxAllowBrowsingBackForward.TabIndex = 4;
this.checkBoxAllowBrowsingBackForward.Text = "Allow navigating back/forward in exam";
this.toolTip1.SetToolTip(this.checkBoxAllowBrowsingBackForward, resources.GetString("checkBoxAllowBrowsingBackForward.ToolTip"));
this.checkBoxAllowBrowsingBackForward.UseVisualStyleBackColor = true;
this.checkBoxAllowBrowsingBackForward.CheckedChanged += new System.EventHandler(this.checkBoxAllowBrowsingBackForward_CheckedChanged);
//
// checkBoxShowReloadWarning
//
this.checkBoxShowReloadWarning.AutoSize = true;
this.checkBoxShowReloadWarning.Location = new System.Drawing.Point(14, 59);
this.checkBoxShowReloadWarning.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxShowReloadWarning.Name = "checkBoxShowReloadWarning";
this.checkBoxShowReloadWarning.Size = new System.Drawing.Size(164, 17);
this.checkBoxShowReloadWarning.TabIndex = 5;
this.checkBoxShowReloadWarning.Text = "Show reload warning in exam";
this.toolTip1.SetToolTip(this.checkBoxShowReloadWarning, "User has to confirm reloading a web page with F5 or reload button");
this.checkBoxShowReloadWarning.UseVisualStyleBackColor = true;
this.checkBoxShowReloadWarning.CheckedChanged += new System.EventHandler(this.checkBoxShowReloadWarning_CheckedChanged);
//
// checkBoxAllowReload
//
this.checkBoxAllowReload.AutoSize = true;
this.checkBoxAllowReload.Location = new System.Drawing.Point(14, 40);
this.checkBoxAllowReload.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowReload.Name = "checkBoxAllowReload";
this.checkBoxAllowReload.Size = new System.Drawing.Size(122, 17);
this.checkBoxAllowReload.TabIndex = 9;
this.checkBoxAllowReload.Text = "Allow reload in exam";
this.toolTip1.SetToolTip(this.checkBoxAllowReload, "Allow reload in the exam window with F5 or reload button (if displayed)");
this.checkBoxAllowReload.UseVisualStyleBackColor = true;
this.checkBoxAllowReload.CheckedChanged += new System.EventHandler(this.checkBoxAllowReload_CheckedChanged);
//
// label12
//
this.label12.AutoSize = true;
@ -3891,23 +4083,17 @@ namespace SebWindowsConfig
//
this.groupBox11.Controls.Add(this.checkBoxAllowFind);
this.groupBox11.Controls.Add(this.checkBoxAllowPdfReaderToolbar);
this.groupBox11.Controls.Add(this.checkBoxShowReloadWarningNewWindow);
this.groupBox11.Controls.Add(this.checkBoxAllowReloadNewWindow);
this.groupBox11.Controls.Add(this.checkBoxAllowVideoCapture);
this.groupBox11.Controls.Add(this.checkBoxAllowReload);
this.groupBox11.Controls.Add(this.checkBoxAllowNavigationNewWindow);
this.groupBox11.Controls.Add(this.checkBoxAllowAudioCapture);
this.groupBox11.Controls.Add(this.checkBoxShowReloadWarning);
this.groupBox11.Controls.Add(this.checkBoxDisableLocalStorage);
this.groupBox11.Controls.Add(this.checkBoxRemoveProfile);
this.groupBox11.Controls.Add(this.checkBoxAllowBrowsingBackForward);
this.groupBox11.Controls.Add(this.checkBoxEnablePlugIns);
this.groupBox11.Controls.Add(this.checkBoxBlockPopUpWindows);
this.groupBox11.Controls.Add(this.checkBoxEnableJavaScript);
this.groupBox11.Controls.Add(this.checkBoxEnableJava);
this.groupBox11.Location = new System.Drawing.Point(24, 202);
this.groupBox11.Name = "groupBox11";
this.groupBox11.Size = new System.Drawing.Size(522, 187);
this.groupBox11.Size = new System.Drawing.Size(522, 113);
this.groupBox11.TabIndex = 71;
this.groupBox11.TabStop = false;
this.groupBox11.Text = "Browser security";
@ -3915,7 +4101,7 @@ namespace SebWindowsConfig
// checkBoxAllowFind
//
this.checkBoxAllowFind.AutoSize = true;
this.checkBoxAllowFind.Location = new System.Drawing.Point(14, 81);
this.checkBoxAllowFind.Location = new System.Drawing.Point(14, 24);
this.checkBoxAllowFind.Name = "checkBoxAllowFind";
this.checkBoxAllowFind.Size = new System.Drawing.Size(106, 17);
this.checkBoxAllowFind.TabIndex = 15;
@ -3926,7 +4112,7 @@ namespace SebWindowsConfig
// checkBoxAllowPdfReaderToolbar
//
this.checkBoxAllowPdfReaderToolbar.AutoSize = true;
this.checkBoxAllowPdfReaderToolbar.Location = new System.Drawing.Point(14, 114);
this.checkBoxAllowPdfReaderToolbar.Location = new System.Drawing.Point(14, 49);
this.checkBoxAllowPdfReaderToolbar.Name = "checkBoxAllowPdfReaderToolbar";
this.checkBoxAllowPdfReaderToolbar.Size = new System.Drawing.Size(485, 17);
this.checkBoxAllowPdfReaderToolbar.TabIndex = 14;
@ -3935,32 +4121,6 @@ namespace SebWindowsConfig
this.checkBoxAllowPdfReaderToolbar.UseVisualStyleBackColor = true;
this.checkBoxAllowPdfReaderToolbar.CheckedChanged += new System.EventHandler(this.checkBoxAllowPdfReaderToolbar_CheckedChanged);
//
// checkBoxShowReloadWarningNewWindow
//
this.checkBoxShowReloadWarningNewWindow.AutoSize = true;
this.checkBoxShowReloadWarningNewWindow.Location = new System.Drawing.Point(259, 59);
this.checkBoxShowReloadWarningNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxShowReloadWarningNewWindow.Name = "checkBoxShowReloadWarningNewWindow";
this.checkBoxShowReloadWarningNewWindow.Size = new System.Drawing.Size(228, 17);
this.checkBoxShowReloadWarningNewWindow.TabIndex = 13;
this.checkBoxShowReloadWarningNewWindow.Text = "Show reload warning in additional windows";
this.toolTip1.SetToolTip(this.checkBoxShowReloadWarningNewWindow, "User has to confirm reloading a web page with F5 or reload button");
this.checkBoxShowReloadWarningNewWindow.UseVisualStyleBackColor = true;
this.checkBoxShowReloadWarningNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxShowReloadWarningNewWindow_CheckedChanged);
//
// checkBoxAllowReloadNewWindow
//
this.checkBoxAllowReloadNewWindow.AutoSize = true;
this.checkBoxAllowReloadNewWindow.Location = new System.Drawing.Point(259, 40);
this.checkBoxAllowReloadNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowReloadNewWindow.Name = "checkBoxAllowReloadNewWindow";
this.checkBoxAllowReloadNewWindow.Size = new System.Drawing.Size(186, 17);
this.checkBoxAllowReloadNewWindow.TabIndex = 12;
this.checkBoxAllowReloadNewWindow.Text = "Allow reload in additional windows";
this.toolTip1.SetToolTip(this.checkBoxAllowReloadNewWindow, "Allow reloading additional windows with F5 or reload button (if displayed)");
this.checkBoxAllowReloadNewWindow.UseVisualStyleBackColor = true;
this.checkBoxAllowReloadNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxAllowReloadNewWindow_CheckedChanged);
//
// checkBoxAllowVideoCapture
//
this.checkBoxAllowVideoCapture.AutoSize = true;
@ -3976,33 +4136,6 @@ namespace SebWindowsConfig
this.checkBoxAllowVideoCapture.Visible = false;
this.checkBoxAllowVideoCapture.CheckedChanged += new System.EventHandler(this.checkBoxAllowVideoCapture_CheckedChanged);
//
// checkBoxAllowReload
//
this.checkBoxAllowReload.AutoSize = true;
this.checkBoxAllowReload.Location = new System.Drawing.Point(14, 40);
this.checkBoxAllowReload.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowReload.Name = "checkBoxAllowReload";
this.checkBoxAllowReload.Size = new System.Drawing.Size(122, 17);
this.checkBoxAllowReload.TabIndex = 9;
this.checkBoxAllowReload.Text = "Allow reload in exam";
this.toolTip1.SetToolTip(this.checkBoxAllowReload, "Allow reload in the exam window with F5 or reload button (if displayed)");
this.checkBoxAllowReload.UseVisualStyleBackColor = true;
this.checkBoxAllowReload.CheckedChanged += new System.EventHandler(this.checkBoxAllowReload_CheckedChanged);
//
// checkBoxAllowNavigationNewWindow
//
this.checkBoxAllowNavigationNewWindow.AutoSize = true;
this.checkBoxAllowNavigationNewWindow.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowNavigationNewWindow.Location = new System.Drawing.Point(259, 19);
this.checkBoxAllowNavigationNewWindow.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowNavigationNewWindow.Name = "checkBoxAllowNavigationNewWindow";
this.checkBoxAllowNavigationNewWindow.Size = new System.Drawing.Size(206, 17);
this.checkBoxAllowNavigationNewWindow.TabIndex = 8;
this.checkBoxAllowNavigationNewWindow.Text = "Allow navigating in additional windows";
this.toolTip1.SetToolTip(this.checkBoxAllowNavigationNewWindow, resources.GetString("checkBoxAllowNavigationNewWindow.ToolTip"));
this.checkBoxAllowNavigationNewWindow.UseVisualStyleBackColor = true;
this.checkBoxAllowNavigationNewWindow.CheckedChanged += new System.EventHandler(this.checkBoxAllowNavigationNewWindow_CheckedChanged);
//
// checkBoxAllowAudioCapture
//
this.checkBoxAllowAudioCapture.AutoSize = true;
@ -4018,19 +4151,6 @@ namespace SebWindowsConfig
this.checkBoxAllowAudioCapture.Visible = false;
this.checkBoxAllowAudioCapture.CheckedChanged += new System.EventHandler(this.checkBoxAllowAudioCapture_CheckedChanged);
//
// checkBoxShowReloadWarning
//
this.checkBoxShowReloadWarning.AutoSize = true;
this.checkBoxShowReloadWarning.Location = new System.Drawing.Point(14, 59);
this.checkBoxShowReloadWarning.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxShowReloadWarning.Name = "checkBoxShowReloadWarning";
this.checkBoxShowReloadWarning.Size = new System.Drawing.Size(164, 17);
this.checkBoxShowReloadWarning.TabIndex = 5;
this.checkBoxShowReloadWarning.Text = "Show reload warning in exam";
this.toolTip1.SetToolTip(this.checkBoxShowReloadWarning, "User has to confirm reloading a web page with F5 or reload button");
this.checkBoxShowReloadWarning.UseVisualStyleBackColor = true;
this.checkBoxShowReloadWarning.CheckedChanged += new System.EventHandler(this.checkBoxShowReloadWarning_CheckedChanged);
//
// checkBoxDisableLocalStorage
//
this.checkBoxDisableLocalStorage.AutoSize = true;
@ -4049,7 +4169,7 @@ namespace SebWindowsConfig
//
// checkBoxRemoveProfile
//
this.checkBoxRemoveProfile.Location = new System.Drawing.Point(14, 137);
this.checkBoxRemoveProfile.Location = new System.Drawing.Point(14, 66);
this.checkBoxRemoveProfile.Name = "checkBoxRemoveProfile";
this.checkBoxRemoveProfile.Size = new System.Drawing.Size(481, 36);
this.checkBoxRemoveProfile.TabIndex = 6;
@ -4059,20 +4179,6 @@ namespace SebWindowsConfig
this.checkBoxRemoveProfile.UseVisualStyleBackColor = true;
this.checkBoxRemoveProfile.CheckedChanged += new System.EventHandler(this.checkBoxRemoveProfile_CheckedChanged);
//
// checkBoxAllowBrowsingBackForward
//
this.checkBoxAllowBrowsingBackForward.AutoSize = true;
this.checkBoxAllowBrowsingBackForward.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAllowBrowsingBackForward.Location = new System.Drawing.Point(14, 20);
this.checkBoxAllowBrowsingBackForward.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxAllowBrowsingBackForward.Name = "checkBoxAllowBrowsingBackForward";
this.checkBoxAllowBrowsingBackForward.Size = new System.Drawing.Size(209, 17);
this.checkBoxAllowBrowsingBackForward.TabIndex = 4;
this.checkBoxAllowBrowsingBackForward.Text = "Allow navigating back/forward in exam";
this.toolTip1.SetToolTip(this.checkBoxAllowBrowsingBackForward, resources.GetString("checkBoxAllowBrowsingBackForward.ToolTip"));
this.checkBoxAllowBrowsingBackForward.UseVisualStyleBackColor = true;
this.checkBoxAllowBrowsingBackForward.CheckedChanged += new System.EventHandler(this.checkBoxAllowBrowsingBackForward_CheckedChanged);
//
// checkBoxEnablePlugIns
//
this.checkBoxEnablePlugIns.AutoSize = true;
@ -4150,7 +4256,7 @@ namespace SebWindowsConfig
// labelUseSEBWithoutBrowser
//
this.labelUseSEBWithoutBrowser.AutoSize = true;
this.labelUseSEBWithoutBrowser.Location = new System.Drawing.Point(55, 435);
this.labelUseSEBWithoutBrowser.Location = new System.Drawing.Point(55, 497);
this.labelUseSEBWithoutBrowser.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.labelUseSEBWithoutBrowser.Name = "labelUseSEBWithoutBrowser";
this.labelUseSEBWithoutBrowser.Size = new System.Drawing.Size(436, 13);
@ -4161,7 +4267,7 @@ namespace SebWindowsConfig
// checkBoxUseSebWithoutBrowser
//
this.checkBoxUseSebWithoutBrowser.AutoSize = true;
this.checkBoxUseSebWithoutBrowser.Location = new System.Drawing.Point(38, 415);
this.checkBoxUseSebWithoutBrowser.Location = new System.Drawing.Point(38, 477);
this.checkBoxUseSebWithoutBrowser.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxUseSebWithoutBrowser.Name = "checkBoxUseSebWithoutBrowser";
this.checkBoxUseSebWithoutBrowser.Size = new System.Drawing.Size(185, 17);
@ -4189,11 +4295,11 @@ namespace SebWindowsConfig
this.checkBoxBlockLinksHTML.Location = new System.Drawing.Point(281, 40);
this.checkBoxBlockLinksHTML.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
this.checkBoxBlockLinksHTML.Name = "checkBoxBlockLinksHTML";
this.checkBoxBlockLinksHTML.Size = new System.Drawing.Size(248, 17);
this.checkBoxBlockLinksHTML.Size = new System.Drawing.Size(218, 17);
this.checkBoxBlockLinksHTML.TabIndex = 1;
this.checkBoxBlockLinksHTML.Text = "block when directing to a different server (Mac)";
this.toolTip1.SetToolTip(this.checkBoxBlockLinksHTML, "Hyperlinks which direct to a different host than the one of the current main page" +
" will be ignored.");
this.checkBoxBlockLinksHTML.Text = "block when directing to a different server";
this.toolTip1.SetToolTip(this.checkBoxBlockLinksHTML, "Links which direct to a different host than the one of the current main page will" +
" be ignored.");
this.checkBoxBlockLinksHTML.UseVisualStyleBackColor = true;
this.checkBoxBlockLinksHTML.CheckedChanged += new System.EventHandler(this.checkBoxBlockLinksHTML_CheckedChanged);
//
@ -4420,8 +4526,8 @@ namespace SebWindowsConfig
// spellCheckerDictionaryFilesColumn
//
this.spellCheckerDictionaryFilesColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle4;
dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.spellCheckerDictionaryFilesColumn.DefaultCellStyle = dataGridViewCellStyle12;
this.spellCheckerDictionaryFilesColumn.HeaderText = "Files";
this.spellCheckerDictionaryFilesColumn.Name = "spellCheckerDictionaryFilesColumn";
this.spellCheckerDictionaryFilesColumn.ReadOnly = true;
@ -5818,38 +5924,6 @@ namespace SebWindowsConfig
this.applyAndStartSEBToolStripMenuItem.Visible = false;
this.applyAndStartSEBToolStripMenuItem.Click += new System.EventHandler(this.applyAndStartSEBToolStripMenuItem_Click);
//
// groupBox17
//
this.groupBox17.Controls.Add(this.label23);
this.groupBox17.Controls.Add(this.checkBoxUseStartUrlQuery);
this.groupBox17.Location = new System.Drawing.Point(605, 471);
this.groupBox17.Name = "groupBox17";
this.groupBox17.Size = new System.Drawing.Size(610, 86);
this.groupBox17.TabIndex = 124;
this.groupBox17.TabStop = false;
this.groupBox17.Text = "Query String Parameter";
//
// checkBoxUseStartUrlQuery
//
this.checkBoxUseStartUrlQuery.AutoSize = true;
this.checkBoxUseStartUrlQuery.Location = new System.Drawing.Point(15, 59);
this.checkBoxUseStartUrlQuery.Name = "checkBoxUseStartUrlQuery";
this.checkBoxUseStartUrlQuery.Size = new System.Drawing.Size(133, 17);
this.checkBoxUseStartUrlQuery.TabIndex = 0;
this.checkBoxUseStartUrlQuery.Text = "Allow Query Parameter";
this.toolTip1.SetToolTip(this.checkBoxUseStartUrlQuery, "If a seb(s):// link contains an additional query string, SEB appends it to the ex" +
"am\'s Start URL");
this.checkBoxUseStartUrlQuery.UseVisualStyleBackColor = true;
this.checkBoxUseStartUrlQuery.CheckedChanged += new System.EventHandler(this.checkBoxUseStartUrlQuery_CheckedChanged);
//
// label23
//
this.label23.Location = new System.Drawing.Point(12, 24);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(592, 27);
this.label23.TabIndex = 1;
this.label23.Text = resources.GetString("label23.Text");
//
// SebWindowsConfigForm
//
this.AllowDrop = true;
@ -5917,6 +5991,8 @@ namespace SebWindowsConfig
((System.ComponentModel.ISupportInitialize)(this.dataGridViewProhibitedProcesses)).EndInit();
this.tabPageExam.ResumeLayout(false);
this.tabPageExam.PerformLayout();
this.groupBox17.ResumeLayout(false);
this.groupBox17.PerformLayout();
this.groupBox15.ResumeLayout(false);
this.groupBox15.PerformLayout();
this.groupBox2.ResumeLayout(false);
@ -5931,6 +6007,10 @@ namespace SebWindowsConfig
this.tabPageDownUploads.PerformLayout();
this.tabPageBrowser.ResumeLayout(false);
this.tabPageBrowser.PerformLayout();
this.groupBox19.ResumeLayout(false);
this.groupBox19.PerformLayout();
this.groupBox18.ResumeLayout(false);
this.groupBox18.PerformLayout();
this.groupBox14.ResumeLayout(false);
this.groupBox14.PerformLayout();
this.groupBox13.ResumeLayout(false);
@ -5969,8 +6049,6 @@ namespace SebWindowsConfig
this.tabControlSebWindowsConfig.ResumeLayout(false);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.groupBox17.ResumeLayout(false);
this.groupBox17.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -6397,6 +6475,12 @@ namespace SebWindowsConfig
private System.Windows.Forms.GroupBox groupBox17;
private System.Windows.Forms.Label label23;
private System.Windows.Forms.CheckBox checkBoxUseStartUrlQuery;
private System.Windows.Forms.GroupBox groupBox19;
private System.Windows.Forms.Label label25;
private System.Windows.Forms.ComboBox comboBoxUrlPolicyNewWindow;
private System.Windows.Forms.GroupBox groupBox18;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.ComboBox comboBoxUrlPolicyMainWindow;
}
}

View file

@ -527,6 +527,9 @@ namespace SebWindowsConfig
checkBoxSetVolumeLevel.Checked = ((bool) SEBSettings.settingsCurrent[SEBSettings.KeyAudioSetVolumeLevel]);
trackBarVolumeLevel.Value = ((int) SEBSettings.settingsCurrent[SEBSettings.KeyAudioVolumeLevel]);
comboBoxUrlPolicyMainWindow.SelectedIndex = (int) SEBSettings.settingsCurrent[SEBSettings.KeyMainBrowserWindowUrlPolicy];
comboBoxUrlPolicyNewWindow.SelectedIndex = (int) SEBSettings.settingsCurrent[SEBSettings.KeyNewBrowserWindowUrlPolicy];
// Group "Down/Uploads"
checkBoxAllowDownUploads.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyAllowDownUploads];
checkBoxAllowCustomDownloadLocation.Checked = (Boolean)SEBSettings.settingsCurrent[SEBSettings.KeyAllowCustomDownUploadLocation];
@ -4614,5 +4617,15 @@ namespace SebWindowsConfig
{
SEBSettings.settingsCurrent[SEBSettings.KeyUseStartUrlQuery] = checkBoxUseStartUrlQuery.Checked;
}
private void comboBoxUrlPolicyMainWindow_SelectedIndexChanged(object sender, EventArgs e)
{
SEBSettings.settingsCurrent[SEBSettings.KeyMainBrowserWindowUrlPolicy] = comboBoxUrlPolicyMainWindow.SelectedIndex;
}
private void comboBoxUrlPolicyNewWindow_SelectedIndexChanged(object sender, EventArgs e)
{
SEBSettings.settingsCurrent[SEBSettings.KeyNewBrowserWindowUrlPolicy] = comboBoxUrlPolicyNewWindow.SelectedIndex;
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -437,6 +437,16 @@ namespace SebWindowsConfig
comboBoxNewBrowserWindowHeight .Items.AddRange(StringWindowHeight);
listBoxNewBrowserWindowPositioning .Items.AddRange(StringWindowPositioning);
comboBoxUrlPolicyMainWindow.Items.Add("Never");
comboBoxUrlPolicyMainWindow.Items.Add("OnlyLoadError");
comboBoxUrlPolicyMainWindow.Items.Add("BeforeTitle");
comboBoxUrlPolicyMainWindow.Items.Add("Always");
comboBoxUrlPolicyNewWindow.Items.Add("Never");
comboBoxUrlPolicyNewWindow.Items.Add("OnlyLoadError");
comboBoxUrlPolicyNewWindow.Items.Add("BeforeTitle");
comboBoxUrlPolicyNewWindow.Items.Add("Always");
comboBoxTaskBarHeight.Items.AddRange(StringTaskBarHeight);
listBoxOpenLinksHTML.Items.AddRange(StringPolicyLinkOpening);