Skip to content

Commit 81c0c9f

Browse files
committed
Improve NavigationWatcher
1 parent a72463d commit 81c0c9f

File tree

5 files changed

+33
-22
lines changed

5 files changed

+33
-22
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Linq;
4+
5+
namespace PuppeteerSharp.Helpers
6+
{
7+
public static class DynamicHelpers
8+
{
9+
public static T ToStatic<T>(this JObject obj)
10+
{
11+
return JsonConvert.DeserializeObject<T>(obj.ToString());
12+
}
13+
}
14+
}

lib/PuppeteerSharp/NavigationWatcher.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ internal class NavigationWatcher
2323
private IEnumerable<string> _expectedLifecycle;
2424
private int _timeout;
2525
private string _initialLoaderId;
26-
private Task _navigationPromise;
2726
private Timer _timer = null;
2827

2928
public NavigationWatcher(FrameManager frameManager, Frame mainFrame, int timeout, dynamic options)
@@ -56,7 +55,7 @@ public NavigationWatcher(FrameManager frameManager, Frame mainFrame, int timeout
5655
frameManager.FrameDetached += FrameManager_LifecycleEvent;
5756
LifeCycleCompleteTaskWrapper = new TaskCompletionSource<bool>();
5857

59-
_navigationPromise = Task.WhenAny(new[]
58+
NavigationTask = Task.WhenAny(new[]
6059
{
6160
CreateTimeoutTask(),
6261
LifeCycleCompleteTask,
@@ -67,7 +66,7 @@ public NavigationWatcher(FrameManager frameManager, Frame mainFrame, int timeout
6766
}
6867

6968
#region Properties
70-
public Task<string> NavigationTask { get; internal set; }
69+
public Task NavigationTask { get; internal set; }
7170
public Task<bool> LifeCycleCompleteTask => LifeCycleCompleteTaskWrapper.Task;
7271
public TaskCompletionSource<bool> LifeCycleCompleteTaskWrapper { get; }
7372

lib/PuppeteerSharp/NetworkManager.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Net;
66
using System.Threading.Tasks;
7+
using Newtonsoft.Json.Linq;
78
using PuppeteerSharp.Helpers;
89

910
namespace PuppeteerSharp
@@ -337,11 +338,11 @@ private void OnRequestWillBeSent(MessageEventArgs e)
337338
}
338339

339340
HandleRequestStart(
340-
e.MessageData.requestId,
341+
e.MessageData.requestId?.ToString(),
341342
null,
342-
e.MessageData.request.url,
343-
e.MessageData.type,
344-
e.MessageData.request);
343+
e.MessageData.request.url?.ToString(),
344+
e.MessageData.type?.ToString(),
345+
((JObject)e.MessageData.request).ToStatic<Payload>());
345346
}
346347

347348

lib/PuppeteerSharp/Page.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -257,22 +257,21 @@ public async Task<dynamic> GoToAsync(string url, Dictionary<string, string> opti
257257
DefaultNavigationTimeout;
258258

259259
var watcher = new NavigationWatcher(_frameManager, mainFrame, timeout, options);
260-
261260
var navigateTask = Navigate(_client, url, referrer);
262261

263262
await Task.WhenAll(
264263
navigateTask,
265264
watcher.NavigationTask
266265
);
267266

268-
var error = !string.IsNullOrEmpty(navigateTask.Result) ? navigateTask.Result : watcher.NavigationTask.Result;
267+
var exception = navigateTask.Exception ?? watcher.NavigationTask.Exception;
269268

270269
watcher.Cancel();
271270
_networkManager.RequestCreated -= createRequestEventListener;
272271

273-
if (!string.IsNullOrEmpty(error))
272+
if (exception != null)
274273
{
275-
throw new NavigationException(error);
274+
throw new NavigationException(exception.Message, exception);
276275
}
277276

278277
Request request = null;
@@ -377,21 +376,18 @@ private Task Reload()
377376
}
378377

379378

380-
private async Task<string> Navigate(Session client, string url, string referrer)
379+
private async Task Navigate(Session client, string url, string referrer)
381380
{
382-
try
381+
382+
dynamic response = await client.SendAsync("Page.navigate", new
383383
{
384-
dynamic response = await client.SendAsync("Page.navigate", new Dictionary<string, object>
385-
{
386-
{ "url", url},
387-
{"referrer", referrer}
388-
});
384+
url,
385+
referrer = referrer ?? string.Empty
386+
});
389387

390-
return response.ErrorText;
391-
}
392-
catch (Exception ex)
388+
if (response.errorText != null)
393389
{
394-
return ex.Message;
390+
throw new NavigationException(response.errorText);
395391
}
396392
}
397393

lib/PuppeteerSharp/Payload.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace PuppeteerSharp
88
{
99
public class Payload
1010
{
11+
1112
public string Method { get; internal set; }
1213
public object PostData { get; internal set; }
1314
public Dictionary<string, object> Headers { get; internal set; }

0 commit comments

Comments
 (0)