Skip to content

fix: Adjust check for https in RemoteControlClient #20405

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
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
14 changes: 6 additions & 8 deletions src/SamplesApp/UITests.Shared/Helpers/SkiaSamplesAppHelper.cs
Original file line number Diff line number Diff line change
@@ -7,16 +7,14 @@
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
#if __SKIA__
using Uno.Foundation;
#endif

namespace Uno.UI.Samples.UITests.Helpers
{
public static partial class SkiaSamplesAppHelper
{
#if __SKIA__
[JSImport("globalThis.eval")]
private static partial string Eval(string js);
#endif

/// <summary>
/// This method is for saving files on Skia-WASM where we don't have disk access.
/// </summary>
@@ -34,9 +32,9 @@ public static async Task SaveFile(string filePath, string content, CancellationT
var json = JsonSerializer.Serialize(new { FilePath = filePath, Content = content });
using (var client = new HttpClient())
{
var protocol = Eval("window.location.protocol");
var hostname = Eval("window.location.hostname");
if (!int.TryParse(Eval("window.location.port"), out var port))
var protocol = WebAssemblyImports.GetWindowLocationProtocol();
var hostname = WebAssemblyImports.GetWindowLocationHostname();
if (!int.TryParse(WebAssemblyImports.GetWindowLocationPort(), out var port))
{
port = protocol == "http:" ? 80 : 443;
}
29 changes: 29 additions & 0 deletions src/Uno.Foundation/Internal/WebAssemblyImports.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.JavaScript;
using System.Text;
using System.Threading.Tasks;

namespace Uno.Foundation;

internal static partial class WebAssemblyImports
{
[JSImport("globalThis.eval")]
internal static partial string EvalString(string js);

[JSImport("globalThis.eval")]
internal static partial bool EvalBool(string js);

[JSImport("globalThis.window.location.href")]
internal static partial string GetWindowLocationHref();

[JSImport("globalThis.window.location.protocol")]
internal static partial string GetWindowLocationProtocol();

[JSImport("globalThis.window.location.hostname")]
internal static partial string GetWindowLocationHostname();

[JSImport("globalThis.window.location.port")]
internal static partial string GetWindowLocationPort();
}
26 changes: 14 additions & 12 deletions src/Uno.UI.RemoteControl/RemoteControlClient.cs
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
using System.Linq;
using System.Net;
using System.Net.WebSockets;
using System.Runtime.InteropServices.JavaScript;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -287,11 +288,11 @@ public void RegisterPreProcessor(IRemoteControlPreProcessor preprocessor)
return default;
}

#if __WASM__
var isHttps = WebAssemblyRuntime.InvokeJS("window.location.protocol == 'https:'").Equals("true", StringComparison.OrdinalIgnoreCase);
#else
const bool isHttps = false;
#endif
var isHttps = false;
if (OperatingSystem.IsBrowser())
{
isHttps = WebAssemblyImports.GetWindowLocationProtocol().StartsWith("https", StringComparison.OrdinalIgnoreCase);
}

_status.Report(ConnectionState.Connecting);

@@ -425,17 +426,18 @@ private bool TryParse(string endpoint, int port, bool isHttps, [NotNullWhen(true
}
else if (port == 443)
{
#if __WASM__
if (endpoint.EndsWith("gitpod.io", StringComparison.Ordinal))
if (OperatingSystem.IsBrowser())
{
var originParts = endpoint.Split('-');
if (endpoint.EndsWith("gitpod.io", StringComparison.Ordinal))
{
var originParts = endpoint.Split('-');

var currentHost = Foundation.WebAssemblyRuntime.InvokeJS("window.location.hostname");
var targetParts = currentHost.Split('-');
var currentHost = WebAssemblyImports.GetWindowLocationHostname();
var targetParts = currentHost.Split('-');

endpoint = string.Concat(originParts[0].AsSpan(), "-", currentHost.AsSpan().Slice(targetParts[0].Length + 1));
endpoint = string.Concat(originParts[0].AsSpan(), "-", currentHost.AsSpan().Slice(targetParts[0].Length + 1));
}
}
#endif

serverUri = new Uri($"wss://{endpoint}/rc");
}
6 changes: 2 additions & 4 deletions src/Uno.UI/UI/Xaml/Application.cs
Original file line number Diff line number Diff line change
@@ -45,6 +45,7 @@
#else
using View = Microsoft.UI.Xaml.UIElement;
using ViewGroup = Microsoft.UI.Xaml.UIElement;
using Uno.Foundation;
#endif

namespace Microsoft.UI.Xaml
@@ -547,9 +548,6 @@ internal static void PropagateResourcesChanged(object instance, ResourceUpdateRe
}
}

[JSImport("globalThis.eval")]
private static partial string Eval(string js);

#if __SKIA__
private static string GetCommandLineArgsWithoutExecutable()
{
@@ -560,7 +558,7 @@ private static string GetCommandLineArgsWithoutExecutable()

if (OperatingSystem.IsBrowser()) // Skia-WASM
{
return Uri.UnescapeDataString(new Uri(Eval("window.location.href")).Query.TrimStart('?'));
return Uri.UnescapeDataString(new Uri(WebAssemblyImports.GetWindowLocationHref()).Query.TrimStart('?'));
}
else
{
7 changes: 3 additions & 4 deletions src/Uno.UI/UI/Xaml/Controls/TextBox/TextBox.skia.cs
Original file line number Diff line number Diff line change
@@ -24,6 +24,8 @@
using System.Runtime.InteropServices.JavaScript;
using Uno.UI.Xaml.Controls;
using Uno.UI.Xaml.Core;
using Uno.Foundation;


#if HAS_UNO_WINUI
using Microsoft.UI.Input;
@@ -92,14 +94,11 @@ public partial class TextBox
static TextBox()
{
_platformCtrlKey =
OperatingSystem.IsMacOS() || (OperatingSystem.IsBrowser() && Eval("navigator?.platform.toUpperCase().includes('MAC') ?? false"))
OperatingSystem.IsMacOS() || (OperatingSystem.IsBrowser() && WebAssemblyImports.EvalBool("navigator?.platform.toUpperCase().includes('MAC') ?? false"))
? VirtualKeyModifiers.Windows
: VirtualKeyModifiers.Control;
}

[JSImport("globalThis.eval")]
private static partial bool Eval(string js);

internal CaretDisplayMode CaretMode
{
get => _caretMode;