Skip to content

Commit 0bda7f9

Browse files
authored
Remove message keys and dynamics (#852)
* Remove mouse keys * Remove Keyboard keys * Add Converters * Remove Keys from Dialog * Ignore PromptText when null * Ignore string values in Keyboard * Remove Keys from NetworkManager * Fix typo * Remove Keys from NetworkManager * One more for NetworkManager * More from ContinueIntereceptedRequest * More keys removed * Json ignores * Ignore also Challenges * Another ignore, Ignore by default is coming * Remove NullValueHandling * More removals in NetworkManager * Remove keys from Browser * Remove action key * Remove keys from FrameTree * Remove RequestId key * Remove BrowserContextId * Remove urls * Remove product * Remove ScriptSource * Remove TargetId * Move referrer key * Remove ObjectId * Remove Text * ExecutionContextId nullable * Remove Cookies * Remove Args * ConnectionResponses * Fix Params * No keys in Connection and CDPSession * Remove sessionId * As string * No more MessageKeys! * null on create browser context * New TargetDisposeBrowserContextRequest * new TargetSetDiscoverTargetsRequest * New BrowserGrantPermissionsRequest * New BrowserResetPermissionsRequest * New TargetDetachFromTargetRequest * Remove more dynamics * Remove more dynamics * Fix test * Almost there * Code needs to compile * I said code needs to compile * Code Factor
1 parent 56dffd1 commit 0bda7f9

File tree

106 files changed

+1055
-417
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+1055
-417
lines changed

lib/PuppeteerSharp.Tests/ConnectionTests/ConnectionTests.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ public async Task ShouldCleanCallbackList()
3535
Assert.False(Page.Client.HasPendingCallbacks());
3636
}
3737

38-
private async Task TheSourceOfTheProblems()
39-
{
40-
await Page.Client.SendAsync("ThisCommand.DoesNotExist");
41-
}
38+
private async Task TheSourceOfTheProblems() => await Page.Client.SendAsync("ThisCommand.DoesNotExist");
4239
}
4340
}

lib/PuppeteerSharp.Tests/TargetTests/CreateCDPSessionTests.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Threading.Tasks;
44
using Newtonsoft.Json.Linq;
5+
using PuppeteerSharp.Messaging;
56
using Xunit;
67
using Xunit.Abstractions;
78

@@ -21,7 +22,7 @@ public async Task ShouldWork()
2122

2223
await Task.WhenAll(
2324
client.SendAsync("Runtime.enable"),
24-
client.SendAsync("Runtime.evaluate", new { expression = "window.foo = 'bar'" })
25+
client.SendAsync("Runtime.evaluate", new RuntimeEvaluateRequest { Expression = "window.foo = 'bar'" })
2526
);
2627
var foo = await Page.EvaluateExpressionAsync<string>("window.foo");
2728
Assert.Equal("bar", foo);
@@ -70,12 +71,20 @@ public async Task ShouldBeAbleToDetachSession()
7071
{
7172
var client = await Page.Target.CreateCDPSessionAsync();
7273
await client.SendAsync("Runtime.enable");
73-
var evalResponse = await client.SendAsync("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
74+
var evalResponse = await client.SendAsync("Runtime.evaluate", new RuntimeEvaluateRequest
75+
{
76+
Expression = "1 + 2",
77+
ReturnByValue = true
78+
});
7479
Assert.Equal(3, evalResponse["result"]["value"].ToObject<int>());
7580
await client.DetachAsync();
7681

7782
var exception = await Assert.ThrowsAnyAsync<Exception>(()
78-
=> client.SendAsync("Runtime.evaluate", new { expression = "3 + 1", returnByValue = true }));
83+
=> client.SendAsync("Runtime.evaluate", new RuntimeEvaluateRequest
84+
{
85+
Expression = "3 + 1",
86+
ReturnByValue = true
87+
}));
7988
Assert.Contains("Session closed.", exception.Message);
8089
}
8190
}

lib/PuppeteerSharp/Browser.cs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public bool IsClosed
207207
/// </example>
208208
public async Task<BrowserContext> CreateIncognitoBrowserContextAsync()
209209
{
210-
var response = await Connection.SendAsync<CreateBrowserContextResponse>("Target.createBrowserContext", new { }).ConfigureAwait(false);
210+
var response = await Connection.SendAsync<CreateBrowserContextResponse>("Target.createBrowserContext", null).ConfigureAwait(false);
211211
var context = new BrowserContext(Connection, this, response.BrowserContextId);
212212
_contexts[response.BrowserContextId] = context;
213213
return context;
@@ -245,10 +245,7 @@ public async Task<Page[]> PagesAsync()
245245
/// the format of <see cref="GetVersionAsync"/> might change with future releases of Chromium
246246
/// </remarks>
247247
public async Task<string> GetVersionAsync()
248-
{
249-
var version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
250-
return version[MessageKeys.Product].AsString();
251-
}
248+
=> (await Connection.SendAsync<BrowserGetVersionResponse>("Browser.getVersion").ConfigureAwait(false)).Product;
252249

253250
/// <summary>
254251
/// Gets the browser's original user agent
@@ -258,10 +255,7 @@ public async Task<string> GetVersionAsync()
258255
/// Pages can override browser user agent with <see cref="Page.SetUserAgentAsync(string)"/>
259256
/// </remarks>
260257
public async Task<string> GetUserAgentAsync()
261-
{
262-
var version = await Connection.SendAsync("Browser.getVersion").ConfigureAwait(false);
263-
return version[MessageKeys.UserAgent].AsString();
264-
}
258+
=> (await Connection.SendAsync<BrowserGetVersionResponse>("Browser.getVersion").ConfigureAwait(false)).UserAgent;
265259

266260
/// <summary>
267261
/// Disconnects Puppeteer from the browser, but leaves the Chromium process running. After calling <see cref="Disconnect"/>, the browser object is considered disposed and cannot be used anymore
@@ -376,20 +370,28 @@ internal void ChangeTarget(Target target)
376370

377371
internal async Task<Page> CreatePageInContextAsync(string contextId)
378372
{
379-
var args = new Dictionary<string, object> { [MessageKeys.Url] = "about:blank" };
373+
var createTargetRequest = new TargetCreateTargetRequest
374+
{
375+
Url = "about:blank"
376+
};
377+
380378
if (contextId != null)
381379
{
382-
args[MessageKeys.BrowserContextId] = contextId;
380+
createTargetRequest.BrowserContextId = contextId;
383381
}
384-
var targetId = (await Connection.SendAsync("Target.createTarget", args).ConfigureAwait(false))[MessageKeys.TargetId].ToString();
382+
var targetId = (await Connection.SendAsync<TargetCreateTargetResponse>("Target.createTarget", createTargetRequest)
383+
.ConfigureAwait(false)).TargetId;
385384
var target = TargetsMap[targetId];
386385
await target.InitializedTask.ConfigureAwait(false);
387386
return await target.PageAsync().ConfigureAwait(false);
388387
}
389388

390389
internal async Task DisposeContextAsync(string contextId)
391390
{
392-
await Connection.SendAsync("Target.disposeBrowserContext", new { browserContextId = contextId }).ConfigureAwait(false);
391+
await Connection.SendAsync("Target.disposeBrowserContext", new TargetDisposeBrowserContextRequest
392+
{
393+
BrowserContextId = contextId
394+
}).ConfigureAwait(false);
393395
_contexts.Remove(contextId);
394396
}
395397

@@ -504,9 +506,9 @@ internal static async Task<Browser> CreateAsync(
504506
ChromiumProcess chromiumProcess)
505507
{
506508
var browser = new Browser(connection, contextIds, ignoreHTTPSErrors, defaultViewPort, chromiumProcess);
507-
await connection.SendAsync("Target.setDiscoverTargets", new
509+
await connection.SendAsync("Target.setDiscoverTargets", new TargetSetDiscoverTargetsRequest
508510
{
509-
discover = true
511+
Discover = true
510512
}).ConfigureAwait(false);
511513

512514
return browser;

lib/PuppeteerSharp/BrowserContext.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5+
using PuppeteerSharp.Messaging;
56

67
namespace PuppeteerSharp
78
{
@@ -55,7 +56,7 @@ internal BrowserContext(IConnection connection, Browser browser, string contextI
5556
/// </summary>
5657
/// <returns>An array of all active targets inside the browser context</returns>
5758
public Target[] Targets() => Array.FindAll(Browser.Targets(), target => target.BrowserContext == this);
58-
59+
5960
/// <summary>
6061
/// This searches for a target in this specific browser context.
6162
/// <example>
@@ -70,7 +71,7 @@ internal BrowserContext(IConnection connection, Browser browser, string contextI
7071
/// <param name="predicate">A function to be run for every target</param>
7172
/// <param name="options">options</param>
7273
/// <returns>Resolves to the first target found that matches the predicate function.</returns>
73-
public Task<Target> WaitForTargetAsync(Func<Target, bool> predicate, WaitForOptions options = null)
74+
public Task<Target> WaitForTargetAsync(Func<Target, bool> predicate, WaitForOptions options = null)
7475
=> Browser.WaitForTargetAsync((target) => target.BrowserContext == this && predicate(target), options);
7576

7677
/// <summary>
@@ -119,19 +120,22 @@ public Task CloseAsync()
119120
/// </example>
120121
/// <seealso href="https://developer.mozilla.org/en-US/docs/Glossary/Origin"/>
121122
public Task OverridePermissionsAsync(string origin, IEnumerable<OverridePermission> permissions)
122-
=> _connection.SendAsync("Browser.grantPermissions", new
123+
=> _connection.SendAsync("Browser.grantPermissions", new BrowserGrantPermissionsRequest
123124
{
124-
origin,
125-
browserContextId = _id,
126-
permissions
125+
Origin = origin,
126+
BrowserContextId = _id,
127+
Permissions = permissions.ToArray()
127128
});
128129

129130
/// <summary>
130131
/// Clears all permission overrides for the browser context.
131132
/// </summary>
132133
/// <returns>The task.</returns>
133134
public Task ClearPermissionOverridesAsync()
134-
=> _connection.SendAsync("Browser.resetPermissions", new { browserContextId = _id });
135+
=> _connection.SendAsync("Browser.resetPermissions", new BrowserResetPermissionsRequest
136+
{
137+
BrowserContextId = _id
138+
});
135139

136140
internal void OnTargetCreated(Browser browser, TargetChangedArgs args) => TargetCreated?.Invoke(browser, args);
137141

lib/PuppeteerSharp/CDPSession.cs

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,11 @@ public async Task<JObject> SendAsync(string method, object args = null, bool wai
143143
$"Close reason: {CloseReason}");
144144
}
145145
var id = Interlocked.Increment(ref _lastId);
146-
var message = JsonConvert.SerializeObject(new Dictionary<string, object>
146+
var message = JsonConvert.SerializeObject(new ConnectionRequest
147147
{
148-
{ MessageKeys.Id, id },
149-
{ MessageKeys.Method, method },
150-
{ MessageKeys.Params, args }
148+
Id = id,
149+
Method = method,
150+
Params = args
151151
}, JsonHelper.DefaultJsonSerializerSettings);
152152

153153
_logger.LogTrace("Send ► {Id} Method {Method} Params {@Params}", id, method, args);
@@ -166,10 +166,11 @@ public async Task<JObject> SendAsync(string method, object args = null, bool wai
166166
try
167167
{
168168
await Connection.SendAsync(
169-
"Target.sendMessageToTarget", new Dictionary<string, object>
169+
"Target.sendMessageToTarget",
170+
new TargetSendMessageToTargetRequest
170171
{
171-
{"sessionId", SessionId},
172-
{"message", message}
172+
SessionId = SessionId,
173+
Message = message
173174
},
174175
waitForCallback).ConfigureAwait(false);
175176
}
@@ -195,7 +196,10 @@ public Task DetachAsync()
195196
{
196197
throw new PuppeteerException($"Session already detached.Most likely the { TargetType } has been closed.");
197198
}
198-
return Connection.SendAsync("Target.detachFromTarget", new { sessionId = SessionId });
199+
return Connection.SendAsync("Target.detachFromTarget", new TargetDetachFromTargetRequest
200+
{
201+
SessionId = SessionId
202+
});
199203
}
200204

201205
internal bool HasPendingCallbacks() => _callbacks.Count != 0;
@@ -208,55 +212,55 @@ internal void OnMessage(string message)
208212
{
209213
_logger.LogTrace("◀ Receive {Message}", message);
210214

211-
JObject obj = null;
215+
ConnectionResponse obj = null;
212216

213217
try
214218
{
215-
obj = JObject.Parse(message);
219+
obj = JsonConvert.DeserializeObject<ConnectionResponse>(message, JsonHelper.DefaultJsonSerializerSettings);
216220
}
217221
catch (JsonException exc)
218222
{
219223
_logger.LogError(exc, "Failed to deserialize message", message);
220224
return;
221225
}
222226

223-
var id = obj[MessageKeys.Id]?.Value<int>();
227+
var id = obj.Id;
224228

225229
if (id.HasValue && _callbacks.TryRemove(id.Value, out var callback))
226230
{
227-
if (obj[MessageKeys.Error] != null)
231+
if (obj.Error != null)
228232
{
229-
callback.TaskWrapper.TrySetException(new MessageException(callback, obj));
233+
callback.TaskWrapper.TrySetException(new MessageException(callback, obj.Error));
230234
}
231235
else
232236
{
233-
callback.TaskWrapper.TrySetResult(obj[MessageKeys.Result].Value<JObject>());
237+
callback.TaskWrapper.TrySetResult(obj.Result);
234238
}
235239
}
236240
else
237241
{
238-
var method = obj[MessageKeys.Method].AsString();
239-
var param = obj[MessageKeys.Params];
242+
var method = obj.Method;
243+
var param = obj.Params?.ToObject<ConnectionResponseParams>();
240244

241245
if (method == "Tracing.tracingComplete")
242246
{
243247
TracingComplete?.Invoke(this, new TracingCompleteEventArgs
244248
{
245-
Stream = param[MessageKeys.Stream].AsString()
249+
Stream = param.Stream
246250
});
247251
}
248252
else if (method == "Target.receivedMessageFromTarget")
249253
{
250-
var sessionId = param[MessageKeys.SessionId].AsString();
254+
var sessionId = param.SessionId;
251255

252256
if (_sessions.TryGetValue(sessionId, out var session))
253257
{
254-
session.OnMessage(param[MessageKeys.Message].AsString());
258+
session.OnMessage(param.Message);
255259
}
256260
}
257261
else if (method == "Target.detachedFromTarget")
258262
{
259-
var sessionId = param[MessageKeys.SessionId].AsString();
263+
var sessionId = param.SessionId;
260264

261265
if (_sessions.TryRemove(sessionId, out var session))
262266
{
@@ -267,7 +271,7 @@ internal void OnMessage(string message)
267271
MessageReceived?.Invoke(this, new MessageEventArgs
268272
{
269273
MessageID = method,
270-
MessageData = param
274+
MessageData = obj.Params
271275
});
272276
}
273277
}

0 commit comments

Comments
 (0)