Skip to content
Open
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
16 changes: 8 additions & 8 deletions WebKitGtk.Test/WebKitGtk.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="GirCore.Adw-1" Version="0.5.0" />
<PackageReference Include="GirCore.Gtk-4.0" Version="0.5.0" />
<PackageReference Include="GirCore.WebKit-6.0" Version="0.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView" Version="8.0.*" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.*" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="GirCore.Adw-1" Version="0.6.3" />
<PackageReference Include="GirCore.Gtk-4.0" Version="0.6.3" />
<PackageReference Include="GirCore.WebKit-6.0" Version="0.6.3" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.8" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
</ItemGroup>

<ItemGroup>
Expand All @@ -24,4 +24,4 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
</Project>
46 changes: 31 additions & 15 deletions WebKitGtk/BlazorWebView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Microsoft.Extensions.Logging;
using System.Runtime.Versioning;
using System.Web;
using GLib.Internal;
using WebKit;
using MemoryInputStream = Gio.Internal.MemoryInputStream;
using Uri = System.Uri;
Expand All @@ -24,13 +25,6 @@ public BlazorWebView(IServiceProvider serviceProvider)
[UnsupportedOSPlatform("Windows")]
class WebViewManager : Microsoft.AspNetCore.Components.WebView.WebViewManager
{
// Workaround for protection level access
class InputStream : Gio.InputStream
{
protected internal InputStream(IntPtr ptr, bool ownedRef) : base(ptr, ownedRef)
{ }
}

const string Scheme = "app";
static readonly Uri BaseUri = new($"{Scheme}://localhost/");

Expand Down Expand Up @@ -84,8 +78,10 @@ public WebViewManager(WebView webView, IServiceProvider serviceProvider) : base(
""",
injectedFrames: UserContentInjectedFrames.AllFrames,
injectionTime: UserScriptInjectionTime.Start,
null,
null)
(string[]?)null
,
(string[]?)null
)
);

UserContentManager.ScriptMessageReceivedSignal.Connect(ucm, (_, signalArgs) =>
Expand All @@ -106,7 +102,7 @@ public WebViewManager(WebView webView, IServiceProvider serviceProvider) : base(
readonly string _relativeHostPath;
readonly ILogger<WebViewManager>? _logger;

void HandleUriScheme(URISchemeRequest request)
public void HandleUriScheme(URISchemeRequest request)
{
if (request.GetScheme() != Scheme)
{
Expand All @@ -123,11 +119,31 @@ void HandleUriScheme(URISchemeRequest request)

if (TryGetResponseContent(uri, false, out var statusCode, out var statusMessage, out var content, out var headers))
{
using var ms = new MemoryStream();
content.CopyTo(ms);
var streamPtr = MemoryInputStream.NewFromData(ref ms.GetBuffer()[0], (uint)ms.Length, _ => { });
var inputStream = new InputStream(streamPtr, false);
request.Finish(inputStream, ms.Length, headers["Content-Type"]);
const int bufferSize = 64 * 1024;
byte[] buffer = System.Buffers.ArrayPool<byte>.Shared.Rent(bufferSize);

var memoryInputStream = Gio.MemoryInputStream.New();
long totalLength = 0;

try
{
while (true)
{
int read = content.Read(buffer, 0, bufferSize);
if (read <= 0)
break;

var span = new Span<byte>(buffer, 0, read);
using var bytes = GLib.Bytes.New(span);
memoryInputStream.AddBytes(bytes);
totalLength += read;
}
}
finally
{
System.Buffers.ArrayPool<byte>.Shared.Return(buffer);
}
request.Finish(memoryInputStream, totalLength, headers["Content-Type"]);
Comment on lines +122 to +146
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I'd prefer to maintain the workaround.

}
else
{
Expand Down
8 changes: 4 additions & 4 deletions WebKitGtk/WebKitGtk.csproj
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<TargetFrameworks>net9.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="GirCore.Gtk-4.0" Version="0.5.0" />
<PackageReference Include="GirCore.WebKit-6.0" Version="0.5.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView" Version="8.0.*" />
<PackageReference Include="GirCore.Gtk-4.0" Version="0.6.3" />
<PackageReference Include="GirCore.WebKit-6.0" Version="0.6.3" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebView" Version="9.0.8" />
</ItemGroup>

</Project>