Skip to content

Commit 54ac49c

Browse files
authored
BREAKING: Use target for filters (#2319)
* Use target for filters * fix a test
1 parent 4218fd4 commit 54ac49c

File tree

9 files changed

+47
-38
lines changed

9 files changed

+47
-38
lines changed

lib/PuppeteerSharp.Tests/LauncherTests/PuppeteerConnectTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public async Task ShouldSupportTargetFilter()
9999

100100
var browser = await Puppeteer.ConnectAsync(new ConnectOptions {
101101
BrowserWSEndpoint = originalBrowser.WebSocketEndpoint,
102-
TargetFilter = (TargetInfo targetInfo) => !targetInfo.Url.Contains("should-be-ignored"),
102+
TargetFilter = (Target target) => !target.Url.Contains("should-be-ignored"),
103103
}, TestConstants.LoggerFactory);
104104

105105
var pages = await browser.PagesAsync();

lib/PuppeteerSharp/Browser.cs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class Browser : IBrowser
2121

2222
private readonly ConcurrentDictionary<string, BrowserContext> _contexts;
2323
private readonly ILogger<Browser> _logger;
24-
private readonly Func<TargetInfo, bool> _targetFilterCallback;
24+
private readonly Func<Target, bool> _targetFilterCallback;
2525
private readonly BrowserContext _defaultContext;
2626
private readonly CustomQueriesManager _customQueriesManager = new();
2727
private Task _closeTask;
@@ -33,18 +33,18 @@ internal Browser(
3333
bool ignoreHTTPSErrors,
3434
ViewPortOptions defaultViewport,
3535
LauncherBase launcher,
36-
Func<TargetInfo, bool> targetFilter = null,
37-
Func<TargetInfo, bool> isPageTargetFunc = null)
36+
Func<Target, bool> targetFilter = null,
37+
Func<Target, bool> isPageTargetFunc = null)
3838
{
3939
IgnoreHTTPSErrors = ignoreHTTPSErrors;
4040
DefaultViewport = defaultViewport;
4141
Launcher = launcher;
4242
Connection = connection;
43-
_targetFilterCallback = targetFilter ?? ((TargetInfo _) => true);
43+
_targetFilterCallback = targetFilter ?? ((Target _) => true);
4444
_logger = Connection.LoggerFactory.CreateLogger<Browser>();
4545
IsPageTargetFunc =
4646
isPageTargetFunc ??
47-
new Func<TargetInfo, bool>((TargetInfo target) =>
47+
new Func<Target, bool>((Target target) =>
4848
{
4949
return
5050
target.Type == TargetType.Page ||
@@ -139,7 +139,7 @@ public bool IsClosed
139139

140140
internal ITargetManager TargetManager { get; }
141141

142-
internal Func<TargetInfo, bool> IsPageTargetFunc { get; set; }
142+
internal Func<Target, bool> IsPageTargetFunc { get; set; }
143143

144144
/// <inheritdoc/>
145145
public Task<IPage> NewPageAsync() => _defaultContext.NewPageAsync();
@@ -269,8 +269,8 @@ internal static async Task<Browser> CreateAsync(
269269
bool ignoreHTTPSErrors,
270270
ViewPortOptions defaultViewPort,
271271
LauncherBase launcher,
272-
Func<TargetInfo, bool> targetFilter = null,
273-
Func<TargetInfo, bool> isPageTargetCallback = null,
272+
Func<Target, bool> targetFilter = null,
273+
Func<Target, bool> isPageTargetCallback = null,
274274
Action<IBrowser> initAction = null)
275275
{
276276
var browser = new Browser(
@@ -475,7 +475,14 @@ private Target CreateTarget(TargetInfo targetInfo, CDPSession session)
475475

476476
Func<bool, Task<CDPSession>> createSession = (bool isAutoAttachEmulated) => Connection.CreateSessionAsync(targetInfo, isAutoAttachEmulated);
477477

478-
if (IsPageTargetFunc(targetInfo))
478+
var otherTarget = new OtherTarget(
479+
targetInfo,
480+
session,
481+
context,
482+
TargetManager,
483+
createSession);
484+
485+
if (IsPageTargetFunc(otherTarget))
479486
{
480487
return new PageTarget(
481488
targetInfo,
@@ -498,12 +505,7 @@ private Target CreateTarget(TargetInfo targetInfo, CDPSession session)
498505
createSession);
499506
}
500507

501-
return new OtherTarget(
502-
targetInfo,
503-
session,
504-
context,
505-
TargetManager,
506-
createSession);
508+
return otherTarget;
507509
}
508510
}
509511
}

lib/PuppeteerSharp/BrowserContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public async Task<IPage[]> PagesAsync()
5252
Targets()
5353
.Where(t =>
5454
t.Type == TargetType.Page ||
55-
(t.Type == TargetType.Other && Browser.IsPageTargetFunc((t as Target).TargetInfo)))
55+
(t.Type == TargetType.Other && Browser.IsPageTargetFunc(t as Target)))
5656
.Select(t => t.PageAsync())).ConfigureAwait(false))
5757
.Where(p => p != null).ToArray();
5858

lib/PuppeteerSharp/ChromeTargetManager.cs

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ internal class ChromeTargetManager : ITargetManager
1717
private readonly List<string> _ignoredTargets = new();
1818
private readonly Connection _connection;
1919
private readonly Func<TargetInfo, CDPSession, Target> _targetFactoryFunc;
20-
private readonly Func<TargetInfo, bool> _targetFilterFunc;
20+
private readonly Func<Target, bool> _targetFilterFunc;
2121
private readonly ILogger<ChromeTargetManager> _logger;
2222
private readonly AsyncDictionaryHelper<string, Target> _attachedTargetsByTargetId = new("Target {0} not found");
2323
private readonly ConcurrentDictionary<string, Target> _attachedTargetsBySessionId = new();
@@ -33,7 +33,7 @@ internal class ChromeTargetManager : ITargetManager
3333
public ChromeTargetManager(
3434
Connection connection,
3535
Func<TargetInfo, CDPSession, Target> targetFactoryFunc,
36-
Func<TargetInfo, bool> targetFilterFunc,
36+
Func<Target, bool> targetFilterFunc,
3737
int targetDiscoveryTimeout = 0)
3838
{
3939
_connection = connection;
@@ -119,7 +119,14 @@ private void StoreExistingTargetsForInit()
119119
{
120120
foreach (var kv in _discoveredTargetsByTargetId)
121121
{
122-
if ((_targetFilterFunc == null || _targetFilterFunc(kv.Value)) &&
122+
var targetForFilter = new Target(
123+
kv.Value,
124+
null,
125+
null,
126+
this,
127+
null);
128+
129+
if ((_targetFilterFunc == null || _targetFilterFunc(targetForFilter)) &&
123130
kv.Value.Type != TargetType.Browser)
124131
{
125132
_targetsIdsForInit.Add(kv.Key);
@@ -286,7 +293,13 @@ await parent.SendAsync(
286293
return;
287294
}
288295

289-
if (_targetFilterFunc?.Invoke(targetInfo) == false)
296+
var existingTarget = _attachedTargetsByTargetId.TryGetValue(targetInfo.TargetId, out var target);
297+
if (!existingTarget)
298+
{
299+
target = _targetFactoryFunc(targetInfo, session);
300+
}
301+
302+
if (_targetFilterFunc?.Invoke(target) == false)
290303
{
291304
_ignoredTargets.Add(targetInfo.TargetId);
292305
await EnsureTargetsIdsForInitAsync().ConfigureAwait(false);
@@ -295,12 +308,6 @@ await parent.SendAsync(
295308
return;
296309
}
297310

298-
var existingTarget = _attachedTargetsByTargetId.TryGetValue(targetInfo.TargetId, out var target);
299-
if (!existingTarget)
300-
{
301-
target = _targetFactoryFunc(targetInfo, session);
302-
}
303-
304311
session.MessageReceived += OnMessageReceived;
305312

306313
if (existingTarget)

lib/PuppeteerSharp/ConnectOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public class ConnectOptions : IBrowserOptions, IConnectionOptions
8989
/// <summary>
9090
/// Callback to decide if Puppeteer should connect to a given target or not.
9191
/// </summary>
92-
public Func<TargetInfo, bool> TargetFilter { get; set; }
92+
public Func<Target, bool> TargetFilter { get; set; }
9393

9494
/// <summary>
9595
/// Optional callback to initialize properties as soon as the <see cref="IBrowser"/> instance is created, i.e., set up event handlers.

lib/PuppeteerSharp/FirefoxTargetManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal class FirefoxTargetManager : ITargetManager
1414
{
1515
private readonly Connection _connection;
1616
private readonly Func<TargetInfo, CDPSession, Target> _targetFactoryFunc;
17-
private readonly Func<TargetInfo, bool> _targetFilterFunc;
17+
private readonly Func<Target, bool> _targetFilterFunc;
1818
private readonly ILogger<FirefoxTargetManager> _logger;
1919
private readonly ConcurrentDictionary<ICDPConnection, List<TargetInterceptor>> _targetInterceptors = new();
2020
private readonly AsyncDictionaryHelper<string, Target> _availableTargetsByTargetId = new("Target {0} not found");
@@ -27,7 +27,7 @@ internal class FirefoxTargetManager : ITargetManager
2727
public FirefoxTargetManager(
2828
Connection connection,
2929
Func<TargetInfo, CDPSession, Target> targetFactoryFunc,
30-
Func<TargetInfo, bool> targetFilterFunc)
30+
Func<Target, bool> targetFilterFunc)
3131
{
3232
_connection = connection;
3333
_targetFilterFunc = targetFilterFunc;
@@ -121,14 +121,14 @@ private void OnTargetCreated(TargetCreatedResponse e)
121121
FinishInitializationIfReady(e.TargetInfo.TargetId);
122122
}
123123

124-
if (_targetFilterFunc != null && !_targetFilterFunc(e.TargetInfo))
124+
var target = _targetFactoryFunc(e.TargetInfo, null);
125+
if (_targetFilterFunc != null && !_targetFilterFunc(target))
125126
{
126127
_ignoredTargets.Add(e.TargetInfo.TargetId);
127128
FinishInitializationIfReady(e.TargetInfo.TargetId);
128129
return;
129130
}
130131

131-
var target = _targetFactoryFunc(e.TargetInfo, null);
132132
_availableTargetsByTargetId.AddItem(e.TargetInfo.TargetId, target);
133133
TargetAvailable?.Invoke(
134134
this,

lib/PuppeteerSharp/IConnectionOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ public interface IConnectionOptions
5050
/// <summary>
5151
/// Callback to decide if Puppeteer should connect to a given target or not.
5252
/// </summary>
53-
public Func<TargetInfo, bool> TargetFilter { get; set; }
53+
public Func<Target, bool> TargetFilter { get; set; }
5454
}
5555
}

lib/PuppeteerSharp/LaunchOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,6 @@ public string[] IgnoredDefaultArgs
186186
/// <summary>
187187
/// Callback to decide if Puppeteer should connect to a given target or not.
188188
/// </summary>
189-
public Func<TargetInfo, bool> TargetFilter { get; set; }
189+
public Func<Target, bool> TargetFilter { get; set; }
190190
}
191191
}

lib/PuppeteerSharp/PuppeteerSharp.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
<Description>Headless Browser .NET API</Description>
1313
<PackageId>PuppeteerSharp</PackageId>
1414
<PackageReleaseNotes></PackageReleaseNotes>
15-
<PackageVersion>11.0.6</PackageVersion>
16-
<ReleaseVersion>11.0.6</ReleaseVersion>
17-
<AssemblyVersion>11.0.6</AssemblyVersion>
18-
<FileVersion>11.0.6</FileVersion>
15+
<PackageVersion>12.0.0</PackageVersion>
16+
<ReleaseVersion>12.0.0</ReleaseVersion>
17+
<AssemblyVersion>12.0.0</AssemblyVersion>
18+
<FileVersion>12.0.0</FileVersion>
1919
<SynchReleaseVersion>false</SynchReleaseVersion>
2020
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
2121
<DebugType>embedded</DebugType>

0 commit comments

Comments
 (0)