Skip to content

Commit 618e642

Browse files
authored
Add support for referrerPolicy in Page.GoToAsync (#2284)
1 parent 6d712e9 commit 618e642

File tree

6 files changed

+45
-24
lines changed

6 files changed

+45
-24
lines changed

lib/PuppeteerSharp.Tests/NavigationTests/PageGotoTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,5 +505,28 @@ await Task.WhenAll(
505505
// Make sure subresources do not inherit referer.
506506
Assert.AreEqual(TestConstants.ServerUrl + "/grid.html", referer2);
507507
}
508+
509+
[PuppeteerTest("navigation.spec.ts", "Page.goto", "should send referer policy")]
510+
[Skip(SkipAttribute.Targets.Firefox)]
511+
public async Task ShouldSendRefererPolicy()
512+
{
513+
await Page.SetRequestInterceptionAsync(true);
514+
Page.Request += async (_, e) => await e.Request.ContinueAsync();
515+
string referer1 = null;
516+
string referer2 = null;
517+
518+
await Task.WhenAll(
519+
Server.WaitForRequest("/grid.html", r => referer1 = r.Headers["Referer"]),
520+
Server.WaitForRequest("/digits/1.png", r => referer2 = r.Headers["Referer"]),
521+
Page.GoToAsync(TestConstants.ServerUrl + "/grid.html", new NavigationOptions
522+
{
523+
ReferrerPolicy = "no-referer"
524+
})
525+
);
526+
527+
Assert.IsNull(referer1);
528+
// Make sure subresources do not inherit referer.
529+
Assert.AreEqual(TestConstants.ServerUrl + "/grid.html", referer2);
530+
}
508531
}
509532
}

lib/PuppeteerSharp.Tests/WontImplementTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ public WontImplementTests(): base()
1515
[PuppeteerTest("chromiumonly.spec.ts", "Puppeteer.launch |pipe| option", "should support the pipe option")]
1616
[PuppeteerTest("chromiumonly.spec.ts", "Puppeteer.launch |pipe| option", "should support the pipe argument")]
1717
[PuppeteerTest("chromiumonly.spec.ts", "Puppeteer.launch |pipe| option", "should fire \"disconnected\" when closing with pipe")]
18-
[PuppeteerTest("navigation.spec.ts", "should not leak listeners during navigation")]
19-
[PuppeteerTest("navigation.spec.ts", "should not leak listeners during bad navigation")]
20-
[PuppeteerTest("navigation.spec.ts", "should not leak listeners during navigation of 11 pages")]
21-
[PuppeteerTest("navigation.spec.ts", "should throw if networkidle is passed as an option")]
18+
[PuppeteerTest("navigation.spec.ts", "Page.goto", "should not leak listeners during navigation")]
19+
[PuppeteerTest("navigation.spec.ts", "Page.goto", "should not leak listeners during bad navigation")]
20+
[PuppeteerTest("navigation.spec.ts", "Page.goto", "should not leak listeners during navigation of 11 pages")]
21+
[PuppeteerTest("navigation.spec.ts", "Page.goto", "should throw if networkidle is passed as an option")]
2222
[PuppeteerTest("launcher.spec.ts", "Puppeteer.launch", "should report the correct product")] //We don't use the product in this way
2323
[PuppeteerTest("launcher.spec.ts", "Puppeteer.launch", "falls back to launching chrome if there is an unknown product but logs a warning")]
2424
[PuppeteerTest("tracing.spec.ts", "Tracing", "should return null in case of Buffer error")]

lib/PuppeteerSharp.Tooling/PuppeteerSharp.Tooling.csproj

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,18 @@
77
<GenerateDocumentationFile>true</GenerateDocumentationFile>
88
</PropertyGroup>
99
<ItemGroup>
10-
<PackageReference Include="CommandLineParser" Version="2.9.0-preview1" />
10+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
11+
<PackageReference Include="CommandLineParser" Version="2.9.1" />
1112
<PackageReference Include="System.CodeDom" Version="5.0.0" />
1213
<PackageReference Include="Macross.Json.Extensions" Version="1.5.0" />
1314
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
14-
<PackageReference Include="Microsoft.Extensions.Primitives" Version="5.0.0" />
15-
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
15+
<PackageReference Include="Microsoft.Extensions.Primitives" Version="6.0.0" />
16+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="7.0.0" />
1617
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
17-
<PackageReference Include="xunit.core" Version="2.4.2" />
18-
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
1918
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
20-
</ItemGroup>
21-
<ItemGroup>
22-
<Folder Include="Extensions\" />
23-
<Folder Include="Linux\" />
24-
<Folder Include="Models\" />
25-
<Folder Include="Options\" />
19+
<PackageReference Include="NUnit" Version="3.13.3" />
2620
</ItemGroup>
2721
<ItemGroup>
2822
<ProjectReference Include="..\PuppeteerSharp.Nunit\PuppeteerSharp.Nunit.csproj" />
2923
</ItemGroup>
30-
<ItemGroup>
31-
<None Remove="Microsoft.Bcl.AsyncInterfaces" />
32-
<None Remove="Newtonsoft.Json" />
33-
<None Remove="xunit.core" />
34-
<None Remove="Microsoft.AspNetCore.Http.Abstractions" />
35-
<None Remove="Mono.Posix.NETStandard" />
36-
</ItemGroup>
3724
</Project>

lib/PuppeteerSharp/FrameManager.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,16 @@ public async Task<IResponse> NavigateFrameAsync(Frame frame, string url, Navigat
6464
var referrer = string.IsNullOrEmpty(options.Referer)
6565
? NetworkManager.ExtraHTTPHeaders?.GetValueOrDefault(RefererHeaderName)
6666
: options.Referer;
67+
var referrerPolicy = string.IsNullOrEmpty(options.ReferrerPolicy)
68+
? NetworkManager.ExtraHTTPHeaders?.GetValueOrDefault("referer-policy")
69+
: options.ReferrerPolicy;
6770
var timeout = options?.Timeout ?? TimeoutSettings.NavigationTimeout;
6871

6972
using (var watcher = new LifecycleWatcher(this, frame, options?.WaitUntil, timeout))
7073
{
7174
try
7275
{
73-
var navigateTask = NavigateAsync(Client, url, referrer, frame.Id);
76+
var navigateTask = NavigateAsync(Client, url, referrer, referrerPolicy, frame.Id);
7477
var task = await Task.WhenAny(
7578
watcher.TimeoutOrTerminationTask,
7679
navigateTask).ConfigureAwait(false);
@@ -189,12 +192,13 @@ internal ExecutionContext GetExecutionContextById(int contextId, CDPSession sess
189192
return context;
190193
}
191194

192-
private async Task NavigateAsync(CDPSession client, string url, string referrer, string frameId)
195+
private async Task NavigateAsync(CDPSession client, string url, string referrer, string referrerPolicy, string frameId)
193196
{
194197
var response = await client.SendAsync<PageNavigateResponse>("Page.navigate", new PageNavigateRequest
195198
{
196199
Url = url,
197200
Referrer = referrer ?? string.Empty,
201+
ReferrerPolicy = referrerPolicy ?? string.Empty,
198202
FrameId = frameId,
199203
}).ConfigureAwait(false);
200204

lib/PuppeteerSharp/Messaging/PageNavigateRequest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@ internal class PageNavigateRequest
77
public string Referrer { get; set; }
88

99
public string FrameId { get; set; }
10+
11+
public string ReferrerPolicy { get; set; }
1012
}
1113
}

lib/PuppeteerSharp/NavigationOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,10 @@ public class NavigationOptions
2323
/// </summary>
2424
/// <value>The referer.</value>
2525
public string Referer { get; set; }
26+
27+
/// <summary>
28+
/// Referrer policy. If provided it will take preference over the referer-policy header value set by <see cref="IPage.SetExtraHttpHeadersAsync(System.Collections.Generic.Dictionary{string, string})"/>.
29+
/// </summary>
30+
public string ReferrerPolicy { get; set; }
2631
}
2732
}

0 commit comments

Comments
 (0)