Skip to content

Commit 085ff89

Browse files
kblokMeir017
authored andcommitted
Drop object factory from execution context (#645)
* Drop object factory from execution context * cr
1 parent ad30cf5 commit 085ff89

File tree

6 files changed

+19
-22
lines changed

6 files changed

+19
-22
lines changed

lib/PuppeteerSharp/ExecutionContext.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,13 @@ public class ExecutionContext
2424
internal ExecutionContext(
2525
CDPSession client,
2626
ContextPayload contextPayload,
27-
Func<ExecutionContext, dynamic, JSHandle> objectHandleFactory,
2827
Frame frame)
2928
{
3029
_client = client;
3130
_contextId = contextPayload.Id;
32-
ObjectHandleFactory = objectHandleFactory;
3331
Frame = frame;
3432
}
3533

36-
internal Func<ExecutionContext, dynamic, JSHandle> ObjectHandleFactory { get; set; }
37-
3834
/// <summary>
3935
/// Frame associated with this execution context.
4036
/// </summary>
@@ -127,7 +123,7 @@ public async Task<dynamic> QueryObjectsAsync(JSHandle prototypeHandle)
127123
{"prototypeObjectId", objectId.ToString()}
128124
}).ConfigureAwait(false);
129125

130-
return ObjectHandleFactory(this, response.objects);
126+
return CreateJSHandle(response.objects);
131127
}
132128

133129
internal async Task<JSHandle> EvaluateExpressionHandleAsync(string script)
@@ -179,6 +175,11 @@ internal async Task<JSHandle> EvaluateFunctionHandleAsync(string script, params
179175
}
180176
}
181177

178+
internal JSHandle CreateJSHandle(dynamic remoteObject)
179+
=> (remoteObject.subtype == "node" && Frame != null)
180+
? new ElementHandle(this, _client, remoteObject, Frame.FrameManager.Page, Frame.FrameManager)
181+
: new JSHandle(this, _client, remoteObject);
182+
182183
private async Task<T> EvaluateAsync<T>(Task<JSHandle> handleEvaluator)
183184
{
184185
var handle = await handleEvaluator.ConfigureAwait(false);
@@ -212,7 +213,7 @@ private async Task<JSHandle> EvaluateHandleAsync(string method, dynamic args)
212213
GetExceptionMessage(response.exceptionDetails.ToObject<EvaluateExceptionDetails>()));
213214
}
214215

215-
return ObjectHandleFactory(this, response.result);
216+
return CreateJSHandle(response.result);
216217
}
217218

218219
private object FormatArgument(object arg)

lib/PuppeteerSharp/Frame.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ public class Frame
4949
internal List<string> LifecycleEvents { get; }
5050
internal string NavigationURL { get; private set; }
5151

52-
internal Frame(CDPSession client, Frame parentFrame, string frameId)
52+
internal Frame(FrameManager frameManager, CDPSession client, Frame parentFrame, string frameId)
5353
{
54+
FrameManager = frameManager;
5455
_client = client;
5556
ParentFrame = parentFrame;
5657
Id = frameId;
@@ -92,6 +93,8 @@ internal Frame(CDPSession client, Frame parentFrame, string frameId)
9293
/// Gets the parent frame, if any. Detached frames and main frames return <c>null</c>
9394
/// </summary>
9495
public Frame ParentFrame { get; private set; }
96+
97+
internal FrameManager FrameManager { get; }
9598
#endregion
9699

97100
#region Public Methods
@@ -403,7 +406,7 @@ public async Task<ElementHandle> AddStyleTag(AddTagOptions options)
403406

404407
if (!string.IsNullOrEmpty(options.Path))
405408
{
406-
string contents = await AsyncFileHelper.ReadAllText(options.Path).ConfigureAwait(false);
409+
var contents = await AsyncFileHelper.ReadAllText(options.Path).ConfigureAwait(false);
407410
contents += "//# sourceURL=" + options.Path.Replace("\n", string.Empty);
408411
var context = await GetExecutionContextAsync().ConfigureAwait(false);
409412
return (await context.EvaluateFunctionHandleAsync(addStyleContent, contents).ConfigureAwait(false)) as ElementHandle;
@@ -475,7 +478,7 @@ async Task<ElementHandle> AddScriptTagPrivate(string script, string urlOrContent
475478

476479
if (!string.IsNullOrEmpty(options.Path))
477480
{
478-
string contents = await AsyncFileHelper.ReadAllText(options.Path).ConfigureAwait(false);
481+
var contents = await AsyncFileHelper.ReadAllText(options.Path).ConfigureAwait(false);
479482
contents += "//# sourceURL=" + options.Path.Replace("\n", string.Empty);
480483
return await AddScriptTagPrivate(addScriptContent, contents, options.Type).ConfigureAwait(false);
481484
}

lib/PuppeteerSharp/FrameManager.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ namespace PuppeteerSharp
99
internal class FrameManager
1010
{
1111
private readonly CDPSession _client;
12-
private readonly Page _page;
1312
private Dictionary<int, ExecutionContext> _contextIdToContext;
1413
private readonly ILogger _logger;
1514

1615
internal FrameManager(CDPSession client, FrameTree frameTree, Page page)
1716
{
1817
_client = client;
19-
_page = page;
18+
Page = page;
2019
Frames = new Dictionary<string, Frame>();
2120
_contextIdToContext = new Dictionary<int, ExecutionContext>();
2221
_logger = _client.Connection.LoggerFactory.CreateLogger<FrameManager>();
@@ -34,16 +33,12 @@ internal FrameManager(CDPSession client, FrameTree frameTree, Page page)
3433

3534
internal Dictionary<string, Frame> Frames { get; set; }
3635
internal Frame MainFrame { get; set; }
36+
internal Page Page { get; }
3737

3838
#endregion
3939

4040
#region Public Methods
4141

42-
internal JSHandle CreateJSHandle(ExecutionContext context, dynamic remoteObject)
43-
=> remoteObject.subtype == "node"
44-
? new ElementHandle(context, _client, remoteObject, _page, this)
45-
: new JSHandle(context, _client, remoteObject);
46-
4742
internal ExecutionContext ExecutionContextById(int contextId)
4843
{
4944
_contextIdToContext.TryGetValue(contextId, out var context);
@@ -149,7 +144,6 @@ private void OnExecutionContextCreated(ContextPayload contextPayload)
149144
var context = new ExecutionContext(
150145
_client,
151146
contextPayload,
152-
(ctx, remoteObject) => CreateJSHandle(ctx, remoteObject),
153147
frame);
154148

155149
_contextIdToContext[contextPayload.Id] = context;
@@ -199,7 +193,7 @@ private void OnFrameNavigated(FramePayload framePayload)
199193
else
200194
{
201195
// Initial main frame navigation.
202-
frame = new Frame(_client, null, framePayload.Id);
196+
frame = new Frame(this, _client, null, framePayload.Id);
203197
}
204198

205199
Frames[framePayload.Id] = frame;
@@ -248,7 +242,7 @@ private void OnFrameAttached(string frameId, string parentFrameId)
248242
if (!Frames.ContainsKey(frameId) && Frames.ContainsKey(parentFrameId))
249243
{
250244
var parentFrame = Frames[parentFrameId];
251-
var frame = new Frame(_client, parentFrame, frameId);
245+
var frame = new Frame(this, _client, parentFrame, frameId);
252246
Frames[frame.Id] = frame;
253247
FrameAttached?.Invoke(this, new FrameEventArgs(frame));
254248
}

lib/PuppeteerSharp/JSHandle.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public async Task<Dictionary<string, JSHandle>> GetPropertiesAsync()
9292
continue;
9393
}
9494

95-
result.Add(property.name.ToString(), ExecutionContext.ObjectHandleFactory(ExecutionContext, property.value));
95+
result.Add(property.name.ToString(), ExecutionContext.CreateJSHandle(property.value));
9696
}
9797
return result;
9898
}

lib/PuppeteerSharp/Page.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1964,7 +1964,7 @@ private void OnDialog(PageJavascriptDialogOpeningResponse message)
19641964
private async Task OnConsoleAPI(PageConsoleResponse message)
19651965
{
19661966
var ctx = _frameManager.ExecutionContextById(message.ExecutionContextId);
1967-
var values = message.Args.Select<dynamic, JSHandle>(i => _frameManager.CreateJSHandle(ctx, i)).ToArray();
1967+
var values = message.Args.Select<dynamic, JSHandle>(i => ctx.CreateJSHandle(i)).ToArray();
19681968
await AddConsoleMessage(message.Type, values);
19691969
}
19701970

lib/PuppeteerSharp/Worker.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ private void OnExecutionContextCreated(MessageEventArgs e)
130130
_executionContext = new ExecutionContext(
131131
_client,
132132
e.MessageData.SelectToken("context").ToObject<ContextPayload>(),
133-
_jsHandleFactory,
134133
null);
135134
_executionContextCallback.TrySetResult(_executionContext);
136135
}

0 commit comments

Comments
 (0)