diff --git a/source/ChromeDevTools/ChromeSessionFactory.cs b/source/ChromeDevTools/ChromeSessionFactory.cs index 4aa60b63748a8e2227a1cc3993b6910594abc25b..36facc276af65494456c252e8bbcf2c84b29a720 100644 --- a/source/ChromeDevTools/ChromeSessionFactory.cs +++ b/source/ChromeDevTools/ChromeSessionFactory.cs @@ -3,6 +3,11 @@ namespace MasterDevs.ChromeDevTools { public class ChromeSessionFactory : IChromeSessionFactory { + public IChromeSession Create(ChromeSessionInfo sessionInfo) + { + return Create(sessionInfo.WebSocketDebuggerUrl); + } + public IChromeSession Create(string endpointUrl) { // Sometimes binding to localhost might resolve wrong AddressFamily, force IPv4 diff --git a/source/ChromeDevTools/IChromeProcess.cs b/source/ChromeDevTools/IChromeProcess.cs index 5acfd30f46557f5845b8160990d3c24c5ea9ffbc..b6d6242307b24f6e8d680c4619850f4773311345 100644 --- a/source/ChromeDevTools/IChromeProcess.cs +++ b/source/ChromeDevTools/IChromeProcess.cs @@ -5,7 +5,9 @@ namespace MasterDevs.ChromeDevTools { public interface IChromeProcess : IDisposable { - Task<ChromeSessionInfo[]> GetSessions(); + Task<ChromeSessionInfo[]> GetSessionInfo(); + + Task<ChromeSessionInfo> StartNewSession(); Uri RemoteDebuggingUri { get; } } diff --git a/source/ChromeDevTools/LocalChromeProcess.cs b/source/ChromeDevTools/LocalChromeProcess.cs index 8c2e62999781410c98b410b8ccd048badc188f83..62f0e686d371690bd8be0e300de073b1cec0615d 100644 --- a/source/ChromeDevTools/LocalChromeProcess.cs +++ b/source/ChromeDevTools/LocalChromeProcess.cs @@ -20,6 +20,8 @@ namespace MasterDevs.ChromeDevTools public override void Dispose() { + base.Dispose(); + Process.Kill(); try { diff --git a/source/ChromeDevTools/RemoteChromeProcess.cs b/source/ChromeDevTools/RemoteChromeProcess.cs index 0076d9baa7c9be60adb22e029ac4befc9d9cc053..e10ff603197130cd35944ccec5a9f62fe9f0d9f6 100644 --- a/source/ChromeDevTools/RemoteChromeProcess.cs +++ b/source/ChromeDevTools/RemoteChromeProcess.cs @@ -7,29 +7,41 @@ namespace MasterDevs.ChromeDevTools { public class RemoteChromeProcess : IChromeProcess { + private readonly HttpClient http; + + public RemoteChromeProcess(string remoteDebuggingUri) + : this(new Uri(remoteDebuggingUri)) + { + + } + public RemoteChromeProcess(Uri remoteDebuggingUri) { RemoteDebuggingUri = remoteDebuggingUri; + + http = new HttpClient + { + BaseAddress = RemoteDebuggingUri + }; } public Uri RemoteDebuggingUri { get; } public virtual void Dispose() { + http.Dispose(); } - public async Task<ChromeSessionInfo[]> GetSessions() + public async Task<ChromeSessionInfo[]> GetSessionInfo() { - using (var http = new HttpClient - { - BaseAddress = RemoteDebuggingUri - }) - { - string json = await http.GetStringAsync("/json"); - return JsonConvert.DeserializeObject<ChromeSessionInfo[]>(json); - } + string json = await http.GetStringAsync("/json"); + return JsonConvert.DeserializeObject<ChromeSessionInfo[]>(json); } - + public async Task<ChromeSessionInfo> StartNewSession() + { + string json = await http.GetStringAsync("/json"); + return JsonConvert.DeserializeObject<ChromeSessionInfo>(json); + } } } \ No newline at end of file