コード例 #1
0
        private void InitializeControl()
        {
            var contextMenuHandler = new ContextMenuHandler();
            var dialogHandler      = new DialogHandler();
            var displayHandler     = new DisplayHandler();
            var downloadLogger     = logger.CloneFor($"{nameof(DownloadHandler)} #{Id}");
            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, requestFilter, logger, settings, WindowSettings, text);
            var requestHandler     = new RequestHandler(appConfig, requestFilter, requestLogger, resourceHandler, settings, WindowSettings, text);

            Icon = new BrowserIconResource();

            dialogHandler.DialogRequested  += DialogHandler_DialogRequested;
            displayHandler.FaviconChanged  += DisplayHandler_FaviconChanged;
            displayHandler.ProgressChanged += DisplayHandler_ProgressChanged;
            downloadHandler.ConfigurationDownloadRequested += DownloadHandler_ConfigurationDownloadRequested;
            downloadHandler.DownloadUpdated           += DownloadHandler_DownloadUpdated;
            keyboardHandler.FindRequested             += KeyboardHandler_FindRequested;
            keyboardHandler.HomeNavigationRequested   += HomeNavigationRequested;
            keyboardHandler.ReloadRequested           += ReloadRequested;
            keyboardHandler.ZoomInRequested           += ZoomInRequested;
            keyboardHandler.ZoomOutRequested          += ZoomOutRequested;
            keyboardHandler.ZoomResetRequested        += ZoomResetRequested;
            lifeSpanHandler.PopupRequested            += LifeSpanHandler_PopupRequested;
            resourceHandler.SessionIdentifierDetected += (id) => SessionIdentifierDetected?.Invoke(id);
            requestHandler.QuitUrlVisited             += RequestHandler_QuitUrlVisited;
            requestHandler.RequestBlocked             += RequestHandler_RequestBlocked;

            InitializeRequestFilter(requestFilter);

            control = new BrowserControl(
                contextMenuHandler,
                dialogHandler,
                displayHandler,
                downloadHandler,
                keyboardHandler,
                lifeSpanHandler,
                requestHandler,
                startUrl);
            control.AddressChanged      += Control_AddressChanged;
            control.LoadFailed          += Control_LoadFailed;
            control.LoadingStateChanged += Control_LoadingStateChanged;
            control.TitleChanged        += Control_TitleChanged;

            control.Initialize();
            logger.Debug("Initialized browser control.");
        }
コード例 #2
0
        private IApplication BuildApplication(string executablePath, WhitelistApplication settings)
        {
            var applicationLogger = logger.CloneFor(settings.DisplayName);
            var application       = new ExternalApplication(applicationMonitor, executablePath, applicationLogger, nativeMethods, processFactory, settings);

            return(application);
        }
コード例 #3
0
        private void InitializeControl()
        {
            var contextMenuHandler = new ContextMenuHandler();
            var displayHandler     = new DisplayHandler();
            var downloadLogger     = logger.CloneFor($"{nameof(DownloadHandler)} {Id}");
            var downloadHandler    = new DownloadHandler(appConfig, settings, downloadLogger);
            var keyboardHandler    = new KeyboardHandler();
            var lifeSpanHandler    = new LifeSpanHandler();
            var requestFilter      = new RequestFilter();
            var requestLogger      = logger.CloneFor($"{nameof(RequestHandler)} {Id}");
            var requestHandler     = new RequestHandler(appConfig, settings.Filter, requestFilter, requestLogger, text);

            displayHandler.FaviconChanged  += DisplayHandler_FaviconChanged;
            displayHandler.ProgressChanged += DisplayHandler_ProgressChanged;
            downloadHandler.ConfigurationDownloadRequested += DownloadHandler_ConfigurationDownloadRequested;
            keyboardHandler.ReloadRequested    += ReloadRequested;
            keyboardHandler.ZoomInRequested    += ZoomInRequested;
            keyboardHandler.ZoomOutRequested   += ZoomOutRequested;
            keyboardHandler.ZoomResetRequested += ZoomResetRequested;
            lifeSpanHandler.PopupRequested     += LifeSpanHandler_PopupRequested;
            requestHandler.RequestBlocked      += RequestHandler_RequestBlocked;

            if (settings.Filter.ProcessContentRequests || settings.Filter.ProcessMainRequests)
            {
                var factory = new RuleFactory();

                foreach (var settings in settings.Filter.Rules)
                {
                    var rule = factory.CreateRule(settings.Type);

                    rule.Initialize(settings);
                    requestFilter.Load(rule);
                }

                logger.Debug($"Initialized request filter with {settings.Filter.Rules.Count} rule(s).");
            }

            control = new BrowserControl(contextMenuHandler, displayHandler, downloadHandler, keyboardHandler, lifeSpanHandler, requestHandler, url);
            control.AddressChanged      += Control_AddressChanged;
            control.LoadingStateChanged += Control_LoadingStateChanged;
            control.TitleChanged        += Control_TitleChanged;

            control.Initialize();
            logger.Debug("Initialized browser control.");
        }
コード例 #4
0
ファイル: MainWindow.cs プロジェクト: inspera/Chrominimum
        private void InitializeBrowser()
        {
            var requestLogger   = logger.CloneFor($"{nameof(RequestHandler)} #{Id}");
            var requestFilter   = new RequestFilter();
            var resourceHandler = new ResourceHandler(settings, requestFilter, logger, text);
            var requestHandler  = new RequestHandler(requestLogger, settings, requestFilter, resourceHandler, text);

            requestHandler.QuitUrlVisited += RequestHandler_QuitUrlVisited;

            var lifeSpanHandler = new LifeSpanHandler();

            lifeSpanHandler.PopupRequested += LifeSpanHandler_PopupRequested;

            var downloadLogger  = logger.CloneFor($"{nameof(DownloadHandler)} #{Id}");
            var downloadHandler = new DownloadHandler(settings, downloadLogger);

            downloadHandler.DownloadUpdated += DownloadHandler_DownloadUpdated;

            var keyboardHandler = new KeyboardHandler();

            keyboardHandler.ReloadRequested += ReloadRequested;

            InitializeRequestFilter(requestFilter);

            browser = new ChromiumWebBrowser(startUrl)
            {
                Dock = DockStyle.Fill
            };

            browser.DisplayHandler  = new DisplayHandler(this);
            browser.KeyboardHandler = keyboardHandler;
            browser.LifeSpanHandler = lifeSpanHandler;
            browser.LoadError      += Browser_LoadError;
            browser.MenuHandler     = new ContextMenuHandler();
            browser.TitleChanged   += Browser_TitleChanged;
            browser.RequestHandler  = requestHandler;
            browser.DownloadHandler = downloadHandler;

            Controls.Add(browser);
        }
コード例 #5
0
        private void InitializeInstance(IProcess process)
        {
            lock (@lock)
            {
                var instanceLogger = logger.CloneFor($"{Name} ({process.Id})");
                var instance       = new ExternalApplicationInstance(Icon, instanceLogger, nativeMethods, process);

                instance.Terminated     += Instance_Terminated;
                instance.WindowsChanged += () => WindowsChanged?.Invoke();
                instance.Initialize();

                instances.Add(instance);
            }
        }
コード例 #6
0
        private void CreateNewInstance(string url = null)
        {
            var id             = new BrowserInstanceIdentifier(++instanceIdCounter);
            var isMainInstance = instances.Count == 0;
            var instanceLogger = logger.CloneFor($"BrowserInstance {id}");
            var startUrl       = url ?? settings.StartUrl;
            var instance       = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, messageBox, instanceLogger, text, uiFactory, startUrl);

            instance.ConfigurationDownloadRequested += (fileName, args) => ConfigurationDownloadRequested?.Invoke(fileName, args);
            instance.PopupRequested += Instance_PopupRequested;
            instance.Terminated     += Instance_Terminated;

            instance.Initialize();
            instances.Add(instance);
            InstanceStarted?.Invoke(instance);

            logger.Info($"Created browser instance {instance.Id}.");
        }
コード例 #7
0
        private void StartProctoring()
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                try
                {
                    var content = LoadContent(settings);

                    filePath = Path.Combine(appConfig.TemporaryDirectory, $"{Path.GetRandomFileName()}_index.html");
                    fileSystem.Save(content, filePath);

                    control = new ProctoringControl(logger.CloneFor(nameof(ProctoringControl)));
                    control.EnsureCoreWebView2Async().ContinueWith(_ =>
                    {
                        control.Dispatcher.Invoke(() =>
                        {
                            control.CoreWebView2.Navigate(filePath);
                        });
                    });

                    window = uiFactory.CreateProctoringWindow(control);
                    window.SetTitle(settings.JitsiMeet.Enabled ? settings.JitsiMeet.Subject : settings.Zoom.UserName);
                    window.Show();

                    if (settings.WindowVisibility == WindowVisibility.AllowToShow || settings.WindowVisibility == WindowVisibility.Hidden)
                    {
                        window.Hide();
                    }

                    IconResource = new XamlIconResource {
                        Uri = new Uri("pack://application:,,,/SafeExamBrowser.UserInterface.Desktop;component/Images/ProctoringNotification_Active.xaml")
                    };
                    Tooltip = text.Get(TextKey.Notification_ProctoringActiveTooltip);
                    NotificationChanged?.Invoke();

                    logger.Info($"Started proctoring with {(settings.JitsiMeet.Enabled ? "Jitsi Meet" : "Zoom")}.");
                }
                catch (Exception e)
                {
                    logger.Error($"Failed to start proctoring! Reason: {e.Message}", e);
                }
            });
        }
コード例 #8
0
        internal void Initialize()
        {
            var contextMenuHandler = new ContextMenuHandler();
            var displayHandler     = new DisplayHandler();
            var downloadLogger     = logger.CloneFor($"{nameof(DownloadHandler)} {Id}");
            var downloadHandler    = new DownloadHandler(appConfig, settings, downloadLogger);
            var keyboardHandler    = new KeyboardHandler();
            var lifeSpanHandler    = new LifeSpanHandler();
            var requestHandler     = new RequestHandler(appConfig);

            displayHandler.FaviconChanged  += DisplayHandler_FaviconChanged;
            displayHandler.ProgressChanged += DisplayHandler_ProgressChanged;
            downloadHandler.ConfigurationDownloadRequested += DownloadHandler_ConfigurationDownloadRequested;
            keyboardHandler.ReloadRequested    += ReloadRequested;
            keyboardHandler.ZoomInRequested    += ZoomInRequested;
            keyboardHandler.ZoomOutRequested   += ZoomOutRequested;
            keyboardHandler.ZoomResetRequested += ZoomResetRequested;
            lifeSpanHandler.PopupRequested     += LifeSpanHandler_PopupRequested;

            control = new BrowserControl(contextMenuHandler, displayHandler, downloadHandler, keyboardHandler, lifeSpanHandler, requestHandler, url);
            control.AddressChanged      += Control_AddressChanged;
            control.LoadingStateChanged += Control_LoadingStateChanged;
            control.TitleChanged        += Control_TitleChanged;
            control.Initialize();

            logger.Debug("Initialized browser control.");

            window                 = uiFactory.CreateBrowserWindow(control, settings, isMainInstance);
            window.Closing        += () => Terminated?.Invoke(Id);
            window.AddressChanged += Window_AddressChanged;
            window.BackwardNavigationRequested += Window_BackwardNavigationRequested;
            window.DeveloperConsoleRequested   += Window_DeveloperConsoleRequested;
            window.ForwardNavigationRequested  += Window_ForwardNavigationRequested;
            window.ReloadRequested             += ReloadRequested;
            window.ZoomInRequested             += ZoomInRequested;
            window.ZoomOutRequested            += ZoomOutRequested;
            window.ZoomResetRequested          += ZoomResetRequested;
            window.UpdateZoomLevel(CalculateZoomPercentage());

            logger.Debug("Initialized browser window.");
        }
コード例 #9
0
        private void CreateNewInstance(string url = null)
        {
            var id             = ++instanceIdCounter;
            var isMainInstance = instances.Count == 0;
            var instanceLogger = logger.CloneFor($"Browser Instance #{id}");
            var startUrl       = url ?? GenerateStartUrl();
            var instance       = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, fileSystemDialog, hashAlgorithm, messageBox, instanceLogger, text, uiFactory, startUrl);

            instance.ConfigurationDownloadRequested += (fileName, args) => ConfigurationDownloadRequested?.Invoke(fileName, args);
            instance.PopupRequested            += Instance_PopupRequested;
            instance.ResetRequested            += Instance_ResetRequested;
            instance.SessionIdentifierDetected += (i) => SessionIdentifierDetected?.Invoke(i);
            instance.Terminated           += Instance_Terminated;
            instance.TerminationRequested += () => TerminationRequested?.Invoke();

            instance.Initialize();
            instances.Add(instance);

            logger.Info($"Created browser instance {instance.Id}.");
            WindowsChanged?.Invoke();
        }
コード例 #10
0
 private ILogger LoggerFor(System.Diagnostics.Process process, string name)
 {
     return(logger.CloneFor($"{nameof(Process)} '{name}' ({process.Id})"));
 }
コード例 #11
0
 public IClientProxy CreateClientProxy(string address, Interlocutor owner)
 {
     return(new ClientProxy(address, factory, logger.CloneFor(nameof(ClientProxy)), owner));
 }
コード例 #12
0
 public IFeatureConfiguration CreateChangePasswordConfiguration(Guid groupId, string sid, string userName)
 {
     return(new ChangePasswordConfiguration(groupId, logger.CloneFor(nameof(ChangePasswordConfiguration)), sid, userName));
 }