Skip to content

Commit b8896da

Browse files
authored
DevTools - Support strongly typed events (#3669)
Includes various other DevTools fixes: - JavaScript "number"s are represented as doubles instead of longs - Headers are now correctly serialized / deserialized - DevToolsDomainErrorResponse is now correctly deserialized
1 parent a7dc73b commit b8896da

13 files changed

+30951
-10656
lines changed

CefSharp.Test/CefSharp.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@
151151
<ItemGroup>
152152
<Compile Include="BindingRedirectAssemblyResolver.cs" />
153153
<Compile Include="DevTools\DevToolsClientFacts.cs" />
154+
<Compile Include="DevTools\HeadersFacts.cs" />
154155
<Compile Include="Framework\BinderFacts.cs" />
155156
<Compile Include="Framework\AsyncExtensionFacts.cs" />
156157
<Compile Include="Framework\ConcurrentMethodRunnerQueueFacts.cs" />

CefSharp.Test/DevTools/DevToolsClientFacts.cs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,5 +248,71 @@ public async Task CanSetUserAgentOverride()
248248
Assert.Equal("89.0.4389.114", highEntropyValuesResult.uaFullVersion);
249249
}
250250
}
251+
252+
[Fact]
253+
public async Task CanSetExtraHTTPHeaders()
254+
{
255+
using (var browser = new ChromiumWebBrowser("about:blank", automaticallyCreateBrowser: false))
256+
{
257+
await browser.CreateBrowserAsync();
258+
259+
RequestWillBeSentEventArgs requestWillBeSentEventArgs = null;
260+
using (var devToolsClient = browser.GetDevToolsClient())
261+
{
262+
var extraHeaders = new Headers();
263+
extraHeaders.SetCommaSeparatedValues("TEST", "0");
264+
extraHeaders.AppendCommaSeparatedValues("test", " 1 ", "\" 2 \"");
265+
extraHeaders.AppendCommaSeparatedValues("Test", " 2,5 ");
266+
267+
await devToolsClient.Network.SetExtraHTTPHeadersAsync(extraHeaders);
268+
269+
devToolsClient.Network.RequestWillBeSent += (sender, args) =>
270+
{
271+
if (requestWillBeSentEventArgs == null)
272+
{
273+
requestWillBeSentEventArgs = args;
274+
}
275+
};
276+
277+
// enable events
278+
await devToolsClient.Network.EnableAsync();
279+
280+
await browser.LoadUrlAsync("www.google.com");
281+
}
282+
283+
Assert.NotNull(requestWillBeSentEventArgs);
284+
Assert.NotEmpty(requestWillBeSentEventArgs.RequestId);
285+
Assert.NotEqual(0, requestWillBeSentEventArgs.Timestamp);
286+
Assert.NotEqual(0, requestWillBeSentEventArgs.WallTime);
287+
Assert.NotNull(requestWillBeSentEventArgs.Request);
288+
Assert.True(requestWillBeSentEventArgs.Request.Headers.TryGetValues("TeSt", out var values));
289+
Assert.Collection(values,
290+
v => Assert.Equal("0", v),
291+
v => Assert.Equal("1", v),
292+
v => Assert.Equal(" 2 ", v),
293+
v => Assert.Equal(" 2,5 ", v)
294+
);
295+
}
296+
}
297+
298+
[Fact]
299+
public async Task ExecuteDevToolsMethodThrowsExceptionWithInvalidMethod()
300+
{
301+
using (var browser = new ChromiumWebBrowser("www.google.com"))
302+
{
303+
await browser.LoadUrlAsync();
304+
305+
using (var devToolsClient = browser.GetDevToolsClient())
306+
{
307+
var ex = await Assert.ThrowsAsync<CefSharp.DevTools.DevToolsClientException>(
308+
() => devToolsClient.ExecuteDevToolsMethodAsync("methoddoesnotexist"));
309+
310+
Assert.NotNull(ex.Response);
311+
Assert.NotEqual(0, ex.Response.MessageId);
312+
Assert.NotEqual(0, ex.Response.Code);
313+
Assert.NotNull(ex.Response.Message);
314+
}
315+
}
316+
}
251317
}
252318
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// Copyright © 2021 The CefSharp Authors. All rights reserved.
2+
//
3+
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
4+
5+
using CefSharp.DevTools.Network;
6+
using Xunit;
7+
8+
namespace CefSharp.Test.DevTools
9+
{
10+
public class HeadersFacts
11+
{
12+
[Fact]
13+
public void HeadersTryGetValues()
14+
{
15+
var headers = new Headers();
16+
headers["EMPTY"] = " ";
17+
headers["SIMPLE"] = " 1 ";
18+
headers["MULTIPLE"] = " 1 , \" 1,5 \",2, \" 2 , 5 \" , 3 , ,";
19+
20+
string[] values;
21+
22+
Assert.False(headers.TryGetValues("doesnotexist", out values));
23+
Assert.Null(values);
24+
25+
Assert.True(headers.TryGetValues("EMPTY", out values));
26+
Assert.Collection(values,
27+
v => Assert.Equal("", v)
28+
);
29+
30+
Assert.True(headers.TryGetValues("SIMPLE", out values));
31+
Assert.Collection(values,
32+
v => Assert.Equal("1", v)
33+
);
34+
35+
Assert.True(headers.TryGetValues("MULTIPLE", out values));
36+
Assert.Collection(values,
37+
v => Assert.Equal("1", v),
38+
v => Assert.Equal(" 1,5 ", v),
39+
v => Assert.Equal("2", v),
40+
v => Assert.Equal(" 2 , 5 ", v),
41+
v => Assert.Equal("3", v),
42+
v => Assert.Equal("", v),
43+
v => Assert.Equal("", v)
44+
);
45+
}
46+
47+
[Fact]
48+
public void HeadersGetCommaSeparatedValues()
49+
{
50+
var headers = new Headers();
51+
headers["EMPTY"] = " ";
52+
headers["SIMPLE"] = " 1 ";
53+
headers["MULTIPLE"] = " 1 , \" 1,5 \",2, \" 2 , 5 \" , 3 , ,";
54+
55+
Assert.Null(headers.GetCommaSeparatedValues("doesnotexist"));
56+
Assert.Collection(headers.GetCommaSeparatedValues("EMPTY"),
57+
v => Assert.Equal("", v)
58+
);
59+
Assert.Collection(headers.GetCommaSeparatedValues("SIMPLE"),
60+
v => Assert.Equal("1", v)
61+
);
62+
Assert.Collection(headers.GetCommaSeparatedValues("MULTIPLE"),
63+
v => Assert.Equal("1", v),
64+
v => Assert.Equal(" 1,5 ", v),
65+
v => Assert.Equal("2", v),
66+
v => Assert.Equal(" 2 , 5 ", v),
67+
v => Assert.Equal("3", v),
68+
v => Assert.Equal("", v),
69+
v => Assert.Equal("", v)
70+
);
71+
}
72+
73+
[Fact]
74+
public void HeadersAppendCommaSeparatedValues()
75+
{
76+
var headers = new Headers();
77+
headers.AppendCommaSeparatedValues("TEST", " 1 ");
78+
79+
headers.AppendCommaSeparatedValues("test", "\" 1,5 \"", "2", " 2 , 5 ", "3", " ", "");
80+
81+
Assert.Collection(headers.GetCommaSeparatedValues("Test"),
82+
v => Assert.Equal("1", v),
83+
v => Assert.Equal(" 1,5 ", v),
84+
v => Assert.Equal("2", v),
85+
v => Assert.Equal(" 2 , 5 ", v),
86+
v => Assert.Equal("3", v),
87+
v => Assert.Equal("", v),
88+
v => Assert.Equal("", v)
89+
);
90+
}
91+
92+
[Fact]
93+
public void HeadersSetCommaSeparatedValues()
94+
{
95+
var headers = new Headers();
96+
headers["TEST"] = " 1 ";
97+
98+
headers.SetCommaSeparatedValues("test", "\" 1,5 \"", "2", " 2 , 5 ", "3", " ", "");
99+
100+
Assert.Collection(headers.GetCommaSeparatedValues("Test"),
101+
v => Assert.Equal(" 1,5 ", v),
102+
v => Assert.Equal("2", v),
103+
v => Assert.Equal(" 2 , 5 ", v),
104+
v => Assert.Equal("3", v),
105+
v => Assert.Equal("", v),
106+
v => Assert.Equal("", v)
107+
);
108+
}
109+
110+
}
111+
}

CefSharp/CefSharp.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
<Compile Include="DevTools\DevToolsDomainBase.cs" />
9696
<Compile Include="DevTools\DevToolsDomainEntityBase.cs" />
9797
<Compile Include="DevTools\DevToolsDomainErrorResponse.cs" />
98+
<Compile Include="DevTools\DevToolsDomainEventArgsBase.cs" />
9899
<Compile Include="DevTools\DevToolsDomainResponseBase.cs" />
99100
<Compile Include="DevTools\DevToolsEventArgs.cs" />
100101
<Compile Include="DevTools\DevToolsMethodResponse.cs" />

0 commit comments

Comments
 (0)