private void Timer_Elapsed(object sender, ElapsedEventArgs args) { try { var authorization = ("Authorization", $"Bearer {oauth2Token}"); var content = $"timestamp={ToUnixTimestamp(DateTime.Now)}&ping-number={++pingNumber}"; var contentType = "application/x-www-form-urlencoded"; var token = ("SEBConnectionToken", connectionToken); var success = TryExecute(HttpMethod.Post, api.PingEndpoint, out var response, content, contentType, authorization, token); if (success) { if (TryParseInstruction(response.Content, out var instruction) && instruction == "SEB_QUIT") { Task.Run(() => TerminationRequested?.Invoke()); } } else { logger.Error($"Failed to send ping: {ToString(response)}"); } } catch (Exception e) { logger.Error("Failed to send ping!", e); } timer.Start(); }
private void RequestHandler_QuitUrlVisited(string url) { Task.Run(() => { if (settings.ConfirmQuitUrl) { var message = text.Get(TextKey.MessageBox_BrowserQuitUrlConfirmation); var title = text.Get(TextKey.MessageBox_BrowserQuitUrlConfirmationTitle); var result = messageBox.Show(message, title, MessageBoxAction.YesNo, MessageBoxIcon.Question, window); var terminate = result == MessageBoxResult.Yes; if (terminate) { logger.Info($"User confirmed termination via quit URL '{url}', forwarding request..."); TerminationRequested?.Invoke(); } else { logger.Info($"User aborted termination via quit URL '{url}'."); } } else { logger.Info($"Automatically requesting termination due to quit URL '{url}'..."); TerminationRequested?.Invoke(); } }); }
internal void Terminate() { if (browser.IsDisposed) { browser.LoadError -= Browser_LoadError; browser.TitleChanged -= Browser_TitleChanged; browser.Dispose(); } TerminationRequested?.Invoke(); }
private void CreateNewInstance(string url = null) { var id = ++instanceIdCounter; var isMainInstance = instances.Count == 0; var instanceLogger = logger.CloneFor($"Browser Instance #{id}"); var startUrl = url ?? settings.StartUrl; var instance = new BrowserApplicationInstance(appConfig, settings, id, isMainInstance, fileSystemDialog, messageBox, instanceLogger, text, uiFactory, startUrl); instance.ConfigurationDownloadRequested += (fileName, args) => ConfigurationDownloadRequested?.Invoke(fileName, args); instance.PopupRequested += Instance_PopupRequested; instance.Terminated += Instance_Terminated; instance.TerminationRequested += () => TerminationRequested?.Invoke(); instance.Initialize(); instances.Add(instance); logger.Info($"Created browser instance {instance.Id}."); WindowsChanged?.Invoke(); }
public BrowserApplicationInstance( AppSettings appSettings, IMessageBox messageBox, int id, bool isMainInstance, int numWindows, string startUrl, IModuleLogger logger, IText text) { this.appSettings = appSettings; this.messageBox = messageBox; this.Id = id; this.isMainInstance = isMainInstance; this.logger = logger; this.text = text; this.startUrl = startUrl; this.settings = new BrowserSettings(); settings.QuitUrl = appSettings.QuitUrl; settings.DownloadDirectory = appSettings.DownloadDirectory; settings.AllowDownloads = true; settings.MainWindow.AllowReloading = appSettings.AllowReload; settings.AdditionalWindow.AllowReloading = appSettings.AllowReload; var instanceLogger = new ModuleLogger(logger, nameof(MainWindow)); window = new MainWindow(appSettings, settings, messageBox, id, isMainInstance, numWindows, startUrl, instanceLogger, text); window.TerminationRequested += () => TerminationRequested?.Invoke(); window.IconChanged += (i) => IconChanged?.Invoke(i); Handle = window.Handle; Icon = new BrowserIconResource(); window.Closing += Control_Closing; window.TitleChanged += Control_TitleChanged; window.PopupRequested += Control_PopupRequested; }
private void Instance_TerminationRequested() { logger.Info("Attempting to shutdown as requested by the browser..."); TerminationRequested?.Invoke(); }