Skip to content

Commit 102f70d

Browse files
committed
DevTools Client - Follow up to #3669
- Improve xml doc - Reduce code duplication
1 parent b8896da commit 102f70d

File tree

4 files changed

+45
-54
lines changed

4 files changed

+45
-54
lines changed

CefSharp/DevTools/DevToolsClient.cs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ public partial class DevToolsClient : IDevToolsMessageObserver, IDevToolsClient
3131
private bool devToolsAttached;
3232
private SynchronizationContext syncContext;
3333

34-
/// <summary>
35-
/// DevToolsEvent
36-
/// </summary>
34+
/// <inheritdoc/>
3735
public event EventHandler<DevToolsEventArgs> DevToolsEvent;
3836

3937
/// <summary>
@@ -153,6 +151,7 @@ public async Task<DevToolsMethodResponse> ExecuteDevToolsMethodAsync(string meth
153151
return await taskCompletionSource.Task;
154152
}
155153

154+
/// <inheritdoc/>
156155
void IDisposable.Dispose()
157156
{
158157
DevToolsEvent = null;
@@ -161,16 +160,19 @@ void IDisposable.Dispose()
161160
browser = null;
162161
}
163162

163+
/// <inheritdoc/>
164164
void IDevToolsMessageObserver.OnDevToolsAgentAttached(IBrowser browser)
165165
{
166166
devToolsAttached = true;
167167
}
168168

169+
/// <inheritdoc/>
169170
void IDevToolsMessageObserver.OnDevToolsAgentDetached(IBrowser browser)
170171
{
171172
devToolsAttached = false;
172173
}
173174

175+
/// <inheritdoc/>
174176
void IDevToolsMessageObserver.OnDevToolsEvent(IBrowser browser, string method, Stream parameters)
175177
{
176178
var evt = DevToolsEvent;
@@ -188,11 +190,13 @@ void IDevToolsMessageObserver.OnDevToolsEvent(IBrowser browser, string method, S
188190
}
189191
}
190192

193+
/// <inheritdoc/>
191194
bool IDevToolsMessageObserver.OnDevToolsMessage(IBrowser browser, Stream message)
192195
{
193196
return false;
194197
}
195198

199+
/// <inheritdoc/>
196200
void IDevToolsMessageObserver.OnDevToolsMethodResult(IBrowser browser, int messageId, bool success, Stream result)
197201
{
198202
var uiThread = CefThread.CurrentlyOnUiThread;
@@ -248,5 +252,38 @@ void IDevToolsMessageObserver.OnDevToolsMethodResult(IBrowser browser, int messa
248252
}
249253
}
250254
}
255+
256+
/// <summary>
257+
/// Deserialize the JSON string into a .Net object.
258+
/// For .Net Core/.Net 5.0 uses System.Text.Json
259+
/// for .Net 4.5.2 uses System.Runtime.Serialization.Json
260+
/// </summary>
261+
/// <typeparam name="T">Object type</typeparam>
262+
/// <param name="json">JSON</param>
263+
/// <returns>object of type <typeparamref name="T"/></returns>
264+
public static T DeserializeJson<T>(string json)
265+
{
266+
#if NETCOREAPP
267+
var options = new System.Text.Json.JsonSerializerOptions
268+
{
269+
PropertyNameCaseInsensitive = true,
270+
IgnoreNullValues = true,
271+
};
272+
273+
options.Converters.Add(new CefSharp.Internals.Json.JsonEnumConverterFactory());
274+
275+
return System.Text.Json.JsonSerializer.Deserialize<T>(json, options);
276+
#else
277+
var bytes = Encoding.UTF8.GetBytes(json);
278+
using (var ms = new MemoryStream(bytes))
279+
{
280+
var settings = new System.Runtime.Serialization.Json.DataContractJsonSerializerSettings();
281+
settings.UseSimpleDictionaryFormat = true;
282+
283+
var dcs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T), settings);
284+
return (T)dcs.ReadObject(ms);
285+
}
286+
#endif
287+
}
251288
}
252289
}

CefSharp/DevTools/DevToolsEventArgs.cs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@
44

55

66
using System;
7-
#if !NETCOREAPP
8-
using System.IO;
9-
using System.Runtime.Serialization.Json;
10-
using System.Text;
11-
#endif
127

138
namespace CefSharp.DevTools
149
{
@@ -35,27 +30,7 @@ public DevToolsEventArgs(string eventName, string paramsAsJsonString)
3530

3631
internal T DeserializeJson<T>()
3732
{
38-
#if NETCOREAPP
39-
var options = new System.Text.Json.JsonSerializerOptions
40-
{
41-
PropertyNameCaseInsensitive = true,
42-
IgnoreNullValues = true,
43-
};
44-
45-
options.Converters.Add(new Internals.Json.JsonEnumConverterFactory());
46-
47-
return System.Text.Json.JsonSerializer.Deserialize<T>(ParametersAsJsonString, options);
48-
#else
49-
var bytes = Encoding.UTF8.GetBytes(ParametersAsJsonString);
50-
using (var ms = new MemoryStream(bytes))
51-
{
52-
var settings = new DataContractJsonSerializerSettings();
53-
settings.UseSimpleDictionaryFormat = true;
54-
55-
var dcs = new DataContractJsonSerializer(typeof(T), settings);
56-
return (T)dcs.ReadObject(ms);
57-
}
58-
#endif
33+
return DevToolsClient.DeserializeJson<T>(ParametersAsJsonString);
5934
}
6035
}
6136
}

CefSharp/DevTools/DevToolsMethodResponse.cs

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,10 @@ internal T DeserializeJson<T>(bool ignoreSuccess = false)
3232
{
3333
if (Success || ignoreSuccess)
3434
{
35-
#if NETCOREAPP
36-
var options = new System.Text.Json.JsonSerializerOptions
37-
{
38-
//AllowTrailingCommas = true,
39-
PropertyNameCaseInsensitive = true,
40-
IgnoreNullValues = true,
41-
//PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase
42-
};
43-
44-
options.Converters.Add(new Internals.Json.JsonEnumConverterFactory());
45-
46-
return System.Text.Json.JsonSerializer.Deserialize<T>(ResponseAsJsonString, options);
47-
#else
48-
var bytes = Encoding.UTF8.GetBytes(ResponseAsJsonString);
49-
using (var ms = new MemoryStream(bytes))
50-
{
51-
var settings = new DataContractJsonSerializerSettings();
52-
settings.UseSimpleDictionaryFormat = true;
53-
54-
var dcs = new DataContractJsonSerializer(typeof(T), settings);
55-
return (T)dcs.ReadObject(ms);
56-
}
57-
#endif
35+
return DevToolsClient.DeserializeJson<T>(ResponseAsJsonString);
5836
}
5937

6038
throw new DevToolsClientException(ResponseAsJsonString);
6139
}
62-
6340
}
6441
}

CefSharp/DevTools/IDevToolsClient.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ namespace CefSharp.DevTools
1414
public interface IDevToolsClient
1515
{
1616
/// <summary>
17-
/// DevToolsEvent
17+
/// Will be called on receipt of a DevTools protocol event. Events by default are disabled and need to be
18+
/// enabled on a per domain basis, e.g. Sending Network.enable (or calling <see cref="Network.NetworkClient.EnableAsync(int?, int?, int?)"/>)
19+
/// to enable network related events.
1820
/// </summary>
1921
event EventHandler<DevToolsEventArgs> DevToolsEvent;
2022

0 commit comments

Comments
 (0)