Skip to content

Commit 8c31147

Browse files
scabanakblok
authored andcommitted
Remove Mono.Posix.NETStandard dependency (#1072)
1 parent 062756d commit 8c31147

File tree

8 files changed

+82
-46
lines changed

8 files changed

+82
-46
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ Puppeteer Sharp is a .NET port of the official [Node.JS Puppeteer API](https://g
2323

2424
# Prerequisites
2525

26-
* As Puppeteer-Sharp is a NetStandard 2.0 library, The minimum platform versions are .NET Framework 4.6.1 and .NET Core 2.0. [Read more](https://docs.microsoft.com/en-us/dotnet/standard/net-standard).
26+
* As Puppeteer-Sharp is a NetStandard 2.0 library, the minimum platform versions are .NET Framework 4.6.1 and .NET Core 2.0. [Read more](https://docs.microsoft.com/en-us/dotnet/standard/net-standard).
2727
* The minimum **Windows** versions supporting the WebSocket library are Windows 8 and Windows Server 2012. [Read more](https://docs.microsoft.com/en-us/dotnet/api/system.net.websockets?redirectedfrom=MSDN&view=netframework-4.7.2).
28-
* Mono is required on **Linux**. Read more about installing Mono [here](https://www.mono-project.com/download/stable/#download-lin-ubuntu).
2928
* If you have issues running Chrome on Linux, the Puppeteer repo has a [great troubleshooting guide](https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md).
3029

3130
# How to Contribute and Provide Feedback

lib/PuppeteerSharp.Tests/PuppeteerSharp.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
1010
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
1111
<PackageReference Include="MicrosoftExtensions.Logging.Xunit" Version="1.0.0" />
12-
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" Condition="'$(TargetFramework).StartsWith(`net4`)' == True" />
12+
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
1313
<PackageReference Include="xunit" Version="2.4.1" />
1414
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
1515
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-beta0005" />

lib/PuppeteerSharp.Tests/PuppeteerTests/BrowserFetcherTests.cs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Xunit;
77
using Xunit.Abstractions;
88
using PuppeteerSharp.Helpers.Linux;
9+
using System.Collections.Generic;
910

1011
namespace PuppeteerSharp.Tests.PuppeteerTests
1112
{
@@ -45,11 +46,11 @@ public async Task ShouldDownloadAndExtractLinuxBinary()
4546

4647
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
4748
{
48-
#if NETCOREAPP //don't need to run this code if we're not netcore app since net471 won't run on NIX. And UnixFileSystemInfo is not available for net471
49-
Assert.Equal(
50-
LinuxPermissionsSetter.ExecutableFilePermissions,
51-
UnixFileSystemInfo.GetFileSystemEntry(revisionInfo.ExecutablePath).FileAccessPermissions & LinuxPermissionsSetter.ExecutableFilePermissions);
52-
#endif
49+
#if NETCOREAPP //This will not be run on net4x anyway.
50+
Mono.Unix.FileAccessPermissions permissions = ConvertPermissions(LinuxSysCall.ExecutableFilePermissions);
51+
52+
Assert.Equal(permissions, UnixFileSystemInfo.GetFileSystemEntry(revisionInfo.ExecutablePath).FileAccessPermissions & permissions);
53+
#endif
5354
}
5455
Assert.Equal(new[] { 123456 }, browserFetcher.LocalRevisions());
5556
browserFetcher.Remove(123456);
@@ -68,6 +69,37 @@ public async Task ShouldDownloadAndExtractLinuxBinary()
6869
EnsureDownloadsFolderIsDeleted();
6970
}
7071
}
72+
73+
#if NETCOREAPP
74+
private Mono.Unix.FileAccessPermissions ConvertPermissions(Helpers.Linux.FileAccessPermissions executableFilePermissions)
75+
{
76+
Mono.Unix.FileAccessPermissions output = 0;
77+
78+
var map = new Dictionary<Helpers.Linux.FileAccessPermissions, Mono.Unix.FileAccessPermissions>()
79+
{
80+
{Helpers.Linux.FileAccessPermissions.OtherExecute, Mono.Unix.FileAccessPermissions.OtherExecute},
81+
{Helpers.Linux.FileAccessPermissions.OtherWrite, Mono.Unix.FileAccessPermissions.OtherWrite},
82+
{Helpers.Linux.FileAccessPermissions.OtherRead, Mono.Unix.FileAccessPermissions.OtherRead},
83+
{Helpers.Linux.FileAccessPermissions.GroupExecute, Mono.Unix.FileAccessPermissions.GroupExecute},
84+
{Helpers.Linux.FileAccessPermissions.GroupWrite, Mono.Unix.FileAccessPermissions.GroupWrite},
85+
{Helpers.Linux.FileAccessPermissions.GroupRead, Mono.Unix.FileAccessPermissions.GroupRead},
86+
{Helpers.Linux.FileAccessPermissions.UserExecute, Mono.Unix.FileAccessPermissions.UserExecute},
87+
{Helpers.Linux.FileAccessPermissions.UserWrite, Mono.Unix.FileAccessPermissions.UserWrite},
88+
{Helpers.Linux.FileAccessPermissions.UserRead, Mono.Unix.FileAccessPermissions.UserRead}
89+
};
90+
91+
foreach (var item in map.Keys)
92+
{
93+
if ((executableFilePermissions & item) == item)
94+
{
95+
output |= map[item];
96+
}
97+
}
98+
99+
return output;
100+
}
101+
#endif
102+
71103
private void EnsureDownloadsFolderIsDeleted()
72104
{
73105
if (Directory.Exists(_downloadsFolder))

lib/PuppeteerSharp/BrowserFetcher.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Net.Http;
99
using System.Runtime.InteropServices;
1010
using System.Threading.Tasks;
11-
using Mono.Unix;
1211
using PuppeteerSharp.Helpers.Linux;
1312

1413
namespace PuppeteerSharp
@@ -86,7 +85,7 @@ public BrowserFetcher(BrowserFetcherOptions options)
8685
Platform = options.Platform ?? GetCurrentPlatform();
8786
}
8887

89-
#region Public Methods
88+
#region Public Methods
9089

9190
/// <summary>
9291
/// The method initiates a HEAD request to check if the revision is available.
@@ -204,9 +203,7 @@ public async Task<RevisionInfo> DownloadAsync(int revision)
204203

205204
if (revisionInfo != null && GetCurrentPlatform() == Platform.Linux)
206205
{
207-
void SetPermissions(string fullPath) => LinuxPermissionsSetter.SetExecutableFilePermissions(fullPath);
208-
209-
SetPermissions(revisionInfo.ExecutablePath);
206+
LinuxSysCall.Chmod(revisionInfo.ExecutablePath, LinuxSysCall.ExecutableFilePermissions);
210207
}
211208
return revisionInfo;
212209
}
@@ -243,9 +240,9 @@ public static string GetExecutablePath(Platform platform, int revision, string f
243240
}
244241
}
245242

246-
#endregion
243+
#endregion
247244

248-
#region Private Methods
245+
#region Private Methods
249246

250247
internal static Platform GetCurrentPlatform()
251248
{
@@ -314,6 +311,6 @@ private static string GetArchiveName(Platform platform, int revision)
314311
private static string GetDownloadURL(Platform platform, string host, int revision)
315312
=> string.Format(_downloadUrls[platform], host, revision, GetArchiveName(platform, revision));
316313

317-
#endregion
314+
#endregion
318315
}
319316
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
3+
namespace PuppeteerSharp.Helpers.Linux
4+
{
5+
[Flags]
6+
internal enum FileAccessPermissions : uint
7+
{
8+
OtherExecute = 1,
9+
OtherWrite = 2,
10+
OtherRead = 4,
11+
12+
GroupExecute = 8,
13+
GroupWrite = 16,
14+
GroupRead = 32,
15+
16+
UserExecute = 64,
17+
UserWrite = 128,
18+
UserRead = 256,
19+
20+
OtherReadWriteExecute = OtherRead | OtherWrite | OtherExecute,
21+
GroupReadWriteExecute = GroupRead | GroupWrite | GroupExecute,
22+
UserReadWriteExecute = UserRead | UserWrite | UserExecute,
23+
24+
DefaultPermissions = OtherWrite | OtherRead | GroupWrite | GroupRead | UserWrite | UserRead,
25+
AllPermissions = DefaultPermissions | OtherExecute | GroupExecute | UserExecute
26+
}
27+
}

lib/PuppeteerSharp/Helpers/Linux/LinuxPermissionsSetter.cs

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
using System;
2-
using System.Runtime.InteropServices;
1+
using System.Runtime.InteropServices;
32

43
namespace PuppeteerSharp.Helpers.Linux
54
{
65
internal static class LinuxSysCall
76
{
7+
internal static readonly FileAccessPermissions ExecutableFilePermissions =
8+
FileAccessPermissions.UserRead | FileAccessPermissions.UserWrite | FileAccessPermissions.UserExecute |
9+
FileAccessPermissions.GroupRead |
10+
FileAccessPermissions.GroupExecute |
11+
FileAccessPermissions.OtherRead |
12+
FileAccessPermissions.OtherExecute;
13+
814
[DllImport("libc", SetLastError = true, EntryPoint = "chmod")]
9-
internal static extern int Chmod(string path, uint mode);
15+
internal static extern int Chmod(string path, FileAccessPermissions mode);
1016
}
1117
}

lib/PuppeteerSharp/PuppeteerSharp.csproj

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<TargetFramework>netstandard2.0</TargetFramework>
44
<PackOnBuild>true</PackOnBuild>
5-
<PackageVersion>1.14.0</PackageVersion>
5+
<PackageVersion>1.14.1</PackageVersion>
66
<Authors>Darío Kondratiuk</Authors>
77
<Owners>Darío Kondratiuk</Owners>
88
<PackageProjectUrl>https://github.com/kblok/puppeteer-sharp</PackageProjectUrl>
@@ -26,7 +26,7 @@
2626
* Sync Request.Continue tests.
2727
* Public constructor for PaperFormat.
2828
]]></PackageReleaseNotes>
29-
<ReleaseVersion>1.14.0</ReleaseVersion>
29+
<ReleaseVersion>1.14.1</ReleaseVersion>
3030
<SynchReleaseVersion>false</SynchReleaseVersion>
3131
</PropertyGroup>
3232
<PropertyGroup>
@@ -38,13 +38,9 @@
3838
</PropertyGroup>
3939
<ItemGroup>
4040
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.2" />
41-
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
4241
<PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
4342
<PackageReference Include="System.Net.Http" Version="4.3.3" />
4443
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.0.2" />
4544
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.1" />
4645
</ItemGroup>
47-
<ItemGroup>
48-
<Folder Include="Helpers\Json\" />
49-
</ItemGroup>
5046
</Project>

0 commit comments

Comments
 (0)