Skip to content

Commit 1f3e60c

Browse files
authored
Bump Chormium to r579032 (#623)
1 parent 61a6a27 commit 1f3e60c

File tree

5 files changed

+85
-83
lines changed

5 files changed

+85
-83
lines changed

lib/PuppeteerSharp.Tests.CloseMe/Program.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ namespace PuppeteerSharp.Tests.CloseMe
66
class Program
77
{
88
public static async Task Main(string[] args)
9-
{
10-
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
9+
{
1110
var options = new LaunchOptions
1211
{
1312
Headless = true,

lib/PuppeteerSharp.Tests/PageTests/SetRequestInterceptionTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,39 @@ public async Task ShouldWorkWithRedirects()
225225
}
226226
}
227227

228+
[Fact]
229+
public async Task ShouldWorkWithRedirectsForSubresources()
230+
{
231+
await Page.SetRequestInterceptionAsync(true);
232+
var requests = new List<Request>();
233+
Page.Request += async (sender, e) =>
234+
{
235+
requests.Add(e.Request);
236+
await e.Request.ContinueAsync();
237+
};
238+
239+
Server.SetRedirect("/one-style.css", "/two-style.css");
240+
Server.SetRedirect("/two-style.css", "/three-style.css");
241+
Server.SetRedirect("/three-style.css", "/four-style.css");
242+
Server.SetRoute("/four-style.css", async context =>
243+
{
244+
await context.Response.WriteAsync("body {box-sizing: border-box; }");
245+
});
246+
247+
var response = await Page.GoToAsync(TestConstants.ServerUrl + "/one-style.html");
248+
Assert.Equal(HttpStatusCode.OK, response.Status);
249+
Assert.Contains("one-style.html", response.Url);
250+
Assert.Equal(5, requests.Count);
251+
Assert.Equal(ResourceType.Document, requests[0].ResourceType);
252+
Assert.Equal(ResourceType.StyleSheet, requests[1].ResourceType);
253+
254+
// Check redirect chain
255+
var redirectChain = requests[1].RedirectChain;
256+
Assert.Equal(3, redirectChain.Length);
257+
Assert.Contains("one-style.css", redirectChain[0].Url);
258+
Assert.Contains("three-style.css", redirectChain[2].Url);
259+
}
260+
228261
[Fact]
229262
public async Task ShouldBeAbleToAbortRedirects()
230263
{

lib/PuppeteerSharp/BrowserFetcher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class BrowserFetcher
3636
/// <summary>
3737
/// Default chromiumg revision.
3838
/// </summary>
39-
public const int DefaultRevision = 575458;
39+
public const int DefaultRevision = 579032;
4040

4141
/// <summary>
4242
/// Gets the downloads folder.

lib/PuppeteerSharp/Messaging/RequestWillBeSentResponse.cs renamed to lib/PuppeteerSharp/Messaging/RequestWillBeSentPayload.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace PuppeteerSharp.Messaging
44
{
5-
internal class RequestWillBeSentResponse
5+
internal class RequestWillBeSentPayload
66
{
77
[JsonProperty("requestId")]
88
public string RequestId { get; set; }

lib/PuppeteerSharp/NetworkManager.cs

Lines changed: 49 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ internal class NetworkManager
1414

1515
private readonly CDPSession _client;
1616
private readonly Dictionary<string, Request> _requestIdToRequest = new Dictionary<string, Request>();
17-
private readonly Dictionary<string, Request> _interceptionIdToRequest = new Dictionary<string, Request>();
17+
private readonly Dictionary<string, RequestWillBeSentPayload> _requestIdToRequestWillBeSentEvent =
18+
new Dictionary<string, RequestWillBeSentPayload>();
1819
private readonly MultiMap<string, string> _requestHashToRequestIds = new MultiMap<string, string>();
1920
private readonly MultiMap<string, string> _requestHashToInterceptionIds = new MultiMap<string, string>();
2021
private readonly FrameManager _frameManager;
@@ -103,7 +104,7 @@ private async void Client_MessageReceived(object sender, MessageEventArgs e)
103104
switch (e.MessageID)
104105
{
105106
case "Network.requestWillBeSent":
106-
OnRequestWillBeSent(e.MessageData.ToObject<RequestWillBeSentResponse>());
107+
OnRequestWillBeSent(e.MessageData.ToObject<RequestWillBeSentPayload>());
107108
break;
108109
case "Network.requestIntercepted":
109110
await OnRequestInterceptedAsync(e.MessageData.ToObject<RequestInterceptedResponse>()).ConfigureAwait(false);
@@ -135,9 +136,9 @@ private void OnLoadingFailed(LoadingFailedResponse e)
135136

136137
if (request.InterceptionId != null)
137138
{
138-
_interceptionIdToRequest.Remove(request.InterceptionId);
139139
_attemptedAuthentications.Remove(request.InterceptionId);
140140
}
141+
141142
RequestFailed(this, new RequestEventArgs
142143
{
143144
Request = request
@@ -156,7 +157,6 @@ private void OnLoadingFinished(LoadingFinishedResponse e)
156157

157158
if (request.InterceptionId != null)
158159
{
159-
_interceptionIdToRequest.Remove(request.InterceptionId);
160160
_attemptedAuthentications.Remove(request.InterceptionId);
161161
}
162162

@@ -240,53 +240,56 @@ private async Task OnRequestInterceptedAsync(RequestInterceptedResponse e)
240240
}
241241
}
242242

243-
if (!string.IsNullOrEmpty(e.RedirectUrl))
244-
{
245-
var request = _interceptionIdToRequest[e.InterceptionId];
246-
247-
HandleRequestRedirect(request, e.ResponseStatusCode, e.ResponseHeaders, false, false);
248-
HandleRequestStart(
249-
request.RequestId,
250-
e.InterceptionId,
251-
e.RedirectUrl,
252-
e.IsNavigationRequest,
253-
e.ResourceType,
254-
e.Request,
255-
e.FrameId,
256-
request.RedirectChainList);
257-
return;
258-
}
259-
260243
var requestHash = e.Request.Hash;
261244
var requestId = _requestHashToRequestIds.FirstValue(requestHash);
262245
if (requestId != null)
263246
{
264-
_requestHashToRequestIds.Delete(requestHash, requestId);
265-
HandleRequestStart(
266-
requestId,
267-
e.InterceptionId,
268-
e.Request.Url,
269-
e.IsNavigationRequest,
270-
e.ResourceType,
271-
e.Request,
272-
e.FrameId,
273-
new List<Request>());
247+
_requestIdToRequestWillBeSentEvent.TryGetValue(requestId, out var requestWillBeSentEvent);
248+
249+
if (requestWillBeSentEvent != null)
250+
{
251+
OnRequest(requestWillBeSentEvent, e.InterceptionId);
252+
_requestHashToRequestIds.Delete(requestHash, requestId);
253+
_requestIdToRequestWillBeSentEvent.Remove(requestId);
254+
}
274255
}
275256
else
276257
{
277258
_requestHashToInterceptionIds.Add(requestHash, e.InterceptionId);
278-
HandleRequestStart(
279-
null,
280-
e.InterceptionId,
281-
e.Request.Url,
282-
e.IsNavigationRequest,
283-
e.ResourceType,
284-
e.Request,
285-
e.FrameId,
286-
new List<Request>());
287259
}
288260
}
289261

262+
private void OnRequest(RequestWillBeSentPayload e, string interceptionId)
263+
{
264+
var redirectChain = new List<Request>();
265+
if (e.RedirectResponse != null)
266+
{
267+
_requestIdToRequest.TryGetValue(e.RequestId, out var request);
268+
// If we connect late to the target, we could have missed the requestWillBeSent event.
269+
if (request != null)
270+
{
271+
HandleRequestRedirect(
272+
request,
273+
e.RedirectResponse.Status,
274+
e.RedirectResponse.Headers,
275+
e.RedirectResponse.FromDiskCache,
276+
e.RedirectResponse.FromServiceWorker,
277+
e.RedirectResponse.SecurityDetails);
278+
redirectChain = request.RedirectChainList;
279+
}
280+
}
281+
var isNavigationRequest = e.RequestId == e.LoaderId && e.Type == ResourceType.Document;
282+
HandleRequestStart(
283+
e.RequestId,
284+
interceptionId,
285+
e.Request.Url,
286+
isNavigationRequest,
287+
e.Type,
288+
e.Request,
289+
e.FrameId,
290+
redirectChain);
291+
}
292+
290293
private void OnRequestServedFromCache(RequestServedFromCacheResponse response)
291294
{
292295
if (_requestIdToRequest.TryGetValue(response.RequestId, out var request))
@@ -324,15 +327,7 @@ private void HandleRequestStart(
324327
frame,
325328
redirectChain);
326329

327-
if (!string.IsNullOrEmpty(requestId))
328-
{
329-
_requestIdToRequest.Add(requestId, request);
330-
}
331-
if (!string.IsNullOrEmpty(interceptionId))
332-
{
333-
_interceptionIdToRequest.Add(interceptionId, request);
334-
}
335-
330+
_requestIdToRequest.Add(requestId, request);
336331
Request(this, new RequestEventArgs
337332
{
338333
Request = request
@@ -368,7 +363,6 @@ private void HandleRequestRedirect(
368363

369364
if (request.InterceptionId != null)
370365
{
371-
_interceptionIdToRequest.Remove(request.InterceptionId);
372366
_attemptedAuthentications.Remove(request.InterceptionId);
373367
}
374368

@@ -383,49 +377,25 @@ private void HandleRequestRedirect(
383377
});
384378
}
385379

386-
private void OnRequestWillBeSent(RequestWillBeSentResponse e)
380+
private void OnRequestWillBeSent(RequestWillBeSentPayload e)
387381
{
388-
var redirectChain = new List<Request>();
389-
390382
if (_protocolRequestInterceptionEnabled)
391383
{
392-
// All redirects are handled in requestIntercepted.
393-
if (e.RedirectResponse != null)
394-
{
395-
return;
396-
}
397384
var requestHash = e.Request.Hash;
398385
var interceptionId = _requestHashToInterceptionIds.FirstValue(requestHash);
399-
if (interceptionId != null && _interceptionIdToRequest.TryGetValue(interceptionId, out var request))
386+
if (interceptionId != null)
400387
{
401-
request.RequestId = e.RequestId;
402-
_requestIdToRequest[e.RequestId] = request;
388+
OnRequest(e, interceptionId);
403389
_requestHashToInterceptionIds.Delete(requestHash, interceptionId);
404390
}
405391
else
406392
{
407393
_requestHashToRequestIds.Add(requestHash, e.RequestId);
394+
_requestIdToRequestWillBeSentEvent.Add(e.RequestId, e);
408395
}
409396
return;
410397
}
411-
412-
if (e.RedirectResponse != null && _requestIdToRequest.ContainsKey(e.RequestId))
413-
{
414-
var request = _requestIdToRequest[e.RequestId];
415-
// If we connect late to the target, we could have missed the requestWillBeSent event.
416-
HandleRequestRedirect(
417-
request,
418-
e.RedirectResponse.Status,
419-
e.RedirectResponse.Headers,
420-
e.RedirectResponse.FromDiskCache,
421-
e.RedirectResponse.FromServiceWorker,
422-
e.RedirectResponse.SecurityDetails);
423-
424-
redirectChain = request.RedirectChainList;
425-
}
426-
var isNavigationRequest = e.RequestId == e.LoaderId && e.Type == ResourceType.Document;
427-
428-
HandleRequestStart(e.RequestId, null, e.Request.Url, isNavigationRequest, e.Type, e.Request, e.FrameId, redirectChain);
398+
OnRequest(e, null);
429399
}
430400

431401
private async Task UpdateProtocolRequestInterceptionAsync()

0 commit comments

Comments
 (0)