private void Timer_Elapsed(object sender, ElapsedEventArgs e) { var changed = false; var openWindows = nativeMethods.GetOpenWindows(); lock (@lock) { var closedWindows = windows.Where(w => openWindows.All(ow => ow != w.Handle)).ToList(); var openedWindows = openWindows.Where(ow => windows.All(w => w.Handle != ow) && BelongsToInstance(ow)).ToList(); foreach (var window in closedWindows) { changed = true; windows.Remove(window); } foreach (var window in openedWindows) { changed = true; windows.Add(new ExternalApplicationWindow(icon, nativeMethods, window)); } foreach (var window in windows) { window.Update(); } } if (changed) { WindowsChanged?.Invoke(); } timer.Start(); }
private void Instance_Terminated(int id) { lock (@lock) { instances.Remove(instances.First(i => i.Id == id)); } WindowsChanged?.Invoke(); }
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); } }
internal void CreateNewInstanceInvoke(string startUrl = null) { var id = ++instanceIdCounter; var isMainInstance = instances.Count == 0; var numWindows = instances.Count; var instanceLogger = new ModuleLogger(logger, nameof(MainWindow)); var instance = new BrowserApplicationInstance(appSettings, messageBox, id, isMainInstance, numWindows, startUrl, instanceLogger, text); instance.PopupRequested += Instance_PopupRequested; instance.TerminationRequested += Instance_TerminationRequested; instance.Terminated += Instance_Terminated; instance.Activate(); instances.Add(instance); logger.Info($"Created browser instance {instance.Id}."); WindowsChanged?.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(); }
private void Instance_ResetRequested() { logger.Info("Attempting to reset browser..."); foreach (var instance in instances) { instance.Terminated -= Instance_Terminated; instance.Terminate(); logger.Info($"Terminated browser instance {instance.Id}."); } instances.Clear(); WindowsChanged?.Invoke(); if (settings.DeleteCookiesOnStartup && settings.DeleteCookiesOnShutdown) { DeleteCookies(); } nativeMethods.EmptyClipboard(); CreateNewInstance(); logger.Info("Successfully reset browser."); }