Skip to content

Commit 6dd1077

Browse files
committed
Thanks Rui!
1 parent 0c3297e commit 6dd1077

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

src/Core/src/Handlers/HybridWebView/HybridWebViewHandler.iOS.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,11 @@ public async void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSche
149149
return;
150150
}
151151

152-
var url = urlSchemeTask.Request.Url.AbsoluteString ?? "";
152+
var url = urlSchemeTask.Request.Url.AbsoluteString;
153+
if (string.IsNullOrEmpty(url))
154+
{
155+
return;
156+
}
153157

154158
var logger = Handler.MauiContext?.CreateLogger<HybridWebViewHandler>();
155159

@@ -213,7 +217,7 @@ public async void StartUrlSchemeTask(WKWebView webView, IWKUrlSchemeTask urlSche
213217
logger?.LogDebug("Request for {Url} was not handled.", url);
214218
}
215219

216-
private async Task<(byte[]? ResponseBytes, string? ContentType, int StatusCode)> GetResponseBytesAsync(string? url, ILogger? logger)
220+
private async Task<(byte[]? ResponseBytes, string? ContentType, int StatusCode)> GetResponseBytesAsync(string url, ILogger? logger)
217221
{
218222
if (Handler is null)
219223
{

src/Core/src/Platform/Android/AsyncStream.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@
66

77
namespace Microsoft.Maui.Platform;
88

9+
/// <summary>
10+
/// Represents a stream that reads data asynchronously from a task that
11+
/// produces either a byte array or a stream.
12+
/// This class is useful for scenarios where the data source is not immediately
13+
/// available and needs to be fetched asynchronously.
14+
///
15+
/// Specifically, the Android WebView requires that you provide a stream
16+
/// immediately, but the data may not be available until later.
17+
/// This class allows you to wrap a task that fetches the data and provides
18+
/// an asynchronous stream interface to read from it.
19+
/// </summary>
920
class AsyncStream : Stream
1021
{
1122
readonly Task<Stream?> _streamTask;
@@ -39,6 +50,8 @@ public AsyncStream(Task<Stream?> streamTask, ILogger? logger)
3950
if (_stream != null)
4051
return _stream;
4152

53+
cancellationToken.ThrowIfCancellationRequested();
54+
4255
_stream = await _streamTask.ConfigureAwait(false);
4356
return _stream;
4457
}

src/Core/src/Platform/Android/MauiHybridWebViewClient.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public MauiHybridWebViewClient(HybridWebViewHandler handler)
3737

3838
logger?.LogDebug("Intercepting request for {Url}.", url);
3939

40-
if (view is not null && request is not null)
40+
if (view is not null && request is not null && !string.IsNullOrEmpty(url))
4141
{
4242
// 1. Check if the app wants to modify or override the request
4343
var response = TryInterceptResponseStream(view, request, url, logger);
@@ -60,7 +60,7 @@ public MauiHybridWebViewClient(HybridWebViewHandler handler)
6060
return base.ShouldInterceptRequest(view, request);
6161
}
6262

63-
private WebResourceResponse? TryInterceptResponseStream(AWebView view, IWebResourceRequest request, string? url, ILogger? logger)
63+
private WebResourceResponse? TryInterceptResponseStream(AWebView view, IWebResourceRequest request, string url, ILogger? logger)
6464
{
6565
if (Handler is null || Handler is IViewHandler ivh && ivh.VirtualView is null)
6666
{
@@ -84,7 +84,7 @@ public MauiHybridWebViewClient(HybridWebViewHandler handler)
8484
return null;
8585
}
8686

87-
private WebResourceResponse? GetResponseStream(AWebView view, IWebResourceRequest request, string? fullUrl, ILogger? logger)
87+
private WebResourceResponse? GetResponseStream(AWebView view, IWebResourceRequest request, string fullUrl, ILogger? logger)
8888
{
8989
if (Handler is null || Handler is IViewHandler ivh && ivh.VirtualView is null)
9090
{
@@ -106,7 +106,7 @@ public MauiHybridWebViewClient(HybridWebViewHandler handler)
106106
{
107107
logger?.LogDebug("Request for {Url} will be handled by the .NET method invoker.", fullUrl);
108108

109-
var fullUri = new Uri(fullUrl!);
109+
var fullUri = new Uri(fullUr!);
110110
var invokeQueryString = HttpUtility.ParseQueryString(fullUri.Query);
111111
var contentBytesTask = Handler.InvokeDotNetAsync(invokeQueryString);
112112
var responseStream = new AsyncStream(contentBytesTask, logger);

0 commit comments

Comments
 (0)