Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions lib/PuppeteerSharp.Tests/ChromeLauncherTests/DefaultArgsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Linq;
using NUnit.Framework;
using PuppeteerSharp.Nunit;

namespace PuppeteerSharp.Tests.ChromeLauncherTests
{
public class DefaultArgsTests : PuppeteerPageBaseTest
{
[Test, PuppeteerTest("ChromeLauncher.test.ts", "ChromeLauncher", "removes disabled features if they are enabled explicitly")]
public void RemovesDisabledFeaturesIfTheyAreEnabledExplicitly()
{
var args = ChromeLauncher.GetDefaultArgs(new LaunchOptions
{
Args = new[] { "--enable-features=Translate" },
});

var disableFeaturesFlag = args.FirstOrDefault(arg => arg.StartsWith("--disable-features=", System.StringComparison.Ordinal));
Assert.That(disableFeaturesFlag, Is.Not.Null);

var disabledFeatures = disableFeaturesFlag.Split('=')[1].Split(',');
Assert.That(disabledFeatures, Does.Not.Contain("Translate"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,12 @@ public void HandlesEqualsSignAroundTheFlagAndValue()
var result = ChromeLauncher.GetFeatures("--foo", new[] { "--foo=bar", "--foo=baz" });
Assert.That(result, Is.EqualTo(new[] { "bar", "baz" }));
}

[Test, PuppeteerTest("ChromeLauncher.test.ts", "getFeatures", "handles comma-separated values")]
public void HandlesCommaSeparatedValues()
{
var result = ChromeLauncher.GetFeatures("--foo", new[] { "--foo=bar,baz", "--foo=qux" });
Assert.That(result, Is.EqualTo(new[] { "bar", "baz", "qux" }));
}
}
}
57 changes: 37 additions & 20 deletions lib/PuppeteerSharp/ChromeLauncher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,24 @@ public ChromeLauncher(string executable, LaunchOptions options)

internal static string[] GetDefaultArgs(LaunchOptions options)
{
var userDisabledFeatures = GetFeatures("--disable-features", options.Args);
var args = options.Args ?? [];

var userEnabledFeatures = GetFeatures("--enable-features", options.Args);
if (args != null && userEnabledFeatures.Length > 0)
{
args = RemoveMatchingFlags(options.Args, "--enable-features");
}

// Merge default enabled features with user-provided ones, if any.
var enabledFeatures = new List<string>
{
"PdfOopif",
};

enabledFeatures.AddRange(userEnabledFeatures);
enabledFeatures = enabledFeatures.Where(feature => !string.IsNullOrEmpty(feature)).ToList();

var userDisabledFeatures = GetFeatures("--disable-features", options.Args);
if (args is not null && userDisabledFeatures.Length > 0)
{
args = RemoveMatchingFlags(options.Args, "--disable-features");
Expand All @@ -71,20 +87,10 @@ internal static string[] GetDefaultArgs(LaunchOptions options)
};

disabledFeatures.AddRange(userDisabledFeatures);

var userEnabledFeatures = GetFeatures("--enable-features", options.Args);
if (args != null && userEnabledFeatures.Length > 0)
{
args = RemoveMatchingFlags(options.Args, "--enable-features");
}

// Merge default enabled features with user-provided ones, if any.
var enabledFeatures = new List<string>
{
"PdfOopif",
};

enabledFeatures.AddRange(userEnabledFeatures);
disabledFeatures = disabledFeatures
.Where(feature => !string.IsNullOrEmpty(feature))
.Where(disabledFeature => !enabledFeatures.Contains(disabledFeature))
.ToList();

var chromiumArguments = new List<string>(
[
Expand Down Expand Up @@ -165,13 +171,24 @@ internal static string[] GetDefaultArgs(LaunchOptions options)
}

internal static string[] GetFeatures(string flag, string[] options)
=> options
.Where(s => s.StartsWith($"{flag}=", StringComparison.InvariantCultureIgnoreCase))
.Select(s => s.Substring(flag.Length + 1))
.Where(s => !string.IsNullOrEmpty(s)).ToArray();
{
var prefix = flag.EndsWith("=", StringComparison.Ordinal) ? flag : $"{flag}=";
return (options ?? [])
.Where(s => s.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase))
.SelectMany(s => s
.Substring(s.IndexOf('=') + 1)
.Trim()
.Split(',')
.Select(feature => feature.Trim()))
.Where(s => !string.IsNullOrEmpty(s))
.ToArray();
}

internal static string[] RemoveMatchingFlags(string[] array, string flag)
=> array.Where(arg => !arg.StartsWith(flag, StringComparison.InvariantCultureIgnoreCase)).ToArray();
{
var prefix = flag.EndsWith("=", StringComparison.Ordinal) ? flag : $"{flag}=";
return array.Where(arg => !arg.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase)).ToArray();
}

/// <summary>
/// Creates the pipe transport after the process has started.
Expand Down
Loading