From a6666c537264981b93924ef1bab999f8f7fcc620 Mon Sep 17 00:00:00 2001 From: Osei Fortune Date: Sat, 3 Oct 2026 20:41:08 -0400 Subject: [PATCH 1/2] feat: JS subclassing parity, background-thread callbacks, C# sources in apps Class extension (classic and napi engines) - .NET and unsealed WinRT classes can be extended with ES2015 `class`, `Class.extend()`, `@NativeClass`, TypeScript ES5 output and `Object.extend({ interfaces })`. Native code calling an overridden member reaches the JS override (including XAML's MeasureOverride/ArrangeOverride/ OnApplyTemplate on composed WinUI objects). - Constructor arguments select and feed the base constructor; `super.X()` and `this.super.X()` call the base implementation through emitted non-virtual `__ns_base_X` methods; protected/abstract members, property accessors, `instanceof` (subclass and native bases), JS fields and object identity across native round-trips work; `new Interface({...})` and `@Interfaces` implement interfaces. - Instances are collectable: the dispatcher holds the JS object weakly, the bridge unpins it when the managed object dies, and a JS object is revived for instances only native code still holds. WinRT UI subclasses stay alive while in a live XAML tree. - sbg-generated proxies are no longer built or shipped: the bridge emits the types at runtime. Threading - WinRT delegates, .NET delegates/events, overridden members and Task continuations invoked on background threads run on the UI thread while the caller waits (return values and exceptions flow back), in both engines. - .NET methods returning Task return awaitables instead of blocking the UI thread. - Static WinRT events (CompositionTarget.Rendering) can be assigned on class constructors, so tree mutation from Rendering/LayoutUpdated/SizeChanged is covered by tests. C# in apps and plugins - Root namespaces of app, plugin and NuGet assemblies are globals: C# under App_Resources/Windows (or a plugin's platforms/windows) is usable from JS by namespace with no registration. - JS functions passed for delegates, plain objects for structs, enums, overloads by parameter type. - `System` stays the .NET namespace when @nativescript/core assigns its SystemJS shim. - Classic engine pumps V8 platform tasks and clears kept objects, so FinalizationRegistry/WeakRef work (proxied .NET handles are now released). Template / tooling - The template runs unpackaged (no ApplicationData without package identity) and doesn't copy App_Resources C# sources to the output. - Fix top-level require() of relative modules when the entry isn't a bundle. Tests - test-app/: Jasmine-style runtime test app (like the Android/iOS test-apps) with C# fixtures in App_Resources/Windows/src and a plugin shipping C# sources; `pwsh test-app/run.ps1` (optionally `-EngineDll` for napi engines). - dotnet-bridge-tests: JsSubclassTests for the bridge side. --- .gitignore | 1 + README.md | 8 + dotnet-bridge-tests/JsSubclassTests.cs | 501 +++++++++++ .../ManagedSubclassMemberFilterTests.cs | 29 +- .../ProxyMeasureOverrideTests.cs | 12 +- dotnet-bridge/BinaryProtocol.cs | 18 + dotnet-bridge/Bridge.BinaryDispatch.cs | 91 +- dotnet-bridge/Bridge.Dispatch.cs | 73 +- dotnet-bridge/Bridge.JsDelegate.cs | 174 ++-- dotnet-bridge/Bridge.Proxy.cs | 387 ++++----- dotnet-bridge/Bridge.TaskHelper.cs | 3 +- dotnet-bridge/Bridge.cs | 44 +- runtime/src/dotnet.rs | 30 + runtime/src/global_fns.rs | 781 +++++++++++++++-- runtime/src/lib.rs | 291 ++++++- runtime/src/napi_engine/delegate.rs | 55 +- runtime/src/napi_engine/dotnet.rs | 791 +++++++++++++++++- runtime/src/napi_engine/module_natives.rs | 3 + runtime/src/napi_engine/ns_hostobject.rs | 76 +- runtime/src/napi_engine/ns_proxy.rs | 29 +- runtime/src/ui_dispatcher.rs | 65 ++ template/build.ps1 | 34 - .../framework/__PROJECT_NAME__/App.xaml.cs | 5 +- .../__PROJECT_NAME__/CrashDiagnostics.cs | 6 +- .../framework/__PROJECT_NAME__/RuntimeHost.cs | 29 +- .../__PROJECT_NAME__/__PROJECT_NAME__.csproj | 55 +- .../framework/dotnet-bridge/BinaryProtocol.cs | 18 + .../dotnet-bridge/Bridge.BinaryDispatch.cs | 83 +- .../dotnet-bridge/Bridge.Dispatch.cs | 69 +- .../dotnet-bridge/Bridge.JsDelegate.cs | 174 ++-- .../framework/dotnet-bridge/Bridge.Proxy.cs | 226 +++-- .../dotnet-bridge/Bridge.TaskHelper.cs | 3 +- template/framework/dotnet-bridge/Bridge.cs | 8 +- template/framework/tools/sbg-arm64.exe | Bin 486912 -> 0 bytes template/framework/tools/sbg-x64.exe | Bin 545792 -> 0 bytes template/framework/tools/sbg.exe | Bin 545792 -> 0 bytes test-app/App_Resources/Windows/app.csproj | 11 + .../Windows/src/TestFixtures/Basics.cs | 91 ++ .../Windows/src/TestFixtures/Inheritance.cs | 91 ++ .../Windows/src/TestFixtures/Lifetime.cs | 28 + .../Windows/src/TestFixtures/Threading.cs | 77 ++ test-app/README.md | 51 ++ test-app/app/main.js | 80 ++ test-app/app/package.json | 4 + test-app/app/runner/jasmine-lite.js | 366 ++++++++ test-app/app/tests/csharp-sources.js | 135 +++ test-app/app/tests/extend-dotnet.js | 295 +++++++ test-app/app/tests/extend-winrt.js | 165 ++++ test-app/app/tests/helpers.js | 66 ++ test-app/app/tests/layout-mutation.js | 187 +++++ test-app/app/tests/lifetime.js | 81 ++ test-app/app/tests/threading.js | 107 +++ test-app/plugins/test-plugin/package.json | 10 + .../platforms/windows/src/PluginGreeter.cs | 11 + test-app/run.ps1 | 210 +++++ typings/nswinrt-helpers.d.ts | 6 + windows-napi/src/delegate_test.rs | 4 +- 57 files changed, 5526 insertions(+), 722 deletions(-) create mode 100644 dotnet-bridge-tests/JsSubclassTests.cs delete mode 100644 template/framework/tools/sbg-arm64.exe delete mode 100644 template/framework/tools/sbg-x64.exe delete mode 100644 template/framework/tools/sbg.exe create mode 100644 test-app/App_Resources/Windows/app.csproj create mode 100644 test-app/App_Resources/Windows/src/TestFixtures/Basics.cs create mode 100644 test-app/App_Resources/Windows/src/TestFixtures/Inheritance.cs create mode 100644 test-app/App_Resources/Windows/src/TestFixtures/Lifetime.cs create mode 100644 test-app/App_Resources/Windows/src/TestFixtures/Threading.cs create mode 100644 test-app/README.md create mode 100644 test-app/app/main.js create mode 100644 test-app/app/package.json create mode 100644 test-app/app/runner/jasmine-lite.js create mode 100644 test-app/app/tests/csharp-sources.js create mode 100644 test-app/app/tests/extend-dotnet.js create mode 100644 test-app/app/tests/extend-winrt.js create mode 100644 test-app/app/tests/helpers.js create mode 100644 test-app/app/tests/layout-mutation.js create mode 100644 test-app/app/tests/lifetime.js create mode 100644 test-app/app/tests/threading.js create mode 100644 test-app/plugins/test-plugin/package.json create mode 100644 test-app/plugins/test-plugin/platforms/windows/src/PluginGreeter.cs create mode 100644 test-app/run.ps1 diff --git a/.gitignore b/.gitignore index 8833476..2ba3adf 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ node_modules/ AppPackages/ dotnet-bridge/publish/ /dotnet-bridge-benchmarks/BenchmarkDotNet.Artifacts +test-app/platforms/ diff --git a/README.md b/README.md index 2e449bb..18cf36e 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,14 @@ Run .NET bridge tests: dotnet test dotnet-bridge-tests\DotNetBridgeTests.csproj ``` +Run the runtime test app (Jasmine-style specs inside a WinUI app built from the template, with C# +fixtures and a plugin compiled in — the counterpart of the Android/iOS test-app suites). See +[test-app/README.md](test-app/README.md): + +```powershell +pwsh test-app/run.ps1 +``` + ## DevTools DevTools are part of the runtime story, not an optional afterthought. Use the diff --git a/dotnet-bridge-tests/JsSubclassTests.cs b/dotnet-bridge-tests/JsSubclassTests.cs new file mode 100644 index 0000000..5c8ee40 --- /dev/null +++ b/dotnet-bridge-tests/JsSubclassTests.cs @@ -0,0 +1,501 @@ +using System; +using System.Buffers; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using NativeScriptBridge; +using Xunit; + +namespace DotNetBridgeTests; + +// Bridge side of extending .NET classes from JS (class X extends SomeType / SomeType.extend()): +// constructor arguments, protected constructors, abstract members, base calls for `super`, +// identity of JS-backed instances, results converted to the member's return type, and JS errors +// surfacing as JsException. The JS half is covered by test-app/app/tests/extend-dotnet.js. +[Collection("Bridge")] +public sealed class JsSubclassTests : IDisposable +{ + private static readonly List<(string Member, object?[] Args)> s_calls = new(); + private static Func? s_handler; + + [UnmanagedCallersOnly(CallConvs = [typeof(System.Runtime.CompilerServices.CallConvCdecl)])] + private static unsafe void Invoker(int id, byte* argsPtr, int argsLen, byte** respPtr, int* respLen) + { + var (member, args) = DecodeCall(new ReadOnlySpan(argsPtr, argsLen)); + s_calls.Add((member, args)); + object? result; + try { result = s_handler?.Invoke(member, args); } + catch (Exception e) { result = new JsError(e.Message); } + WriteResponse(result, respPtr, respLen); + } + + private sealed record JsError(string Message); + + public unsafe JsSubclassTests() + { + Bridge.ClearCaches(); + s_calls.Clear(); + s_handler = null; + s_onDispatch = null; + Bridge.s_jsInvoker = &Invoker; + } + + public unsafe void Dispose() + { + Bridge.s_jsInvoker = null; + Bridge.ClearCaches(); + } + + [Fact] + public void ConstructorArguments_SelectAndFeedTheBaseConstructor() + { + var one = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 1, "rex"); + var two = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 2, "fido", 12); + var pet1 = Assert.IsAssignableFrom(Instance(one)); + var pet2 = Assert.IsAssignableFrom(Instance(two)); + Assert.Equal("rex", pet1.Name); + Assert.Equal(0, pet1.Age); + Assert.Equal("fido", pet2.Name); + Assert.Equal(12, pet2.Age); + } + + [Fact] + public void ConstructorArguments_NoMatchingConstructor_Throws() + { + Assert.ThrowsAny(() => CreateSubclass(typeof(Pet).FullName!, [], [], 3, "a", 1, "extra")); + } + + [Fact] + public void VirtualCalledByBaseConstructor_ReachesJs() + { + s_handler = (member, _) => member == "Speak" ? "js-speak" : null; + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 4, "rex"); + var pet = Assert.IsAssignableFrom(Instance(handle)); + Assert.Equal("js-speak", pet.SpokeInConstructor); + } + + [Fact] + public void AbstractBase_ProtectedConstructorAndAbstractMember() + { + s_handler = (member, _) => member == "Area" ? 4.0 : null; + var handle = CreateSubclass(typeof(AbstractShape).FullName!, [], ["Area"], 5); + var shape = Assert.IsAssignableFrom(Instance(handle)); + Assert.Equal("area=4", shape.Report()); + } + + [Fact] + public void AbstractMember_NotImplementedInJs_StillCreatesTheType() + { + s_handler = (member, _) => throw new InvalidOperationException(member + " is not implemented"); + var handle = CreateSubclass(typeof(AbstractShape).FullName!, [], [], 6); + var shape = Assert.IsAssignableFrom(Instance(handle)); + var error = Assert.Throws(() => shape.Area()); + Assert.Contains("Area is not implemented", error.Message); + } + + [Fact] + public void BaseCall_RunsTheBaseImplementationOfAnOverriddenMember() + { + s_handler = (member, args) => member == "Greet" ? "js:" + args[0] : null; + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Greet"], 7, "rex"); + + Assert.Equal("js:bob", Invoke(handle, "Greet", "bob").PrimitiveValue()); + Assert.Equal("rex greets bob", Invoke(handle, Bridge.BaseCallPrefix + "Greet", "bob").PrimitiveValue()); + } + + [Fact] + public void BaseCall_PropertyGetter() + { + s_handler = (member, _) => member == "get_Legs" ? 2 : null; + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["get_Legs"], 8, "tweety"); + var pet = Assert.IsAssignableFrom(Instance(handle)); + Assert.Equal(2, pet.Legs); + Assert.Equal(4, Invoke(handle, Bridge.BaseCallPrefix + "get_Legs").PrimitiveValue()); + } + + [Fact] + public void JsBackedInstance_BoxesToItsOriginalHandle() + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 9, "rex"); + var keep = InvokeStatic(typeof(PetStore).FullName!, "Keep", new HandleArg(handle)); + var back = InvokeStatic(typeof(PetStore).FullName!, "Kept"); + Assert.Equal(DispatchKind.Handle, back.Kind()); + Assert.Equal(handle, back.HandleId()); + _ = keep; + } + + [Fact] + public void OverrideResult_IsConvertedToTheReturnType() + { + // JS numbers arrive as double; the override returns int. + s_handler = (member, _) => member == "get_Legs" ? 6.0 : null; + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["get_Legs"], 10, "ant"); + Assert.Equal(6, Assert.IsAssignableFrom(Instance(handle)).Legs); + } + + [Fact] + public void StructArgumentsAndResults_TravelAsJson() + { + s_handler = (member, args) => + { + if (member != "Measure") return null; + var json = (string)args[0]!; + Assert.Contains("\"Width\":10", json); + return new JsJson("{\"width\":20,\"height\":5}"); + }; + var handle = CreateSubclass(typeof(Measurer).FullName!, [], ["Measure"], 11); + var measurer = Assert.IsAssignableFrom(Instance(handle)); + var size = measurer.Measure(new Extent { Width = 10, Height = 3 }); + Assert.Equal(20, size.Width); + Assert.Equal(5, size.Height); + } + + [Fact] + public void JsException_InAMemberWithAResult_SurfacesAsJsException() + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 12, "rex"); + var pet = Assert.IsAssignableFrom(Instance(handle)); + s_handler = (_, _) => throw new InvalidOperationException("boom"); + var error = Assert.Throws(() => pet.Speak()); + Assert.Equal("boom", error.Message); + } + + [Fact] + public void InterfaceAsBase_ImplementsTheInterfaceOnSystemObject() + { + s_handler = (member, args) => member == "Compute" ? (int)args[0]! * (int)args[1]! : member == "get_Name" ? "mul" : null; + var handle = CreateSubclass(typeof(ICalc).FullName!, [], ["Compute", "get_Name"], 13); + var calc = Assert.IsAssignableFrom(Instance(handle)); + Assert.Equal(42, calc.Compute(6, 7)); + Assert.Equal("mul", calc.Name); + } + + [Fact] + public void TypeKind_DescribesTypes() + { + Assert.Equal("interface", Bridge.TypeKind(typeof(ICalc).FullName!)); + Assert.Equal("abstract", Bridge.TypeKind(typeof(AbstractShape).FullName!)); + Assert.Equal("class", Bridge.TypeKind(typeof(Pet).FullName!)); + Assert.Equal("sealed", Bridge.TypeKind(typeof(string).FullName!)); + Assert.Equal("", Bridge.TypeKind("No.Such.Type")); + } + + [Fact] + public void IsInstanceOf_UsesTheRuntimeType() + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 14, "rex"); + Assert.True(Bridge.IsInstanceOf(Instance(handle), typeof(Pet).FullName!)); + Assert.False(Bridge.IsInstanceOf(Instance(handle), typeof(AbstractShape).FullName!)); + Assert.False(Bridge.IsInstanceOf(null, typeof(Pet).FullName!)); + } + + [Fact] + public void TaskResults_AreReturnedAsAwaitableHandles_WithoutBlocking() + { + var res = InvokeStatic(typeof(PetStore).FullName!, "SlowAsync", 5000); + Assert.Equal(DispatchKind.TaskHandle, res.Kind()); + Assert.True(Bridge.s_handles.TryGetValue(res.HandleId(), out var task)); + Assert.False(((Task)task!).IsCompleted); + } + + private static readonly List s_released = new(); + + [UnmanagedCallersOnly(CallConvs = [typeof(System.Runtime.CompilerServices.CallConvCdecl)])] + private static void RecordRelease(int callbackId) + { + lock (s_released) s_released.Add(callbackId); + } + + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + private static void CreateAndDrop(int callbackId) + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], callbackId, "temp"); + Release(handle); + } + + [Fact] + public unsafe void CollectedInstance_ReleasesItsJsDispatcher() + { + var previous = Bridge.s_jsCallbackRelease; + Bridge.s_jsCallbackRelease = &RecordRelease; + try + { + CreateAndDrop(31); + for (int i = 0; i < 5; i++) + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + lock (s_released) if (s_released.Contains(31)) break; + } + lock (s_released) Assert.Contains(31, s_released); + } + finally + { + Bridge.s_jsCallbackRelease = previous; + } + } + + [Fact] + public void ReleasedHandle_InstanceGetsANewHandle_UsedForDispatch() + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 32, "rex"); + InvokeStatic(typeof(PetStore).FullName!, "Keep", new HandleArg(handle)); + Release(handle); + + var back = InvokeStatic(typeof(PetStore).FullName!, "Kept"); + Assert.Equal(DispatchKind.Handle, back.Kind()); + Assert.NotEqual(handle, back.HandleId()); + + int dispatchedHandle = -1; + s_handler = (member, _) => member == "Speak" ? "js" : null; + s_onDispatch = h => dispatchedHandle = h; + Assert.Equal("js", Invoke(back.HandleId(), "Speak").PrimitiveValue()); + Assert.Equal(back.HandleId(), dispatchedHandle); + } + + [Fact] + public void JsSelfMember_AsksTheDispatcherForTheJsObject() + { + var handle = CreateSubclass(typeof(Pet).FullName!, [], ["Speak"], 33, "rex"); + s_calls.Clear(); + Invoke(handle, Bridge.JsSelfMember); + Assert.Contains(s_calls, c => c.Member == Bridge.JsSelfMember); + } + + // ── helpers ───────────────────────────────────────────────────────────── + + private static Action? s_onDispatch; + + private static void Release(int handle) + { + var pkt = BuildPacket(w => + { + w.WriteByte(0x04); + w.WriteI32(handle); + }); + var r = new BinReader(pkt.AsSpan()); + Bridge.DispatchBin(ref r); + } + + private sealed record HandleArg(int Handle); + private sealed record JsJson(string Json); + + private static object? Instance(int handle) + { + Assert.True(Bridge.s_handles.TryGetValue(handle, out var instance)); + return instance; + } + + private static int CreateSubclass(string typeName, string[] interfaceNames, string[] memberNames, int callbackId, params object[] ctorArgs) + { + var pkt = BuildPacket(w => + { + w.WriteByte(0x0A); + w.WriteString16(""); + w.WriteString16(typeName); + w.WriteI32(interfaceNames.Length); + foreach (var n in interfaceNames) w.WriteString16(n); + w.WriteI32(memberNames.Length); + foreach (var n in memberNames) w.WriteString16(n); + w.WriteI32(callbackId); + WriteArgs(w, ctorArgs); + }); + var r = new BinReader(pkt.AsSpan()); + var res = Bridge.DispatchBin(ref r); + Assert.Equal(DispatchKind.Handle, res.Kind()); + return res.HandleId(); + } + + private static DispatchResult Invoke(int handle, string method, params object[] args) + { + var pkt = BuildPacket(w => + { + w.WriteByte(0x01); + w.WriteI32(handle); + w.WriteString16(method); + WriteArgs(w, args); + }); + var r = new BinReader(pkt.AsSpan()); + return Bridge.DispatchBin(ref r); + } + + private static DispatchResult InvokeStatic(string typeName, string method, params object[] args) + { + var pkt = BuildPacket(w => + { + w.WriteByte(0x02); + w.WriteString16(typeName); + w.WriteString16(""); + w.WriteString16(method); + WriteArgs(w, args); + }); + var r = new BinReader(pkt.AsSpan()); + return Bridge.DispatchBin(ref r); + } + + private static void WriteArgs(BinWriter w, object[] args) + { + w.WriteByte((byte)args.Length); + foreach (var a in args) + { + switch (a) + { + case string s: w.WriteByte(0x05); w.WriteString16(s); break; + case int i: w.WriteByte(0x03); w.WriteI32(i); break; + case HandleArg h: w.WriteByte(0x06); w.WriteI32(h.Handle); break; + default: throw new NotSupportedException(a.GetType().Name); + } + } + } + + private static byte[] BuildPacket(Action build) + { + var buf = new ArrayBufferWriter(64); + var w = new BinWriter(buf); + build(w); + return buf.WrittenSpan.ToArray(); + } + + private static (string Member, object?[] Args) DecodeCall(ReadOnlySpan span) + { + var r = new BinReader(span); + var count = r.ReadByte(); + // instance handle + Assert.Equal(0x06, r.ReadByte()); + var selfHandle = r.ReadI32(); + s_onDispatch?.Invoke(selfHandle); + r.ReadString16(); + if (r.ReadByte() == 1) r.ReadI64(); + Assert.Equal(0x05, r.ReadByte()); + var member = r.ReadString32(); + var args = new object?[count - 2]; + for (int i = 0; i < args.Length; i++) + { + var tag = r.ReadByte(); + args[i] = tag switch + { + 0x00 => null, + 0x03 => r.ReadI32(), + 0x04 => r.ReadF64(), + 0x05 => r.ReadString32(), + 0x0D => r.ReadString32(), + _ => throw new InvalidOperationException($"unexpected tag 0x{tag:X2}"), + }; + } + return (member, args); + } + + private static unsafe void WriteResponse(object? result, byte** respPtr, int* respLen) + { + byte[] bytes; + switch (result) + { + case null: + *respPtr = null; + *respLen = 0; + return; + case string s: + bytes = Tagged(0x05, Encoding.UTF8.GetBytes(s)); + break; + case JsJson j: + bytes = Tagged(0x0D, Encoding.UTF8.GetBytes(j.Json)); + break; + case JsError e: + bytes = Tagged(0x0F, Encoding.UTF8.GetBytes(e.Message)); + break; + case int i: + bytes = new byte[5]; + bytes[0] = 0x03; + BinaryPrimitives.WriteInt32LittleEndian(bytes.AsSpan(1), i); + break; + case double d: + bytes = new byte[9]; + bytes[0] = 0x04; + BinaryPrimitives.WriteDoubleLittleEndian(bytes.AsSpan(1), d); + break; + default: + throw new NotSupportedException(result.GetType().Name); + } + var mem = (byte*)Marshal.AllocHGlobal(bytes.Length); + bytes.CopyTo(new Span(mem, bytes.Length)); + *respPtr = mem; + *respLen = bytes.Length; + } + + private static byte[] Tagged(byte tag, byte[] utf8) + { + var bytes = new byte[5 + utf8.Length]; + bytes[0] = tag; + BinaryPrimitives.WriteUInt32LittleEndian(bytes.AsSpan(1), (uint)utf8.Length); + utf8.CopyTo(bytes, 5); + return bytes; + } +} + +public class Pet +{ + public Pet(string name) : this(name, 0) { } + + public Pet(string name, int age) + { + Name = name; + Age = age; + SpokeInConstructor = Speak(); + } + + public string Name { get; } + + public int Age { get; } + + public string SpokeInConstructor { get; } + + public virtual string Speak() => "..."; + + public virtual int Legs => 4; + + public virtual string Greet(string other) => $"{Name} greets {other}"; +} + +public abstract class AbstractShape +{ + protected AbstractShape() { } + + public abstract double Area(); + + public string Report() => $"area={Area()}"; +} + +public interface ICalc +{ + int Compute(int a, int b); + + string Name { get; } +} + +public struct Extent +{ + public double Width; + public double Height; +} + +public class Measurer +{ + public virtual Extent Measure(Extent available) => available; +} + +public static class PetStore +{ + private static object? s_kept; + + public static void Keep(object value) => s_kept = value; + + public static object? Kept() => s_kept; + + public static async Task SlowAsync(int ms) + { + await Task.Delay(ms); + return 1; + } +} diff --git a/dotnet-bridge-tests/ManagedSubclassMemberFilterTests.cs b/dotnet-bridge-tests/ManagedSubclassMemberFilterTests.cs index 7c2d726..5db20aa 100644 --- a/dotnet-bridge-tests/ManagedSubclassMemberFilterTests.cs +++ b/dotnet-bridge-tests/ManagedSubclassMemberFilterTests.cs @@ -191,15 +191,14 @@ private static byte[] BuildPacket(Action build) return buf.WrittenSpan.ToArray(); } - // Decodes a dispatcher call built by Bridge.JsDelegate's WriteCallbackArg: 3 args — - // [HandleRef instance][string32 method][HandleRef argsArray] — resolving the args-array - // handle straight out of Bridge.s_handles rather than re-decoding nested tags by hand. + // Decodes a dispatcher call built by Bridge.JsDelegate's WriteCallbackArg: + // [HandleRef instance][string32 member][arg...], each argument tagged individually. private static (string Method, object?[] Args) DecodeCall(ReadOnlySpan span) { var r = new BinReader(span); var count = r.ReadByte(); - if (count != 3) - throw new InvalidOperationException($"expected 3 dispatcher args, got {count}"); + if (count < 2) + throw new InvalidOperationException($"expected at least 2 dispatcher args, got {count}"); ReadOutgoingHandleTag(ref r); // instance handle — unused by these tests @@ -208,9 +207,23 @@ private static (string Method, object?[] Args) DecodeCall(ReadOnlySpan spa throw new InvalidOperationException($"expected string tag 0x05 for method name, got 0x{methodTag:X2}"); var method = r.ReadString32(); - var argsHandleId = ReadOutgoingHandleTag(ref r); - var argsObj = Bridge.s_handles.TryGetValue(argsHandleId, out var o) ? o as object?[] : null; - return (method, argsObj ?? Array.Empty()); + var args = new object?[count - 2]; + for (int i = 0; i < args.Length; i++) + { + var tag = r.ReadByte(); + args[i] = tag switch + { + 0x00 => null, + 0x01 => false, + 0x02 => true, + 0x03 => r.ReadI32(), + 0x04 => r.ReadF64(), + 0x05 => r.ReadString32(), + 0x0D => r.ReadString32(), + _ => throw new InvalidOperationException($"unexpected argument tag 0x{tag:X2}"), + }; + } + return (method, args); } private static int ReadOutgoingHandleTag(ref BinReader r) diff --git a/dotnet-bridge-tests/ProxyMeasureOverrideTests.cs b/dotnet-bridge-tests/ProxyMeasureOverrideTests.cs index b0c9bf1..41f8f3e 100644 --- a/dotnet-bridge-tests/ProxyMeasureOverrideTests.cs +++ b/dotnet-bridge-tests/ProxyMeasureOverrideTests.cs @@ -77,7 +77,7 @@ public void MeasureOverride_CustomOverride_InvokesJsCallback() Assert.Equal(777, s_capturedId); Assert.True(s_capturedArgs.Length > 0); - // Parse captured binary: [count=3][handle][string][handle(args)] + // Parse captured binary: [count=3][handle][string member][i32 argument] var span = s_capturedArgs.AsSpan(); Assert.Equal(3, span[0]); var off = 1; @@ -93,13 +93,9 @@ public void MeasureOverride_CustomOverride_InvokesJsCallback() var strLen = BinaryPrimitives.ReadUInt32LittleEndian(span.Slice(off, 4)); off += 4; var name = Encoding.UTF8.GetString(span.Slice(off, (int)strLen)); off += (int)strLen; Assert.Equal("MeasureOverride", name); - Assert.Equal(0x06, span[off++]); - var argsHandle = BinaryPrimitives.ReadInt32LittleEndian(span.Slice(off, 4)); off += 4; - - Assert.True(Bridge.s_handles.TryGetValue(argsHandle, out var arrObj)); - var arr = Assert.IsType(arrObj); - Assert.Single(arr); - Assert.Equal(123, Convert.ToInt32(arr[0])); + // The argument travels as its own value, not as a handle to an object[]. + Assert.Equal(0x03, span[off++]); + Assert.Equal(123, BinaryPrimitives.ReadInt32LittleEndian(span.Slice(off, 4))); // Release created instance Bridge.Dispatch(new InvokeRequest(null, null, "__release", handle, null)); diff --git a/dotnet-bridge/BinaryProtocol.cs b/dotnet-bridge/BinaryProtocol.cs index dc7595f..11c26c8 100644 --- a/dotnet-bridge/BinaryProtocol.cs +++ b/dotnet-bridge/BinaryProtocol.cs @@ -17,6 +17,20 @@ internal readonly struct WinRtRef(long ptr) public readonly long Ptr = ptr; } +// A JS function passed where a delegate is expected (tag 0x0C): the runtime's callback id, wrapped +// in a delegate of the parameter's type when the call's arguments are coerced. +internal readonly struct JsFunctionRef(int id) +{ + public readonly int Id = id; +} + +// A plain JS object (tag 0x0D) as JSON, deserialized into the struct/record/class the parameter or +// return type expects (e.g. `{ Width: 120, Height: 40 }` for Windows.Foundation.Size). +internal sealed class JsJsonValue(string json) +{ + public readonly string Json = json; +} + internal ref struct BinReader(ReadOnlySpan buf) { private readonly ReadOnlySpan _buf = buf; @@ -24,6 +38,8 @@ internal ref struct BinReader(ReadOnlySpan buf) public byte ReadByte() => _buf[_pos++]; + public bool HasMore => _pos < _buf.Length; + public int ReadI32() { var v = BinaryPrimitives.ReadInt32LittleEndian(_buf[_pos..]); @@ -96,6 +112,8 @@ public uint ReadU32() 0x05 => (object)ReadString16(), 0x06 => (object)new HandleRef(ReadI32()), 0x0A => (object)new WinRtRef(ReadI64()), + 0x0C => (object)new JsFunctionRef(ReadI32()), + 0x0D => (object)new JsJsonValue(ReadString32()), _ => null, }; } diff --git a/dotnet-bridge/Bridge.BinaryDispatch.cs b/dotnet-bridge/Bridge.BinaryDispatch.cs index 7af021e..a1ca9eb 100644 --- a/dotnet-bridge/Bridge.BinaryDispatch.cs +++ b/dotnet-bridge/Bridge.BinaryDispatch.cs @@ -92,6 +92,14 @@ internal static DispatchResult DispatchBin(ref BinReader r) return DispatchResult.Void; } + // A JS subclass instance whose JS object was collected: its dispatcher makes a new one + // for this handle. + if (method == JsSelfMember && target is not null && s_proxyCallbacks.TryGetValue(target, out var jsHolder)) + { + CallJsCallback(jsHolder.CallbackId, [new HandleRef(handle), JsSelfMember], expectsResult: false); + return DispatchResult.Void; + } + return DispatchCallBin(target, type, method, args, isStatic: false); } @@ -116,7 +124,8 @@ internal static DispatchResult DispatchBin(ref BinReader r) for (int i = 0; i < memberCount; i++) memberNames[i] = r.ReadString16(); var callbackId = r.ReadI32(); - return CreateJsSubclass(NullIfEmpty(assembly), typeName, callbackId, interfaceNames, memberNames); + var ctorArgs = r.HasMore ? r.ReadArgs() : []; + return CreateJsSubclass(NullIfEmpty(assembly), typeName, callbackId, interfaceNames, memberNames, ctorArgs); } if (op == 0x0B) // get CLR-only property by raw IInspectable ptr (CLR reflection fallback) @@ -176,7 +185,35 @@ private static DispatchResult DispatchCallBin( } } + // Overloads with the same parameter count (Describe(Animal) / Describe(Shape)): pick the + // first whose parameter types the arguments convert to. + var overloads = GetOverloads(type, method, args.Length, flags); + if (overloads.Length > 1) + { + foreach (var overload in overloads) + { + var ps = overload.GetParameters(); + object?[] built; + try { built = BuildArgsBinExact(args, ps); } + catch { continue; } + if (!ArgsFit(built, ps)) continue; + return Box(overload.Invoke(target, built)); + } + } + var entry = GetCachedMethod(type, method, args.Length, flags); + if (entry.Invoke is null && target is not null && IsJsBacked(target)) + { + // A JS subclass may call the protected members it inherits. + var protectedFlags = BindingFlags.Instance | BindingFlags.NonPublic; + var inherited = type.GetMethods(protectedFlags) + .FirstOrDefault(m => m.Name == method && (m.IsFamily || m.IsFamilyOrAssembly) && m.GetParameters().Length == args.Length); + if (inherited is not null) + { + var built = BuildArgsBinExact(args, inherited.GetParameters()); + return Box(inherited.Invoke(target, built)); + } + } if (entry.Invoke is null) { var candidates = type.GetMethods(flags).Where(m => m.Name == method && !m.IsSpecialName); @@ -186,7 +223,7 @@ private static DispatchResult DispatchCallBin( var built = BuildArgsBin(args, parameters); try { - var res = AwaitIfTask(m.Invoke(target, built)); + var res = (m.Invoke(target, built)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) @@ -194,7 +231,7 @@ private static DispatchResult DispatchCallBin( if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -204,7 +241,7 @@ private static DispatchResult DispatchCallBin( if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -219,25 +256,33 @@ private static DispatchResult DispatchCallBin( try { try { - var res = AwaitIfTask(entry.Invoke(target, builtArgs)); + var res = (entry.Invoke(target, builtArgs)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(entry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (entry.Invoke(target, builtArgs))); return Box(res); } catch (System.Runtime.InteropServices.COMException ce) when (IsMarshaledForDifferentThread(ce)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(entry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (entry.Invoke(target, builtArgs))); return Box(res); } } finally { if (builtArgs.Length > 0) ReturnArgs(builtArgs); } } + private static readonly System.Collections.Concurrent.ConcurrentDictionary s_overloadCache = new(); + + private static MethodInfo[] GetOverloads(Type type, string name, int argCount, BindingFlags flags) + => s_overloadCache.GetOrAdd(new MethodKey(type, name, argCount, flags), static k => + k.Type.GetMethods(k.Flags) + .Where(m => m.Name == k.Name && !m.IsGenericMethodDefinition && m.GetParameters().Length == k.ArgCount) + .ToArray()); + private static object?[] BuildArgsBin(object?[] binArgs, ParameterInfo[] parameters) { if (parameters.Length == 0) return []; @@ -256,6 +301,16 @@ private static DispatchResult DispatchCallBin( return result; } + // Plain JS objects <-> .NET structs/records: public fields count (Windows.Foundation.Size and most + // interop structs are fields), member names match case-insensitively. + internal static readonly System.Text.Json.JsonSerializerOptions s_jsJsonOptions = new() + { + IncludeFields = true, + PropertyNameCaseInsensitive = true, + NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString + | System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals, + }; + private static object? CoerceBin(object? value, Type targetType) { if (value is null) return null; @@ -319,8 +374,28 @@ private static DispatchResult DispatchCallBin( throw; } } + if (value is JsJsonValue json) + { + if (targetType == typeof(string)) return json.Json; + var target = targetType == typeof(object) ? typeof(System.Text.Json.JsonElement) : targetType; + return System.Text.Json.JsonSerializer.Deserialize(json.Json, target, s_jsJsonOptions); + } + if (value is JsFunctionRef fn) + { + var delegateType = typeof(Delegate).IsAssignableFrom(targetType) + && targetType != typeof(Delegate) && targetType != typeof(MulticastDelegate) + ? targetType + : typeof(Action); + return MakeJsDelegate(delegateType, fn.Id); + } if (value.GetType() == targetType) return value; - try { return Convert.ChangeType(value, targetType); } + var underlying = Nullable.GetUnderlyingType(targetType) ?? targetType; + if (underlying.IsEnum) + { + try { return Enum.ToObject(underlying, Convert.ToInt64(value)); } + catch { return value; } + } + try { return Convert.ChangeType(value, underlying); } catch { return value; } } diff --git a/dotnet-bridge/Bridge.Dispatch.cs b/dotnet-bridge/Bridge.Dispatch.cs index f3eef5f..323d95b 100644 --- a/dotnet-bridge/Bridge.Dispatch.cs +++ b/dotnet-bridge/Bridge.Dispatch.cs @@ -115,7 +115,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) var built = BuildArgs(args, parameters); try { - var res = AwaitIfTask(m.Invoke(target, built)); + var res = (m.Invoke(target, built)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) @@ -123,7 +123,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -133,7 +133,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -148,19 +148,19 @@ internal static DispatchResult Dispatch(InvokeRequest req) try { try { - var res = AwaitIfTask(dispEntry.Invoke(target, builtArgs)); + var res = (dispEntry.Invoke(target, builtArgs)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(dispEntry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (dispEntry.Invoke(target, builtArgs))); return Box(res); } catch (System.Runtime.InteropServices.COMException ce) when (IsMarshaledForDifferentThread(ce)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(dispEntry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (dispEntry.Invoke(target, builtArgs))); return Box(res); } } @@ -263,34 +263,6 @@ private static void ReturnArgs(object?[] args) => return el.Deserialize(targetType, s_coerceOpts); } - private static object? AwaitIfTask(object? value) - { - if (value is null) return null; - - if (value is Task task) - { - task.GetAwaiter().GetResult(); - return TaskResultCache.GetResult(task); - } - - if (value is ValueTask vt) - { - vt.AsTask().GetAwaiter().GetResult(); - return null; - } - - var type = value.GetType(); - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(ValueTask<>)) - { - var innerTask = ValueTaskAsTaskCache.AsTask(type, value); - innerTask.GetAwaiter().GetResult(); - if (innerTask.IsFaulted) throw innerTask.Exception!.InnerException ?? innerTask.Exception; - return TaskResultCache.GetResult(innerTask); - } - - return value; - } - private static DispatchResult Box(object? value) { if (value is null) return DispatchResult.Void; @@ -321,10 +293,18 @@ private static DispatchResult Box(object? value) return DispatchResult.Primitive(Convert.ChangeType(value, ut), ut); } + // An instance of a JS subclass goes back to JS as the handle its JS object holds, so the + // runtime hands out that same JS object. If that object was collected (its handle released), + // the instance gets a new handle below, recorded for the JS object the runtime revives. + var jsHolder = JsBackedHolder(value, out var jsHandleLive); + if (jsHolder is not null && jsHandleLive) + return DispatchResult.Handle(jsHolder.HandleId, t.FullName ?? t.Name); + var id = Interlocked.Increment(ref s_nextHandle); s_handles[id] = value; + if (jsHolder is not null) jsHolder.HandleId = id; // Try to obtain a canonical IInspectable/IUnknown pointer for COM/WinRT objects // so the runtime can call native vtable methods directly. @@ -363,6 +343,31 @@ private static bool IsAwaitable(object? value, Type t) null, Type.EmptyTypes, null) is not null; } + /// "interface", "abstract", "static", "sealed", "class", "struct", "enum", "delegate", or "" + /// when the type isn't found. + /// Lets JS decide between `new Interface({...})`, subclassing and plain construction. + public static string TypeKind(string typeName) + { + var t = ResolveType(null, typeName); + if (t is null) return ""; + if (t.IsInterface) return "interface"; + if (t.IsEnum) return "enum"; + if (typeof(Delegate).IsAssignableFrom(t)) return "delegate"; + if (t.IsValueType) return "struct"; + if (t.IsAbstract && t.IsSealed) return "static"; + if (t.IsAbstract) return "abstract"; + if (t.IsSealed) return "sealed"; + return "class"; + } + + /// `value instanceof SomeType` for a .NET object that was not constructed from JS. + public static bool IsInstanceOf(object? value, string typeName) + { + if (value is null) return false; + var t = ResolveType(null, typeName); + return t is not null && t.IsInstanceOfType(value); + } + internal static DispatchResult BuildMembersResult(Type t) { const BindingFlags inst = BindingFlags.Public | BindingFlags.Instance; diff --git a/dotnet-bridge/Bridge.JsDelegate.cs b/dotnet-bridge/Bridge.JsDelegate.cs index b238d6c..c0cf68b 100644 --- a/dotnet-bridge/Bridge.JsDelegate.cs +++ b/dotnet-bridge/Bridge.JsDelegate.cs @@ -12,91 +12,129 @@ namespace NativeScriptBridge; public static partial class Bridge { // opcode 0x09: given a delegate type name (or "" for System.Action) and a - // JS callback id, compile a .NET delegate that serialises its parameters as - // binary and calls back into V8 via the s_jsInvoker function pointer. - + // JS callback id, create a .NET delegate that calls back into V8. private static DispatchResult CreateJsDelegate(string typeName, int callbackId) { var delegateType = string.IsNullOrEmpty(typeName) ? typeof(Action) : ResolveType(null, typeName) ?? throw new TypeLoadException($"Delegate type not found: {typeName}"); + return Box(MakeJsDelegate(delegateType, callbackId)); + } - var invokeMethod = delegateType.GetMethod("Invoke") - ?? throw new MissingMethodException($"No Invoke method on {delegateType}"); + // The target a JS-backed delegate is bound to. When the delegate is collected the finalizer + // tells the runtime, which then drops its reference to the JS function. + internal sealed class JsCallbackTarget(int callbackId) + { + public readonly int CallbackId = callbackId; + + public object? Invoke(object?[] args) => CallJsCallback(CallbackId, args, expectsResult: true); + + public void InvokeVoid(object?[] args) => CallJsCallback(CallbackId, args, expectsResult: false); + + ~JsCallbackTarget() + { + ReleaseJsCallback(CallbackId); + } + } - var parameters = invokeMethod.GetParameters(); - var returnType = invokeMethod.ReturnType; + // Function pointer registered by the runtime (RegisterJsCallbackRelease) to drop a JS function + // whose delegate was collected. Called from the finalizer thread; the runtime queues the id. + internal static unsafe delegate* unmanaged[Cdecl] s_jsCallbackRelease; - // Build a dynamic method that marshals parameters into an object[] and - // calls back into JS via CallJsCallback/CallJsCallbackVoid. Expression - // compilation occasionally generates incorrect code for some delegate - // shapes; emitting IL here is reliable across signatures. - var paramTypes = parameters.Select(p => p.ParameterType).ToArray(); - - var dm = new DynamicMethod($"__ns_js_delegate_{callbackId}", - returnType, paramTypes, typeof(Bridge).Module, skipVisibility: true); + [UnmanagedCallersOnly(EntryPoint = "RegisterJsCallbackRelease", + CallConvs = [typeof(System.Runtime.CompilerServices.CallConvCdecl)])] + public static unsafe int RegisterJsCallbackRelease(delegate* unmanaged[Cdecl] release) + { + s_jsCallbackRelease = release; + return 0; + } + + internal static unsafe void ReleaseJsCallback(int callbackId) + { + var release = s_jsCallbackRelease; + if (release == null) return; + try { release(callbackId); } catch { } + } + + // One invoker per delegate type: (JsCallbackTarget target, ) -> . + // It packs the arguments into object[] and calls target.Invoke/InvokeVoid; a delegate instance is + // that invoker closed over its target, so creating a delegate emits no code. + private static readonly System.Collections.Concurrent.ConcurrentDictionary s_jsDelegateInvokers = new(); + internal static Delegate MakeJsDelegate(Type delegateType, int callbackId) + { + var invoker = s_jsDelegateInvokers.GetOrAdd(delegateType, BuildJsDelegateInvoker); + return invoker.CreateDelegate(delegateType, new JsCallbackTarget(callbackId)); + } + + private static DynamicMethod BuildJsDelegateInvoker(Type delegateType) + { + var invokeMethod = delegateType.GetMethod("Invoke") + ?? throw new MissingMethodException($"No Invoke method on {delegateType}"); + var paramTypes = invokeMethod.GetParameters().Select(p => p.ParameterType).ToArray(); + var returnType = invokeMethod.ReturnType; + + // Emitting IL (rather than compiling an expression tree) is reliable across delegate shapes. + var dm = new DynamicMethod($"__ns_js_delegate_{delegateType.Name}", returnType, + [typeof(JsCallbackTarget), .. paramTypes], typeof(Bridge).Module, skipVisibility: true); var il = dm.GetILGenerator(); - // local: object[] argsArray - var argsLocal = il.DeclareLocal(typeof(object[])); + + il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldc_I4, paramTypes.Length); il.Emit(OpCodes.Newarr, typeof(object)); - il.Emit(OpCodes.Stloc, argsLocal); - for (int i = 0; i < paramTypes.Length; i++) { - il.Emit(OpCodes.Ldloc, argsLocal); + var paramType = paramTypes[i].IsByRef ? paramTypes[i].GetElementType()! : paramTypes[i]; + il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4, i); - // load argument (Ldarg_0..) - switch (i + 1) - { - case 1: il.Emit(OpCodes.Ldarg_0); break; - case 2: il.Emit(OpCodes.Ldarg_1); break; - case 3: il.Emit(OpCodes.Ldarg_2); break; - case 4: il.Emit(OpCodes.Ldarg_3); break; - default: il.Emit(OpCodes.Ldarg, i + 1); break; - } - if (paramTypes[i].IsValueType) il.Emit(OpCodes.Box, paramTypes[i]); + il.Emit(OpCodes.Ldarg, i + 1); + if (paramTypes[i].IsByRef) il.Emit(OpCodes.Ldobj, paramType); + if (paramType.IsValueType) il.Emit(OpCodes.Box, paramType); il.Emit(OpCodes.Stelem_Ref); } - - if (returnType == typeof(void)) { - var callVoid = typeof(Bridge).GetMethod(nameof(CallJsCallbackVoid), BindingFlags.Static | BindingFlags.NonPublic)!; - il.Emit(OpCodes.Ldc_I4, callbackId); - il.Emit(OpCodes.Ldloc, argsLocal); - il.Emit(OpCodes.Call, callVoid); - il.Emit(OpCodes.Ret); + il.Emit(OpCodes.Call, typeof(JsCallbackTarget).GetMethod(nameof(JsCallbackTarget.InvokeVoid))!); } else { - var callObj = typeof(Bridge).GetMethod(nameof(CallJsCallback), BindingFlags.Static | BindingFlags.NonPublic)!; - il.Emit(OpCodes.Ldc_I4, callbackId); - il.Emit(OpCodes.Ldloc, argsLocal); - il.Emit(OpCodes.Call, callObj); - // ignore returned object and return default(returnType) - if (returnType.IsValueType) - { - var loc = il.DeclareLocal(returnType); - il.Emit(OpCodes.Ldloca_S, loc); - il.Emit(OpCodes.Initobj, returnType); - il.Emit(OpCodes.Ldloc, loc); - } - else - { - il.Emit(OpCodes.Ldnull); - } - il.Emit(OpCodes.Ret); + il.Emit(OpCodes.Call, typeof(JsCallbackTarget).GetMethod(nameof(JsCallbackTarget.Invoke))!); + il.Emit(OpCodes.Ldtoken, returnType); + il.Emit(OpCodes.Call, typeof(Type).GetMethod(nameof(Type.GetTypeFromHandle))!); + il.Emit(OpCodes.Call, typeof(Bridge).GetMethod(nameof(ConvertJsResult), BindingFlags.Static | BindingFlags.NonPublic)!); + il.Emit(OpCodes.Unbox_Any, returnType); } + il.Emit(OpCodes.Ret); + return dm; + } - var del = dm.CreateDelegate(delegateType); - return Box(del); + // A JS callback's result, converted to the type the managed caller expects (a delegate's return + // type or an overridden member's). + internal static object? ConvertJsResult(object? value, Type returnType) + { + if (value is null) + return returnType.IsValueType && Nullable.GetUnderlyingType(returnType) is null + ? Activator.CreateInstance(returnType) + : null; + var coerced = CoerceBin(value, returnType); + if (coerced is null || returnType.IsInstanceOfType(coerced)) return coerced; + var underlying = Nullable.GetUnderlyingType(returnType) ?? returnType; + try { return Convert.ChangeType(coerced, underlying); } + catch (Exception e) + { + throw new InvalidCastException( + $"JavaScript returned {coerced.GetType().Name}, which can't be converted to {returnType.FullName}", e); + } } - internal static unsafe object? CallJsCallback(int id, object?[] args) + internal static object? CallJsCallback(int id, object?[] args) => CallJsCallback(id, args, expectsResult: true); + + // Calls the JS function registered under `id`. When it throws, a caller that expects a result + // gets a JsException (a delegate with a return value, an overridden member); a void delegate or + // event just returns, the error having been reported as an uncaught JS error. + internal static unsafe object? CallJsCallback(int id, object?[] args, bool expectsResult) { if (s_jsInvoker == null) return null; @@ -116,16 +154,21 @@ private static DispatchResult CreateJsDelegate(string typeName, int callbackId) // Response is only set for non-void delegates; parse and free when present. if (respPtr != null && respLen > 0) { + string? jsError = null; try { var span = new ReadOnlySpan(respPtr, respLen); - result = ParseCallbackResponse(span); + if (span[0] == 0x0F) + jsError = span.Length > 5 ? new BinReader(span[1..]).ReadString32() : "the JavaScript callback could not run"; + else + result = ParseCallbackResponse(span); } catch { result = null; } finally { Marshal.FreeHGlobal((IntPtr)respPtr); } + if (jsError != null && expectsResult) throw new JsException(jsError); } return result; @@ -176,6 +219,15 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) if (arg is float f) { w.WriteByte(0x04); w.WriteF64((double)f); return; } if (arg is double d){ w.WriteByte(0x04); w.WriteF64(d); return; } if (arg is string s){ w.WriteByte(0x05); w.WriteString32(s); return; } + if (arg is Enum e) { w.WriteByte(0x04); w.WriteF64(Convert.ToDouble(e)); return; } + if (arg is decimal m){ w.WriteByte(0x04); w.WriteF64((double)m); return; } + // A struct (Windows.Foundation.Size, a C# record struct, ...) arrives as a plain JS object. + if (arg.GetType().IsValueType && !arg.GetType().IsPrimitive) + { + string? json = null; + try { json = System.Text.Json.JsonSerializer.Serialize(arg, arg.GetType(), s_jsJsonOptions); } catch { } + if (json != null) { w.WriteByte(0x0D); w.WriteString32(json); return; } + } // Object: box in the handle map and send as a handle reference. // The JS side receives {__handle, __type} which can be turned into a @@ -209,6 +261,7 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) case 0x05: return (object)r.ReadString32(); case 0x06: return (object)new HandleRef(r.ReadI32()); case 0x0A: return (object)new WinRtRef(r.ReadI64()); + case 0x0D: return new JsJsonValue(r.ReadString32()); case 0x07: // array: u32 count + N tagged items { var count = (int)r.ReadU32(); @@ -237,8 +290,11 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) internal static unsafe void CallJsCallbackVoid(int id, object?[] args) { - CallJsCallback(id, args); + CallJsCallback(id, args, expectsResult: false); } } + +/// Thrown into managed code when a JavaScript callback that was expected to return a value threw. +public sealed class JsException(string message) : Exception(message); diff --git a/dotnet-bridge/Bridge.Proxy.cs b/dotnet-bridge/Bridge.Proxy.cs index 89e3cef..c16910d 100644 --- a/dotnet-bridge/Bridge.Proxy.cs +++ b/dotnet-bridge/Bridge.Proxy.cs @@ -14,9 +14,9 @@ namespace NativeScriptBridge; public static partial class Bridge { - // Cache for dynamically generated proxy types (dev-only fallback). Keyed by base type PLUS - // the exact set of interfaces/members a given JS `overrides` object asked for, so different - // JS subclasses of the same base type (different override sets) get distinct emitted types. + // The types behind JS subclasses, emitted at runtime. Keyed by base type PLUS the exact set of + // interfaces/members a JS class asked for, so different JS subclasses of the same base type + // (different override sets) get distinct emitted types. private readonly record struct ProxyTypeKey(Type BaseType, string InterfaceKey, string MemberKey); private static readonly ConcurrentDictionary s_dynamicProxyCache = new(); private static int s_dynamicProxyTypeCounter = 0; @@ -51,9 +51,7 @@ public static class ProxyRuntime public static T InvokeMethodTyped(object instance, string methodName, object[] args) { var result = ProxyInvokeMethod(instance, methodName, args); - if (result is null) return default!; - if (result is T t) return t; - return (T)Convert.ChangeType(result, typeof(T), CultureInfo.InvariantCulture); + return (T)ConvertJsResult(result, typeof(T))!; } public static object? InvokeMethod(object instance, string methodName, object[] args) @@ -69,9 +67,7 @@ public static void InvokeVoid(object instance, string methodName, object[] args) public static T GetProperty(object instance, string propertyName) { var result = ProxyGetProperty(instance, propertyName); - if (result is null) return default!; - if (result is T t) return t; - return (T)Convert.ChangeType(result, typeof(T), CultureInfo.InvariantCulture); + return (T)ConvertJsResult(result, typeof(T))!; } public static void SetProperty(object instance, string propertyName, object? value) @@ -79,98 +75,19 @@ public static void SetProperty(object instance, string propertyName, object? val ProxySetProperty(instance, propertyName, value); } } - private sealed class ProxyCallbackHolder { public int CallbackId; public int HandleId; public ProxyCallbackHolder(int cb) { CallbackId = cb; HandleId = 0; } } - - private static readonly ConditionalWeakTable s_proxyCallbacks = new(); - private static readonly ThreadLocal s_pendingProxyCallbackId = new(() => null); - private static readonly object s_proxyRegisterLock = new(); - private static bool s_proxyDispatcherRegistered = false; - - private static void EnsureProxyDispatcherCallbacksRegistered() + // Ties a JS-backed instance to its JS dispatcher (and the handle its JS object holds). Lives as + // long as the instance (ConditionalWeakTable value); when the instance is collected the runtime + // is told to unpin the dispatcher. + private sealed class ProxyCallbackHolder(int callbackId) { - if (s_proxyDispatcherRegistered) return; - lock (s_proxyRegisterLock) - { - if (s_proxyDispatcherRegistered) return; - - Type? pdType = null; - foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) - { - try - { - pdType = asm.GetType("NativeScriptGeneratedProxies.ProxyDispatcher") - ?? asm.GetType("NSWinRTProxies.ProxyDispatcher") - ?? asm.GetType("NativeScriptGeneratedProxies.ProxyDispatcher"); - if (pdType != null) break; - } - catch { } - } + public readonly int CallbackId = callbackId; + public int HandleId; - if (pdType != null) - { - // Properties generated by SBG - var p1 = pdType.GetProperty("JsInvokeMethod", BindingFlags.Public | BindingFlags.Static); - p1?.SetValue(null, new Func(ProxyInvokeMethod)); - - var p2 = pdType.GetProperty("JsInvokeVoid", BindingFlags.Public | BindingFlags.Static); - p2?.SetValue(null, new Action(ProxyInvokeVoid)); - - var p3 = pdType.GetProperty("JsGetProperty", BindingFlags.Public | BindingFlags.Static); - p3?.SetValue(null, new Func(ProxyGetProperty)); - - var p4 = pdType.GetProperty("JsSetProperty", BindingFlags.Public | BindingFlags.Static); - p4?.SetValue(null, new Action(ProxySetProperty)); - - var p5 = pdType.GetProperty("JsInitializeInstance", BindingFlags.Public | BindingFlags.Static); - p5?.SetValue(null, new Action(ProxyInitializeInstance)); - } - - s_proxyDispatcherRegistered = true; - } - } - - private static bool DynamicProxiesEnabled() - { - // Always allow dynamic proxies in dev when Reflection.Emit is available. - return s_dynamicModule != null; + ~ProxyCallbackHolder() => ReleaseJsCallback(CallbackId); } - private static Type? FindGeneratedProxyType(string typeName) - { - if (string.IsNullOrEmpty(typeName)) return null; - var lastDot = typeName.LastIndexOf('.'); - var shortName = lastDot >= 0 ? typeName[(lastDot + 1)..] : typeName; - foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) - { - try - { - // Only consider assemblies that look like generated proxy assemblies - var asmName = asm.GetName().Name ?? ""; - if (!string.Equals(asmName, "NativeScriptGeneratedProxies", StringComparison.Ordinal) - && !string.Equals(asmName, "NSWinRTProxies", StringComparison.Ordinal)) - { - // Also check for candidate full-type names in any assembly - var candidates = new[] { $"NativeScriptGeneratedProxies.{shortName}", $"NSWinRTProxies.{shortName}" }; - foreach (var cn in candidates) - { - var t = asm.GetType(cn); - if (t is not null) return t; - } - continue; - } - - // If this is a generated proxies assembly, look up the proxy type name. - var genCandidates = new[] { $"NativeScriptGeneratedProxies.{shortName}", $"NSWinRTProxies.{shortName}" }; - foreach (var cn in genCandidates) - { - var t = asm.GetType(cn); - if (t is not null) return t; - } - } - catch { } - } - return null; - } + private static readonly ConditionalWeakTable s_proxyCallbacks = new(); + private static readonly ThreadLocal s_pendingProxyCallbackId = new(() => null); private static Type GetOrCreateDynamicProxyType(Type baseType, string[] interfaceNames, string[] memberNames) { @@ -204,20 +121,17 @@ private static Type CreateDynamicProxyType(Type baseType, string[] interfaceName var tb = s_dynamicModule.DefineType(typeName, TypeAttributes.Public | TypeAttributes.Class, baseType); - // Mirror public base constructors and ensure at least a parameterless - // ctor exists on the derived type. If the base type has no parameterless - // ctor, emit a parameterless ctor that forwards default(T) values to the - // first available base ctor (dev-only convenience). - var baseCtors = baseType.GetConstructors(BindingFlags.Public | BindingFlags.Instance) - .Where(c => !c.IsGenericMethod) + // Mirror the public and protected base constructors: a JS subclass can call either through + // super(...), and abstract classes / composable WinRT classes (Panel, Control) only have + // protected ones. + var baseCtors = baseType.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(c => !c.IsGenericMethod && (c.IsPublic || c.IsFamily || c.IsFamilyOrAssembly)) .ToArray(); - ConstructorInfo? chosenBaseForDefault = null; foreach (var bc in baseCtors) { var parameters = bc.GetParameters(); if (parameters.Any(p => p.ParameterType.IsByRef)) continue; - chosenBaseForDefault ??= bc; // Define a matching ctor on the derived type that forwards args to base. var paramTypes = parameters.Select(p => p.ParameterType).ToArray(); @@ -241,47 +155,6 @@ private static Type CreateDynamicProxyType(Type baseType, string[] interfaceName ilg.Emit(OpCodes.Ret); } - // If we didn't define a parameterless ctor, emit one that forwards - // default(T) values to the chosen base ctor (if any), otherwise call - // System.Object..ctor. - if (!baseCtors.Any(c => c.GetParameters().Length == 0)) - { - var paramless = tb.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes); - var ilg = paramless.GetILGenerator(); - if (chosenBaseForDefault is not null) - { - ilg.Emit(OpCodes.Ldarg_0); - var parameters = chosenBaseForDefault.GetParameters(); - // For each param, emit default value (null for ref types, initobj local for value types) - for (int i = 0; i < parameters.Length; i++) - { - var ptype = parameters[i].ParameterType; - if (ptype.IsByRef) throw new InvalidOperationException("Cannot forward byref parameters in dynamic ctor"); - if (ptype.IsValueType) - { - var temp = ilg.DeclareLocal(ptype); - ilg.Emit(OpCodes.Ldloca_S, temp); - ilg.Emit(OpCodes.Initobj, ptype); - ilg.Emit(OpCodes.Ldloc, temp); - } - else - { - ilg.Emit(OpCodes.Ldnull); - } - } - ilg.Emit(OpCodes.Call, chosenBaseForDefault); - ilg.Emit(OpCodes.Ret); - } - else - { - // No public base ctors (rare); call Object..ctor - var objCtor = typeof(object).GetConstructor(Type.EmptyTypes)!; - ilg.Emit(OpCodes.Ldarg_0); - ilg.Emit(OpCodes.Call, objCtor); - ilg.Emit(OpCodes.Ret); - } - } - // Shared by both loops below, keyed by "Name(Param1FullName,Param2FullName,...)" so a // member that's both an overridden base virtual and a requested interface member (e.g. // the base class already implements that interface) reuses one emitted body instead of @@ -293,8 +166,12 @@ static string SignatureKey(string name, Type[] paramTypes) => // Override only the base virtuals JS actually asked for (memberSet). Anything not in // that set is simply never touched, so the base implementation stays live in the vtable — // no "call base" IL needed. (Skip ref/out and generic methods — unsupported.) + // Abstract members are always implemented (dispatching to JS, which reports a missing + // implementation as an error) — a type with an unimplemented abstract member can't be created. var virtualMethods = baseType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => m.IsVirtual && !m.IsFinal && !m.IsGenericMethod && !m.IsConstructor && memberSet.Contains(m.Name)) + .Where(m => m.IsVirtual && !m.IsFinal && !m.IsGenericMethod && !m.IsConstructor + && (m.IsPublic || m.IsFamily || m.IsFamilyOrAssembly) + && (memberSet.Contains(m.Name) || m.IsAbstract)) .ToArray(); foreach (var mi in virtualMethods) @@ -310,6 +187,11 @@ static string SignatureKey(string name, Type[] paramTypes) => MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, mi.CallingConvention, mi.ReturnType, paramTypes, mi.Name); definedSignatures[sigKey] = mb; + + // `super.Name(...)` from JS: a public, non-virtual entry point to the base + // implementation (a plain call, so it can't dispatch back into the override). + if (!mi.IsAbstract) + EmitBaseCallMethod(tb, mi, paramTypes); } tb.DefineMethodOverride(mb, mi); @@ -359,6 +241,21 @@ void CollectInterfaces(Type t) return tb.CreateTypeInfo()!.AsType(); } + internal const string BaseCallPrefix = "__ns_base_"; + internal const string JsSelfMember = "__ns_js_self"; + + private static void EmitBaseCallMethod(TypeBuilder tb, MethodInfo baseMethod, Type[] paramTypes) + { + var mb = tb.DefineMethod(BaseCallPrefix + baseMethod.Name, + MethodAttributes.Public | MethodAttributes.HideBySig, CallingConventions.HasThis, + baseMethod.ReturnType, paramTypes); + var il = mb.GetILGenerator(); + il.Emit(OpCodes.Ldarg_0); + for (int i = 0; i < paramTypes.Length; i++) il.Emit(OpCodes.Ldarg, i + 1); + il.Emit(OpCodes.Call, baseMethod); + il.Emit(OpCodes.Ret); + } + // Shared IL body for both base-virtual overrides and interface-member implementations: box // args into an object[], forward to ProxyRuntime.InvokeVoid/InvokeMethodTyped by name. private static MethodBuilder EmitProxyMethodBody( @@ -406,82 +303,106 @@ private static MethodBuilder EmitProxyMethodBody( private static DispatchResult CreateJsSubclass( string? assemblyName, string typeName, int callbackId, string[] interfaceNames, string[] memberNames) - { - EnsureProxyDispatcherCallbacksRegistered(); + => CreateJsSubclass(assemblyName, typeName, callbackId, interfaceNames, memberNames, []); - s_pendingProxyCallbackId.Value = callbackId; - - // Try to find a statically-generated proxy type first (Mechanism A: sbg-compiled into - // the app itself — already has any requested interfaces baked into real C# source). - Type? t = FindGeneratedProxyType(typeName); - if (t is null) + // Creates an instance of a JS subclass: a dynamic subclass of the base type (or of System.Object + // when the "base" is an interface being implemented) whose overridden virtuals and interface + // members call the JS object registered under `callbackId`. `ctorArgs` select and feed the + // base constructor, as `super(...)` arguments do on Android/iOS. + private static DispatchResult CreateJsSubclass( + string? assemblyName, string typeName, int callbackId, string[] interfaceNames, string[] memberNames, object?[] ctorArgs) + { + // `typeName` is the base type; older runtimes passed an auto-generated proxy name there and + // the base type in `assemblyName`. + var baseType = ResolveType(null, typeName) + ?? (string.IsNullOrEmpty(assemblyName) ? null : ResolveType(null, assemblyName)) + ?? throw new TypeLoadException($"Type not found: {typeName}"); + + var interfaces = interfaceNames.ToList(); + if (baseType.IsInterface) { - // When typeName is an auto-generated proxy name (com.tns.gen.winrt.*), - // the caller puts the real base type name in assemblyName so we can - // look up or dynamically emit a proxy for the correct base class. - string? resolveFrom = typeName; - if (!string.IsNullOrEmpty(assemblyName) - && typeName.StartsWith("com.tns.gen.winrt.", StringComparison.Ordinal)) - { - resolveFrom = assemblyName; - } + interfaces.Insert(0, baseType.FullName!); + baseType = typeof(object); + } + if (baseType.IsSealed) + throw new InvalidOperationException($"{baseType.FullName} is sealed and can't be extended."); - // Resolve the WinRT/base type and optionally emit a dynamic proxy (Mechanism B fallback). - var baseType = ResolveType(null, resolveFrom) - ?? ResolveType(assemblyName, typeName) - ?? throw new TypeLoadException($"Type not found: {resolveFrom} (proxy: {typeName}, assembly: {assemblyName})"); + var proxyType = GetOrCreateDynamicProxyType(baseType, interfaces.ToArray(), memberNames); - if (baseType.IsClass && !baseType.IsSealed) - { - try { t = GetOrCreateDynamicProxyType(baseType, interfaceNames, memberNames); } - catch (Exception) { t = baseType; } - } - else + // Pick the constructor by argument count, preferring one whose parameters the arguments + // convert to. + var ctors = proxyType.GetConstructors().Where(c => c.GetParameters().Length == ctorArgs.Length).ToArray(); + if (ctors.Length == 0) + throw new MissingMethodException($"{baseType.FullName} has no constructor taking {ctorArgs.Length} argument(s)."); + object? instance = null; + Exception? lastError = null; + s_pendingProxyCallbackId.Value = callbackId; + try + { + foreach (var ctor in ctors) { - t = baseType; + object?[] built; + try { built = BuildArgsBinExact(ctorArgs, ctor.GetParameters()); } + catch (Exception e) { lastError = e; continue; } + if (!ArgsFit(built, ctor.GetParameters())) continue; + instance = ctor.Invoke(built); + break; } + if (instance is null) + throw lastError ?? new MissingMethodException( + $"No constructor of {baseType.FullName} accepts the given {ctorArgs.Length} argument(s)."); + RegisterJsBacked(instance, callbackId); + } + catch (TargetInvocationException tie) when (tie.InnerException is not null) + { + throw tie.InnerException; + } + finally + { + s_pendingProxyCallbackId.Value = null; } - - // Create the managed instance. Generated classes should call - // ProxyDispatcher.InitializeInstance(this, typeName) in their constructor, - // which will invoke our ProxyInitializeInstance and capture the pending callback id. - object? instance = Activator.CreateInstance(t); - if (instance is null) - throw new InvalidOperationException($"Failed to instantiate proxy type {t.FullName}."); - - // Ensure there's a mapping for this instance immediately to avoid any - // early virtual calls from constructors reaching the JS side before - // the handle is registered. Call our initializer directly to register - // the pending callback id when dynamic proxies don't call it. - try { ProxyInitializeInstance(instance, typeName); } catch { } // Force COM CCW vtable creation for any implemented WinRT interfaces now, rather than // relying on it happening implicitly the first time the instance crosses the ABI boundary. - // Best-effort/reflection-only — no-ops cleanly when CsWinRT isn't loaded (e.g. xunit host). - if (interfaceNames.Length > 0) - { - TryActivateWinRTInterfaces(instance); - } + if (interfaces.Count > 0) TryActivateWinRTInterfaces(instance); - // Box the instance into a handle to return to the runtime. - var result = Box(instance); + return Box(instance); + } - // Populate holder with handle id now that a handle exists. - if (s_proxyCallbacks.TryGetValue(instance, out var holder)) - { - try { holder.HandleId = result.HandleId(); } catch { holder.HandleId = 0; } - } - else + private static bool ArgsFit(object?[] built, ParameterInfo[] parameters) + { + for (int i = 0; i < parameters.Length; i++) { - // If the generated proxy did not call InitializeInstance, create mapping now. - int hid = 0; - try { hid = result.HandleId(); } catch { hid = 0; } - var newHolder = new ProxyCallbackHolder(callbackId) { HandleId = hid }; - s_proxyCallbacks.Add(instance, newHolder); + var p = parameters[i].ParameterType; + if (built[i] is null) { if (p.IsValueType && Nullable.GetUnderlyingType(p) is null) return false; continue; } + if (!p.IsInstanceOfType(built[i])) return false; } + return true; + } - s_pendingProxyCallbackId.Value = null; - return result; + private static void RegisterJsBacked(object instance, int callbackId) + { + if (!s_proxyCallbacks.TryGetValue(instance, out _)) + s_proxyCallbacks.Add(instance, new ProxyCallbackHolder(callbackId)); + } + + internal static bool IsJsBacked(object instance) => s_proxyCallbacks.TryGetValue(instance, out _); + + // The live handle of a JS-backed instance, or null when it has none (its JS object was collected + // and released the handle); Box then gives it a new one. + private static ProxyCallbackHolder? JsBackedHolder(object instance, out bool handleLive) + { + handleLive = false; + if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) return null; + handleLive = holder.HandleId != 0 + && s_handles.TryGetValue(holder.HandleId, out var current) && ReferenceEquals(current, instance); + return holder; + } + + private static int EnsureJsHandle(object instance, ProxyCallbackHolder holder) + { + JsBackedHolder(instance, out var live); + return live ? holder.HandleId : Box(instance).HandleId(); } // Locates CsWinRT's ComWrappersSupport via reflection (same style as the WinRT.IWinRTObject @@ -528,45 +449,53 @@ private static void TryActivateWinRTInterfaces(object instance) catch { /* best-effort only */ } } - private static void ProxyInitializeInstance(object instance, string typeName) + // The holder for a JS-backed instance. A virtual the base constructor calls runs before + // CreateJsSubclass has registered the instance, so fall back to the pending callback id. + private static ProxyCallbackHolder JsHolderFor(object instance) { - var cb = s_pendingProxyCallbackId.Value; - if (cb.HasValue) + if (s_proxyCallbacks.TryGetValue(instance, out var holder)) return holder; + var pending = s_pendingProxyCallbackId.Value; + if (pending.HasValue) { - var holder = new ProxyCallbackHolder(cb.Value); - s_proxyCallbacks.Add(instance, holder); + RegisterJsBacked(instance, pending.Value); + if (s_proxyCallbacks.TryGetValue(instance, out holder)) return holder; } + throw new InvalidOperationException("No JS callback registered for proxy instance."); + } + + // Payload for the JS dispatcher: (self handle, member name, ...args). The arguments are sent + // individually so each arrives as its JS value (numbers, strings, structs as plain objects, + // objects as handles). + private static object?[] DispatchPayload(object instance, ProxyCallbackHolder holder, string memberName, object?[] args) + { + var payload = new object?[args.Length + 2]; + payload[0] = new HandleRef(EnsureJsHandle(instance, holder)); + payload[1] = memberName; + Array.Copy(args, 0, payload, 2, args.Length); + return payload; } private static object? ProxyInvokeMethod(object instance, string methodName, object[] args) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - var payload = new object?[] { new HandleRef(holder.HandleId), methodName, args }; - return CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + return CallJsCallback(holder.CallbackId, DispatchPayload(instance, holder, methodName, args), expectsResult: true); } private static void ProxyInvokeVoid(object instance, string methodName, object[] args) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - - var payload = new object?[] { new HandleRef(holder.HandleId), methodName, args }; - CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + CallJsCallback(holder.CallbackId, DispatchPayload(instance, holder, methodName, args), expectsResult: false); } private static object? ProxyGetProperty(object instance, string propertyName) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - // Tag "get:" prefix so the JS dispatcher can distinguish getter from method call. - var payload = new object?[] { new HandleRef(holder.HandleId), "get:" + propertyName }; - return CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + return CallJsCallback(holder.CallbackId, DispatchPayload(instance, holder, "get_" + propertyName, []), expectsResult: true); } private static void ProxySetProperty(object instance, string propertyName, object? value) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - // Tag "set:" prefix so the JS dispatcher can distinguish setter from method call. - var payload = new object?[] { new HandleRef(holder.HandleId), "set:" + propertyName, value }; - CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + CallJsCallback(holder.CallbackId, DispatchPayload(instance, holder, "set_" + propertyName, [value]), expectsResult: false); } } - diff --git a/dotnet-bridge/Bridge.TaskHelper.cs b/dotnet-bridge/Bridge.TaskHelper.cs index 1361e89..5671e5b 100644 --- a/dotnet-bridge/Bridge.TaskHelper.cs +++ b/dotnet-bridge/Bridge.TaskHelper.cs @@ -22,9 +22,10 @@ internal static void ScheduleTaskContinuation(int handleId, int resolveId, int r $"Object of type {obj.GetType().FullName} is not awaitable. " + $"Expected Task, ValueTask, IAsyncOperation, or any type implementing GetAwaiter()."); + // The handle stays valid after completion (the JS proxy releases it when collected), so + // the same Task can be awaited again. task.ContinueWith(completed => { - s_handles.TryRemove(handleId, out _); try { if (completed.IsFaulted) diff --git a/dotnet-bridge/Bridge.cs b/dotnet-bridge/Bridge.cs index 557c91a..bd556fd 100644 --- a/dotnet-bridge/Bridge.cs +++ b/dotnet-bridge/Bridge.cs @@ -123,8 +123,12 @@ public static string GetNamespaceAssemblyMapJson() catch { continue; } } + // The app's own assembly (C# sources compiled into the app) contributes + // its internal types too: they are reachable from JS (type resolution + // finds non-public types), so their namespaces must be as well. Type[] types; - try { types = asm.GetExportedTypes(); } + try { types = asm == Assembly.GetEntryAssembly() ? asm.GetTypes() : asm.GetExportedTypes(); } + catch (ReflectionTypeLoadException e) { types = e.Types.Where(t => t != null).ToArray()!; } catch { types = Array.Empty(); } var assemblyName = asm.GetName().Name; @@ -132,7 +136,7 @@ public static string GetNamespaceAssemblyMapJson() foreach (var t in types) { - if (string.IsNullOrEmpty(t.Namespace)) continue; + if (string.IsNullOrEmpty(t.Namespace) || t.Name.StartsWith('<')) continue; map[t.Namespace] = assemblyName; var root = t.Namespace.Split('.')[0]; if (!map.ContainsKey(root)) map[root] = assemblyName; @@ -597,6 +601,12 @@ public static IntPtr GetNativePtrForHandle(int handleId) // WinRT interfaces (e.g. IUIElement for a FlexboxLayout subclass). private static IntPtr ObtainNativePtr(object obj) { + // Path 0 — a JS subclass of a WinRT class: the composed object's outer (its C#/WinRT CCW). + // XAML holds and hands back the outer, so using it here lets the runtime map those objects + // back to the JS instance. The base class's interfaces resolve through the inner. + if (IsJsBacked(obj) && TryGetOuterInspectable(obj) is { } outer && outer != IntPtr.Zero) + return outer; + // Path 1 — C#/WinRT IWinRTObject: use the projected inner object's pointer. // This gives the real native WinRT pointer, not the managed CCW, so // QueryInterface will succeed for all WinRT interfaces inherited by the type. @@ -646,6 +656,36 @@ private static IntPtr ObtainNativePtr(object obj) return iunknown; } + private static MethodInfo? s_marshalInspectableFromManaged; + + // WinRT.MarshalInspectable.FromManaged(obj), found by reflection (the bridge has no + // compile-time reference to C#/WinRT): an AddRef'd IInspectable of the object's CCW. + private static IntPtr? TryGetOuterInspectable(object obj) + { + if (obj.GetType().GetInterface("WinRT.IWinRTObject") is null) return null; + try + { + if (s_marshalInspectableFromManaged is null) + { + var open = AppDomain.CurrentDomain.GetAssemblies() + .Select(a => a.GetType("WinRT.MarshalInspectable`1")) + .FirstOrDefault(t => t is not null); + s_marshalInspectableFromManaged = open?.MakeGenericType(typeof(object)) + .GetMethods(BindingFlags.Public | BindingFlags.Static) + .FirstOrDefault(m => m.Name == "FromManaged" && m.GetParameters() is { Length: > 0 } ps + && ps[0].ParameterType == typeof(object) && ps.Skip(1).All(p => p.IsOptional)); + } + var method = s_marshalInspectableFromManaged; + if (method is null) return null; + var args = method.GetParameters().Select((p, i) => i == 0 ? obj : p.DefaultValue).ToArray(); + return method.Invoke(null, args) as IntPtr?; + } + catch + { + return null; + } + } + private static void OnAppDomainUnhandledException(object? sender, UnhandledExceptionEventArgs e) { try diff --git a/runtime/src/dotnet.rs b/runtime/src/dotnet.rs index 2915f25..57793c8 100644 --- a/runtime/src/dotnet.rs +++ b/runtime/src/dotnet.rs @@ -92,6 +92,10 @@ type FnBridgeFree = unsafe extern "C" fn(ptr: *mut u8); // back into V8. Signature: (callback_id, args_ptr, args_len, &resp_ptr, &resp_len) -> void pub(crate) type FnJsCallback = unsafe extern "C" fn(i32, *const u8, i32, *mut *mut u8, *mut i32); type FnRegisterJsCallback = unsafe extern "C" fn(callback: FnJsCallback) -> i32; +/// Called by the bridge (from the GC finalizer thread) when the managed delegate wrapping a JS +/// function has been collected, so the runtime can drop its reference to the function. +pub(crate) type FnReleaseJsCallback = unsafe extern "C" fn(i32); +type FnRegisterJsCallbackRelease = unsafe extern "C" fn(release: FnReleaseJsCallback) -> i32; struct DotNetHost { _hostfxr: HMODULE, @@ -99,6 +103,8 @@ struct DotNetHost { invoke_binary: FnBridgeInvokeBinary, free: FnBridgeFree, register_js_callback: FnRegisterJsCallback, + /// Absent in bridges published before JS functions could be passed as delegates. + register_js_callback_release: Option, } // SAFETY: only ever accessed from the main JS/UI thread. @@ -272,6 +278,8 @@ fn build_host(bridge_dll: &str, runtime_config: &str) -> Result = + bind("RegisterJsCallbackRelease").ok().map(|p| unsafe { std::mem::transmute(p) }); Ok(DotNetHost { _hostfxr: hostfxr, @@ -279,6 +287,7 @@ fn build_host(bridge_dll: &str, runtime_config: &str) -> Result return, }; unsafe { (host.register_js_callback)(callback) }; + if let Some(register_release) = host.register_js_callback_release { + unsafe { register_release(queue_js_callback_release) }; + } +} + +/// Callback ids whose managed delegate was garbage-collected, queued from the finalizer thread +/// and dropped on the JS thread by [`take_released_js_callbacks`]. +static RELEASED_JS_CALLBACKS: std::sync::Mutex> = std::sync::Mutex::new(Vec::new()); + +unsafe extern "C" fn queue_js_callback_release(callback_id: i32) { + if let Ok(mut ids) = RELEASED_JS_CALLBACKS.lock() { + ids.push(callback_id); + } +} + +/// Callback ids released since the last call. Called on the JS thread, which owns the functions. +pub(crate) fn take_released_js_callbacks() -> Vec { + match RELEASED_JS_CALLBACKS.lock() { + Ok(mut ids) if !ids.is_empty() => std::mem::take(&mut *ids), + _ => Vec::new(), + } } /// Calls the managed bridge with a pre-built binary request packet and returns diff --git a/runtime/src/global_fns.rs b/runtime/src/global_fns.rs index 5efc722..f713005 100644 --- a/runtime/src/global_fns.rs +++ b/runtime/src/global_fns.rs @@ -937,7 +937,11 @@ pub(crate) fn handle_resolve_module_path( // A packed (virtual, no-plaintext-on-disk) referrer never satisfies `.is_file()`, so also // check the sealed bundle's table — otherwise a relative require() from a bundle-only file // would wrongly treat the referrer itself as the base directory instead of its parent. - let base = if parent.is_file() || crate::source_protect::contains(&parent.to_string_lossy()) + // A referrer that doesn't exist but names a file (the `app/bundle.js` fallback the + // top-level `require` uses when the entry script is not a bundle) is a file too. + let base = if parent.is_file() + || crate::source_protect::contains(&parent.to_string_lossy()) + || (!parent.exists() && parent.extension().is_some()) { parent.parent().map(Path::to_path_buf).unwrap_or(parent) } else { @@ -2269,6 +2273,15 @@ const HELPER_SOURCE: &str = r#" if (typeof Function.prototype.extend !== 'function') { Object.defineProperty(Function.prototype, 'extend', { value: function (nameOrOverrides, maybeOverrides) { + // A WinRT class (or a JS class deriving from one): an ES2015 subclass, so + // instances get the composed-object construction of `class X extends Y`. + if (globalThis.NSWinRT && typeof globalThis.NSWinRT.extendClass === 'function') { + if (typeof this.__typeName__ === 'string') + return globalThis.NSWinRT.extendClass(this, nameOrOverrides, maybeOverrides); + // Object.extend({ interfaces: [...], ... }): a subclass of System.Object. + if (this === Object && globalThis.System) + return globalThis.NSWinRT.extendClass(globalThis.System.Object, nameOrOverrides, maybeOverrides); + } return makeManagedConstructor(this, nameOrOverrides, maybeOverrides); }, writable: true, @@ -2499,6 +2512,27 @@ const HELPER_SOURCE: &str = r#" }; } + // `return global.__native(this)` ends TypeScript subclass constructors written for + // Android/iOS; here `this` already is the native-backed object. + if (typeof globalThis.__native !== 'function') { + globalThis.__native = function (obj) { return obj; }; + } + + // @NativeClass / @NativeClass(): marks a class that extends a native (WinRT/.NET) class. + // Extending works without it; it exists so code written for iOS/Android, where the build + // transforms decorated classes, runs unchanged. + if (typeof globalThis.NativeClass !== 'function') { + Object.defineProperty(globalThis, 'NativeClass', { + value: function NativeClass(target) { + if (typeof target === 'function') return target; + return function (cls) { return cls; }; + }, + writable: true, + configurable: true, + enumerable: false, + }); + } + // @Interfaces([IFoo, IBar]) — attach WinRT interface list to a class. if (typeof globalThis.Interfaces !== 'function') { Object.defineProperty(globalThis, 'Interfaces', { @@ -2655,7 +2689,7 @@ const HELPER_SOURCE: &str = r#" try { var target = _wrapDotNetHandle(a[0]); var method = a[1]; - var margs = a[2] || []; + var margs = a.slice(2).map(_wrapDotNetHandle); if (target && typeof method === 'string') { var fn = overrides[method]; if (typeof fn === 'function') return fn.apply(target, Array.isArray(margs) ? margs : []); @@ -3232,7 +3266,14 @@ const HELPER_SOURCE: &str = r#" if (prop === 'toString') return function () { return '[DotNetObject ' + typeName + ' #' + handle + ']'; }; - if (prop === 'then') return undefined; + // A Task/ValueTask (awaitable) result is thenable, so `await obj.SomethingAsync()` works; + // any other .NET object must not look like a promise. + if (prop === 'then') { + if (isTask !== true) return undefined; + return function (onFulfilled, onRejected) { + return globalThis.NSWinRT.dotnet.taskToPromise({ __handle: handle, __isTask: true }).then(onFulfilled, onRejected); + }; + } // Re-read info in case it was populated after construction. var i = _typeInfoCache[typeName] || _emptyInfo; // Write-only: has setter but no getter — reading it is an error. @@ -3269,6 +3310,14 @@ const HELPER_SOURCE: &str = r#" if (Array.isArray(value)) return value.map(_wrap); if (typeof value === 'object' && typeof value.__handle === 'number') { var typeName = value.__type || ''; + var jsSelf = _jsSelfByHandle && _deref(_jsSelfByHandle.get(value.__handle)); + if (jsSelf) return jsSelf; + // A JS subclass instance whose JS object was collected: its dispatcher revives one. + if (typeName.indexOf('NSWinRTDynamicProxies.') === 0) { + try { _invoke({ handle: value.__handle, method: '__ns_js_self', args: [] }); } catch (_) {} + jsSelf = _deref(_jsSelfByHandle.get(value.__handle)); + if (jsSelf) return jsSelf; + } var assembly = _resolveAssembly(typeName); return _makeDotNetInstance(value.__handle, assembly, typeName, value.__isTask === true, value.__native_ptr); } @@ -3311,6 +3360,11 @@ const HELPER_SOURCE: &str = r#" var proxy = _makeNamespaceProxy(root); try { Object.defineProperty(globalThis, root, { value: proxy, writable: true, configurable: true, enumerable: true }); } catch (_) {} return proxy; + }, + // A namespace root never blocks app code from using the name for its own value + // (`var App = ...` in a classic script assigns through this accessor). + set: function(value) { + try { Object.defineProperty(globalThis, root, { value: value, writable: true, configurable: true, enumerable: true }); } catch (_) {} } }); } catch (_) { @@ -3323,15 +3377,491 @@ const HELPER_SOURCE: &str = r#" }, }; + // ── .NET types as JS classes ──────────────────────────────────────────────── + // A .NET type proxy (System.Text.StringBuilder, MyApp.Native.Greeter) is a constructor with a + // stable `prototype`, so it can be extended the way Java and Objective-C classes are on Android + // and iOS: + // class Cat extends MyApp.Animal { constructor(n) { super(n); } Speak() { return super.Speak(); } } + // const Dog = MyApp.Animal.extend('Dog', { Speak() { return this.super.Speak(); } }); + // const calc = new MyApp.ICalculator({ Compute(a, b) { return a * b; } }); + // Constructing a subclass creates the JS object first, then a managed subclass of the .NET type + // whose overridden virtuals (and implemented interface members) call back into that object. + // `super.X()` reaches the base implementation through the non-virtual `__ns_base_X` entry point + // the bridge emits for every overridden member. Native code handing the instance back to JS gets + // the same JS object. + var _nsProxyCache = Object.create(null); + var _namespaceExtras = { System: Object.create(null) }; + var _typeKindCache = Object.create(null); + var _typeProtoCache = Object.create(null); + var _subclassInfoCache = new WeakMap(); + var _jsSelfByHandle = new Map(); + + // ── Lifetime of JS subclass instances ─────────────────────────────────────── + // An instance is a JS object plus the managed object it drives. The JS object holds the managed + // one through its handle; the managed object reaches the JS object only through its dispatcher, + // which holds it weakly. So once JS drops the JS object, its handle is released and the managed + // object goes as soon as .NET/native code drops it too (the bridge then unpins the dispatcher). + // When native code calls into an instance whose JS object was collected, a new JS object of the + // same class is made for it: fields its constructor set are gone, as on Android when a JS object + // used only from native code is collected. Subclasses of WinRT UI classes are kept strongly while + // they are in a live XAML tree. + var _canWeakRef = typeof WeakRef === 'function'; + var _selfFinalizers = typeof FinalizationRegistry === 'function' + ? new FinalizationRegistry(function (handle) { + if (!_deref(_jsSelfByHandle.get(handle))) _jsSelfByHandle.delete(handle); + try { _invoke({ handle: handle, method: '__release', args: [] }); } catch (_) {} + }) + : null; + + function _weak(obj) { return _canWeakRef ? new WeakRef(obj) : obj; } + function _deref(ref) { return ref && _canWeakRef && ref instanceof WeakRef ? ref.deref() : ref; } + + // Gives `self` the bridge identity in `raw` and registers it as the JS object of `entry`'s instance. + function _adopt(entry, self, raw) { + Object.defineProperty(self, '__handle', { value: raw.__handle }); + Object.defineProperty(self, '__nsOverrides', { value: entry.overrides }); + if (!entry.winrt) { + Object.defineProperty(self, '__type', { value: raw.__type || entry.typeName }); + if (raw.__native_ptr !== undefined) Object.defineProperty(self, '__native_ptr', { value: raw.__native_ptr }); + } + entry.ref = _weak(self); + _jsSelfByHandle.set(raw.__handle, _weak(self)); + if (_selfFinalizers) _selfFinalizers.register(self, raw.__handle); + if (entry.winrt) { + entry.strong = self; + _attachedEntries.add(entry); + } + _sweepAttached(); + return self; + } + + // The JS object of `entry`'s instance, made anew when the previous one was collected. + function _selfFor(entry, raw) { + var self = _deref(entry.ref); + if (self) return self; + if (entry.constructing) throw new Error(entry.typeName + ' called into its JS subclass before the instance existed'); + if (!raw || typeof raw.__handle !== 'number') throw new Error('The ' + entry.typeName + ' subclass instance is gone'); + if (entry.winrt) { + self = globalThis.__nsWrapWinRTPointer(raw.__native_ptr, entry.typeName); + Object.setPrototypeOf(self, entry.proto); + } else { + self = Object.create(entry.proto); + } + return _adopt(entry, self, raw); + } + + // The dispatcher native code calls the instance's overridden and interface members through. + function _makeDispatcher(entry) { + return function (selfHandle, member) { + var self = _selfFor(entry, selfHandle); + if (member === '__ns_js_self') return undefined; + _sweepAttached(); + var margs = Array.prototype.slice.call(arguments, 2).map(_wrap); + return _dispatchToJs(self, entry.baseProto, entry.typeName, member, margs); + }; + } + + // Subclasses of WinRT classes held strongly (entry.strong) while in a live XAML tree, re-checked at + // most every two seconds when subclass instances are created or called into. + var _attachedEntries = new Set(); + var _lastAttachedSweep = 0; + function _sweepAttached() { + var now = Date.now(); + if (now - _lastAttachedSweep < 2000) return; + _lastAttachedSweep = now; + _attachedEntries.forEach(function (entry) { + var self = _deref(entry.ref); + if (!self) { + _attachedEntries.delete(entry); + return; + } + var attached = false; + try { attached = self.XamlRoot != null; } catch (_) {} + entry.strong = attached ? self : undefined; + }); + } + var _baseCallPrefix = '__ns_base_'; + + function _has(list, name) { + return !!list && list.indexOf(name) >= 0; + } + + function _typeKind(path) { + var kind = _typeKindCache[path]; + if (kind !== undefined) return kind; + try { + kind = _invoke({ assembly: '', typeName: 'NativeScriptBridge.Bridge', method: 'TypeKind', args: [path] }) || ''; + } catch (_) { + kind = ''; + } + _typeKindCache[path] = kind; + return kind; + } + + // Full name of a .NET type proxy, or of the .NET base of a JS class deriving from one. + function _dotnetTypeName(type) { + if (typeof type === 'string') return type; + if (!type || (typeof type !== 'function' && typeof type !== 'object')) return ''; + var name = type.__dotnetType__; + return typeof name === 'string' ? name : ''; + } + + // The handle of an instance of a JS subclass (an own property); -1 for anything else, such as + // a class prototype further down the chain, without running any property trap. + function _ownHandle(o) { + if (!o || (typeof o !== 'object' && typeof o !== 'function')) return -1; + var d = Object.getOwnPropertyDescriptor(o, '__handle'); + return d && typeof d.value === 'number' ? d.value : -1; + } + + function _baseCallName(self, member) { + var overrides = self.__nsOverrides; + return overrides && overrides.has(member) ? _baseCallPrefix + member : member; + } + + // A native member of `self` (an instance of a JS subclass), reached through the .NET type's + // prototype: properties are read through their getter, methods become functions. Members the JS + // class overrides resolve to the base implementation — only `super.X` gets this far for them. + function _baseMember(path, self, prop) { + if (prop === 'toString') return function () { return String(_invoke({ handle: self.__handle, method: 'ToString', args: [] })); }; + if (prop === 'valueOf') return function () { return this; }; + var info = _getTypeInfo(_resolveAssembly(path), path); + var overrides = self.__nsOverrides; + if (_has(info.properties, prop) || (overrides && overrides.has('get_' + prop))) { + return _wrap(_invoke({ handle: self.__handle, method: _baseCallName(self, 'get_' + prop), args: [] })); + } + if (_has(info.writeonlyProperties, prop)) + throw new TypeError('Cannot read write-only property \'' + prop + '\' of .NET type \'' + path + '\''); + if (_has(info.methods, prop) || (overrides && overrides.has(prop))) { + var method = _baseCallName(self, prop); + return function () { + var args = Array.prototype.slice.call(arguments).map(_unwrap); + return _wrap(_invoke({ handle: self.__handle, method: method, args: args })); + }; + } + return undefined; + } + + // The `prototype` of a .NET type: the end of every JS subclass's prototype chain. Reads resolve + // native members against the receiving instance; writes go to native properties, and anything + // else becomes a plain JS field of the instance. + function _typePrototype(path) { + var cached = _typeProtoCache[path]; + if (cached) return cached; + var proto = new Proxy(Object.create(null), { + get: function (_, prop, receiver) { + if (typeof prop === 'symbol') return undefined; + if (_ownHandle(receiver) < 0) { + // Read off the prototype itself — TypeScript's ES5 super call + // `_super.prototype.Method.call(this, ...)`: a function that runs the base + // implementation on whichever instance it is called with. + var typeInfo = _getTypeInfo(_resolveAssembly(path), path); + if (!_has(typeInfo.methods, prop)) return undefined; + return function () { + if (_ownHandle(this) < 0) throw new TypeError(path + '.prototype.' + prop + ' called on an object that is not a ' + path); + return _baseMember(path, this, prop).apply(this, arguments); + }; + } + return _baseMember(path, receiver, prop); + }, + set: function (_, prop, value, receiver) { + if (typeof prop !== 'symbol' && _ownHandle(receiver) >= 0) { + var info = _getTypeInfo(_resolveAssembly(path), path); + if (_has(info.readonlyProperties, prop)) + throw new TypeError('Cannot assign to read-only property \'' + prop + '\' of .NET type \'' + path + '\''); + if (_has(info.properties, prop) || _has(info.writeonlyProperties, prop)) { + _invoke({ handle: receiver.__handle, method: _baseCallName(receiver, 'set_' + prop), args: [_unwrap(value)] }); + return true; + } + } + Object.defineProperty(receiver, prop, { value: value, writable: true, enumerable: true, configurable: true }); + return true; + }, + }); + _typeProtoCache[path] = proto; + return proto; + } + + // Members (literal CLR names: methods, get_X/set_X accessors) and interfaces a JS class adds on + // top of its .NET base, from every class between it and the base. + function _subclassInfo(proto, baseProto) { + var cached = _subclassInfoCache.get(proto); + if (cached) return cached; + var members = []; + var overrides = new Set(); + var interfaces = []; + var seen = Object.create(null); + function addInterfaces(list) { + if (!Array.isArray(list)) return; + for (var i = 0; i < list.length; i++) { + var name = _dotnetTypeName(list[i]) || (list[i] && (list[i].__typeName__ || list[i].name)) || ''; + if (name && interfaces.indexOf(name) < 0) interfaces.push(name); + } + } + for (var p = proto; p && p !== baseProto; p = Object.getPrototypeOf(p)) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (key === 'constructor' || key === 'interfaces' || key === 'super' || key === 'init' || seen[key]) continue; + seen[key] = true; + var d = Object.getOwnPropertyDescriptor(p, key); + if (typeof d.get === 'function') { members.push('get_' + key); overrides.add('get_' + key); } + if (typeof d.set === 'function') { members.push('set_' + key); overrides.add('set_' + key); } + if (typeof d.value === 'function') { members.push(key); overrides.add(key); } + } + if (Object.prototype.hasOwnProperty.call(p, 'interfaces')) addInterfaces(p.interfaces); + var ctor = Object.prototype.hasOwnProperty.call(p, 'constructor') ? p.constructor : null; + if (ctor && Object.prototype.hasOwnProperty.call(ctor, 'interfaces')) addInterfaces(ctor.interfaces); + } + var info = { members: members, overrides: overrides, interfaces: interfaces }; + _subclassInfoCache.set(proto, info); + return info; + } + + // The JS-defined member `key` of `self` (an own field, or a member of one of its JS classes). + function _jsMember(self, key, baseProto) { + for (var o = self; o && o !== baseProto; o = Object.getPrototypeOf(o)) { + var d = Object.getOwnPropertyDescriptor(o, key); + if (d) return d; + } + return null; + } + + // Native code calling an overridden member (or an implemented interface member) of `self`. + function _dispatchToJs(self, baseProto, typeName, member, args) { + var accessor = /^(get|set)[_:](.+)$/.exec(member); + if (accessor) { + var ad = _jsMember(self, accessor[2], baseProto); + if (ad) { + if (accessor[1] === 'get') { + if (typeof ad.get === 'function') return ad.get.call(self); + if ('value' in ad && typeof ad.value !== 'function') return ad.value; + } else if (typeof ad.set === 'function') { + ad.set.call(self, args[0]); + return undefined; + } else if ('value' in ad && ad.writable) { + self[accessor[2]] = args[0]; + return undefined; + } + } + } + var md = _jsMember(self, member, baseProto); + if (md && typeof md.value === 'function') return md.value.apply(self, args); + throw new Error((self.constructor && self.constructor.name || typeName) + ' does not implement ' + member); + } + + function _constructSubclass(path, args, proto) { + if (typeof globalThis.__nsDotNetCreateJsSubclass !== 'function') + throw new Error('Extending .NET types is not available in this runtime'); + var baseProto = _typePrototype(path); + var info = _subclassInfo(proto, baseProto); + var self = Object.create(proto); + // A virtual the base constructor calls reaches `self` before it has its handle. + var entry = { proto: proto, baseProto: baseProto, typeName: path, overrides: info.overrides, winrt: false, ref: self }; + var raw = globalThis.__nsDotNetCreateJsSubclass('', path, info.interfaces, info.members, _makeDispatcher(entry), args.map(_unwrap)); + if (!raw || typeof raw.__handle !== 'number') throw new Error('Could not create an instance of a subclass of ' + path); + return _adopt(entry, self, raw); + } + + // `new SomeInterface({ ... })`: an object implementing the interface with the given members. + function _implementInterface(path, impl) { + var proto = Object.create(_typePrototype('System.Object')); + Object.defineProperties(proto, Object.getOwnPropertyDescriptors(impl)); + Object.defineProperty(proto, 'interfaces', { value: [path] }); + return _constructSubclass('System.Object', [], proto); + } + + // `this.super` inside a class made by extend(): the parent class's members bound to `self`. + function _superOf(self, Cls) { + var parent = Object.getPrototypeOf(Cls.prototype); + return new Proxy(Object.create(null), { + get: function (_, prop) { + var value = Reflect.get(parent, prop, self); + return typeof value === 'function' ? value.bind(self) : value; + }, + }); + } + + // Base.extend([name,] members): an ES2015 subclass of Base with the given members; `init`, when + // present, runs after construction with the constructor arguments. + function _extendClass(Base, nameOrMembers, maybeMembers) { + var hasName = typeof nameOrMembers === 'string'; + var members = (hasName ? maybeMembers : nameOrMembers) || {}; + var Extended = class extends Base { + constructor() { + super(...arguments); + if (typeof members.init === 'function') members.init.apply(this, arguments); + } + }; + var descriptors = Object.getOwnPropertyDescriptors(members); + delete descriptors.init; + if (descriptors.interfaces) { + Object.defineProperty(Extended.prototype, 'interfaces', { value: members.interfaces }); + delete descriptors.interfaces; + } + Object.defineProperties(Extended.prototype, descriptors); + Object.defineProperty(Extended.prototype, 'super', { + get: function () { return _superOf(this, Extended); }, + }); + if (hasName) Object.defineProperty(Extended, 'name', { value: nameOrMembers.split('.').pop() }); + return Extended; + } + + // `_super.call(this, ...)` / `_super.apply(this, args)` in TypeScript's ES5 output (what the + // @NativeClass transform emits): construct the subclass instance `thisArg` was created for. + function _es5SuperCall(path, thisArg, args) { + var proto = thisArg && Object.getPrototypeOf(thisArg); + if (!proto || !Object.prototype.isPrototypeOf.call(_typePrototype(path), proto)) + throw new TypeError('Class constructor ' + path + ' cannot be invoked without \'new\''); + return _constructSubclass(path, args, proto); + } + + function _hasInstance(path, value) { + if (value === null || (typeof value !== 'object' && typeof value !== 'function')) return false; + if (Object.prototype.isPrototypeOf.call(_typePrototype(path), value)) return true; + if (typeof value.__handle !== 'number') return false; + try { + return _invoke({ assembly: '', typeName: 'NativeScriptBridge.Bridge', method: 'IsInstanceOf', args: [{ __handle: value.__handle }, path] }) === true; + } catch (_) { + return false; + } + } + + // ── WinRT classes as JS base classes ──────────────────────────────────────── + // `class FixedPanel extends Microsoft.UI.Xaml.Controls.Panel { MeasureOverride(size) { ... } }`: + // the WinRT constructor hands `super(...)` here. The instance is a composed object created by + // the .NET bridge from the C#/WinRT projection of the class (the way a C# subclass is), so XAML + // calling an overridable member (MeasureOverride, ArrangeOverride, OnApplyTemplate, ...) lands in + // the JS override. The JS object is the ordinary WinRT wrapper of that object, with the subclass + // prototype spliced in front of the class's native members. + var _linkedWinRTPrototypes = new WeakSet(); + + // The WinRT class a JS class derives from: the nearest constructor with its own __typeName__. + function _winrtBaseOf(ctor) { + for (var c = ctor; c; c = Object.getPrototypeOf(c)) { + if (Object.prototype.hasOwnProperty.call(c, '__typeName__')) return c; + } + return null; + } + + // `super.X(...)` for a member a JS subclass of a WinRT class overrides: the base implementation, + // through the bridge (the native member would dispatch back into the override). + function _winrtBaseCall(handle, prop) { + return function () { + var args = Array.prototype.slice.call(arguments).map(_unwrap); + return _wrap(_invoke({ handle: handle, method: _baseCallPrefix + prop, args: args })); + }; + } + + // Puts a layer under the JS subclass prototypes that resolves the class's native members and + // sends `super.X()` for overridden members to the base implementation. On the classic engine the + // class's `prototype` is separate from its instances' native prototype, so the layer goes under the + // class's `prototype` once; on the napi engines they're the same object, so it goes under the + // subclass prototype that sits directly on it. + function _linkWinRTSubclassPrototype(base, nativeProto, proto) { + if (!base || !nativeProto) return; + var target = base.prototype; + if (target === nativeProto) { + target = proto; + while (target && Object.getPrototypeOf(target) !== nativeProto) target = Object.getPrototypeOf(target); + } + if (!target || _linkedWinRTPrototypes.has(target)) return; + _linkedWinRTPrototypes.add(target); + var layer = new Proxy(Object.create(nativeProto), { + get: function (_, prop, receiver) { + var handle = _ownHandle(receiver); + if (typeof prop !== 'string') return Reflect.get(nativeProto, prop, receiver); + if (handle >= 0) { + if (receiver.__nsOverrides && receiver.__nsOverrides.has(prop)) return _winrtBaseCall(handle, prop); + return Reflect.get(nativeProto, prop, receiver); + } + // Read off a prototype — TypeScript's ES5 `_super.prototype.X.call(this, ...)`: decide + // between the base implementation and the native member when it's called. + var native = Reflect.get(nativeProto, prop, receiver); + if (typeof native !== 'function') return native; + return function () { + var h = _ownHandle(this); + if (h >= 0 && this.__nsOverrides && this.__nsOverrides.has(prop)) + return _winrtBaseCall(h, prop).apply(this, arguments); + return native.apply(this, arguments); + }; + }, + has: function (_, prop) { return prop in nativeProto; }, + }); + Object.setPrototypeOf(target, layer); + } + + // napi engines: the class `prototype` is the native prototype itself, so TypeScript's ES5 + // `_super.prototype.X.call(this, ...)` reaches the native member directly. Wrap each native member a + // subclass overrides (once) so that, called on a JS subclass instance, it runs the base + // implementation instead of dispatching back into the override. + function _guardNativeMembers(nativeProto, overrides) { + overrides.forEach(function (name) { + for (var p = nativeProto; p; p = Object.getPrototypeOf(p)) { + var d = Object.getOwnPropertyDescriptor(p, name); + if (!d) continue; + if (typeof d.value === 'function' && !d.value.__nsGuarded && d.writable) { + var native = d.value; + var guarded = function () { + var h = _ownHandle(this); + if (h >= 0 && this.__nsOverrides && this.__nsOverrides.has(name)) + return _winrtBaseCall(h, name).apply(this, arguments); + return native.apply(this, arguments); + }; + Object.defineProperty(guarded, '__nsGuarded', { value: true }); + Object.defineProperty(p, name, { value: guarded, writable: true, configurable: true, enumerable: d.enumerable }); + } + return; + } + }); + } + + // Called by the WinRT class constructors for `super(...)` from a JS subclass (newTarget) or + // TypeScript's ES5 `_super.call(this, ...)` (es5This). Returns undefined when this isn't a subclass + // construction or the .NET bridge isn't available; the constructor then builds a plain instance. + globalThis.__nsConstructWinRTSubclass = function (typeName, newTarget, args, es5This) { + var proto; + var base; + if (newTarget) { + proto = newTarget.prototype; + base = _winrtBaseOf(Object.getPrototypeOf(newTarget)); + } else { + proto = es5This && Object.getPrototypeOf(es5This); + base = proto && proto.constructor ? _winrtBaseOf(Object.getPrototypeOf(proto.constructor)) : null; + if (!base || base.__typeName__ !== typeName || Object.prototype.hasOwnProperty.call(proto.constructor, '__typeName__')) + return undefined; + } + if (typeof globalThis.__nsDotNetCreateJsSubclass !== 'function' || typeof globalThis.__nsWrapWinRTPointer !== 'function') + return undefined; + var baseProto = base ? base.prototype : null; + var info = _subclassInfo(proto, baseProto); + var entry = { proto: proto, baseProto: baseProto, typeName: typeName, overrides: info.overrides, winrt: true, constructing: true }; + var raw = globalThis.__nsDotNetCreateJsSubclass('', typeName, info.interfaces, info.members, _makeDispatcher(entry), (args || []).map(_unwrap)); + entry.constructing = false; + if (!raw || raw.__native_ptr === undefined || raw.__native_ptr === null) + throw new Error('Could not create a WinRT object for a subclass of ' + typeName); + var self = globalThis.__nsWrapWinRTPointer(raw.__native_ptr, typeName); + var nativeProto = Object.getPrototypeOf(self); + _linkWinRTSubclassPrototype(base, nativeProto, proto); + if (base && base.prototype === nativeProto) _guardNativeMembers(nativeProto, info.overrides); + Object.setPrototypeOf(self, proto); + return _adopt(entry, self, raw); + }; + + globalThis.NSWinRT.extendClass = _extendClass; + // System.Diagnostics.Stopwatch.StartNew() → static method call // System.Environment.MachineName → static property get // new System.Text.StringBuilder(64) → constructor // sw.Stop() → instance method // sw.Elapsed → instance property function _makeNamespaceProxy(path) { + var cached = _nsProxyCache[path]; + if (cached) return cached; function _node() {} - return new Proxy(_node, { + var proxy = new Proxy(_node, { get: function (_, prop) { + if (prop === Symbol.hasInstance) return function (value) { return _hasInstance(path, value); }; if (typeof prop === 'symbol') return undefined; // Prevent string-coercion methods from descending into sub-proxies. // V8's console.log / JSON.stringify call toString/valueOf on unknown objects; @@ -3339,6 +3869,12 @@ const HELPER_SOURCE: &str = r#" // type name, producing a spurious "Type not found" bridge error. if (prop === 'toString' || prop === 'valueOf') return function() { return '[.NET ' + path + ']'; }; + var extras = _namespaceExtras[path]; + if (extras && Object.prototype.hasOwnProperty.call(extras, prop)) return extras[prop]; + if (prop === '__dotnetType__') return path; + if (prop === 'prototype') return _typePrototype(path); + // Not a WinRT class: TypeScript's __extends must take the standard path. + if (prop === '__nsWinRTClass__' || prop === 'then') return undefined; var assembly = _resolveAssembly(path); var info = _getTypeInfo(assembly, path); // Write-only static property — reading it is an error. @@ -3354,6 +3890,9 @@ const HELPER_SOURCE: &str = r#" return _wrap(_invoke({ assembly: assembly, typeName: path, method: prop, args: args })); }; } + if (prop === 'extend') return function (nameOrMembers, maybeMembers) { return _extendClass(this, nameOrMembers, maybeMembers); }; + if (prop === 'call') return function (thisArg) { return _es5SuperCall(path, thisArg, Array.prototype.slice.call(arguments, 1)); }; + if (prop === 'apply') return function (thisArg, args) { return _es5SuperCall(path, thisArg, args ? Array.prototype.slice.call(args) : []); }; // Namespace / sub-type: keep descending. return _makeNamespaceProxy(path + '.' + prop); }, @@ -3381,27 +3920,61 @@ const HELPER_SOURCE: &str = r#" var assembly = _resolveAssembly(typeName); return _wrap(_invoke({ assembly: assembly, typeName: typeName, method: method, args: args.map(_unwrap) })); }, - construct: function (_, args) { + construct: function (_, args, newTarget) { + // `super(...)` from a JS subclass. + if (newTarget && newTarget !== proxy) return _constructSubclass(path, args, newTarget.prototype); + if (args.length === 1 && args[0] && typeof args[0] === 'object' && typeof args[0].__handle !== 'number' + && _typeKind(path) === 'interface') + return _implementInterface(path, args[0]); var assembly = _resolveAssembly(path); return _wrap(_invoke({ assembly: assembly, typeName: path, method: '.ctor', args: args.map(_unwrap) })); }, }); + _nsProxyCache[path] = proxy; + return proxy; } - globalThis.System = _makeNamespaceProxy('System'); + // `System` stays the .NET namespace when app code assigns it: @nativescript/core sets + // `global.System = { import() }` (a SystemJS shim). Assigned members are kept and take + // precedence (`System.import(...)` keeps working); everything else is .NET. + (function () { + var systemProxy = _makeNamespaceProxy('System'); + Object.defineProperty(globalThis, 'System', { + configurable: true, + enumerable: true, + get: function () { return systemProxy; }, + set: function (value) { + if (value && (typeof value === 'object' || typeof value === 'function')) + Object.keys(value).forEach(function (k) { _namespaceExtras.System[k] = value[k]; }); + }, + }); + })(); globalThis.Microsoft = _makeNamespaceProxy('Microsoft'); globalThis.NativeScript = _makeNamespaceProxy('NativeScript'); + // Every other root namespace of the app's assemblies (C# sources compiled into the app, + // plugin and NuGet assemblies) is a lazy global too, so `new MyCompany.Native.Foo()` works + // with no registration step, the way Java packages and Objective-C classes are globals on + // Android and iOS. WinRT owns Windows/Microsoft/NativeScript; the rest are implementation + // namespaces of the toolchain that no app reaches for. + (function () { + var reserved = { Windows: 1, Microsoft: 1, NativeScript: 1, System: 1, NativeScriptBridge: 1, NSWinRTDynamicProxies: 1, + WinRT: 1, ABI: 1, XamlGeneratedNamespace: 1, FxResources: 1, Internal: 1, Interop: 1, MS: 1, Mono: 1 }; + for (var ns in _namespaceAssemblyMap) { + if (ns.indexOf('.') !== -1 || reserved[ns] === 1 || !/^[A-Za-z_$][\w$]*$/.test(ns)) continue; + globalThis.NSWinRT.dotnet.registerNamespace(ns); + } + })(); + // Creates a typed .NET BCL delegate (not a WinRT COM delegate). // Use this when the API expects a managed System.Action, // System.EventHandler, etc. rather than a WinRT delegate interface. // For WinRT delegate types use NSWinRT.asDelegate instead. if (typeof globalThis.__nsDotNetAwaitTask === 'function') { globalThis.NSWinRT.dotnet.taskToPromise = function (obj) { - var h = obj && typeof obj.__handle === 'number' ? obj.__handle - : typeof obj === 'number' ? obj : -1; + var h = obj && typeof obj.__handle === 'number' && obj.__isTask === true ? obj.__handle : -1; if (h < 0) return Promise.resolve(obj); return new Promise(function (resolve, reject) { - globalThis.__nsDotNetAwaitTask(h, resolve, reject); + globalThis.__nsDotNetAwaitTask(h, function (value) { resolve(_wrap(value)); }, reject); }); }; } @@ -3914,6 +4487,7 @@ pub(crate) fn handle_dotnet_invoke_binary( } } + release_collected_js_callbacks(); match crate::dotnet::call_dotnet_binary(&req) { Ok(response) => match bin_read_response(scope, &response) { Ok(v8_val) => retval.set(v8_val), @@ -3937,6 +4511,18 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( ) { let isolate_ptr = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()); if isolate_ptr.is_null() { + // A managed delegate, event, Task continuation or overridden member running on a thread + // other than the JS thread: hand the call to the JS (UI) thread and wait for it, so the + // callback runs and its result reaches the managed caller (see `run_on_ui_thread_sync`). + if !crate::ui_dispatcher::is_ui_thread() { + let (args, resp, resp_len) = (args_ptr as usize, _resp_ptr as usize, _resp_len as usize); + let delivered = crate::ui_dispatcher::run_on_ui_thread_sync(move || { + invoke_dotnet_js_callback(callback_id, args as *const u8, args_len, resp as *mut *mut u8, resp_len as *mut i32) + }); + if delivered.is_none() { + write_callback_response(&[0x0F, 0, 0, 0, 0][..], _resp_ptr, _resp_len); + } + } return; } @@ -3950,6 +4536,7 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( let scope = &mut v8::ContextScope::new(scope, context); v8::tc_scope!(tc, scope); + release_collected_js_callbacks(); let func_global = crate::DOTNET_JS_CALLBACKS.with(|m| m.borrow().get(&callback_id).cloned()); let Some(func_global) = func_global else { return; @@ -3965,61 +4552,36 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( let js_args = parse_dotnet_callback_args(tc, args_slice); let result_val = func.call(tc, recv, &js_args); - if tc.has_caught() { - if let Some(ex) = tc.exception() { - let msg = ex.to_rust_string_lossy(tc); - crate::store_last_js_error(msg); - } - tc.reset(); - } // Serialize the returned value (if any) into the binary response format // and return it to managed via resp_ptr/resp_len. Managed will call // Bridge.Free (Marshal.FreeHGlobal) to release this memory, so allocate // with the Windows LocalAlloc/LMEM_FIXED allocator for compatibility. let mut out_buf: Vec = Vec::new(); - match result_val { - Some(rv) => { - // Convert the returned V8 value into a single tagged binary value. - bin_write_v8_value(&mut out_buf, tc, rv); - } - None => { - // No return value: null tag. - out_buf.push(0x00u8); - } - } - - if out_buf.is_empty() { - // No response: leave resp pointers null / zero. - if !_resp_ptr.is_null() { - *_resp_ptr = std::ptr::null_mut(); - } - if !_resp_len.is_null() { - *_resp_len = 0; - } + if tc.has_caught() { + let msg = tc + .exception() + .map(|ex| ex.to_rust_string_lossy(tc)) + .unwrap_or_else(|| "JavaScript exception".to_string()); + crate::store_last_js_error(msg.clone()); + tc.reset(); + // 0x0F: the callback threw. A managed caller that expects a result gets a JsException; + // a void delegate/event ignores it (the error is reported like any uncaught JS error). + out_buf.push(0x0F); + bin_write_str32(&mut out_buf, msg.as_bytes()); } else { - // Allocate memory using LocalAlloc so managed Marshal.FreeHGlobal can free it. - let size = out_buf.len(); - unsafe { - let p = LocalAlloc(LMEM_FIXED, size); - if p.is_null() { - if !_resp_ptr.is_null() { - *_resp_ptr = std::ptr::null_mut(); - } - if !_resp_len.is_null() { - *_resp_len = 0; - } - } else { - let dest = p as *mut u8; - std::ptr::copy_nonoverlapping(out_buf.as_ptr(), dest, size); - if !_resp_ptr.is_null() { - *_resp_ptr = dest; - } - if !_resp_len.is_null() { - *_resp_len = size as i32; - } + match result_val { + Some(rv) => { + // Convert the returned V8 value into a single tagged binary value. + bin_write_v8_value(&mut out_buf, tc, rv); + } + None => { + // No return value: null tag. + out_buf.push(0x00u8); } } } + + write_callback_response(&out_buf, _resp_ptr, _resp_len); // If this callback was registered as a one-shot, remove it now to avoid leaks. crate::DOTNET_ONESHOT_JS_CALLBACKS.with(|s| { let mut set = s.borrow_mut(); @@ -4039,6 +4601,48 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( } } +/// Hands a callback's binary response to the managed caller through `resp_ptr`/`resp_len`. The +/// buffer comes from LocalAlloc because managed code frees it with Marshal.FreeHGlobal. +unsafe fn write_callback_response(bytes: &[u8], resp_ptr: *mut *mut u8, resp_len: *mut i32) { + let mut dest: *mut u8 = std::ptr::null_mut(); + if !bytes.is_empty() { + let p = LocalAlloc(LMEM_FIXED, bytes.len()); + if !p.is_null() { + dest = p as *mut u8; + std::ptr::copy_nonoverlapping(bytes.as_ptr(), dest, bytes.len()); + } + } + if !resp_ptr.is_null() { + *resp_ptr = dest; + } + if !resp_len.is_null() { + *resp_len = if dest.is_null() { 0 } else { bytes.len() as i32 }; + } +} + +/// Drops the JS functions whose managed delegates the .NET GC has collected. +pub(crate) fn release_collected_js_callbacks() { + let released = crate::dotnet::take_released_js_callbacks(); + if released.is_empty() { + return; + } + crate::DOTNET_JS_CALLBACKS.with(|m| { + let mut m = m.borrow_mut(); + for id in released { + m.remove(&id); + } + }); +} + +/// Registers `func` as a callback the bridge can invoke and returns its id. +pub(crate) fn register_dotnet_js_callback(scope: &mut v8::PinScope<'_, '_>, func: v8::Local) -> i32 { + let cb_id = crate::DOTNET_NEXT_CB_ID.fetch_add(1, std::sync::atomic::Ordering::Relaxed); + crate::DOTNET_JS_CALLBACKS.with(|m| { + m.borrow_mut().insert(cb_id, v8::Global::new(scope, func)); + }); + cb_id +} + fn parse_dotnet_callback_args<'s>( scope: &mut v8::PinScope<'s, '_>, bytes: &[u8], @@ -4197,7 +4801,18 @@ pub(crate) fn handle_dotnet_create_js_subclass( bin_write_str16(&mut req, name.as_bytes()); } req.extend_from_slice(&cb_id.to_le_bytes()); + // Constructor arguments (optional 6th argument, an array): forwarded to the matching base + // constructor, as `super(...)` arguments are on Android/iOS. + if let Ok(ctor_args) = v8::Local::::try_from(args.get(5)) { + let count = ctor_args.length().min(255); + req.push(count as u8); + for i in 0..count { + let value = ctor_args.get_index(scope, i).unwrap_or_else(|| v8::undefined(scope).into()); + bin_write_v8_arg(&mut req, scope, value); + } + } + release_collected_js_callbacks(); match crate::dotnet::call_dotnet_binary(&req) { Ok(response) => match bin_read_response(scope, &response) { Ok(v) => retval.set(v), @@ -4309,6 +4924,24 @@ fn bin_write_v8_arg( return; } + // A JS function where a .NET method expects a delegate (Func<>, Action<>, EventHandler, + // ...): sent as a callback id the bridge wraps in a delegate of the parameter's type, the way a + // JS function passed for a Java interface or an Objective-C block becomes one on Android/iOS. + // Constructors of JS-extended .NET classes and namespace proxies carry a handle and are not + // callbacks. + if let Ok(func) = v8::Local::::try_from(arg) { + let has_handle = v8::String::new(scope, "__handle") + .and_then(|k| func.get(scope, k.into())) + .map(|v| v.is_number()) + .unwrap_or(false); + if !has_handle { + let cb_id = register_dotnet_js_callback(scope, func); + buf.push(0x0C); + buf.extend_from_slice(&cb_id.to_le_bytes()); + return; + } + } + if arg.is_string() { if let Some(s) = arg.to_string(scope) { let bytes = s.to_rust_string_lossy(scope).into_bytes(); @@ -4360,6 +4993,12 @@ fn bin_write_v8_arg( } } + if let Some(json) = plain_object_json(scope, arg) { + buf.push(0x0D); + bin_write_str32(buf, json.as_bytes()); + return; + } + // Fallback: stringify object if let Some(sv) = arg.to_string(scope) { let bytes = sv.to_rust_string_lossy(scope).into_bytes(); @@ -4374,6 +5013,21 @@ fn bin_write_v8_arg( } +/// A plain JS object (`{ Width: 120, Height: 40 }`) as JSON, for a .NET struct/record parameter or +/// return value (tag 0x0D): the bridge deserializes it into the expected type. Class instances, +/// arrays and functions are not plain objects. +fn plain_object_json(scope: &mut v8::PinScope<'_, '_>, value: v8::Local) -> Option { + if !value.is_object() || value.is_array() || value.is_function() || value.is_proxy() { + return None; + } + let obj = value.to_object(scope)?; + if obj.get_constructor_name().to_rust_string_lossy(scope) != "Object" { + return None; + } + let json = v8::json::stringify(scope, value)?; + Some(json.to_rust_string_lossy(scope)) +} + fn bin_write_v8_value( buf: &mut Vec, scope: &mut v8::PinScope<'_, '_>, @@ -4459,6 +5113,11 @@ fn bin_write_v8_value( } } } + if let Some(json) = plain_object_json(scope, arg) { + buf.push(0x0D); + bin_write_str32(buf, &json.into_bytes()); + return; + } // fallback: stringify if let Some(sv) = arg.to_string(scope) { let bytes = sv.to_rust_string_lossy(scope).into_bytes(); @@ -4522,6 +5181,17 @@ fn bin_read_value<'s>( .unwrap_or_else(|| v8::null(scope).into())) } + 0x0D => { + // struct/record as JSON: u32 len + utf8 -> plain object + let len = u32::from_le_bytes(bytes[*pos..*pos + 4].try_into().map_err(|_| "json len")?) + as usize; + *pos += 4; + let text = std::str::from_utf8(&bytes[*pos..*pos + len]).map_err(|_| "utf8")?; + *pos += len; + let json = v8::String::new(scope, text).ok_or("v8 str")?; + Ok(v8::json::parse(scope, json).unwrap_or_else(|| v8::null(scope).into())) + } + 0x06 | 0x0C => { // handle → JS object {__handle, __type} ; 0x0C adds __isTask:true let id = i32::from_le_bytes(bytes[*pos..*pos + 4].try_into().map_err(|_| "handle id")?); @@ -5062,6 +5732,7 @@ pub(crate) fn init_async_helpers( handle_dotnet_create_js_subclass ); register!("__nsDotNetAwaitTask", handle_dotnet_await_task); + register!("__nsWrapWinRTPointer", crate::handle_wrap_winrt_pointer); register!("__nsRunOnUIThread", handle_run_on_ui_thread); register!("__nsWin32Call", handle_win32_call); register!("__nsWin32CallRaw", handle_win32_call_raw); diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 9ee0eb9..922d91c 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -285,18 +285,31 @@ pub fn pump_dispatcher() { if isolate_ptr.is_null() { return; } + { + let isolate: &mut v8::Isolate = unsafe { &mut *isolate_ptr }; + v8::scope!(scope, isolate); + let ctx = match scope.get_slot::>() { + Some(g) => g.clone(), + None => return, + }; + let ctx = v8::Local::new(scope, &ctx); + let scope = &mut v8::ContextScope::new(scope, ctx); + v8::tc_scope!(tc, scope); + tc.perform_microtask_checkpoint(); + } + // With the explicit microtasks policy V8 leaves both of these to the embedder: WeakRef targets + // stay alive until the kept-objects set is cleared, and FinalizationRegistry callbacks (which + // release the .NET objects behind collected JS proxies) run as platform tasks. let isolate: &mut v8::Isolate = unsafe { &mut *isolate_ptr }; - v8::scope!(scope, isolate); - let ctx = match scope.get_slot::>() { - Some(g) => g.clone(), - None => return, - }; - let ctx = v8::Local::new(scope, &ctx); - let scope = &mut v8::ContextScope::new(scope, ctx); - v8::tc_scope!(tc, scope); - tc.perform_microtask_checkpoint(); + isolate.clear_kept_objects(); + if let Some(platform) = V8_PLATFORM.get() { + while v8::Platform::pump_message_loop(platform, isolate, false) {} + } } +#[cfg(feature = "classic")] +static V8_PLATFORM: OnceLock> = OnceLock::new(); + /// Move the post-callback microtask checkpoint out of the current native frame /// when that frame may be a re-entrancy-sensitive XAML callout. /// @@ -1285,6 +1298,33 @@ fn symbol_has_instance_callback( return; }; + // `x instanceof Sub` where `class Sub extends SomeWinRTClass`: Sub inherits this function (a + // WinRT constructor owns its @@hasInstance), but the question is about Sub, so answer it the + // ordinary way (Sub.prototype in x's chain). + let receiver = args.this(); + if let Ok(receiver_fn) = v8::Local::::try_from(Local::::from(receiver)) { + let has_instance = v8::Symbol::get_has_instance(scope); + let native_ctor = receiver_fn.has_own_property(scope, has_instance.into()).unwrap_or(true); + if !native_ctor { + let proto_key = v8::String::new(scope, "prototype").unwrap(); + let target = receiver_fn.get(scope, proto_key.into()); + let mut current = obj.get_prototype(scope); + let mut found = false; + while let (Some(t), Some(c)) = (target, current) { + if c.is_null() { + break; + } + if c.strict_equals(t) { + found = true; + break; + } + current = c.to_object(scope).and_then(|o| o.get_prototype(scope)); + } + retval.set_bool(found); + return; + } + } + let data_ext = unsafe { args.data().cast::() }; let data_ptr = data_ext.value() as *const HasInstanceData; let data = unsafe { &*data_ptr }; @@ -1304,7 +1344,10 @@ fn symbol_has_instance_callback( } let Some(iid) = data.iid else { - retval.set_bool(false); + // A class: true when the instance's class derives from it + // (a StackPanel is a Panel, a FrameworkElement and a UIElement). + let own_class = dec.read().full_name().to_string(); + retval.set_bool(class_derives_from(&own_class, &data.full_name)); return; }; let Some(instance) = dec.instance.clone() else { @@ -1835,7 +1878,9 @@ fn resolve_file_specifier(specifier: &str, referrer_path: Option<&str>) -> Strin // A packed (virtual, no-plaintext-on-disk) referrer never satisfies `.is_file()`, so also // check the sealed bundle's table: otherwise a relative import from a bundle-only module // would wrongly treat the referrer itself as the base directory instead of its parent. - let base = if parent.is_file() || crate::source_protect::contains(&parent.to_string_lossy()) + let base = if parent.is_file() + || crate::source_protect::contains(&parent.to_string_lossy()) + || (!parent.exists() && parent.extension().is_some()) { parent.parent().map(Path::to_path_buf).unwrap_or(parent) } else { @@ -5799,6 +5844,128 @@ unsafe fn raw_result_to_local<'s>( } } +/// A static WinRT event exposed on its class constructor (see `create_ns_ctor_object`). +#[cfg(feature = "classic")] +struct StaticEventData { + class_name: String, + name: String, + add: MethodDeclaration, + remove: MethodDeclaration, +} + +/// Whether WinRT class `class_name` is `ancestor` or derives from it, following the metadata +/// base-class chain. +#[cfg(feature = "classic")] +fn class_derives_from(class_name: &str, ancestor: &str) -> bool { + let mut current = class_name.to_string(); + for _ in 0..64 { + if current == ancestor { + return true; + } + let Some(decl) = MetadataReader::find_by_name(¤t) else { + return false; + }; + let lock = decl.read(); + let Some(clazz) = lock.as_any().downcast_ref::() else { + return false; + }; + let base = clazz.base_full_name(); + if base.is_empty() || base == "System.Object" || base == current { + return false; + } + current = base.to_string(); + } + false +} + +/// `__nsWrapWinRTPointer(ptr, typeName)`: the WinRT wrapper for a COM object the runtime didn't +/// create itself — the composed instance behind a JS subclass of a WinRT class, created by the +/// .NET bridge. Takes its own reference; `ptr` is a BigInt IInspectable/IUnknown pointer. +#[cfg(feature = "classic")] +pub(crate) fn handle_wrap_winrt_pointer( + scope: &mut v8::PinScope<'_, '_>, + args: v8::FunctionCallbackArguments, + mut retval: v8::ReturnValue, +) { + let ptr = match v8::Local::::try_from(args.get(0)) { + Ok(b) => b.u64_value().0 as usize, + Err(_) => match v8::Local::::try_from(args.get(0)) { + Ok(n) => n.value() as usize, + Err(_) => 0, + }, + }; + let type_name = args.get(1).to_rust_string_lossy(scope); + if ptr == 0 { + throw_js_error(scope, "__nsWrapWinRTPointer: null pointer"); + return; + } + let Some(declaration) = MetadataReader::find_by_name(&type_name) else { + throw_js_error(scope, &format!("__nsWrapWinRTPointer: unknown WinRT type {type_name}")); + return; + }; + let instance: IUnknown = unsafe { + let borrowed = std::mem::ManuallyDrop::new(IUnknown::from_raw(ptr as *mut c_void)); + (*borrowed).clone() + }; + let short_name = type_name.rsplit('.').next().unwrap_or(&type_name).to_string(); + let wrapper = create_ns_ctor_instance_object(&short_name, None, None, declaration, Some(instance), scope); + retval.set(wrapper); +} + +/// `super(...)` from a JS subclass of a WinRT class (or TypeScript's ES5 `_super.call(this, ...)`) +/// reaching the WinRT constructor. Returns true when the bootstrap constructed the subclass +/// instance (set as the return value); false when this is an ordinary construction. +#[cfg(feature = "classic")] +fn construct_winrt_subclass( + scope: &mut v8::PinScope<'_, '_>, + full_name: &str, + args: &v8::FunctionCallbackArguments, + retval: &mut v8::ReturnValue, +) -> bool { + let new_target = args.new_target(); + let type_key = v8::String::new(scope, "__typeName__").unwrap(); + let (new_target_arg, this_arg): (Local, Local) = if new_target.is_function() { + let Some(nt) = new_target.to_object(scope) else { return false }; + // `new SomeWinRTClass()` itself: the constructor has its own __typeName__. + if nt.has_own_property(scope, type_key.into()).unwrap_or(true) { + return false; + } + (new_target, v8::undefined(scope).into()) + } else { + // Called without `new`: only an ES5 subclass constructor does that, passing its `this`. + let this: Local = args.this().into(); + if !this.is_object() { + return false; + } + (v8::null(scope).into(), this) + }; + + let global = scope.get_current_context().global(scope); + let helper_key = v8::String::new(scope, "__nsConstructWinRTSubclass").unwrap(); + let Some(helper) = global + .get(scope, helper_key.into()) + .and_then(|v| v8::Local::::try_from(v).ok()) + else { + return false; + }; + let ctor_args = v8::Array::new(scope, args.length()); + for i in 0..args.length() { + ctor_args.set_index(scope, i as u32, args.get(i)); + } + let name = v8::String::new(scope, full_name).unwrap(); + let call_args = [name.into(), new_target_arg, ctor_args.into(), this_arg]; + let undefined = v8::undefined(scope).into(); + match helper.call(scope, undefined, &call_args) { + Some(result) if result.is_object() => { + retval.set(result); + true + } + // undefined: not a subclass construction after all; an exception propagates as is. + Some(_) => false, + None => true, + } +} + #[cfg(feature = "classic")] fn create_ns_ctor_object<'a>( name: &str, @@ -5877,6 +6044,11 @@ fn create_ns_ctor_object<'a>( parent = dec.parent.clone(); } drop(lock); + // `class X extends ThisClass`: X's instances are composed objects whose overridable + // members (MeasureOverride, OnApplyTemplate, ...) call back into X. + if !is_sealed && construct_winrt_subclass(scope, &full_name, &args, &mut retval) { + return; + } // The constructor's own declaration is the class: no name lookup per `new`. let class_declaration = Arc::clone(&dec.inner); @@ -6704,6 +6876,52 @@ fn create_ns_ctor_object<'a>( ); } + // Static events (CompositionTarget.Rendering, ...) use the same assignment syntax as + // instance events: `Class.Event = handler` subscribes (replacing the previous handler), + // `Class.Event = null` unsubscribes, and reading returns the current handler. They're + // added and removed through the class's statics interface on its activation factory. + for event in clazz.events().iter().filter(|e| e.is_static()) { + if !added_names.insert(event.name().to_string()) { + continue; + } + let Some(event_name) = v8::String::new(scope, event.name()) else { + continue; + }; + let data = Box::into_raw(Box::new(StaticEventData { + class_name: clazz.full_name().to_string(), + name: event.name().to_string(), + add: event.add_method().clone(), + remove: event.remove_method().clone(), + })); + let data = v8::External::new(scope, data as _); + let getter = v8::FunctionTemplate::builder( + |scope: &mut v8::PinScope<'_, '_>, args: v8::FunctionCallbackArguments, mut retval: v8::ReturnValue| { + let data = unsafe { &*(args.data().cast::().value() as *const StaticEventData) }; + let factory = class_activation_factory(&data.class_name).ok(); + retval.set(crate::ns_proxy::read_winrt_event(scope, factory.as_ref(), &data.name)); + }, + ) + .data(data.into()) + .build(scope); + let setter = v8::FunctionTemplate::builder( + |scope: &mut v8::PinScope<'_, '_>, args: v8::FunctionCallbackArguments, _retval: v8::ReturnValue| { + let data = unsafe { &*(args.data().cast::().value() as *const StaticEventData) }; + match class_activation_factory(&data.class_name) { + Ok(factory) => { + crate::ns_proxy::wire_winrt_event(scope, &data.name, Some(factory), &data.add, &data.remove, args.get(0)); + } + Err(e) => throw_js_error( + scope, + &format!("Failed to subscribe to {}.{}: {}", data.class_name, data.name, e.message()), + ), + } + }, + ) + .data(data.into()) + .build(scope); + tmpl.set_accessor_property(event_name.into(), Some(getter), Some(setter), v8::PropertyAttribute::DONT_DELETE); + } + attach_has_instance_to_template(scope, tmpl, None, &clazz.full_name().to_string()); } @@ -7791,6 +8009,9 @@ pub(crate) struct JsDelegateData { /// For a delegate whose Invoke the shared vtable can't implement (see [`delegate_invoke`]): /// the typed Invoke and the delegate's own vtable, which points at it. typed: Option<(delegate_invoke::TypedInvoke, Box)>, + /// The isolate `js_func` belongs to: the UI thread's, or null for a delegate created where no + /// isolate is registered (a worker), which can't be handed to the UI thread. + owner_isolate: *mut v8::Isolate, } /// Wraps `js_func` as a COM delegate implementing `signature`; returns the IUnknown-compatible @@ -7815,7 +8036,8 @@ pub(crate) fn new_js_delegate(js_func: v8::Global, guid: GUID, sig Some((_, vtable)) => &**vtable, None => &JS_DELEGATE_VTBL, }; - let data = Box::new(JsDelegateData { js_func, signature, typed }); + let owner_isolate = DELEGATE_ISOLATE_PTR.with(|c| c.get()); + let data = Box::new(JsDelegateData { js_func, signature, typed, owner_isolate }); let delegate = Box::new(JsDelegate { vtable, ref_count: AtomicU32::new(1), @@ -7867,7 +8089,17 @@ unsafe extern "system" fn js_delegate_release(this: *mut JsDelegate) -> u32 { if prev == 1 { std::sync::atomic::fence(AtomicOrdering::Acquire); let b = Box::from_raw(this); - drop(Box::from_raw(b.data)); + let data = Box::from_raw(b.data); + // The function handle belongs to the UI thread's isolate: a final release on a background + // thread (the component that invoked the delegate there) frees it on the UI thread. + if !data.owner_isolate.is_null() && !ui_dispatcher::is_ui_thread() && ui_dispatcher::is_initialized() { + struct SendData(Box); + unsafe impl Send for SendData {} + let data = SendData(data); + ui_dispatcher::post_to_ui_thread(move || drop(data)); + } else { + drop(data); + } // b (JsDelegate) dropped here } prev - 1 @@ -7940,10 +8172,40 @@ fn js_delegate_invoke_inner( &*data_ptr }; let args = args(&data.signature); + js_delegate_invoke_with_args(this, data, args, result_slot) +} +#[cfg(feature = "classic")] +fn js_delegate_invoke_with_args( + this: *mut JsDelegate, + data: &JsDelegateData, + args: Vec, + result_slot: *mut c_void, +) -> HRESULT { let isolate_ptr = DELEGATE_ISOLATE_PTR.with(|c| c.get()); + if !isolate_ptr.is_null() && isolate_ptr != data.owner_isolate { + // Never run a function against an isolate it doesn't belong to. + return HRESULT(0x8001010Eu32 as i32); // RPC_E_WRONG_THREAD + } if isolate_ptr.is_null() { - return HRESULT(0x80004005u32 as i32); + // Invoked directly on a background thread (a component that calls its handlers without + // marshaling them back to the registering apartment): run the JS on the JS (UI) thread + // and wait, so the call is delivered and its result written before Invoke returns. The + // arguments are borrowed for the duration of Invoke, which is exactly how long they're used. + // Only the UI thread's functions can go there; a worker's stay undeliverable. + if ui_dispatcher::is_ui_thread() || data.owner_isolate.is_null() { + return HRESULT(0x80004005u32 as i32); + } + struct SendPtr(*mut JsDelegate, *mut c_void); + unsafe impl Send for SendPtr {} + let ptrs = SendPtr(this, result_slot); + return ui_dispatcher::run_on_ui_thread_sync(move || { + let ptrs = ptrs; + // SAFETY: the caller holds a reference on the delegate for the duration of Invoke. + let data = unsafe { &*(*ptrs.0).data }; + js_delegate_invoke_with_args(ptrs.0, data, args, ptrs.1) + }) + .unwrap_or(HRESULT(0x8001010Eu32 as i32)); // RPC_E_WRONG_THREAD: no JS thread to run on } // Re-entrancy guard (see DELEGATE_DEPTH). Mutating XAML inside a delegate (e.g. setting @@ -8596,6 +8858,7 @@ impl Runtime { // can trigger a full GC sweep (useful for debugging and test harnesses). v8::V8::set_flags_from_string("--expose-gc"); let platform = v8::new_default_platform(0, false).make_shared(); + let _ = V8_PLATFORM.set(platform.clone()); v8::V8::initialize_platform(platform); v8::V8::initialize(); }); diff --git a/runtime/src/napi_engine/delegate.rs b/runtime/src/napi_engine/delegate.rs index bb999d1..18efa1a 100644 --- a/runtime/src/napi_engine/delegate.rs +++ b/runtime/src/napi_engine/delegate.rs @@ -54,6 +54,9 @@ pub(crate) struct NapiDelegateData { /// For a delegate whose Invoke the shared vtable can't implement (see [`delegate_invoke`]): /// the typed Invoke and the delegate's own vtable, which points at it. typed: Option<(delegate_invoke::TypedInvoke, Box)>, + /// The JS thread the function belongs to (where it was created). An invocation on another + /// thread is handed to it when it is the UI thread (see `napi_delegate_invoke_args`). + owner_thread: std::thread::ThreadId, } impl Drop for NapiDelegateData { @@ -89,6 +92,12 @@ pub fn make_napi_delegate( make_napi_delegate_typed(env, func, guid, signature, Vec::new()) } +/// [`make_napi_delegate`] for a delegate whose Invoke returns nothing and takes `params`: for +/// embedders and tests outside this crate, which can't name [`DelegateSignature`]. +pub fn make_napi_void_delegate(env: &Env, func: &JsFunction, guid: GUID, params: Vec) -> Option<*mut c_void> { + make_napi_delegate(env, func, guid, DelegateSignature::new(params, DelegateReturn::Void)) +} + /// The sealed-class declarations of a delegate's Invoke parameters, aligned with the /// `param_types` that [`crate::delegate_info_from_type_sig`] reports for `iid_name`. Only /// pointer parameters whose declared type is a sealed runtime class get an entry; every other @@ -150,6 +159,7 @@ pub(crate) fn make_napi_delegate_typed( signature, param_classes, typed, + owner_thread: std::thread::current().id(), }); let delegate = Box::new(NapiDelegate { vtable, @@ -205,7 +215,17 @@ unsafe extern "system" fn napi_delegate_release(this: *mut NapiDelegate) -> u32 if prev == 1 { std::sync::atomic::fence(Ordering::Acquire); let b = Box::from_raw(this); - drop(Box::from_raw(b.data)); + let data = Box::from_raw(b.data); + // Deleting the function reference is a napi call: a final release on a background thread + // (the component that invoked the delegate there) does it on the JS thread. + if std::thread::current().id() != data.owner_thread && crate::ui_dispatcher::is_ui_thread_id(data.owner_thread) { + struct SendData(Box); + unsafe impl Send for SendData {} + let data = SendData(data); + crate::ui_dispatcher::post_to_ui_thread(move || drop(data)); + } else { + drop(data); + } } prev - 1 } @@ -274,6 +294,38 @@ fn napi_delegate_invoke_inner( } &*data_ptr }; + let args = args(&data.signature); + napi_delegate_invoke_args(this, data, args, result_slot) +} + +fn napi_delegate_invoke_args( + this: *mut NapiDelegate, + data: &NapiDelegateData, + args: Vec, + result_slot: *mut c_void, +) -> HRESULT { + const E_FAIL: HRESULT = HRESULT(0x80004005u32 as i32); + const RPC_E_WRONG_THREAD: HRESULT = HRESULT(0x8001010Eu32 as i32); + if std::thread::current().id() != data.owner_thread { + // Invoked on a background thread (a component that calls its handlers without marshaling + // them back to the registering apartment): napi may only be used on the JS thread, so run + // the call there and wait for it — the arguments stay valid and the result is written + // before Invoke returns (see `ui_dispatcher::run_on_ui_thread_sync`). Only the UI thread + // can be handed work; any other JS thread's functions stay undeliverable. + if !crate::ui_dispatcher::is_ui_thread_id(data.owner_thread) { + return RPC_E_WRONG_THREAD; + } + struct SendPtr(*mut NapiDelegate, *mut c_void); + unsafe impl Send for SendPtr {} + let ptrs = SendPtr(this, result_slot); + return crate::ui_dispatcher::run_on_ui_thread_sync(move || { + let ptrs = ptrs; + // SAFETY: the caller holds a reference on the delegate for the duration of Invoke. + let data = unsafe { &*(*ptrs.0).data }; + napi_delegate_invoke_args(ptrs.0, data, args, ptrs.1) + }) + .unwrap_or(RPC_E_WRONG_THREAD); + } let env = data.env; if env.is_null() { return E_FAIL; @@ -294,7 +346,6 @@ fn napi_delegate_invoke_inner( return E_FAIL; } - let args = args(&data.signature); let mut js_args: Vec = Vec::with_capacity(args.len()); for (i, arg) in args.iter().enumerate() { let val = match *arg { diff --git a/runtime/src/napi_engine/dotnet.rs b/runtime/src/napi_engine/dotnet.rs index e7f1184..f06390d 100644 --- a/runtime/src/napi_engine/dotnet.rs +++ b/runtime/src/napi_engine/dotnet.rs @@ -9,16 +9,12 @@ //! mirrored verbatim (native names match exactly, so the JS needed no changes) into //! [`DOTNET_HELPERS_JS`]. Keep the two JS copies in sync. //! -//! Includes `__nsDotNetCreateJsSubclass` / `NSWinRT.proxy.createManagedSubclass` and the JS-side -//! managed-subclass system it belongs to (`makeManagedConstructor`, `__extends_winrt`, -//! `CSharpProxy`, `Interfaces`, proxy `emit`/`compile`/`register`): this lets JS both extend a C# -//! class (`Object.extend`/`Function.prototype.extend`/TS `extends`) and implement a WinRT -//! interface, the same as the classic engine, via `Bridge.Proxy.cs`'s `System.Reflection.Emit` -//! dynamic-subclass path (or a build-time `sbg`-generated static proxy when one exists: both -//! funnel through the same `CreateJsSubclass`, unaffected by which JS engine called it). The -//! `emit`/`compile`/`register` trio is the separate, still-dead ahead-of-time pipeline -//! (`hostCanLoadAssemblies: false`: compiles but its output is never loaded), ported for JS -//! API-surface parity only, not because it works. +//! Includes `__nsDotNetCreateJsSubclass` and `__nsWrapWinRTPointer`, which back JS subclasses of +//! .NET and WinRT classes (`class X extends Y`, `Y.extend(...)`, `new Interface({...})`; see the +//! "JS classes" parts of [`DOTNET_HELPERS_JS`]): `Bridge.Proxy.cs` emits a managed subclass at +//! runtime whose overridden members call back into the JS object. The older `NSWinRT.proxy` +//! surface (`createManagedSubclass`, `emit`/`compile`/`register`) is kept for API parity; its +//! ahead-of-time pipeline compiles but its output is never loaded. //! //! ## Binary wire protocol //! @@ -103,6 +99,69 @@ unsafe fn addref_native_ptr(ptr: u64) { ((*vtable).AddRef)(unknown.as_raw()); } +/// Pins `func` as a callback the bridge can invoke; returns its id. +fn pin_js_callback(env: &Env, func: sys::napi_value) -> Option { + let mut func_ref: sys::napi_ref = std::ptr::null_mut(); + let status = unsafe { sys::napi_create_reference(env.raw(), func, 1, &mut func_ref) }; + if status != sys::Status::napi_ok || func_ref.is_null() { + return None; + } + let cb_id = crate::DOTNET_NEXT_CB_ID.fetch_add(1, Ordering::Relaxed); + NAPI_DOTNET_CALLBACKS.with(|m| { + m.borrow_mut().insert(cb_id, (env.raw(), func_ref)); + }); + Some(cb_id) +} + +/// Unpins the callbacks whose managed delegates the .NET GC has collected. +fn release_collected_js_callbacks() { + let released = crate::dotnet::take_released_js_callbacks(); + if released.is_empty() { + return; + } + NAPI_DOTNET_CALLBACKS.with(|m| { + let mut m = m.borrow_mut(); + for id in released { + if let Some((env, func_ref)) = m.remove(&id) { + unsafe { + let _ = sys::napi_delete_reference(env, func_ref); + } + } + } + }); +} + +/// A plain JS object (`{ Width: 120, Height: 40 }`) as JSON, for a .NET struct/record parameter or +/// result (tag 0x0D). Mirrors `global_fns::plain_object_json`. +fn napi_plain_object_json(env: &Env, arg: &JsUnknown) -> Option { + if napi_array_length(env, arg).is_some() { + return None; + } + let obj: JsObject = unsafe { arg.cast() }; + let ctor = obj.get_named_property::("constructor").ok()?; + if ctor.get_type().ok()? != ValueType::Function { + return None; + } + let ctor: JsObject = unsafe { ctor.cast() }; + let name = ctor.get_named_property::("name").ok()?; + if js_to_rust_string(env, &name) != "Object" { + return None; + } + let json: JsObject = env.get_global().ok()?.get_named_property("JSON").ok()?; + let stringify: JsFunction = json.get_named_property("stringify").ok()?; + let text = stringify.call(Some(&json), &[arg]).ok()?; + if text.get_type().ok()? != ValueType::String { + return None; + } + Some(js_to_rust_string(env, &text)) +} + +fn napi_json_parse(env: &Env, text: &str) -> napi::Result { + let json: JsObject = env.get_global()?.get_named_property("JSON")?; + let parse: JsFunction = json.get_named_property("parse")?; + parse.call(Some(&json), &[env.create_string(text)?]) +} + /// Encode one outgoing method-call argument (`u16` string-length prefix; AddRefs `__native_ptr`). /// Mirrors `global_fns::bin_write_v8_arg`. fn napi_bin_write_arg(env: &Env, buf: &mut Vec, arg: &JsUnknown) { @@ -152,6 +211,20 @@ fn napi_bin_write_arg(env: &Env, buf: &mut Vec, arg: &JsUnknown) { } } } + // A JS function where .NET expects a delegate: a callback id the bridge wraps in a + // delegate of the parameter's type (see `global_fns::bin_write_v8_arg`). + if vt == ValueType::Function { + if let Some(cb_id) = pin_js_callback(env, unsafe { arg.raw() }) { + buf.push(0x0C); + buf.extend_from_slice(&cb_id.to_le_bytes()); + return; + } + } + if let Some(json) = napi_plain_object_json(env, arg) { + buf.push(0x0D); + crate::dotnet::bin_write_str32(buf, json.as_bytes()); + return; + } let s = js_to_rust_string(env, arg); buf.push(0x05); crate::dotnet::bin_write_str16(buf, s.as_bytes()); @@ -219,6 +292,11 @@ fn napi_bin_write_value(env: &Env, buf: &mut Vec, arg: &JsUnknown) { } } } + if let Some(json) = napi_plain_object_json(env, arg) { + buf.push(0x0D); + crate::dotnet::bin_write_str32(buf, json.as_bytes()); + return; + } let s = js_to_rust_string(env, arg); buf.push(0x05); crate::dotnet::bin_write_str32(buf, s.as_bytes()); @@ -264,6 +342,15 @@ fn napi_bin_read_value(env: &Env, bytes: &[u8], pos: &mut usize) -> Result { + let len = u32::from_le_bytes(bytes[*pos..*pos + 4].try_into().map_err(|_| "json len")?) + as usize; + *pos += 4; + let text = std::str::from_utf8(&bytes[*pos..*pos + len]).map_err(|_| "utf8")?; + *pos += len; + napi_json_parse(env, text).map_err(map_err) + } + 0x06 | 0x0C => { let id = i32::from_le_bytes(bytes[*pos..*pos + 4].try_into().map_err(|_| "handle id")?); *pos += 4; @@ -449,6 +536,7 @@ fn native_invoke_bin(ctx: &CallContext) -> napi::Result { } } + release_collected_js_callbacks(); match crate::dotnet::call_dotnet_binary(&req) { Ok(response) => napi_bin_read_response(env, &response).map_err(napi::Error::from_reason), Err(e) => Err(napi::Error::from_reason(e)), @@ -552,13 +640,60 @@ fn native_create_js_subclass(ctx: &CallContext) -> napi::Result { crate::dotnet::bin_write_str16(&mut req, name.as_bytes()); } req.extend_from_slice(&cb_id.to_le_bytes()); + // Constructor arguments (optional 6th argument, an array) for the base constructor. + if ctx.length > 5 { + let ctor_args = ctx.get::(5)?; + if let Some(len) = napi_array_length(env, &ctor_args) { + let len = len.min(255); + req.push(len as u8); + for k in 0..len { + match napi_array_get(env, &ctor_args, k) { + Some(v) => napi_bin_write_arg(env, &mut req, &v), + None => req.push(0x00), + } + } + } + } + release_collected_js_callbacks(); match crate::dotnet::call_dotnet_binary(&req) { Ok(response) => napi_bin_read_response(env, &response).map_err(napi::Error::from_reason), Err(e) => Err(napi::Error::from_reason(e)), } } +/// `__nsWrapWinRTPointer(ptr, typeName)`: the WinRT wrapper for the composed instance behind a JS +/// subclass of a WinRT class (created by the bridge). Takes its own reference. Mirrors the classic +/// engine's `handle_wrap_winrt_pointer`. +fn native_wrap_winrt_pointer(ctx: &CallContext) -> napi::Result { + let env = &ctx.env; + let ptr_val = ctx.get::(0)?; + let ptr = match ptr_val.get_type()? { + ValueType::BigInt => { + let b: JsBigInt = unsafe { ptr_val.cast() }; + b.get_u64()?.0 as usize + } + ValueType::Number => { + let n: JsNumber = unsafe { ptr_val.cast() }; + n.get_double()? as usize + } + _ => 0, + }; + if ptr == 0 { + return Err(napi::Error::from_reason("__nsWrapWinRTPointer: null pointer")); + } + let type_name = js_to_rust_string(env, &ctx.get::(1)?); + let declaration = metadata::meta_data_reader::MetadataReader::find_by_name(&type_name) + .ok_or_else(|| napi::Error::from_reason(format!("__nsWrapWinRTPointer: unknown WinRT type {type_name}")))?; + let instance: IUnknown = unsafe { + let borrowed = ManuallyDrop::new(IUnknown::from_raw(ptr as *mut c_void)); + (*borrowed).clone() + }; + let obj = crate::napi_engine::ns_proxy::create_instance_proxy(env, &type_name, declaration, instance.clone())?; + crate::napi_engine::ns_proxy::mark_js_subclass_instance(&instance); + Ok(as_unknown(env, obj)) +} + fn native_await_task(ctx: &CallContext) -> napi::Result<()> { if ctx.length < 3 { return Err(napi::Error::from_reason( @@ -743,6 +878,22 @@ fn parse_callback_args(env: &Env, bytes: &[u8]) -> Vec { result } +/// Reports to the managed caller that a callback could not run (tag 0x0F + message). +unsafe fn write_error_response(message: &str, resp_ptr: *mut *mut u8, resp_len: *mut i32) { + let mut buf = vec![0x0Fu8]; + crate::dotnet::bin_write_str32(&mut buf, message.as_bytes()); + let p = LocalAlloc(LMEM_FIXED, buf.len()); + if !resp_ptr.is_null() { + *resp_ptr = if p.is_null() { std::ptr::null_mut() } else { p as *mut u8 }; + } + if !p.is_null() { + std::ptr::copy_nonoverlapping(buf.as_ptr(), p as *mut u8, buf.len()); + } + if !resp_len.is_null() { + *resp_len = if p.is_null() { 0 } else { buf.len() as i32 }; + } +} + /// Called by the managed bridge (via the stored function pointer) when a .NET delegate or task /// fires. Runs on the JS thread: same pattern as the napi `JsDelegate` COM bridge /// (`napi_engine::delegate`). Wire format for `args_ptr`: `[count: u8] [tagged values...]`. @@ -759,6 +910,18 @@ pub(crate) unsafe extern "C" fn napi_invoke_dotnet_js_callback( ) { let entry = NAPI_DOTNET_CALLBACKS.with(|m| m.borrow().get(&callback_id).copied()); let Some((env_raw, func_ref)) = entry else { + // A managed delegate, event, Task continuation or overridden member running on a thread + // other than the JS thread: hand the call to the JS (UI) thread and wait for it, so the + // callback runs and its result reaches the managed caller. + if !crate::ui_dispatcher::is_ui_thread() { + let (args, resp, len) = (args_ptr as usize, resp_ptr as usize, resp_len as usize); + let delivered = crate::ui_dispatcher::run_on_ui_thread_sync(move || { + napi_invoke_dotnet_js_callback(callback_id, args as *const u8, args_len, resp as *mut *mut u8, len as *mut i32) + }); + if delivered.is_none() { + write_error_response("the JavaScript callback could not run", resp_ptr, resp_len); + } + } return; }; if env_raw.is_null() { @@ -804,7 +967,12 @@ pub(crate) unsafe extern "C" fn napi_invoke_dotnet_js_callback( && !exc.is_null() { if let Some(msg) = stringify_exception(env_raw, exc) { - crate::store_last_js_error(msg); + crate::store_last_js_error(msg.clone()); + // 0x0F: the callback threw. A managed caller that expects a result gets a + // JsException; a void delegate/event ignores it. + let mut buf = vec![0x0Fu8]; + crate::dotnet::bin_write_str32(&mut buf, msg.as_bytes()); + return buf; } } return vec![0x00u8]; @@ -898,6 +1066,12 @@ pub fn install_dotnet(env: &Env) -> napi::Result<()> { )?; global.set_named_property("__nsDotNetCreateJsSubclass", create_js_subclass_fn)?; + let wrap_winrt_pointer_fn = env.create_function_from_closure( + "__nsWrapWinRTPointer", + |ctx: CallContext| native_wrap_winrt_pointer(&ctx), + )?; + global.set_named_property("__nsWrapWinRTPointer", wrap_winrt_pointer_fn)?; + let await_task_fn = env.create_function_from_closure("__nsDotNetAwaitTask", |ctx: CallContext| { native_await_task(&ctx) @@ -1351,6 +1525,15 @@ const DOTNET_HELPERS_JS: &str = r#" if (typeof Function.prototype.extend !== 'function') { Object.defineProperty(Function.prototype, 'extend', { value: function (nameOrOverrides, maybeOverrides) { + // A WinRT class (or a JS class deriving from one): an ES2015 subclass, so + // instances get the composed-object construction of `class X extends Y`. + if (globalThis.NSWinRT && typeof globalThis.NSWinRT.extendClass === 'function') { + if (typeof this.__typeName__ === 'string') + return globalThis.NSWinRT.extendClass(this, nameOrOverrides, maybeOverrides); + // Object.extend({ interfaces: [...], ... }): a subclass of System.Object. + if (this === Object && globalThis.System) + return globalThis.NSWinRT.extendClass(globalThis.System.Object, nameOrOverrides, maybeOverrides); + } return makeManagedConstructor(this, nameOrOverrides, maybeOverrides); }, writable: true, @@ -1581,6 +1764,27 @@ const DOTNET_HELPERS_JS: &str = r#" }; } + // `return global.__native(this)` ends TypeScript subclass constructors written for + // Android/iOS; here `this` already is the native-backed object. + if (typeof globalThis.__native !== 'function') { + globalThis.__native = function (obj) { return obj; }; + } + + // @NativeClass / @NativeClass(): marks a class that extends a native (WinRT/.NET) class. + // Extending works without it; it exists so code written for iOS/Android, where the build + // transforms decorated classes, runs unchanged. + if (typeof globalThis.NativeClass !== 'function') { + Object.defineProperty(globalThis, 'NativeClass', { + value: function NativeClass(target) { + if (typeof target === 'function') return target; + return function (cls) { return cls; }; + }, + writable: true, + configurable: true, + enumerable: false, + }); + } + // @Interfaces([IFoo, IBar]): attach WinRT interface list to a class. if (typeof globalThis.Interfaces !== 'function') { Object.defineProperty(globalThis, 'Interfaces', { @@ -1736,7 +1940,7 @@ const DOTNET_HELPERS_JS: &str = r#" try { var target = _wrapDotNetHandle(a[0]); var method = a[1]; - var margs = a[2] || []; + var margs = a.slice(2).map(_wrapDotNetHandle); if (target && typeof method === 'string') { var fn = overrides[method]; if (typeof fn === 'function') return fn.apply(target, Array.isArray(margs) ? margs : []); @@ -1867,7 +2071,14 @@ const DOTNET_HELPERS_JS: &str = r#" if (prop === 'toString') return function () { return '[DotNetObject ' + typeName + ' #' + handle + ']'; }; - if (prop === 'then') return undefined; + // A Task/ValueTask (awaitable) result is thenable, so `await obj.SomethingAsync()` works; + // any other .NET object must not look like a promise. + if (prop === 'then') { + if (isTask !== true) return undefined; + return function (onFulfilled, onRejected) { + return globalThis.NSWinRT.dotnet.taskToPromise({ __handle: handle, __isTask: true }).then(onFulfilled, onRejected); + }; + } // Re-read info in case it was populated after construction. var i = _typeInfoCache[typeName] || _emptyInfo; // Write-only: has setter but no getter: reading it is an error. @@ -1904,6 +2115,14 @@ const DOTNET_HELPERS_JS: &str = r#" if (Array.isArray(value)) return value.map(_wrap); if (typeof value === 'object' && typeof value.__handle === 'number') { var typeName = value.__type || ''; + var jsSelf = _jsSelfByHandle && _deref(_jsSelfByHandle.get(value.__handle)); + if (jsSelf) return jsSelf; + // A JS subclass instance whose JS object was collected: its dispatcher revives one. + if (typeName.indexOf('NSWinRTDynamicProxies.') === 0) { + try { _invoke({ handle: value.__handle, method: '__ns_js_self', args: [] }); } catch (_) {} + jsSelf = _deref(_jsSelfByHandle.get(value.__handle)); + if (jsSelf) return jsSelf; + } var assembly = _resolveAssembly(typeName); return _makeDotNetInstance(value.__handle, assembly, typeName, value.__isTask === true, value.__native_ptr); } @@ -1946,6 +2165,11 @@ const DOTNET_HELPERS_JS: &str = r#" var proxy = _makeNamespaceProxy(root); try { Object.defineProperty(globalThis, root, { value: proxy, writable: true, configurable: true, enumerable: true }); } catch (_) {} return proxy; + }, + // A namespace root never blocks app code from using the name for its own value + // (`var App = ...` in a classic script assigns through this accessor). + set: function(value) { + try { Object.defineProperty(globalThis, root, { value: value, writable: true, configurable: true, enumerable: true }); } catch (_) {} } }); } catch (_) { @@ -1958,15 +2182,491 @@ const DOTNET_HELPERS_JS: &str = r#" }, }; + // ── .NET types as JS classes ──────────────────────────────────────────────── + // A .NET type proxy (System.Text.StringBuilder, MyApp.Native.Greeter) is a constructor with a + // stable `prototype`, so it can be extended the way Java and Objective-C classes are on Android + // and iOS: + // class Cat extends MyApp.Animal { constructor(n) { super(n); } Speak() { return super.Speak(); } } + // const Dog = MyApp.Animal.extend('Dog', { Speak() { return this.super.Speak(); } }); + // const calc = new MyApp.ICalculator({ Compute(a, b) { return a * b; } }); + // Constructing a subclass creates the JS object first, then a managed subclass of the .NET type + // whose overridden virtuals (and implemented interface members) call back into that object. + // `super.X()` reaches the base implementation through the non-virtual `__ns_base_X` entry point + // the bridge emits for every overridden member. Native code handing the instance back to JS gets + // the same JS object. + var _nsProxyCache = Object.create(null); + var _namespaceExtras = { System: Object.create(null) }; + var _typeKindCache = Object.create(null); + var _typeProtoCache = Object.create(null); + var _subclassInfoCache = new WeakMap(); + var _jsSelfByHandle = new Map(); + + // ── Lifetime of JS subclass instances ─────────────────────────────────────── + // An instance is a JS object plus the managed object it drives. The JS object holds the managed + // one through its handle; the managed object reaches the JS object only through its dispatcher, + // which holds it weakly. So once JS drops the JS object, its handle is released and the managed + // object goes as soon as .NET/native code drops it too (the bridge then unpins the dispatcher). + // When native code calls into an instance whose JS object was collected, a new JS object of the + // same class is made for it: fields its constructor set are gone, as on Android when a JS object + // used only from native code is collected. Subclasses of WinRT UI classes are kept strongly while + // they are in a live XAML tree. + var _canWeakRef = typeof WeakRef === 'function'; + var _selfFinalizers = typeof FinalizationRegistry === 'function' + ? new FinalizationRegistry(function (handle) { + if (!_deref(_jsSelfByHandle.get(handle))) _jsSelfByHandle.delete(handle); + try { _invoke({ handle: handle, method: '__release', args: [] }); } catch (_) {} + }) + : null; + + function _weak(obj) { return _canWeakRef ? new WeakRef(obj) : obj; } + function _deref(ref) { return ref && _canWeakRef && ref instanceof WeakRef ? ref.deref() : ref; } + + // Gives `self` the bridge identity in `raw` and registers it as the JS object of `entry`'s instance. + function _adopt(entry, self, raw) { + Object.defineProperty(self, '__handle', { value: raw.__handle }); + Object.defineProperty(self, '__nsOverrides', { value: entry.overrides }); + if (!entry.winrt) { + Object.defineProperty(self, '__type', { value: raw.__type || entry.typeName }); + if (raw.__native_ptr !== undefined) Object.defineProperty(self, '__native_ptr', { value: raw.__native_ptr }); + } + entry.ref = _weak(self); + _jsSelfByHandle.set(raw.__handle, _weak(self)); + if (_selfFinalizers) _selfFinalizers.register(self, raw.__handle); + if (entry.winrt) { + entry.strong = self; + _attachedEntries.add(entry); + } + _sweepAttached(); + return self; + } + + // The JS object of `entry`'s instance, made anew when the previous one was collected. + function _selfFor(entry, raw) { + var self = _deref(entry.ref); + if (self) return self; + if (entry.constructing) throw new Error(entry.typeName + ' called into its JS subclass before the instance existed'); + if (!raw || typeof raw.__handle !== 'number') throw new Error('The ' + entry.typeName + ' subclass instance is gone'); + if (entry.winrt) { + self = globalThis.__nsWrapWinRTPointer(raw.__native_ptr, entry.typeName); + Object.setPrototypeOf(self, entry.proto); + } else { + self = Object.create(entry.proto); + } + return _adopt(entry, self, raw); + } + + // The dispatcher native code calls the instance's overridden and interface members through. + function _makeDispatcher(entry) { + return function (selfHandle, member) { + var self = _selfFor(entry, selfHandle); + if (member === '__ns_js_self') return undefined; + _sweepAttached(); + var margs = Array.prototype.slice.call(arguments, 2).map(_wrap); + return _dispatchToJs(self, entry.baseProto, entry.typeName, member, margs); + }; + } + + // Subclasses of WinRT classes held strongly (entry.strong) while in a live XAML tree, re-checked at + // most every two seconds when subclass instances are created or called into. + var _attachedEntries = new Set(); + var _lastAttachedSweep = 0; + function _sweepAttached() { + var now = Date.now(); + if (now - _lastAttachedSweep < 2000) return; + _lastAttachedSweep = now; + _attachedEntries.forEach(function (entry) { + var self = _deref(entry.ref); + if (!self) { + _attachedEntries.delete(entry); + return; + } + var attached = false; + try { attached = self.XamlRoot != null; } catch (_) {} + entry.strong = attached ? self : undefined; + }); + } + var _baseCallPrefix = '__ns_base_'; + + function _has(list, name) { + return !!list && list.indexOf(name) >= 0; + } + + function _typeKind(path) { + var kind = _typeKindCache[path]; + if (kind !== undefined) return kind; + try { + kind = _invoke({ assembly: '', typeName: 'NativeScriptBridge.Bridge', method: 'TypeKind', args: [path] }) || ''; + } catch (_) { + kind = ''; + } + _typeKindCache[path] = kind; + return kind; + } + + // Full name of a .NET type proxy, or of the .NET base of a JS class deriving from one. + function _dotnetTypeName(type) { + if (typeof type === 'string') return type; + if (!type || (typeof type !== 'function' && typeof type !== 'object')) return ''; + var name = type.__dotnetType__; + return typeof name === 'string' ? name : ''; + } + + // The handle of an instance of a JS subclass (an own property); -1 for anything else, such as + // a class prototype further down the chain, without running any property trap. + function _ownHandle(o) { + if (!o || (typeof o !== 'object' && typeof o !== 'function')) return -1; + var d = Object.getOwnPropertyDescriptor(o, '__handle'); + return d && typeof d.value === 'number' ? d.value : -1; + } + + function _baseCallName(self, member) { + var overrides = self.__nsOverrides; + return overrides && overrides.has(member) ? _baseCallPrefix + member : member; + } + + // A native member of `self` (an instance of a JS subclass), reached through the .NET type's + // prototype: properties are read through their getter, methods become functions. Members the JS + // class overrides resolve to the base implementation — only `super.X` gets this far for them. + function _baseMember(path, self, prop) { + if (prop === 'toString') return function () { return String(_invoke({ handle: self.__handle, method: 'ToString', args: [] })); }; + if (prop === 'valueOf') return function () { return this; }; + var info = _getTypeInfo(_resolveAssembly(path), path); + var overrides = self.__nsOverrides; + if (_has(info.properties, prop) || (overrides && overrides.has('get_' + prop))) { + return _wrap(_invoke({ handle: self.__handle, method: _baseCallName(self, 'get_' + prop), args: [] })); + } + if (_has(info.writeonlyProperties, prop)) + throw new TypeError('Cannot read write-only property \'' + prop + '\' of .NET type \'' + path + '\''); + if (_has(info.methods, prop) || (overrides && overrides.has(prop))) { + var method = _baseCallName(self, prop); + return function () { + var args = Array.prototype.slice.call(arguments).map(_unwrap); + return _wrap(_invoke({ handle: self.__handle, method: method, args: args })); + }; + } + return undefined; + } + + // The `prototype` of a .NET type: the end of every JS subclass's prototype chain. Reads resolve + // native members against the receiving instance; writes go to native properties, and anything + // else becomes a plain JS field of the instance. + function _typePrototype(path) { + var cached = _typeProtoCache[path]; + if (cached) return cached; + var proto = new Proxy(Object.create(null), { + get: function (_, prop, receiver) { + if (typeof prop === 'symbol') return undefined; + if (_ownHandle(receiver) < 0) { + // Read off the prototype itself — TypeScript's ES5 super call + // `_super.prototype.Method.call(this, ...)`: a function that runs the base + // implementation on whichever instance it is called with. + var typeInfo = _getTypeInfo(_resolveAssembly(path), path); + if (!_has(typeInfo.methods, prop)) return undefined; + return function () { + if (_ownHandle(this) < 0) throw new TypeError(path + '.prototype.' + prop + ' called on an object that is not a ' + path); + return _baseMember(path, this, prop).apply(this, arguments); + }; + } + return _baseMember(path, receiver, prop); + }, + set: function (_, prop, value, receiver) { + if (typeof prop !== 'symbol' && _ownHandle(receiver) >= 0) { + var info = _getTypeInfo(_resolveAssembly(path), path); + if (_has(info.readonlyProperties, prop)) + throw new TypeError('Cannot assign to read-only property \'' + prop + '\' of .NET type \'' + path + '\''); + if (_has(info.properties, prop) || _has(info.writeonlyProperties, prop)) { + _invoke({ handle: receiver.__handle, method: _baseCallName(receiver, 'set_' + prop), args: [_unwrap(value)] }); + return true; + } + } + Object.defineProperty(receiver, prop, { value: value, writable: true, enumerable: true, configurable: true }); + return true; + }, + }); + _typeProtoCache[path] = proto; + return proto; + } + + // Members (literal CLR names: methods, get_X/set_X accessors) and interfaces a JS class adds on + // top of its .NET base, from every class between it and the base. + function _subclassInfo(proto, baseProto) { + var cached = _subclassInfoCache.get(proto); + if (cached) return cached; + var members = []; + var overrides = new Set(); + var interfaces = []; + var seen = Object.create(null); + function addInterfaces(list) { + if (!Array.isArray(list)) return; + for (var i = 0; i < list.length; i++) { + var name = _dotnetTypeName(list[i]) || (list[i] && (list[i].__typeName__ || list[i].name)) || ''; + if (name && interfaces.indexOf(name) < 0) interfaces.push(name); + } + } + for (var p = proto; p && p !== baseProto; p = Object.getPrototypeOf(p)) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (key === 'constructor' || key === 'interfaces' || key === 'super' || key === 'init' || seen[key]) continue; + seen[key] = true; + var d = Object.getOwnPropertyDescriptor(p, key); + if (typeof d.get === 'function') { members.push('get_' + key); overrides.add('get_' + key); } + if (typeof d.set === 'function') { members.push('set_' + key); overrides.add('set_' + key); } + if (typeof d.value === 'function') { members.push(key); overrides.add(key); } + } + if (Object.prototype.hasOwnProperty.call(p, 'interfaces')) addInterfaces(p.interfaces); + var ctor = Object.prototype.hasOwnProperty.call(p, 'constructor') ? p.constructor : null; + if (ctor && Object.prototype.hasOwnProperty.call(ctor, 'interfaces')) addInterfaces(ctor.interfaces); + } + var info = { members: members, overrides: overrides, interfaces: interfaces }; + _subclassInfoCache.set(proto, info); + return info; + } + + // The JS-defined member `key` of `self` (an own field, or a member of one of its JS classes). + function _jsMember(self, key, baseProto) { + for (var o = self; o && o !== baseProto; o = Object.getPrototypeOf(o)) { + var d = Object.getOwnPropertyDescriptor(o, key); + if (d) return d; + } + return null; + } + + // Native code calling an overridden member (or an implemented interface member) of `self`. + function _dispatchToJs(self, baseProto, typeName, member, args) { + var accessor = /^(get|set)[_:](.+)$/.exec(member); + if (accessor) { + var ad = _jsMember(self, accessor[2], baseProto); + if (ad) { + if (accessor[1] === 'get') { + if (typeof ad.get === 'function') return ad.get.call(self); + if ('value' in ad && typeof ad.value !== 'function') return ad.value; + } else if (typeof ad.set === 'function') { + ad.set.call(self, args[0]); + return undefined; + } else if ('value' in ad && ad.writable) { + self[accessor[2]] = args[0]; + return undefined; + } + } + } + var md = _jsMember(self, member, baseProto); + if (md && typeof md.value === 'function') return md.value.apply(self, args); + throw new Error((self.constructor && self.constructor.name || typeName) + ' does not implement ' + member); + } + + function _constructSubclass(path, args, proto) { + if (typeof globalThis.__nsDotNetCreateJsSubclass !== 'function') + throw new Error('Extending .NET types is not available in this runtime'); + var baseProto = _typePrototype(path); + var info = _subclassInfo(proto, baseProto); + var self = Object.create(proto); + // A virtual the base constructor calls reaches `self` before it has its handle. + var entry = { proto: proto, baseProto: baseProto, typeName: path, overrides: info.overrides, winrt: false, ref: self }; + var raw = globalThis.__nsDotNetCreateJsSubclass('', path, info.interfaces, info.members, _makeDispatcher(entry), args.map(_unwrap)); + if (!raw || typeof raw.__handle !== 'number') throw new Error('Could not create an instance of a subclass of ' + path); + return _adopt(entry, self, raw); + } + + // `new SomeInterface({ ... })`: an object implementing the interface with the given members. + function _implementInterface(path, impl) { + var proto = Object.create(_typePrototype('System.Object')); + Object.defineProperties(proto, Object.getOwnPropertyDescriptors(impl)); + Object.defineProperty(proto, 'interfaces', { value: [path] }); + return _constructSubclass('System.Object', [], proto); + } + + // `this.super` inside a class made by extend(): the parent class's members bound to `self`. + function _superOf(self, Cls) { + var parent = Object.getPrototypeOf(Cls.prototype); + return new Proxy(Object.create(null), { + get: function (_, prop) { + var value = Reflect.get(parent, prop, self); + return typeof value === 'function' ? value.bind(self) : value; + }, + }); + } + + // Base.extend([name,] members): an ES2015 subclass of Base with the given members; `init`, when + // present, runs after construction with the constructor arguments. + function _extendClass(Base, nameOrMembers, maybeMembers) { + var hasName = typeof nameOrMembers === 'string'; + var members = (hasName ? maybeMembers : nameOrMembers) || {}; + var Extended = class extends Base { + constructor() { + super(...arguments); + if (typeof members.init === 'function') members.init.apply(this, arguments); + } + }; + var descriptors = Object.getOwnPropertyDescriptors(members); + delete descriptors.init; + if (descriptors.interfaces) { + Object.defineProperty(Extended.prototype, 'interfaces', { value: members.interfaces }); + delete descriptors.interfaces; + } + Object.defineProperties(Extended.prototype, descriptors); + Object.defineProperty(Extended.prototype, 'super', { + get: function () { return _superOf(this, Extended); }, + }); + if (hasName) Object.defineProperty(Extended, 'name', { value: nameOrMembers.split('.').pop() }); + return Extended; + } + + // `_super.call(this, ...)` / `_super.apply(this, args)` in TypeScript's ES5 output (what the + // @NativeClass transform emits): construct the subclass instance `thisArg` was created for. + function _es5SuperCall(path, thisArg, args) { + var proto = thisArg && Object.getPrototypeOf(thisArg); + if (!proto || !Object.prototype.isPrototypeOf.call(_typePrototype(path), proto)) + throw new TypeError('Class constructor ' + path + ' cannot be invoked without \'new\''); + return _constructSubclass(path, args, proto); + } + + function _hasInstance(path, value) { + if (value === null || (typeof value !== 'object' && typeof value !== 'function')) return false; + if (Object.prototype.isPrototypeOf.call(_typePrototype(path), value)) return true; + if (typeof value.__handle !== 'number') return false; + try { + return _invoke({ assembly: '', typeName: 'NativeScriptBridge.Bridge', method: 'IsInstanceOf', args: [{ __handle: value.__handle }, path] }) === true; + } catch (_) { + return false; + } + } + + // ── WinRT classes as JS base classes ──────────────────────────────────────── + // `class FixedPanel extends Microsoft.UI.Xaml.Controls.Panel { MeasureOverride(size) { ... } }`: + // the WinRT constructor hands `super(...)` here. The instance is a composed object created by + // the .NET bridge from the C#/WinRT projection of the class (the way a C# subclass is), so XAML + // calling an overridable member (MeasureOverride, ArrangeOverride, OnApplyTemplate, ...) lands in + // the JS override. The JS object is the ordinary WinRT wrapper of that object, with the subclass + // prototype spliced in front of the class's native members. + var _linkedWinRTPrototypes = new WeakSet(); + + // The WinRT class a JS class derives from: the nearest constructor with its own __typeName__. + function _winrtBaseOf(ctor) { + for (var c = ctor; c; c = Object.getPrototypeOf(c)) { + if (Object.prototype.hasOwnProperty.call(c, '__typeName__')) return c; + } + return null; + } + + // `super.X(...)` for a member a JS subclass of a WinRT class overrides: the base implementation, + // through the bridge (the native member would dispatch back into the override). + function _winrtBaseCall(handle, prop) { + return function () { + var args = Array.prototype.slice.call(arguments).map(_unwrap); + return _wrap(_invoke({ handle: handle, method: _baseCallPrefix + prop, args: args })); + }; + } + + // Puts a layer under the JS subclass prototypes that resolves the class's native members and + // sends `super.X()` for overridden members to the base implementation. On the classic engine the + // class's `prototype` is separate from its instances' native prototype, so the layer goes under the + // class's `prototype` once; on the napi engines they're the same object, so it goes under the + // subclass prototype that sits directly on it. + function _linkWinRTSubclassPrototype(base, nativeProto, proto) { + if (!base || !nativeProto) return; + var target = base.prototype; + if (target === nativeProto) { + target = proto; + while (target && Object.getPrototypeOf(target) !== nativeProto) target = Object.getPrototypeOf(target); + } + if (!target || _linkedWinRTPrototypes.has(target)) return; + _linkedWinRTPrototypes.add(target); + var layer = new Proxy(Object.create(nativeProto), { + get: function (_, prop, receiver) { + var handle = _ownHandle(receiver); + if (typeof prop !== 'string') return Reflect.get(nativeProto, prop, receiver); + if (handle >= 0) { + if (receiver.__nsOverrides && receiver.__nsOverrides.has(prop)) return _winrtBaseCall(handle, prop); + return Reflect.get(nativeProto, prop, receiver); + } + // Read off a prototype — TypeScript's ES5 `_super.prototype.X.call(this, ...)`: decide + // between the base implementation and the native member when it's called. + var native = Reflect.get(nativeProto, prop, receiver); + if (typeof native !== 'function') return native; + return function () { + var h = _ownHandle(this); + if (h >= 0 && this.__nsOverrides && this.__nsOverrides.has(prop)) + return _winrtBaseCall(h, prop).apply(this, arguments); + return native.apply(this, arguments); + }; + }, + has: function (_, prop) { return prop in nativeProto; }, + }); + Object.setPrototypeOf(target, layer); + } + + // napi engines: the class `prototype` is the native prototype itself, so TypeScript's ES5 + // `_super.prototype.X.call(this, ...)` reaches the native member directly. Wrap each native member a + // subclass overrides (once) so that, called on a JS subclass instance, it runs the base + // implementation instead of dispatching back into the override. + function _guardNativeMembers(nativeProto, overrides) { + overrides.forEach(function (name) { + for (var p = nativeProto; p; p = Object.getPrototypeOf(p)) { + var d = Object.getOwnPropertyDescriptor(p, name); + if (!d) continue; + if (typeof d.value === 'function' && !d.value.__nsGuarded && d.writable) { + var native = d.value; + var guarded = function () { + var h = _ownHandle(this); + if (h >= 0 && this.__nsOverrides && this.__nsOverrides.has(name)) + return _winrtBaseCall(h, name).apply(this, arguments); + return native.apply(this, arguments); + }; + Object.defineProperty(guarded, '__nsGuarded', { value: true }); + Object.defineProperty(p, name, { value: guarded, writable: true, configurable: true, enumerable: d.enumerable }); + } + return; + } + }); + } + + // Called by the WinRT class constructors for `super(...)` from a JS subclass (newTarget) or + // TypeScript's ES5 `_super.call(this, ...)` (es5This). Returns undefined when this isn't a subclass + // construction or the .NET bridge isn't available; the constructor then builds a plain instance. + globalThis.__nsConstructWinRTSubclass = function (typeName, newTarget, args, es5This) { + var proto; + var base; + if (newTarget) { + proto = newTarget.prototype; + base = _winrtBaseOf(Object.getPrototypeOf(newTarget)); + } else { + proto = es5This && Object.getPrototypeOf(es5This); + base = proto && proto.constructor ? _winrtBaseOf(Object.getPrototypeOf(proto.constructor)) : null; + if (!base || base.__typeName__ !== typeName || Object.prototype.hasOwnProperty.call(proto.constructor, '__typeName__')) + return undefined; + } + if (typeof globalThis.__nsDotNetCreateJsSubclass !== 'function' || typeof globalThis.__nsWrapWinRTPointer !== 'function') + return undefined; + var baseProto = base ? base.prototype : null; + var info = _subclassInfo(proto, baseProto); + var entry = { proto: proto, baseProto: baseProto, typeName: typeName, overrides: info.overrides, winrt: true, constructing: true }; + var raw = globalThis.__nsDotNetCreateJsSubclass('', typeName, info.interfaces, info.members, _makeDispatcher(entry), (args || []).map(_unwrap)); + entry.constructing = false; + if (!raw || raw.__native_ptr === undefined || raw.__native_ptr === null) + throw new Error('Could not create a WinRT object for a subclass of ' + typeName); + var self = globalThis.__nsWrapWinRTPointer(raw.__native_ptr, typeName); + var nativeProto = Object.getPrototypeOf(self); + _linkWinRTSubclassPrototype(base, nativeProto, proto); + if (base && base.prototype === nativeProto) _guardNativeMembers(nativeProto, info.overrides); + Object.setPrototypeOf(self, proto); + return _adopt(entry, self, raw); + }; + + globalThis.NSWinRT.extendClass = _extendClass; + // System.Diagnostics.Stopwatch.StartNew() → static method call // System.Environment.MachineName → static property get // new System.Text.StringBuilder(64) → constructor // sw.Stop() → instance method // sw.Elapsed → instance property function _makeNamespaceProxy(path) { + var cached = _nsProxyCache[path]; + if (cached) return cached; function _node() {} - return new Proxy(_node, { + var proxy = new Proxy(_node, { get: function (_, prop) { + if (prop === Symbol.hasInstance) return function (value) { return _hasInstance(path, value); }; if (typeof prop === 'symbol') return undefined; // Prevent string-coercion methods from descending into sub-proxies. // V8's console.log / JSON.stringify call toString/valueOf on unknown objects; @@ -1974,9 +2674,15 @@ const DOTNET_HELPERS_JS: &str = r#" // type name, producing a spurious "Type not found" bridge error. if (prop === 'toString' || prop === 'valueOf') return function() { return '[.NET ' + path + ']'; }; + var extras = _namespaceExtras[path]; + if (extras && Object.prototype.hasOwnProperty.call(extras, prop)) return extras[prop]; + if (prop === '__dotnetType__') return path; + if (prop === 'prototype') return _typePrototype(path); + // Not a WinRT class: TypeScript's __extends must take the standard path. + if (prop === '__nsWinRTClass__' || prop === 'then') return undefined; var assembly = _resolveAssembly(path); var info = _getTypeInfo(assembly, path); - // Write-only static property: reading it is an error. + // Write-only static property — reading it is an error. if (info.writeonlyStaticProperties && info.writeonlyStaticProperties.indexOf(prop) >= 0) throw new TypeError('Cannot read write-only property \'' + prop + '\' of .NET type \'' + path + '\''); // Readable static property: resolve value immediately. @@ -1989,6 +2695,9 @@ const DOTNET_HELPERS_JS: &str = r#" return _wrap(_invoke({ assembly: assembly, typeName: path, method: prop, args: args })); }; } + if (prop === 'extend') return function (nameOrMembers, maybeMembers) { return _extendClass(this, nameOrMembers, maybeMembers); }; + if (prop === 'call') return function (thisArg) { return _es5SuperCall(path, thisArg, Array.prototype.slice.call(arguments, 1)); }; + if (prop === 'apply') return function (thisArg, args) { return _es5SuperCall(path, thisArg, args ? Array.prototype.slice.call(args) : []); }; // Namespace / sub-type: keep descending. return _makeNamespaceProxy(path + '.' + prop); }, @@ -1996,19 +2705,19 @@ const DOTNET_HELPERS_JS: &str = r#" if (typeof prop === 'symbol') return true; var assembly = _resolveAssembly(path); var info = _getTypeInfo(assembly, path); - // Read-only static property: assignment is an error. + // Read-only static property — assignment is an error. if (info.readonlyStaticProperties && info.readonlyStaticProperties.indexOf(prop) >= 0) throw new TypeError('Cannot assign to read-only property \'' + prop + '\' of .NET type \'' + path + '\''); - // Writable (read-write or write-only): invoke the setter. + // Writable (read-write or write-only) — invoke the setter. if ((info.staticProperties && info.staticProperties.indexOf(prop) >= 0) || (info.writeonlyStaticProperties && info.writeonlyStaticProperties.indexOf(prop) >= 0)) _invoke({ assembly: assembly, typeName: path, method: 'set_' + prop, args: [_unwrap(value)] }); - // Not a native property: don't intercept. + // Not a native property — don't intercept. return true; }, apply: function (_, _this, args) { var lastDot = path.lastIndexOf('.'); - // No dot means this is a top-level name being called directly: + // No dot means this is a top-level name being called directly — // there is no type+method pair to dispatch, so bail out. if (lastDot <= 0) return undefined; var typeName = path.substring(0, lastDot); @@ -2016,27 +2725,61 @@ const DOTNET_HELPERS_JS: &str = r#" var assembly = _resolveAssembly(typeName); return _wrap(_invoke({ assembly: assembly, typeName: typeName, method: method, args: args.map(_unwrap) })); }, - construct: function (_, args) { + construct: function (_, args, newTarget) { + // `super(...)` from a JS subclass. + if (newTarget && newTarget !== proxy) return _constructSubclass(path, args, newTarget.prototype); + if (args.length === 1 && args[0] && typeof args[0] === 'object' && typeof args[0].__handle !== 'number' + && _typeKind(path) === 'interface') + return _implementInterface(path, args[0]); var assembly = _resolveAssembly(path); return _wrap(_invoke({ assembly: assembly, typeName: path, method: '.ctor', args: args.map(_unwrap) })); }, }); + _nsProxyCache[path] = proxy; + return proxy; } - globalThis.System = _makeNamespaceProxy('System'); + // `System` stays the .NET namespace when app code assigns it: @nativescript/core sets + // `global.System = { import() }` (a SystemJS shim). Assigned members are kept and take + // precedence (`System.import(...)` keeps working); everything else is .NET. + (function () { + var systemProxy = _makeNamespaceProxy('System'); + Object.defineProperty(globalThis, 'System', { + configurable: true, + enumerable: true, + get: function () { return systemProxy; }, + set: function (value) { + if (value && (typeof value === 'object' || typeof value === 'function')) + Object.keys(value).forEach(function (k) { _namespaceExtras.System[k] = value[k]; }); + }, + }); + })(); globalThis.Microsoft = _makeNamespaceProxy('Microsoft'); globalThis.NativeScript = _makeNamespaceProxy('NativeScript'); + // Every other root namespace of the app's assemblies (C# sources compiled into the app, + // plugin and NuGet assemblies) is a lazy global too, so `new MyCompany.Native.Foo()` works + // with no registration step, the way Java packages and Objective-C classes are globals on + // Android and iOS. WinRT owns Windows/Microsoft/NativeScript; the rest are implementation + // namespaces of the toolchain that no app reaches for. + (function () { + var reserved = { Windows: 1, Microsoft: 1, NativeScript: 1, System: 1, NativeScriptBridge: 1, NSWinRTDynamicProxies: 1, + WinRT: 1, ABI: 1, XamlGeneratedNamespace: 1, FxResources: 1, Internal: 1, Interop: 1, MS: 1, Mono: 1 }; + for (var ns in _namespaceAssemblyMap) { + if (ns.indexOf('.') !== -1 || reserved[ns] === 1 || !/^[A-Za-z_$][\w$]*$/.test(ns)) continue; + globalThis.NSWinRT.dotnet.registerNamespace(ns); + } + })(); + // Creates a typed .NET BCL delegate (not a WinRT COM delegate). // Use this when the API expects a managed System.Action, // System.EventHandler, etc. rather than a WinRT delegate interface. // For WinRT delegate types use NSWinRT.asDelegate instead. if (typeof globalThis.__nsDotNetAwaitTask === 'function') { globalThis.NSWinRT.dotnet.taskToPromise = function (obj) { - var h = obj && typeof obj.__handle === 'number' ? obj.__handle - : typeof obj === 'number' ? obj : -1; + var h = obj && typeof obj.__handle === 'number' && obj.__isTask === true ? obj.__handle : -1; if (h < 0) return Promise.resolve(obj); return new Promise(function (resolve, reject) { - globalThis.__nsDotNetAwaitTask(h, resolve, reject); + globalThis.__nsDotNetAwaitTask(h, function (value) { resolve(_wrap(value)); }, reject); }); }; } diff --git a/runtime/src/napi_engine/module_natives.rs b/runtime/src/napi_engine/module_natives.rs index 41de399..24abfae 100644 --- a/runtime/src/napi_engine/module_natives.rs +++ b/runtime/src/napi_engine/module_natives.rs @@ -90,8 +90,11 @@ pub fn install_module_natives(env: &Env, app_root: &str) -> napi::Result<()> { // A packed (virtual, no-plaintext-on-disk) referrer never satisfies `.is_file()`, // so also check the sealed bundle's table — otherwise a relative require() from a // bundle-only file would wrongly treat the referrer as the base dir, not its parent. + // A referrer that doesn't exist but names a file (the `app/bundle.js` fallback the + // top-level `require` uses when the entry script is not a bundle) is a file too. let base = if parent.is_file() || crate::source_protect::contains(&parent.to_string_lossy()) + || (!parent.exists() && parent.extension().is_some()) { parent.parent().map(Path::to_path_buf).unwrap_or(parent) } else { diff --git a/runtime/src/napi_engine/ns_hostobject.rs b/runtime/src/napi_engine/ns_hostobject.rs index 48ac880..542ce1f 100644 --- a/runtime/src/napi_engine/ns_hostobject.rs +++ b/runtime/src/napi_engine/ns_hostobject.rs @@ -521,6 +521,23 @@ fn class_prototype(env: &Env, class_name: &str) -> napi::Result { // __typeName__ is the same for every instance → carry it once on the prototype, not per-instance. proto.set_named_property("__typeName__", env.create_string(class_name)?)?; + // The base class's prototype is next in the chain, so `x instanceof BaseClass` holds for + // instances of derived classes (a StackPanel is a Panel and a UIElement). + let base_name = { + let lock = declaration.read(); + lock.as_any() + .downcast_ref::() + .map(|c| c.base_full_name().to_string()) + .unwrap_or_default() + }; + if !base_name.is_empty() && base_name != "System.Object" && base_name != class_name { + if let Ok(base_proto) = class_prototype(env, &base_name) { + let (object, _create, _define) = object_helpers(env)?; + let set_proto: JsFunction = object.get_named_property("setPrototypeOf")?; + set_proto.call(Some(&object), &[as_unknown(env, unsafe { JsObject::from_raw_unchecked(env.raw(), proto.raw()) }), as_unknown(env, base_proto)])?; + } + } + HOST_PROTOS.with(|c| { c.borrow_mut().insert(class_name.to_string(), make_ref(env, &proto)); }); @@ -566,10 +583,27 @@ fn make_ctor_wrapper( impl_fn: &JsFunction, proto: &JsObject, class_name: &str, + sealed: bool, ) -> napi::Result { + // A JS subclass (`class Sub extends ThisClass`, or TypeScript's ES5 `_super.call(this, ...)`) + // of an unsealed class is constructed by the bootstrap's `__nsConstructWinRTSubclass`: a + // composed object whose overridable members call back into Sub. It returns undefined when the + // .NET bridge isn't available; then (and for sealed classes) the instance is a plain one + // re-linked to Sub's prototype. const BODY: &str = r#"'use strict'; function Ctor() { - if (!new.target) { throw new TypeError(clsName + ' is a WinRT class constructor — use `new`'); } + var sub = globalThis.__nsConstructWinRTSubclass; + if (!new.target) { + if (!sealed && this && typeof this === 'object' && typeof sub === 'function') { + var es5 = sub(clsName, null, Array.prototype.slice.call(arguments), this); + if (es5) { return es5; } + } + throw new TypeError(clsName + ' is a WinRT class constructor — use `new`'); + } + if (!sealed && new.target !== Ctor && typeof sub === 'function') { + var composed = sub(clsName, new.target, Array.prototype.slice.call(arguments), undefined); + if (composed) { return composed; } + } var obj = arguments.length === 0 ? native() : native.apply(null, arguments); var p = new.target.prototype; if (p && typeof p === 'object' && p !== sharedProto) { @@ -590,6 +624,7 @@ return Ctor;"#; as_unknown(env, env.create_string("native")?), as_unknown(env, env.create_string("sharedProto")?), as_unknown(env, env.create_string("clsName")?), + as_unknown(env, env.create_string("sealed")?), as_unknown(env, env.create_string(BODY)?), ], )?; @@ -604,6 +639,7 @@ return Ctor;"#; JsUnknown::from_raw_unchecked(env.raw(), proto.raw()) }), as_unknown(env, env.create_string(class_name)?), + as_unknown(env, env.get_boolean(sealed)?), ], )?; Ok(unsafe { wrapper_unknown.cast() }) @@ -674,7 +710,7 @@ pub fn build_host_ctor(env: &Env, class_name: &str, declaration: Decl) -> napi:: // It enforces construct-only calls and, for `class Sub extends WinRTClass`, re-links the // wrapped instance to new.target.prototype when that prototype chains through the shared // class prototype. - let ctor = make_ctor_wrapper(env, &impl_fn, &proto, class_name)?; + let ctor = make_ctor_wrapper(env, &impl_fn, &proto, class_name, ctor_sealed)?; let ctor_raw = unsafe { ctor.raw() }; let mut ctor_obj = unsafe { JsObject::from_raw_unchecked(env.raw(), ctor_raw) }; @@ -790,6 +826,42 @@ pub fn build_host_ctor(env: &Env, class_name: &str, declaration: Decl) -> napi:: define_accessor(env, &ctor_obj, &name, getter, setter)?; } + // Static events (CompositionTarget.Rendering, ...): `Class.Event = handler` subscribes through + // the class's statics interface on its activation factory, replacing the previous handler; + // `= null` unsubscribes; reading returns the current handler. Same syntax as instance events. + let static_events: Vec<_> = { + let lock = declaration.read(); + lock.as_any() + .downcast_ref::() + .map(|class| { + use metadata::declarations::base_class_declaration::BaseClassDeclarationImpl; + class.events().iter().filter(|e| e.is_static()).cloned().collect() + }) + .unwrap_or_default() + }; + for e in &static_events { + let name = e.name().to_string(); + let (cls_get, cls_set) = (class_name.to_string(), class_name.to_string()); + let (add, remove) = (e.add_method().clone(), e.remove_method().clone()); + let gname = name.clone(); + let getter = env.create_function_from_closure(&name, move |ctx: CallContext| { + let factory = crate::class_activation_factory(&cls_get) + .map_err(|err| napi::Error::from_reason(err.to_string()))?; + read_winrt_event_napi(&ctx.env, &factory, &gname) + })?; + let sname = name.clone(); + let setter = env.create_function_from_closure(&name, move |ctx: CallContext| { + let env = &ctx.env; + crate::napi_engine::invoke::ensure_winrt_initialized(); + let factory = crate::class_activation_factory(&cls_set) + .map_err(|err| napi::Error::from_reason(format!("{cls_set}.{sname}: {err}")))?; + let value = ctx.get::(0)?; + wire_winrt_event_napi(env, &sname, &factory, &add, &remove, &value)?; + Ok(as_unknown(env, env.get_undefined()?)) + })?; + define_accessor(env, &ctor_obj, &name, getter, Some(setter))?; + } + HOST_CTORS.with(|c| { c.borrow_mut().insert(class_name.to_string(), make_ref(env, &ctor)); }); diff --git a/runtime/src/napi_engine/ns_proxy.rs b/runtime/src/napi_engine/ns_proxy.rs index a6b2cb0..85e18e9 100644 --- a/runtime/src/napi_engine/ns_proxy.rs +++ b/runtime/src/napi_engine/ns_proxy.rs @@ -204,6 +204,9 @@ struct InstanceCacheEntry { /// after the old object is freed; if a weak ref hands back a stale proxy for that address /// (observed on JSC), returning it would be the wrong type. We validate this on every hit. type_name: String, + /// The wrapper is the JS object of a JS subclass instance: returned for this identity whatever + /// class the caller expects (its runtime class, a managed type, isn't in the metadata). + any_type: bool, /// Serial of the InstanceState that owns this entry. On that state's Drop we remove the entry /// only if the serial still matches — so a newer proxy for a reused COM address is never evicted. serial: u64, @@ -225,7 +228,7 @@ fn cached_instance(env: &Env, identity: usize, class_name: &str) -> Option Option { + let identity = com_identity_key(instance)?; + let type_name = NAPI_INSTANCE_CACHE.with(|c| { + c.borrow().get(&identity).filter(|e| e.any_type).map(|e| e.type_name.clone()) + })?; + cached_instance(env, identity, &type_name) +} + +/// Marks the cached wrapper of `instance` as the JS object of a JS subclass instance (see +/// `InstanceCacheEntry::any_type`). +pub(crate) fn mark_js_subclass_instance(instance: &IUnknown) { + let Some(identity) = com_identity_key(instance) else { return }; + NAPI_INSTANCE_CACHE.with(|c| { + if let Some(entry) = c.borrow_mut().get_mut(&identity) { + entry.any_type = true; + } + }); +} + fn com_identity_key(instance: &IUnknown) -> Option { crate::com_identity(instance).map(|k| k as usize) } @@ -1511,6 +1534,10 @@ pub fn try_wrap_inspectable_pointer(env: &Env, raw: *mut c_void) -> Option().ok()?; let class_name = unsafe { inspectable.GetRuntimeClassName() }.ok()?; let name_str = class_name.to_string(); diff --git a/runtime/src/ui_dispatcher.rs b/runtime/src/ui_dispatcher.rs index 4b7015b..9ce9d34 100644 --- a/runtime/src/ui_dispatcher.rs +++ b/runtime/src/ui_dispatcher.rs @@ -122,6 +122,71 @@ pub fn is_initialized() -> bool { UI_QUEUE.get().is_some() } +/// Runs `f` on the UI (JS) thread and waits for it to finish, returning its result; runs it inline +/// when already on the UI thread. `None` when there is no UI dispatcher or the work item could not +/// be queued (the queue is shutting down). +/// +/// This is how a native callback that fires on a background thread reaches JavaScript: the iOS and +/// Android runtimes take the isolate's lock on the calling thread, which blocks it until the JS +/// thread is free; here the JS thread is the UI thread, so the call is handed to it instead, with +/// the same blocking semantics — the caller's arguments stay valid and the callback's result (or +/// failure) flows back to native code. As with the lock, a UI thread that is itself blocked waiting +/// on the calling thread deadlocks. +pub fn run_on_ui_thread_sync(f: impl FnOnce() -> R + Send) -> Option { + if is_ui_thread() { + return Some(f()); + } + let dq = UI_QUEUE.get()?; + + let slot: std::sync::Arc<(std::sync::Mutex>, std::sync::Condvar)> = + std::sync::Arc::new((std::sync::Mutex::new(None), std::sync::Condvar::new())); + let slot2 = slot.clone(); + let job: Box = Box::new(move || { + let r = f(); + let (lock, cvar) = &*slot2; + *lock.lock().unwrap_or_else(|e| e.into_inner()) = Some(r); + cvar.notify_all(); + }); + // SAFETY: the job may borrow from the caller's stack (`f` is not 'static). Once queued, this + // function waits until the job has run or the dispatcher has dropped it unrun; if queueing + // fails, the job is dropped before returning. Either way it never outlives what it borrows. + let job: Box = unsafe { std::mem::transmute(job) }; + + let cell = std::sync::Mutex::new(Some(job)); + let handler = DispatcherQueueHandler::new(move || { + if let Some(job) = cell.lock().unwrap_or_else(|e| e.into_inner()).take() { + job(); + } + Ok(()) + }); + if !dq.TryEnqueue(&handler).unwrap_or(false) { + return None; + } + drop(handler); + + let (lock, cvar) = &*slot; + let mut guard = lock.lock().unwrap_or_else(|e| e.into_inner()); + loop { + if let Some(r) = guard.take() { + return Some(r); + } + // The only way out without a result is the dispatcher dropping the job unrun (shutdown): + // then nothing else holds the job's half of `slot`. + if std::sync::Arc::strong_count(&slot) == 1 { + return None; + } + guard = cvar + .wait_timeout(guard, std::time::Duration::from_millis(100)) + .unwrap_or_else(|e| e.into_inner()) + .0; + } +} + +/// Whether `id` is the recorded UI thread. +pub fn is_ui_thread_id(id: ThreadId) -> bool { + UI_THREAD_ID.get().copied() == Some(id) +} + /// Returns true if the current thread is the recorded UI thread. pub fn is_ui_thread() -> bool { UI_THREAD_ID.get().copied() == Some(std::thread::current().id()) diff --git a/template/build.ps1 b/template/build.ps1 index 5900012..b56dd47 100644 --- a/template/build.ps1 +++ b/template/build.ps1 @@ -328,40 +328,6 @@ if (Test-Path $nsbundlePackX64Path) { Write-Host " copied nsbundle_pack-x64.exe -> nsbundle_pack.exe" } -# sbg prebuilt binaries -Write-Host "`n=== Build sbg prebuilt binaries ===" -ForegroundColor Cyan - -foreach ($t in $Targets) { - $arch = $t.Arch - $rustTarget = $t.RustTarget - Write-Host "Building sbg for $arch ($rustTarget)..." - Push-Location $RepoRoot - try { - & cargo build -p sbg --release --target $rustTarget - $buildExit = $LASTEXITCODE - } finally { - Pop-Location - } - if ($buildExit -ne 0) { - Write-Host "cargo build for sbg failed for target $rustTarget (exit $buildExit). Skipping copy for $arch." -ForegroundColor Yellow - continue - } - $candidate = Join-Path $RepoRoot "target\$rustTarget\release\sbg.exe" - if (Test-Path $candidate) { - $dest = Join-Path $ToolsDir "sbg-$arch.exe" - Copy-Item -Force $candidate $dest - Write-Host " copied sbg -> $(Resolve-Path $dest -Relative)" - } else { - Write-Host "Expected build output not found: $candidate" -ForegroundColor Yellow - } -} - -$x64Path = Join-Path $ToolsDir "sbg-x64.exe" -if (Test-Path $x64Path) { - Copy-Item -Force $x64Path (Join-Path $ToolsDir "sbg.exe") - Write-Host " copied sbg-x64.exe -> sbg.exe" -} - # typings-generator: shipped so `ns typings windows` can generate WinRT/.NET typings. Write-Host "`n=== Build typings-generator prebuilt binaries ===" -ForegroundColor Cyan diff --git a/template/framework/__PROJECT_NAME__/App.xaml.cs b/template/framework/__PROJECT_NAME__/App.xaml.cs index 6ed7b9e..a246c51 100644 --- a/template/framework/__PROJECT_NAME__/App.xaml.cs +++ b/template/framework/__PROJECT_NAME__/App.xaml.cs @@ -57,7 +57,7 @@ protected override async void OnLaunched(LaunchActivatedEventArgs e) try { var panicLogPath = System.IO.Path.Combine( - ApplicationData.Current.LocalFolder.Path, "nativescript-panic.log"); + RuntimeHost.LocalFolderPath, "nativescript-panic.log"); if (System.IO.File.Exists(panicLogPath)) { var content = System.IO.File.ReadAllText(panicLogPath); @@ -121,7 +121,8 @@ private void OnWindowClosed(object sender, WindowEventArgs e) { StopPump(); _runtimeHost.NotifyAppEvent((int)AppEventKind.Exit, null); - ApplicationData.Current.LocalSettings.Values[LastLaunchArgsKey] = string.Empty; + try { ApplicationData.Current.LocalSettings.Values[LastLaunchArgsKey] = string.Empty; } + catch (InvalidOperationException) { } // unpackaged: no ApplicationData _runtimeHost.Dispose(); } diff --git a/template/framework/__PROJECT_NAME__/CrashDiagnostics.cs b/template/framework/__PROJECT_NAME__/CrashDiagnostics.cs index 8917bf5..b843e17 100644 --- a/template/framework/__PROJECT_NAME__/CrashDiagnostics.cs +++ b/template/framework/__PROJECT_NAME__/CrashDiagnostics.cs @@ -101,7 +101,7 @@ public static string BuildErrorReport(Exception ex, string jsError = null, strin // Include panic log from previous or current run try { - var panicLog = Path.Combine(ApplicationData.Current.LocalFolder.Path, "nativescript-panic.log"); + var panicLog = Path.Combine(RuntimeHost.LocalFolderPath, "nativescript-panic.log"); if (File.Exists(panicLog)) { var content = File.ReadAllText(panicLog, Encoding.UTF8).Trim(); @@ -130,7 +130,7 @@ public static string BuildErrorReport(Exception ex, string jsError = null, strin public static string CrashLogPath() { - try { return Path.Combine(ApplicationData.Current.LocalFolder.Path, "nativescript-crash.log"); } + try { return Path.Combine(RuntimeHost.LocalFolderPath, "nativescript-crash.log"); } catch { return null; } } @@ -272,7 +272,7 @@ private static void AppendToLog(string content) { try { - var logPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "nativescript-crash.log"); + var logPath = Path.Combine(RuntimeHost.LocalFolderPath, "nativescript-crash.log"); File.AppendAllText(logPath, content, Encoding.UTF8); } catch { } diff --git a/template/framework/__PROJECT_NAME__/RuntimeHost.cs b/template/framework/__PROJECT_NAME__/RuntimeHost.cs index 893b8e7..8165c7c 100644 --- a/template/framework/__PROJECT_NAME__/RuntimeHost.cs +++ b/template/framework/__PROJECT_NAME__/RuntimeHost.cs @@ -175,13 +175,38 @@ private void StartDevtoolsSafely() private long _runtime; private bool _initialized; + private static string _localFolderPath; + + /// The app's local data folder: ApplicationData's LocalFolder for a packaged app, or + /// %LOCALAPPDATA%\ for an unpackaged one (WindowsPackageType=None), which has + /// no package identity and therefore no ApplicationData. + internal static string LocalFolderPath + { + get + { + if (_localFolderPath != null) return _localFolderPath; + try + { + _localFolderPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path; + } + catch (InvalidOperationException) + { + var name = Assembly.GetEntryAssembly()?.GetName().Name ?? "NativeScriptApp"; + _localFolderPath = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), name); + Directory.CreateDirectory(_localFolderPath); + } + return _localFolderPath; + } + } + public void Initialize() { if (_initialized) return; bool attached = false; try { attached = AttachConsole(ATTACH_PARENT_PROCESS); } catch { } runtime_install_ctrlc_handler(0); - runtime_set_local_folder(Windows.Storage.ApplicationData.Current.LocalFolder.Path); + runtime_set_local_folder(LocalFolderPath); _runtime = runtime_init(AppContext.BaseDirectory); #if DEBUG TrySetDebugBuild(); @@ -222,7 +247,7 @@ public void Initialize() #if DEBUG private static string MarkerPath(string name) => - Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, name); + Path.Combine(LocalFolderPath, name); private static bool ConsumeMarker(string name) { diff --git a/template/framework/__PROJECT_NAME__/__PROJECT_NAME__.csproj b/template/framework/__PROJECT_NAME__/__PROJECT_NAME__.csproj index b33c6e5..31b0b51 100644 --- a/template/framework/__PROJECT_NAME__/__PROJECT_NAME__.csproj +++ b/template/framework/__PROJECT_NAME__/__PROJECT_NAME__.csproj @@ -25,19 +25,14 @@ $(MSBuildProjectDirectory)\.. - - $(BaseIntermediateOutputPath)_ns_\gen - $(MSBuildProjectDirectory)\$(NSGenDir) $(NS_WINDOWS_RUNTIME_ROOT) $(MSBuildProjectDirectory)\.. - $(SBG_OUTPUT_DIR)\sbg_metadata.json $(NSWindowsRoot)\tools - $(NSToolsDir)\sbg.exe $(NSToolsDir)\dotnet-tool.exe @@ -96,8 +91,12 @@ PreserveNewest - - + + PreserveNewest @@ -192,47 +191,17 @@ - - - - - + + - - - - - - - - - - - - - - - - - buf) { private readonly ReadOnlySpan _buf = buf; @@ -24,6 +38,8 @@ internal ref struct BinReader(ReadOnlySpan buf) public byte ReadByte() => _buf[_pos++]; + public bool HasMore => _pos < _buf.Length; + public int ReadI32() { var v = BinaryPrimitives.ReadInt32LittleEndian(_buf[_pos..]); @@ -96,6 +112,8 @@ public uint ReadU32() 0x05 => (object)ReadString16(), 0x06 => (object)new HandleRef(ReadI32()), 0x0A => (object)new WinRtRef(ReadI64()), + 0x0C => (object)new JsFunctionRef(ReadI32()), + 0x0D => (object)new JsJsonValue(ReadString32()), _ => null, }; } diff --git a/template/framework/dotnet-bridge/Bridge.BinaryDispatch.cs b/template/framework/dotnet-bridge/Bridge.BinaryDispatch.cs index 7af021e..fb4847d 100644 --- a/template/framework/dotnet-bridge/Bridge.BinaryDispatch.cs +++ b/template/framework/dotnet-bridge/Bridge.BinaryDispatch.cs @@ -116,7 +116,8 @@ internal static DispatchResult DispatchBin(ref BinReader r) for (int i = 0; i < memberCount; i++) memberNames[i] = r.ReadString16(); var callbackId = r.ReadI32(); - return CreateJsSubclass(NullIfEmpty(assembly), typeName, callbackId, interfaceNames, memberNames); + var ctorArgs = r.HasMore ? r.ReadArgs() : []; + return CreateJsSubclass(NullIfEmpty(assembly), typeName, callbackId, interfaceNames, memberNames, ctorArgs); } if (op == 0x0B) // get CLR-only property by raw IInspectable ptr (CLR reflection fallback) @@ -176,7 +177,35 @@ private static DispatchResult DispatchCallBin( } } + // Overloads with the same parameter count (Describe(Animal) / Describe(Shape)): pick the + // first whose parameter types the arguments convert to. + var overloads = GetOverloads(type, method, args.Length, flags); + if (overloads.Length > 1) + { + foreach (var overload in overloads) + { + var ps = overload.GetParameters(); + object?[] built; + try { built = BuildArgsBinExact(args, ps); } + catch { continue; } + if (!ArgsFit(built, ps)) continue; + return Box(overload.Invoke(target, built)); + } + } + var entry = GetCachedMethod(type, method, args.Length, flags); + if (entry.Invoke is null && target is not null && IsJsBacked(target)) + { + // A JS subclass may call the protected members it inherits. + var protectedFlags = BindingFlags.Instance | BindingFlags.NonPublic; + var inherited = type.GetMethods(protectedFlags) + .FirstOrDefault(m => m.Name == method && (m.IsFamily || m.IsFamilyOrAssembly) && m.GetParameters().Length == args.Length); + if (inherited is not null) + { + var built = BuildArgsBinExact(args, inherited.GetParameters()); + return Box(inherited.Invoke(target, built)); + } + } if (entry.Invoke is null) { var candidates = type.GetMethods(flags).Where(m => m.Name == method && !m.IsSpecialName); @@ -186,7 +215,7 @@ private static DispatchResult DispatchCallBin( var built = BuildArgsBin(args, parameters); try { - var res = AwaitIfTask(m.Invoke(target, built)); + var res = (m.Invoke(target, built)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) @@ -194,7 +223,7 @@ private static DispatchResult DispatchCallBin( if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -204,7 +233,7 @@ private static DispatchResult DispatchCallBin( if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -219,25 +248,33 @@ private static DispatchResult DispatchCallBin( try { try { - var res = AwaitIfTask(entry.Invoke(target, builtArgs)); + var res = (entry.Invoke(target, builtArgs)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(entry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (entry.Invoke(target, builtArgs))); return Box(res); } catch (System.Runtime.InteropServices.COMException ce) when (IsMarshaledForDifferentThread(ce)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(entry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (entry.Invoke(target, builtArgs))); return Box(res); } } finally { if (builtArgs.Length > 0) ReturnArgs(builtArgs); } } + private static readonly System.Collections.Concurrent.ConcurrentDictionary s_overloadCache = new(); + + private static MethodInfo[] GetOverloads(Type type, string name, int argCount, BindingFlags flags) + => s_overloadCache.GetOrAdd(new MethodKey(type, name, argCount, flags), static k => + k.Type.GetMethods(k.Flags) + .Where(m => m.Name == k.Name && !m.IsGenericMethodDefinition && m.GetParameters().Length == k.ArgCount) + .ToArray()); + private static object?[] BuildArgsBin(object?[] binArgs, ParameterInfo[] parameters) { if (parameters.Length == 0) return []; @@ -256,6 +293,16 @@ private static DispatchResult DispatchCallBin( return result; } + // Plain JS objects <-> .NET structs/records: public fields count (Windows.Foundation.Size and most + // interop structs are fields), member names match case-insensitively. + internal static readonly System.Text.Json.JsonSerializerOptions s_jsJsonOptions = new() + { + IncludeFields = true, + PropertyNameCaseInsensitive = true, + NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString + | System.Text.Json.Serialization.JsonNumberHandling.AllowNamedFloatingPointLiterals, + }; + private static object? CoerceBin(object? value, Type targetType) { if (value is null) return null; @@ -319,8 +366,28 @@ private static DispatchResult DispatchCallBin( throw; } } + if (value is JsJsonValue json) + { + if (targetType == typeof(string)) return json.Json; + var target = targetType == typeof(object) ? typeof(System.Text.Json.JsonElement) : targetType; + return System.Text.Json.JsonSerializer.Deserialize(json.Json, target, s_jsJsonOptions); + } + if (value is JsFunctionRef fn) + { + var delegateType = typeof(Delegate).IsAssignableFrom(targetType) + && targetType != typeof(Delegate) && targetType != typeof(MulticastDelegate) + ? targetType + : typeof(Action); + return MakeJsDelegate(delegateType, fn.Id); + } if (value.GetType() == targetType) return value; - try { return Convert.ChangeType(value, targetType); } + var underlying = Nullable.GetUnderlyingType(targetType) ?? targetType; + if (underlying.IsEnum) + { + try { return Enum.ToObject(underlying, Convert.ToInt64(value)); } + catch { return value; } + } + try { return Convert.ChangeType(value, underlying); } catch { return value; } } diff --git a/template/framework/dotnet-bridge/Bridge.Dispatch.cs b/template/framework/dotnet-bridge/Bridge.Dispatch.cs index f3eef5f..bdca5ad 100644 --- a/template/framework/dotnet-bridge/Bridge.Dispatch.cs +++ b/template/framework/dotnet-bridge/Bridge.Dispatch.cs @@ -115,7 +115,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) var built = BuildArgs(args, parameters); try { - var res = AwaitIfTask(m.Invoke(target, built)); + var res = (m.Invoke(target, built)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) @@ -123,7 +123,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -133,7 +133,7 @@ internal static DispatchResult Dispatch(InvokeRequest req) if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{m.Name} on UI thread"); try { - var res = InvokeOnUIThread(() => AwaitIfTask(m.Invoke(target, built))); + var res = InvokeOnUIThread(() => (m.Invoke(target, built))); return Box(res); } catch { /* retry failed — try next candidate */ } @@ -148,19 +148,19 @@ internal static DispatchResult Dispatch(InvokeRequest req) try { try { - var res = AwaitIfTask(dispEntry.Invoke(target, builtArgs)); + var res = (dispEntry.Invoke(target, builtArgs)); return Box(res); } catch (TargetInvocationException tie) when (IsMarshaledForDifferentThread(tie.InnerException)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected wrong-thread COM error; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(dispEntry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (dispEntry.Invoke(target, builtArgs))); return Box(res); } catch (System.Runtime.InteropServices.COMException ce) when (IsMarshaledForDifferentThread(ce)) { if (Bridge.IsLogToConsole()) Console.Error.WriteLine($"[Bridge] Detected COMException wrong-thread; retrying {type.FullName}.{method} on UI thread"); - var res = InvokeOnUIThread(() => AwaitIfTask(dispEntry.Invoke(target, builtArgs))); + var res = InvokeOnUIThread(() => (dispEntry.Invoke(target, builtArgs))); return Box(res); } } @@ -263,34 +263,6 @@ private static void ReturnArgs(object?[] args) => return el.Deserialize(targetType, s_coerceOpts); } - private static object? AwaitIfTask(object? value) - { - if (value is null) return null; - - if (value is Task task) - { - task.GetAwaiter().GetResult(); - return TaskResultCache.GetResult(task); - } - - if (value is ValueTask vt) - { - vt.AsTask().GetAwaiter().GetResult(); - return null; - } - - var type = value.GetType(); - if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(ValueTask<>)) - { - var innerTask = ValueTaskAsTaskCache.AsTask(type, value); - innerTask.GetAwaiter().GetResult(); - if (innerTask.IsFaulted) throw innerTask.Exception!.InnerException ?? innerTask.Exception; - return TaskResultCache.GetResult(innerTask); - } - - return value; - } - private static DispatchResult Box(object? value) { if (value is null) return DispatchResult.Void; @@ -321,6 +293,11 @@ private static DispatchResult Box(object? value) return DispatchResult.Primitive(Convert.ChangeType(value, ut), ut); } + // An instance of a JS subclass goes back to JS as the handle its JS object was created + // with, so the runtime hands out that same JS object (identity, fields, overrides). + if (TryGetJsBackedHandle(value, out var jsHandle)) + return DispatchResult.Handle(jsHandle, t.FullName ?? t.Name); + var id = Interlocked.Increment(ref s_nextHandle); @@ -363,6 +340,30 @@ private static bool IsAwaitable(object? value, Type t) null, Type.EmptyTypes, null) is not null; } + /// "interface", "abstract", "sealed", "class", "struct", "enum", "delegate" or "" (not found). + /// Lets JS decide between `new Interface({...})`, subclassing and plain construction. + public static string TypeKind(string typeName) + { + var t = ResolveType(null, typeName); + if (t is null) return ""; + if (t.IsInterface) return "interface"; + if (t.IsEnum) return "enum"; + if (typeof(Delegate).IsAssignableFrom(t)) return "delegate"; + if (t.IsValueType) return "struct"; + if (t.IsAbstract && t.IsSealed) return "static"; + if (t.IsAbstract) return "abstract"; + if (t.IsSealed) return "sealed"; + return "class"; + } + + /// `value instanceof SomeType` for a .NET object that was not constructed from JS. + public static bool IsInstanceOf(object? value, string typeName) + { + if (value is null) return false; + var t = ResolveType(null, typeName); + return t is not null && t.IsInstanceOfType(value); + } + internal static DispatchResult BuildMembersResult(Type t) { const BindingFlags inst = BindingFlags.Public | BindingFlags.Instance; diff --git a/template/framework/dotnet-bridge/Bridge.JsDelegate.cs b/template/framework/dotnet-bridge/Bridge.JsDelegate.cs index b238d6c..c0cf68b 100644 --- a/template/framework/dotnet-bridge/Bridge.JsDelegate.cs +++ b/template/framework/dotnet-bridge/Bridge.JsDelegate.cs @@ -12,91 +12,129 @@ namespace NativeScriptBridge; public static partial class Bridge { // opcode 0x09: given a delegate type name (or "" for System.Action) and a - // JS callback id, compile a .NET delegate that serialises its parameters as - // binary and calls back into V8 via the s_jsInvoker function pointer. - + // JS callback id, create a .NET delegate that calls back into V8. private static DispatchResult CreateJsDelegate(string typeName, int callbackId) { var delegateType = string.IsNullOrEmpty(typeName) ? typeof(Action) : ResolveType(null, typeName) ?? throw new TypeLoadException($"Delegate type not found: {typeName}"); + return Box(MakeJsDelegate(delegateType, callbackId)); + } - var invokeMethod = delegateType.GetMethod("Invoke") - ?? throw new MissingMethodException($"No Invoke method on {delegateType}"); + // The target a JS-backed delegate is bound to. When the delegate is collected the finalizer + // tells the runtime, which then drops its reference to the JS function. + internal sealed class JsCallbackTarget(int callbackId) + { + public readonly int CallbackId = callbackId; + + public object? Invoke(object?[] args) => CallJsCallback(CallbackId, args, expectsResult: true); + + public void InvokeVoid(object?[] args) => CallJsCallback(CallbackId, args, expectsResult: false); + + ~JsCallbackTarget() + { + ReleaseJsCallback(CallbackId); + } + } - var parameters = invokeMethod.GetParameters(); - var returnType = invokeMethod.ReturnType; + // Function pointer registered by the runtime (RegisterJsCallbackRelease) to drop a JS function + // whose delegate was collected. Called from the finalizer thread; the runtime queues the id. + internal static unsafe delegate* unmanaged[Cdecl] s_jsCallbackRelease; - // Build a dynamic method that marshals parameters into an object[] and - // calls back into JS via CallJsCallback/CallJsCallbackVoid. Expression - // compilation occasionally generates incorrect code for some delegate - // shapes; emitting IL here is reliable across signatures. - var paramTypes = parameters.Select(p => p.ParameterType).ToArray(); - - var dm = new DynamicMethod($"__ns_js_delegate_{callbackId}", - returnType, paramTypes, typeof(Bridge).Module, skipVisibility: true); + [UnmanagedCallersOnly(EntryPoint = "RegisterJsCallbackRelease", + CallConvs = [typeof(System.Runtime.CompilerServices.CallConvCdecl)])] + public static unsafe int RegisterJsCallbackRelease(delegate* unmanaged[Cdecl] release) + { + s_jsCallbackRelease = release; + return 0; + } + + internal static unsafe void ReleaseJsCallback(int callbackId) + { + var release = s_jsCallbackRelease; + if (release == null) return; + try { release(callbackId); } catch { } + } + + // One invoker per delegate type: (JsCallbackTarget target, ) -> . + // It packs the arguments into object[] and calls target.Invoke/InvokeVoid; a delegate instance is + // that invoker closed over its target, so creating a delegate emits no code. + private static readonly System.Collections.Concurrent.ConcurrentDictionary s_jsDelegateInvokers = new(); + internal static Delegate MakeJsDelegate(Type delegateType, int callbackId) + { + var invoker = s_jsDelegateInvokers.GetOrAdd(delegateType, BuildJsDelegateInvoker); + return invoker.CreateDelegate(delegateType, new JsCallbackTarget(callbackId)); + } + + private static DynamicMethod BuildJsDelegateInvoker(Type delegateType) + { + var invokeMethod = delegateType.GetMethod("Invoke") + ?? throw new MissingMethodException($"No Invoke method on {delegateType}"); + var paramTypes = invokeMethod.GetParameters().Select(p => p.ParameterType).ToArray(); + var returnType = invokeMethod.ReturnType; + + // Emitting IL (rather than compiling an expression tree) is reliable across delegate shapes. + var dm = new DynamicMethod($"__ns_js_delegate_{delegateType.Name}", returnType, + [typeof(JsCallbackTarget), .. paramTypes], typeof(Bridge).Module, skipVisibility: true); var il = dm.GetILGenerator(); - // local: object[] argsArray - var argsLocal = il.DeclareLocal(typeof(object[])); + + il.Emit(OpCodes.Ldarg_0); il.Emit(OpCodes.Ldc_I4, paramTypes.Length); il.Emit(OpCodes.Newarr, typeof(object)); - il.Emit(OpCodes.Stloc, argsLocal); - for (int i = 0; i < paramTypes.Length; i++) { - il.Emit(OpCodes.Ldloc, argsLocal); + var paramType = paramTypes[i].IsByRef ? paramTypes[i].GetElementType()! : paramTypes[i]; + il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldc_I4, i); - // load argument (Ldarg_0..) - switch (i + 1) - { - case 1: il.Emit(OpCodes.Ldarg_0); break; - case 2: il.Emit(OpCodes.Ldarg_1); break; - case 3: il.Emit(OpCodes.Ldarg_2); break; - case 4: il.Emit(OpCodes.Ldarg_3); break; - default: il.Emit(OpCodes.Ldarg, i + 1); break; - } - if (paramTypes[i].IsValueType) il.Emit(OpCodes.Box, paramTypes[i]); + il.Emit(OpCodes.Ldarg, i + 1); + if (paramTypes[i].IsByRef) il.Emit(OpCodes.Ldobj, paramType); + if (paramType.IsValueType) il.Emit(OpCodes.Box, paramType); il.Emit(OpCodes.Stelem_Ref); } - - if (returnType == typeof(void)) { - var callVoid = typeof(Bridge).GetMethod(nameof(CallJsCallbackVoid), BindingFlags.Static | BindingFlags.NonPublic)!; - il.Emit(OpCodes.Ldc_I4, callbackId); - il.Emit(OpCodes.Ldloc, argsLocal); - il.Emit(OpCodes.Call, callVoid); - il.Emit(OpCodes.Ret); + il.Emit(OpCodes.Call, typeof(JsCallbackTarget).GetMethod(nameof(JsCallbackTarget.InvokeVoid))!); } else { - var callObj = typeof(Bridge).GetMethod(nameof(CallJsCallback), BindingFlags.Static | BindingFlags.NonPublic)!; - il.Emit(OpCodes.Ldc_I4, callbackId); - il.Emit(OpCodes.Ldloc, argsLocal); - il.Emit(OpCodes.Call, callObj); - // ignore returned object and return default(returnType) - if (returnType.IsValueType) - { - var loc = il.DeclareLocal(returnType); - il.Emit(OpCodes.Ldloca_S, loc); - il.Emit(OpCodes.Initobj, returnType); - il.Emit(OpCodes.Ldloc, loc); - } - else - { - il.Emit(OpCodes.Ldnull); - } - il.Emit(OpCodes.Ret); + il.Emit(OpCodes.Call, typeof(JsCallbackTarget).GetMethod(nameof(JsCallbackTarget.Invoke))!); + il.Emit(OpCodes.Ldtoken, returnType); + il.Emit(OpCodes.Call, typeof(Type).GetMethod(nameof(Type.GetTypeFromHandle))!); + il.Emit(OpCodes.Call, typeof(Bridge).GetMethod(nameof(ConvertJsResult), BindingFlags.Static | BindingFlags.NonPublic)!); + il.Emit(OpCodes.Unbox_Any, returnType); } + il.Emit(OpCodes.Ret); + return dm; + } - var del = dm.CreateDelegate(delegateType); - return Box(del); + // A JS callback's result, converted to the type the managed caller expects (a delegate's return + // type or an overridden member's). + internal static object? ConvertJsResult(object? value, Type returnType) + { + if (value is null) + return returnType.IsValueType && Nullable.GetUnderlyingType(returnType) is null + ? Activator.CreateInstance(returnType) + : null; + var coerced = CoerceBin(value, returnType); + if (coerced is null || returnType.IsInstanceOfType(coerced)) return coerced; + var underlying = Nullable.GetUnderlyingType(returnType) ?? returnType; + try { return Convert.ChangeType(coerced, underlying); } + catch (Exception e) + { + throw new InvalidCastException( + $"JavaScript returned {coerced.GetType().Name}, which can't be converted to {returnType.FullName}", e); + } } - internal static unsafe object? CallJsCallback(int id, object?[] args) + internal static object? CallJsCallback(int id, object?[] args) => CallJsCallback(id, args, expectsResult: true); + + // Calls the JS function registered under `id`. When it throws, a caller that expects a result + // gets a JsException (a delegate with a return value, an overridden member); a void delegate or + // event just returns, the error having been reported as an uncaught JS error. + internal static unsafe object? CallJsCallback(int id, object?[] args, bool expectsResult) { if (s_jsInvoker == null) return null; @@ -116,16 +154,21 @@ private static DispatchResult CreateJsDelegate(string typeName, int callbackId) // Response is only set for non-void delegates; parse and free when present. if (respPtr != null && respLen > 0) { + string? jsError = null; try { var span = new ReadOnlySpan(respPtr, respLen); - result = ParseCallbackResponse(span); + if (span[0] == 0x0F) + jsError = span.Length > 5 ? new BinReader(span[1..]).ReadString32() : "the JavaScript callback could not run"; + else + result = ParseCallbackResponse(span); } catch { result = null; } finally { Marshal.FreeHGlobal((IntPtr)respPtr); } + if (jsError != null && expectsResult) throw new JsException(jsError); } return result; @@ -176,6 +219,15 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) if (arg is float f) { w.WriteByte(0x04); w.WriteF64((double)f); return; } if (arg is double d){ w.WriteByte(0x04); w.WriteF64(d); return; } if (arg is string s){ w.WriteByte(0x05); w.WriteString32(s); return; } + if (arg is Enum e) { w.WriteByte(0x04); w.WriteF64(Convert.ToDouble(e)); return; } + if (arg is decimal m){ w.WriteByte(0x04); w.WriteF64((double)m); return; } + // A struct (Windows.Foundation.Size, a C# record struct, ...) arrives as a plain JS object. + if (arg.GetType().IsValueType && !arg.GetType().IsPrimitive) + { + string? json = null; + try { json = System.Text.Json.JsonSerializer.Serialize(arg, arg.GetType(), s_jsJsonOptions); } catch { } + if (json != null) { w.WriteByte(0x0D); w.WriteString32(json); return; } + } // Object: box in the handle map and send as a handle reference. // The JS side receives {__handle, __type} which can be turned into a @@ -209,6 +261,7 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) case 0x05: return (object)r.ReadString32(); case 0x06: return (object)new HandleRef(r.ReadI32()); case 0x0A: return (object)new WinRtRef(r.ReadI64()); + case 0x0D: return new JsJsonValue(r.ReadString32()); case 0x07: // array: u32 count + N tagged items { var count = (int)r.ReadU32(); @@ -237,8 +290,11 @@ private static void WriteCallbackArg(ref BinWriter w, object? arg) internal static unsafe void CallJsCallbackVoid(int id, object?[] args) { - CallJsCallback(id, args); + CallJsCallback(id, args, expectsResult: false); } } + +/// Thrown into managed code when a JavaScript callback that was expected to return a value threw. +public sealed class JsException(string message) : Exception(message); diff --git a/template/framework/dotnet-bridge/Bridge.Proxy.cs b/template/framework/dotnet-bridge/Bridge.Proxy.cs index 89e3cef..2c7619f 100644 --- a/template/framework/dotnet-bridge/Bridge.Proxy.cs +++ b/template/framework/dotnet-bridge/Bridge.Proxy.cs @@ -51,9 +51,7 @@ public static class ProxyRuntime public static T InvokeMethodTyped(object instance, string methodName, object[] args) { var result = ProxyInvokeMethod(instance, methodName, args); - if (result is null) return default!; - if (result is T t) return t; - return (T)Convert.ChangeType(result, typeof(T), CultureInfo.InvariantCulture); + return (T)ConvertJsResult(result, typeof(T))!; } public static object? InvokeMethod(object instance, string methodName, object[] args) @@ -69,9 +67,7 @@ public static void InvokeVoid(object instance, string methodName, object[] args) public static T GetProperty(object instance, string propertyName) { var result = ProxyGetProperty(instance, propertyName); - if (result is null) return default!; - if (result is T t) return t; - return (T)Convert.ChangeType(result, typeof(T), CultureInfo.InvariantCulture); + return (T)ConvertJsResult(result, typeof(T))!; } public static void SetProperty(object instance, string propertyName, object? value) @@ -208,8 +204,10 @@ private static Type CreateDynamicProxyType(Type baseType, string[] interfaceName // ctor exists on the derived type. If the base type has no parameterless // ctor, emit a parameterless ctor that forwards default(T) values to the // first available base ctor (dev-only convenience). - var baseCtors = baseType.GetConstructors(BindingFlags.Public | BindingFlags.Instance) - .Where(c => !c.IsGenericMethod) + // Public and protected base constructors: a JS subclass can call either through super(...), + // and abstract classes / composable WinRT classes (Panel, Control) only have protected ones. + var baseCtors = baseType.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(c => !c.IsGenericMethod && (c.IsPublic || c.IsFamily || c.IsFamilyOrAssembly)) .ToArray(); ConstructorInfo? chosenBaseForDefault = null; @@ -293,8 +291,12 @@ static string SignatureKey(string name, Type[] paramTypes) => // Override only the base virtuals JS actually asked for (memberSet). Anything not in // that set is simply never touched, so the base implementation stays live in the vtable — // no "call base" IL needed. (Skip ref/out and generic methods — unsupported.) + // Abstract members are always implemented (dispatching to JS, which reports a missing + // implementation as an error) — a type with an unimplemented abstract member can't be created. var virtualMethods = baseType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => m.IsVirtual && !m.IsFinal && !m.IsGenericMethod && !m.IsConstructor && memberSet.Contains(m.Name)) + .Where(m => m.IsVirtual && !m.IsFinal && !m.IsGenericMethod && !m.IsConstructor + && (m.IsPublic || m.IsFamily || m.IsFamilyOrAssembly) + && (memberSet.Contains(m.Name) || m.IsAbstract)) .ToArray(); foreach (var mi in virtualMethods) @@ -310,6 +312,11 @@ static string SignatureKey(string name, Type[] paramTypes) => MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, mi.CallingConvention, mi.ReturnType, paramTypes, mi.Name); definedSignatures[sigKey] = mb; + + // `super.Name(...)` from JS: a public, non-virtual entry point to the base + // implementation (a plain call, so it can't dispatch back into the override). + if (!mi.IsAbstract) + EmitBaseCallMethod(tb, mi, paramTypes); } tb.DefineMethodOverride(mb, mi); @@ -359,6 +366,20 @@ void CollectInterfaces(Type t) return tb.CreateTypeInfo()!.AsType(); } + internal const string BaseCallPrefix = "__ns_base_"; + + private static void EmitBaseCallMethod(TypeBuilder tb, MethodInfo baseMethod, Type[] paramTypes) + { + var mb = tb.DefineMethod(BaseCallPrefix + baseMethod.Name, + MethodAttributes.Public | MethodAttributes.HideBySig, CallingConventions.HasThis, + baseMethod.ReturnType, paramTypes); + var il = mb.GetILGenerator(); + il.Emit(OpCodes.Ldarg_0); + for (int i = 0; i < paramTypes.Length; i++) il.Emit(OpCodes.Ldarg, i + 1); + il.Emit(OpCodes.Call, baseMethod); + il.Emit(OpCodes.Ret); + } + // Shared IL body for both base-virtual overrides and interface-member implementations: box // args into an object[], forward to ProxyRuntime.InvokeVoid/InvokeMethodTyped by name. private static MethodBuilder EmitProxyMethodBody( @@ -406,82 +427,103 @@ private static MethodBuilder EmitProxyMethodBody( private static DispatchResult CreateJsSubclass( string? assemblyName, string typeName, int callbackId, string[] interfaceNames, string[] memberNames) + => CreateJsSubclass(assemblyName, typeName, callbackId, interfaceNames, memberNames, []); + + // Creates an instance of a JS subclass: a dynamic subclass of the base type (or of System.Object + // when the "base" is an interface being implemented) whose overridden virtuals and interface + // members call the JS object registered under `callbackId`. `ctorArgs` select and feed the + // base constructor, as `super(...)` arguments do on Android/iOS. + private static DispatchResult CreateJsSubclass( + string? assemblyName, string typeName, int callbackId, string[] interfaceNames, string[] memberNames, object?[] ctorArgs) { EnsureProxyDispatcherCallbacksRegistered(); - s_pendingProxyCallbackId.Value = callbackId; + // `typeName` is the base type; older runtimes passed an auto-generated proxy name there and + // the base type in `assemblyName`. + var baseType = ResolveType(null, typeName) + ?? (string.IsNullOrEmpty(assemblyName) ? null : ResolveType(null, assemblyName)) + ?? throw new TypeLoadException($"Type not found: {typeName}"); - // Try to find a statically-generated proxy type first (Mechanism A: sbg-compiled into - // the app itself — already has any requested interfaces baked into real C# source). - Type? t = FindGeneratedProxyType(typeName); - if (t is null) + var interfaces = interfaceNames.ToList(); + if (baseType.IsInterface) { - // When typeName is an auto-generated proxy name (com.tns.gen.winrt.*), - // the caller puts the real base type name in assemblyName so we can - // look up or dynamically emit a proxy for the correct base class. - string? resolveFrom = typeName; - if (!string.IsNullOrEmpty(assemblyName) - && typeName.StartsWith("com.tns.gen.winrt.", StringComparison.Ordinal)) - { - resolveFrom = assemblyName; - } + interfaces.Insert(0, baseType.FullName!); + baseType = typeof(object); + } + if (baseType.IsSealed) + throw new InvalidOperationException($"{baseType.FullName} is sealed and can't be extended."); - // Resolve the WinRT/base type and optionally emit a dynamic proxy (Mechanism B fallback). - var baseType = ResolveType(null, resolveFrom) - ?? ResolveType(assemblyName, typeName) - ?? throw new TypeLoadException($"Type not found: {resolveFrom} (proxy: {typeName}, assembly: {assemblyName})"); + var proxyType = GetOrCreateDynamicProxyType(baseType, interfaces.ToArray(), memberNames); - if (baseType.IsClass && !baseType.IsSealed) - { - try { t = GetOrCreateDynamicProxyType(baseType, interfaceNames, memberNames); } - catch (Exception) { t = baseType; } - } - else + // Pick the constructor by argument count, preferring one whose parameters the arguments + // convert to. + var ctors = proxyType.GetConstructors().Where(c => c.GetParameters().Length == ctorArgs.Length).ToArray(); + if (ctors.Length == 0) + throw new MissingMethodException($"{baseType.FullName} has no constructor taking {ctorArgs.Length} argument(s)."); + object? instance = null; + Exception? lastError = null; + s_pendingProxyCallbackId.Value = callbackId; + try + { + foreach (var ctor in ctors) { - t = baseType; + object?[] built; + try { built = BuildArgsBinExact(ctorArgs, ctor.GetParameters()); } + catch (Exception e) { lastError = e; continue; } + if (!ArgsFit(built, ctor.GetParameters())) continue; + instance = ctor.Invoke(built); + break; } + if (instance is null) + throw lastError ?? new MissingMethodException( + $"No constructor of {baseType.FullName} accepts the given {ctorArgs.Length} argument(s)."); + RegisterJsBacked(instance, callbackId); + } + catch (TargetInvocationException tie) when (tie.InnerException is not null) + { + throw tie.InnerException; + } + finally + { + s_pendingProxyCallbackId.Value = null; } - - // Create the managed instance. Generated classes should call - // ProxyDispatcher.InitializeInstance(this, typeName) in their constructor, - // which will invoke our ProxyInitializeInstance and capture the pending callback id. - object? instance = Activator.CreateInstance(t); - if (instance is null) - throw new InvalidOperationException($"Failed to instantiate proxy type {t.FullName}."); - - // Ensure there's a mapping for this instance immediately to avoid any - // early virtual calls from constructors reaching the JS side before - // the handle is registered. Call our initializer directly to register - // the pending callback id when dynamic proxies don't call it. - try { ProxyInitializeInstance(instance, typeName); } catch { } // Force COM CCW vtable creation for any implemented WinRT interfaces now, rather than // relying on it happening implicitly the first time the instance crosses the ABI boundary. - // Best-effort/reflection-only — no-ops cleanly when CsWinRT isn't loaded (e.g. xunit host). - if (interfaceNames.Length > 0) - { - TryActivateWinRTInterfaces(instance); - } + if (interfaces.Count > 0) TryActivateWinRTInterfaces(instance); - // Box the instance into a handle to return to the runtime. var result = Box(instance); - - // Populate holder with handle id now that a handle exists. if (s_proxyCallbacks.TryGetValue(instance, out var holder)) + holder.HandleId = result.HandleId(); + return result; + } + + private static bool ArgsFit(object?[] built, ParameterInfo[] parameters) + { + for (int i = 0; i < parameters.Length; i++) { - try { holder.HandleId = result.HandleId(); } catch { holder.HandleId = 0; } - } - else - { - // If the generated proxy did not call InitializeInstance, create mapping now. - int hid = 0; - try { hid = result.HandleId(); } catch { hid = 0; } - var newHolder = new ProxyCallbackHolder(callbackId) { HandleId = hid }; - s_proxyCallbacks.Add(instance, newHolder); + var p = parameters[i].ParameterType; + if (built[i] is null) { if (p.IsValueType && Nullable.GetUnderlyingType(p) is null) return false; continue; } + if (!p.IsInstanceOfType(built[i])) return false; } + return true; + } - s_pendingProxyCallbackId.Value = null; - return result; + private static void RegisterJsBacked(object instance, int callbackId) + { + if (!s_proxyCallbacks.TryGetValue(instance, out _)) + s_proxyCallbacks.Add(instance, new ProxyCallbackHolder(callbackId)); + } + + internal static bool IsJsBacked(object instance) => s_proxyCallbacks.TryGetValue(instance, out _); + + private static bool TryGetJsBackedHandle(object instance, out int handle) + { + handle = 0; + if (!s_proxyCallbacks.TryGetValue(instance, out var holder) || holder.HandleId == 0) return false; + if (!s_handles.TryGetValue(holder.HandleId, out var current) || !ReferenceEquals(current, instance)) return false; + handle = holder.HandleId; + return true; } // Locates CsWinRT's ComWrappersSupport via reflection (same style as the WinRT.IWinRTObject @@ -531,42 +573,56 @@ private static void TryActivateWinRTInterfaces(object instance) private static void ProxyInitializeInstance(object instance, string typeName) { var cb = s_pendingProxyCallbackId.Value; - if (cb.HasValue) + if (cb.HasValue) RegisterJsBacked(instance, cb.Value); + } + + // The holder for a JS-backed instance. A virtual the base constructor calls runs before + // CreateJsSubclass has registered the instance, so fall back to the pending callback id. + private static ProxyCallbackHolder JsHolderFor(object instance) + { + if (s_proxyCallbacks.TryGetValue(instance, out var holder)) return holder; + var pending = s_pendingProxyCallbackId.Value; + if (pending.HasValue) { - var holder = new ProxyCallbackHolder(cb.Value); - s_proxyCallbacks.Add(instance, holder); + RegisterJsBacked(instance, pending.Value); + if (s_proxyCallbacks.TryGetValue(instance, out holder)) return holder; } + throw new InvalidOperationException("No JS callback registered for proxy instance."); + } + + // Payload for the JS dispatcher: (self handle, member name, ...args). The arguments are sent + // individually so each arrives as its JS value (numbers, strings, structs as plain objects, + // objects as handles). + private static object?[] DispatchPayload(ProxyCallbackHolder holder, string memberName, object?[] args) + { + var payload = new object?[args.Length + 2]; + payload[0] = new HandleRef(holder.HandleId); + payload[1] = memberName; + Array.Copy(args, 0, payload, 2, args.Length); + return payload; } private static object? ProxyInvokeMethod(object instance, string methodName, object[] args) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - var payload = new object?[] { new HandleRef(holder.HandleId), methodName, args }; - return CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + return CallJsCallback(holder.CallbackId, DispatchPayload(holder, methodName, args), expectsResult: true); } private static void ProxyInvokeVoid(object instance, string methodName, object[] args) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - - var payload = new object?[] { new HandleRef(holder.HandleId), methodName, args }; - CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + CallJsCallback(holder.CallbackId, DispatchPayload(holder, methodName, args), expectsResult: false); } private static object? ProxyGetProperty(object instance, string propertyName) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - // Tag "get:" prefix so the JS dispatcher can distinguish getter from method call. - var payload = new object?[] { new HandleRef(holder.HandleId), "get:" + propertyName }; - return CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + return CallJsCallback(holder.CallbackId, DispatchPayload(holder, "get_" + propertyName, []), expectsResult: true); } private static void ProxySetProperty(object instance, string propertyName, object? value) { - if (!s_proxyCallbacks.TryGetValue(instance, out var holder)) throw new InvalidOperationException("No JS callback registered for proxy instance."); - // Tag "set:" prefix so the JS dispatcher can distinguish setter from method call. - var payload = new object?[] { new HandleRef(holder.HandleId), "set:" + propertyName, value }; - CallJsCallback(holder.CallbackId, payload); + var holder = JsHolderFor(instance); + CallJsCallback(holder.CallbackId, DispatchPayload(holder, "set_" + propertyName, [value]), expectsResult: false); } } - diff --git a/template/framework/dotnet-bridge/Bridge.TaskHelper.cs b/template/framework/dotnet-bridge/Bridge.TaskHelper.cs index 1361e89..5671e5b 100644 --- a/template/framework/dotnet-bridge/Bridge.TaskHelper.cs +++ b/template/framework/dotnet-bridge/Bridge.TaskHelper.cs @@ -22,9 +22,10 @@ internal static void ScheduleTaskContinuation(int handleId, int resolveId, int r $"Object of type {obj.GetType().FullName} is not awaitable. " + $"Expected Task, ValueTask, IAsyncOperation, or any type implementing GetAwaiter()."); + // The handle stays valid after completion (the JS proxy releases it when collected), so + // the same Task can be awaited again. task.ContinueWith(completed => { - s_handles.TryRemove(handleId, out _); try { if (completed.IsFaulted) diff --git a/template/framework/dotnet-bridge/Bridge.cs b/template/framework/dotnet-bridge/Bridge.cs index 557c91a..2da4720 100644 --- a/template/framework/dotnet-bridge/Bridge.cs +++ b/template/framework/dotnet-bridge/Bridge.cs @@ -123,8 +123,12 @@ public static string GetNamespaceAssemblyMapJson() catch { continue; } } + // The app's own assembly (C# sources compiled into the app) contributes + // its internal types too: they are reachable from JS (type resolution + // finds non-public types), so their namespaces must be as well. Type[] types; - try { types = asm.GetExportedTypes(); } + try { types = asm == Assembly.GetEntryAssembly() ? asm.GetTypes() : asm.GetExportedTypes(); } + catch (ReflectionTypeLoadException e) { types = e.Types.Where(t => t != null).ToArray()!; } catch { types = Array.Empty(); } var assemblyName = asm.GetName().Name; @@ -132,7 +136,7 @@ public static string GetNamespaceAssemblyMapJson() foreach (var t in types) { - if (string.IsNullOrEmpty(t.Namespace)) continue; + if (string.IsNullOrEmpty(t.Namespace) || t.Name.StartsWith('<')) continue; map[t.Namespace] = assemblyName; var root = t.Namespace.Split('.')[0]; if (!map.ContainsKey(root)) map[root] = assemblyName; diff --git a/template/framework/tools/sbg-arm64.exe b/template/framework/tools/sbg-arm64.exe deleted file mode 100644 index 27152b16f1746d5c4b1973682f4dbbc900d91f6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486912 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ΠbtYcdq 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%0AG$p@$jJMJDu-0iC2n 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 OB%lBD|KGnIfjH(<=)Us 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 H8uH(<=)Us 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 H8u + + + + + + NativeScript Windows TestRunner + + diff --git a/test-app/App_Resources/Windows/src/TestFixtures/Basics.cs b/test-app/App_Resources/Windows/src/TestFixtures/Basics.cs new file mode 100644 index 0000000..ff55b9a --- /dev/null +++ b/test-app/App_Resources/Windows/src/TestFixtures/Basics.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +// C# sources placed under App_Resources/Windows are compiled into the app, the way Java/Kotlin +// under App_Resources/Android/src and Objective-C/Swift under App_Resources/iOS/src are on the +// other platforms. JavaScript reaches them by their namespace, with no registration step. +namespace TestFixtures.Basics +{ + public enum Mood + { + Happy, + Sad, + Sleepy = 10, + } + + public class Greeter + { + public static int Instances; + + public Greeter() : this("World") { } + + public Greeter(string name) + { + Name = name; + Instances++; + } + + public string Name { get; set; } + + public Mood Mood { get; set; } = Mood.Happy; + + public string Greet() => $"Hello, {Name}!"; + + public string Greet(string other) => $"Hello, {other}, from {Name}!"; + + public static int Add(int a, int b) => a + b; + + public static double Scale(double value, double factor) => value * factor; + + public static string Version => "1.0"; + + public int[] Numbers() => new[] { 1, 2, 3 }; + + public List Names() => new List { "a", "b" }; + + public event EventHandler Greeted; + + public void RaiseGreeted(string message) => Greeted?.Invoke(this, message); + } + + public static class Callbacks + { + public static int Apply(Func f, int value) => f(value); + + public static string Join(Func f, string a, string b) => f(a, b); + + public static int Repeat(Action action, int times) + { + for (var i = 0; i < times; i++) action(i); + return times; + } + + public static async Task AddLaterAsync(int a, int b, int delayMs) + { + await Task.Delay(delayMs).ConfigureAwait(false); + return a + b; + } + + public static async Task FailLaterAsync(string message, int delayMs) + { + await Task.Delay(delayMs).ConfigureAwait(false); + throw new InvalidOperationException(message); + } + } + + // Internal types are reachable too (only public members are bound), as with Java + // package-private classes from JS on Android. + internal static class InternalHelper + { + public static string Ping() => "pong"; + } +} + +namespace TestFixtures.Basics.Nested.Deeper +{ + public static class Deep + { + public static string Where() => "deep"; + } +} diff --git a/test-app/App_Resources/Windows/src/TestFixtures/Inheritance.cs b/test-app/App_Resources/Windows/src/TestFixtures/Inheritance.cs new file mode 100644 index 0000000..1a3671d --- /dev/null +++ b/test-app/App_Resources/Windows/src/TestFixtures/Inheritance.cs @@ -0,0 +1,91 @@ +using System; + +// Base types for the JS class-extension specs (tests/extend-dotnet.js): every member that JS +// overrides is invoked from C# here, so a passing spec proves native -> JS virtual dispatch, the +// same guarantee the Android (Java) and iOS (Objective-C) extension tests make. +namespace TestFixtures.Inheritance +{ + public class Animal + { + public Animal() : this("animal") { } + + public Animal(string name) + { + Name = name; + } + + public Animal(string name, int age) + { + Name = name; + Age = age; + } + + public string Name { get; } + + public int Age { get; } + + public virtual string Speak() => "..."; + + public virtual int Legs => 4; + + public virtual string Greet(string other) => $"{Name} greets {other}"; + + protected virtual string Secret() => "base-secret"; + + // Non-virtual members that call the virtual ones from C#. + public string Describe() => $"{Name} says {Speak()} on {Legs} legs"; + + public string RevealSecret() => Secret(); + + public string GreetFromNative(string other) => Greet(other); + } + + public abstract class Shape + { + public abstract double Area(); + + public virtual string Kind => "shape"; + + public string Report() => $"{Kind}:{Area():0.##}"; + } + + public interface ICalculator + { + int Compute(int a, int b); + + string Name { get; } + } + + public interface INamed + { + string GetName(); + } + + public static class Native + { + public static string Describe(Animal animal) => animal.Describe(); + + public static string Speak(Animal animal) => animal.Speak(); + + public static int Legs(Animal animal) => animal.Legs; + + public static string Report(Shape shape) => shape.Report(); + + public static int Run(ICalculator calculator, int a, int b) => calculator.Compute(a, b); + + public static string NameOf(ICalculator calculator) => calculator.Name; + + public static string NameOf(INamed named) => named.GetName(); + + public static bool IsAnimal(object value) => value is Animal; + + public static string TypeName(object value) => value?.GetType().BaseType?.FullName ?? ""; + + // Keeps a reference on the native side, so identity can be checked on the way back. + private static object s_kept; + + public static void Keep(object value) => s_kept = value; + + public static object Kept() => s_kept; + } +} diff --git a/test-app/App_Resources/Windows/src/TestFixtures/Lifetime.cs b/test-app/App_Resources/Windows/src/TestFixtures/Lifetime.cs new file mode 100644 index 0000000..69d935d --- /dev/null +++ b/test-app/App_Resources/Windows/src/TestFixtures/Lifetime.cs @@ -0,0 +1,28 @@ +using System; +using System.Threading; + +// Lifetime of JS subclass instances (tests/lifetime.js): the managed half of an instance JS has +// dropped must become collectable, while one native code still holds keeps working. +namespace TestFixtures.Lifetime +{ + public class Tracked + { + private static int s_finalized; + + public static int Finalized => Volatile.Read(ref s_finalized); + + public virtual string Name() => "tracked"; + + ~Tracked() => Interlocked.Increment(ref s_finalized); + } + + public static class Gc + { + public static void Collect() + { + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + } + } +} diff --git a/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs b/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs new file mode 100644 index 0000000..91d11f2 --- /dev/null +++ b/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs @@ -0,0 +1,77 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +// Calls into JavaScript from threads other than the UI thread (tests/threading.js). On iOS and +// Android a callback invoked from a background thread still reaches JavaScript; these fixtures +// check the same on Windows. None of them block the UI thread while the background thread calls +// back, because that deadlocks on every runtime (the UI thread owns the JS isolate). +namespace TestFixtures.Threading +{ + public static class BackgroundInvoker + { + public static int UiThreadId { get; private set; } + + public static void CaptureUiThread() => UiThreadId = Environment.CurrentManagedThreadId; + + public static bool IsUiThread() => Environment.CurrentManagedThreadId == UiThreadId; + + /// Calls `compute` on a thread-pool thread and reports its result through `done`, also + /// from that thread: (result, ranOnBackgroundThread). + public static void ComputeInBackground(Func compute, int value, Action done) + { + Task.Run(() => + { + var background = Environment.CurrentManagedThreadId != UiThreadId; + var result = compute(value); + done(result, background); + }); + } + + /// Calls `callback` from `count` background threads at once and reports how many calls + /// returned, from the last thread to finish. + public static void FanOut(Func callback, int count, Action done) + { + var remaining = count; + var sum = 0; + for (var i = 0; i < count; i++) + { + var n = i; + new Thread(() => + { + Interlocked.Add(ref sum, callback(n)); + if (Interlocked.Decrement(ref remaining) == 0) done(count, sum); + }) { IsBackground = true }.Start(); + } + } + + public static void ThrowInBackground(Func callback, Action done) + { + Task.Run(() => + { + try + { + callback(); + done("no-exception"); + } + catch (Exception e) + { + done(e.GetType().Name); + } + }); + } + } + + public class Ticker + { + public event EventHandler Tick; + + public void StartInBackground(int ticks) + { + new Thread(() => + { + for (var i = 1; i <= ticks; i++) Tick?.Invoke(this, i); + }) { IsBackground = true }.Start(); + } + } +} diff --git a/test-app/README.md b/test-app/README.md new file mode 100644 index 0000000..1134136 --- /dev/null +++ b/test-app/README.md @@ -0,0 +1,51 @@ +# Windows runtime test app + +The Windows counterpart of the Android (`test-app`) and iOS (`TestRunner`) runtime test suites: Jasmine-style specs that run inside a real WinUI app built from `template/framework`, against native fixtures compiled into it. + +``` +test-app/ + app/ JavaScript: main.js (entry), runner/ (Jasmine-compatible runner), tests/ + App_Resources/Windows/ + src/TestFixtures/*.cs C# fixtures, compiled into the app like any app's App_Resources sources + app.csproj app-level MSBuild hook (unpackaged build for the runner) + plugins/test-plugin/ a plugin shipping C# sources in platforms/windows/src + run.ps1 build + run +``` + +## Running + +From the repository root, in a shell where `cargo` and the .NET SDK are available: + +```powershell +pwsh test-app/run.ps1 # build nativescript.dll (debug) and the app, run every spec +pwsh test-app/run.ps1 -Filter Threading # only specs whose full name matches the regex +pwsh test-app/run.ps1 -SkipRuntimeBuild # reuse target/debug/nativescript.dll +pwsh test-app/run.ps1 -Clean # regenerate platforms/ from scratch +``` + +`run.ps1` does what `ns platform add windows` and `ns prepare windows` do: it generates `test-app/platforms/windows/TestRunner` from `template/framework`, copies `app/` and `App_Resources/Windows` into it, and stages each plugin's `platforms/windows` folder under `plugins/`. It uses the freshly built runtime DLL and the `dotnet-bridge` sources from this repository. `dotnet-tool` runs from source through `cargo`. Pass `-EngineDll` to test a napi engine build (for example `packages/windows-v8/target/release/windows_v8.dll`) instead of the classic runtime. + +The app is built unpackaged (`WindowsPackageType=None`, self-contained Windows App SDK) so it starts straight from `bin\` and can read environment variables. When the run finishes: + +- `bin/test-results.log` holds one `[PASS]`/`[FAIL]` line per spec plus a `[TEST SUMMARY]` line; +- `bin/test-results.xml` holds JUnit XML; +- the process exit code is the number of failed specs. + +The script prints the log and exits non-zero when any spec failed. + +## What the specs cover + +| Spec | Covers | +| --- | --- | +| `csharp-sources.js` | App and plugin C# types reachable by namespace with no registration step: constructors and overloads, properties, statics, arrays, enums, internal types, nested namespaces. Also JS functions passed as `Func<>`/`Action<>`, C# events, and `Task` results awaited without blocking the UI thread. | +| `extend-dotnet.js` | Extending C# classes with `Class.extend()`, ES2015 `class`, `@NativeClass` and TypeScript ES5 output. Native code reaches JS overrides; constructor arguments are forwarded. `super` and `this.super` reach the base implementation; protected and abstract members and virtual properties can be overridden. JS fields are visible to native calls, `instanceof` works, and identity is kept across native round-trips. Interfaces are implemented with `new Interface({...})` and `@Interfaces`. | +| `extend-winrt.js` | Extending WinUI classes: XAML calls `MeasureOverride`/`ArrangeOverride`/`OnApplyTemplate` on the JS subclass. Covers `super`, `instanceof` of the subclass and its WinRT bases, `Class.extend()` and TypeScript ES5 output. | +| `threading.js` | WinRT and .NET callbacks invoked on background threads are delivered on the JS thread. Return values and exceptions flow back to the native caller. | +| `lifetime.js` | JS subclass instances that nothing references are collected on both sides. An instance only native code holds keeps working, with its JS object revived. WinRT UI subclasses in the visual tree keep their fields. Needs `gc()`, so it is skipped on engines that don't expose it. | +| `layout-mutation.js` | Adding, removing and reparenting XAML elements synchronously from `SizeChanged`, `LayoutUpdated` and `CompositionTarget.Rendering`, and from promise continuations scheduled there. | + +Each spec asserts behaviour that works the same way on iOS and Android. + +## Adding specs + +Add a file under `app/tests/` and list it in `app/main.js`. If it needs a native fixture, add a `.cs` file under `App_Resources/Windows/src/TestFixtures/`; it is compiled into the app and reachable from JS by namespace. The runner supports `describe`/`it`/`xit`/`fit`, `beforeEach`/`afterEach`/`beforeAll`/`afterAll`, async specs (`done` or a returned promise) and the usual `expect` matchers. diff --git a/test-app/app/main.js b/test-app/app/main.js new file mode 100644 index 0000000..376a673 --- /dev/null +++ b/test-app/app/main.js @@ -0,0 +1,80 @@ +// Entry point of the Windows runtime test app. Mirrors the Android/iOS test-app layout: a list +// of spec files run by a Jasmine-compatible runner, with native fixtures compiled into the app +// (App_Resources/Windows/src, the counterpart of Android's src/main/java and iOS's TestFixtures) +// and a local plugin (plugins/test-plugin) that ships C# sources. + +// The runtime exposes timers as __ns__* host functions; @nativescript/core installs the standard +// globals on top of them (as on iOS), and this app runs without core. +for (const name of ["setTimeout", "setInterval", "clearTimeout", "clearInterval"]) { + if (typeof globalThis[name] !== "function") globalThis[name] = globalThis["__ns__" + name]; +} + +const { api, execute, toJUnitXml } = require("./runner/jasmine-lite"); +Object.assign(globalThis, api); + +const specs = [ + "./tests/csharp-sources.js", + "./tests/extend-dotnet.js", + "./tests/extend-winrt.js", + "./tests/threading.js", + "./tests/layout-mutation.js", + "./tests/lifetime.js", +]; + +function env(name) { + try { + return System.Environment.GetEnvironmentVariable(name) || ""; + } catch (_) { + return ""; + } +} + +// Each line is appended as it happens, so a crash still leaves the log of everything before it. +const logPath = env("NS_TEST_LOG"); +function log(line) { + console.log(line); + if (!logPath) return; + try { + System.IO.File.AppendAllText(logPath, line + "\r\n"); + } catch (_) {} +} + +// The window activates only once it has content, and the layout specs need a live window. +try { + require("./tests/helpers").root(); +} catch (e) { + log("[ERROR] could not create the window content: " + (e && e.message)); +} + +for (const spec of specs) { + try { + require(spec); + } catch (e) { + // A spec file that can't even load is reported as a failing spec, not a silent skip. + describe(spec, () => { + it("loads", () => { + throw e; + }); + }); + } +} + +function finish(run) { + const resultsPath = env("NS_TEST_RESULTS"); + try { + if (resultsPath) System.IO.File.WriteAllText(resultsPath, toJUnitXml(run)); + } catch (e) { + log("[ERROR] could not write test results: " + (e && e.message)); + } + if (resultsPath) System.Environment.Exit(run.failed); +} + +// Start after the host has shown the window and started pumping, so specs that need layout, +// rendering or timers run inside a live app. +setTimeout(() => { + const filterText = env("NS_TEST_FILTER"); + execute({ log, filter: filterText ? new RegExp(filterText, "i") : null }).then(finish, (e) => { + log("[ERROR] runner crashed: " + (e && e.stack ? e.stack : e)); + finish({ results: [], passed: 0, failed: 1, pending: 0, time: 0 }); + }); +}, 0); diff --git a/test-app/app/package.json b/test-app/app/package.json new file mode 100644 index 0000000..a00212a --- /dev/null +++ b/test-app/app/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-app", + "main": "main.js" +} diff --git a/test-app/app/runner/jasmine-lite.js b/test-app/app/runner/jasmine-lite.js new file mode 100644 index 0000000..7f20ea5 --- /dev/null +++ b/test-app/app/runner/jasmine-lite.js @@ -0,0 +1,366 @@ +// A small Jasmine-compatible test runner for the Windows runtime test app. +// +// The Android and iOS runtimes run their test-app suites on Jasmine; this keeps the same spec +// surface (describe/it/beforeEach/expect/done/...) without depending on a bundler or on the +// Node globals Jasmine's boot code expects, so the specs read the same across the three runtimes. + +const DEFAULT_TIMEOUT_MS = 5000; + +function Suite(description, parent) { + this.description = description; + this.parent = parent; + this.children = []; + this.beforeEach = []; + this.afterEach = []; + this.beforeAll = []; + this.afterAll = []; +} + +Suite.prototype.fullName = function () { + const parts = []; + for (let s = this; s && s.parent; s = s.parent) parts.unshift(s.description); + return parts.join(" "); +}; + +const root = new Suite("", null); +let current = root; +let focused = false; + +function addSpec(description, fn, opts) { + current.children.push({ kind: "spec", description, fn, suite: current, pending: !!opts.pending, focused: !!opts.focused, timeout: opts.timeout }); + if (opts.focused) focused = true; +} + +function addSuite(description, fn, opts) { + const suite = new Suite(description, current); + suite.pending = !!opts.pending || !!(current && current.pending); + suite.focused = !!opts.focused || !!(current && current.focused); + if (opts.focused) focused = true; + current.children.push({ kind: "suite", suite }); + const prev = current; + current = suite; + try { + fn(); + } finally { + current = prev; + } +} + +// ── matchers ───────────────────────────────────────────────────────────────── + +function fmt(v) { + if (typeof v === "string") return JSON.stringify(v); + if (typeof v === "function") return `[Function ${v.name || "anonymous"}]`; + if (typeof v === "bigint") return `${v}n`; + try { + const s = JSON.stringify(v); + if (s !== undefined) return s; + } catch (_) {} + try { + return String(v); + } catch (_) { + return Object.prototype.toString.call(v); + } +} + +function deepEqual(a, b, seen) { + if (Object.is(a, b)) return true; + if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) return false; + seen = seen || []; + for (const [x, y] of seen) if (x === a && y === b) return true; + seen.push([a, b]); + if (Array.isArray(a) !== Array.isArray(b)) return false; + const ka = Object.keys(a); + const kb = Object.keys(b); + if (ka.length !== kb.length) return false; + for (const k of ka) { + if (!Object.prototype.hasOwnProperty.call(b, k)) return false; + if (!deepEqual(a[k], b[k], seen)) return false; + } + return true; +} + +class ExpectationFailed extends Error {} + +function makeExpect(onFailure) { + return function expect(actual) { + function build(negate) { + function check(pass, message) { + if (pass === negate) onFailure(new ExpectationFailed(negate ? message.replace(/^Expected (.*?) to /, "Expected $1 not to ") : message)); + } + const m = { + toBe: (e) => check(Object.is(actual, e), `Expected ${fmt(actual)} to be ${fmt(e)}.`), + toEqual: (e) => check(deepEqual(actual, e), `Expected ${fmt(actual)} to equal ${fmt(e)}.`), + toBeTruthy: () => check(!!actual, `Expected ${fmt(actual)} to be truthy.`), + toBeFalsy: () => check(!actual, `Expected ${fmt(actual)} to be falsy.`), + toBeTrue: () => check(actual === true, `Expected ${fmt(actual)} to be true.`), + toBeFalse: () => check(actual === false, `Expected ${fmt(actual)} to be false.`), + toBeDefined: () => check(actual !== undefined, `Expected ${fmt(actual)} to be defined.`), + toBeUndefined: () => check(actual === undefined, `Expected ${fmt(actual)} to be undefined.`), + toBeNull: () => check(actual === null, `Expected ${fmt(actual)} to be null.`), + toBeNaN: () => check(Number.isNaN(actual), `Expected ${fmt(actual)} to be NaN.`), + toBeGreaterThan: (e) => check(actual > e, `Expected ${fmt(actual)} to be greater than ${fmt(e)}.`), + toBeGreaterThanOrEqual: (e) => check(actual >= e, `Expected ${fmt(actual)} to be greater than or equal to ${fmt(e)}.`), + toBeLessThan: (e) => check(actual < e, `Expected ${fmt(actual)} to be less than ${fmt(e)}.`), + toBeLessThanOrEqual: (e) => check(actual <= e, `Expected ${fmt(actual)} to be less than or equal to ${fmt(e)}.`), + toBeCloseTo: (e, precision = 2) => check(Math.abs(e - actual) < Math.pow(10, -precision) / 2, `Expected ${fmt(actual)} to be close to ${fmt(e)}.`), + toBeInstanceOf: (ctor) => check(actual instanceof ctor, `Expected ${fmt(actual)} to be an instance of ${(ctor && ctor.name) || fmt(ctor)}.`), + toContain: (e) => check(actual != null && (typeof actual === "string" ? actual.indexOf(e) !== -1 : Array.prototype.some.call(actual, (x) => deepEqual(x, e))), `Expected ${fmt(actual)} to contain ${fmt(e)}.`), + toMatch: (re) => check(new RegExp(re).test(String(actual)), `Expected ${fmt(actual)} to match ${String(re)}.`), + toHaveBeenCalled: () => check(!!(actual && actual.calls && actual.calls.count() > 0), `Expected spy to have been called.`), + toHaveBeenCalledTimes: (n) => check(!!(actual && actual.calls && actual.calls.count() === n), `Expected spy to have been called ${n} times but was called ${actual && actual.calls ? actual.calls.count() : 0} times.`), + toHaveBeenCalledWith: (...args) => check(!!(actual && actual.calls && actual.calls.all().some((c) => deepEqual(c.args, args))), `Expected spy to have been called with ${fmt(args)}.`), + toThrow: (e) => { + let threw = false; + let err; + try { + actual(); + } catch (x) { + threw = true; + err = x; + } + check(threw && (arguments.length === 0 || e === undefined || deepEqual(err, e)), `Expected function to throw${e !== undefined ? " " + fmt(e) : ""}${threw ? `, but it threw ${fmt(err && err.message)}` : ""}.`); + }, + toThrowError: (typeOrMessage, maybeMessage) => { + let threw = false; + let err; + try { + actual(); + } catch (x) { + threw = true; + err = x; + } + let ok = threw; + let type = typeof typeOrMessage === "function" ? typeOrMessage : null; + let message = type ? maybeMessage : typeOrMessage; + if (ok && type) ok = err instanceof type; + if (ok && message !== undefined) { + const text = err && err.message !== undefined ? String(err.message) : String(err); + ok = message instanceof RegExp ? message.test(text) : text === message; + } + check(ok, `Expected function to throw an Error${message !== undefined ? " matching " + String(message) : ""}${threw ? `, but it threw ${fmt(err && err.message !== undefined ? err.message : err)}` : ", but it did not throw"}.`); + }, + }; + return m; + } + const matchers = build(false); + matchers.not = build(true); + return matchers; + }; +} + +// ── spies ──────────────────────────────────────────────────────────────────── + +function createSpy(name, impl) { + const calls = []; + let strategy = impl || null; + const spy = function (...args) { + calls.push({ object: this, args }); + return strategy ? strategy.apply(this, args) : undefined; + }; + spy.and = { + returnValue(v) { + strategy = () => v; + return spy; + }, + callFake(fn) { + strategy = fn; + return spy; + }, + throwError(e) { + strategy = () => { + throw typeof e === "string" ? new Error(e) : e; + }; + return spy; + }, + }; + spy.calls = { + count: () => calls.length, + argsFor: (i) => (calls[i] ? calls[i].args : []), + all: () => calls.slice(), + mostRecent: () => calls[calls.length - 1], + reset: () => { + calls.length = 0; + }, + }; + spy.and.identity = name || "unknown"; + return spy; +} + +// ── execution ──────────────────────────────────────────────────────────────── + +function runFn(fn, ctx, timeoutMs, label) { + return new Promise((resolve, reject) => { + let settled = false; + const finish = (err) => { + if (settled) return; + settled = true; + clearTimeout(timer); + err ? reject(err) : resolve(); + }; + const timer = setTimeout(() => finish(new Error(`Timeout - ${label} did not complete within ${timeoutMs}ms`)), timeoutMs); + try { + if (fn.length > 0) { + const done = () => finish(); + done.fail = (e) => finish(e instanceof Error ? e : new Error(e === undefined ? "Failed" : String(e))); + fn.call(ctx, done); + } else { + const r = fn.call(ctx); + if (r && typeof r.then === "function") r.then(() => finish(), (e) => finish(e || new Error("Promise rejected"))); + else finish(); + } + } catch (e) { + finish(e); + } + }); +} + +function chain(suite, key) { + const out = []; + for (let s = suite; s; s = s.parent) out.unshift(...s[key]); + return key === "afterEach" ? out.reverse() : out; +} + +function isFocused(node) { + return node.kind === "spec" ? node.focused || node.suite.focused : node.suite.focused || node.suite.children.some(isFocused); +} + +async function execute(options) { + const results = []; + const log = options.log || ((s) => console.log(s)); + const started = Date.now(); + + async function visitSuite(suite) { + const runnable = suite.children.filter((c) => !focused || isFocused(c)); + if (runnable.length === 0) return; + for (const fn of suite.beforeAll) { + try { + await runFn(fn, {}, DEFAULT_TIMEOUT_MS, `beforeAll in "${suite.fullName()}"`); + } catch (e) { + log(`[ERROR] beforeAll failed in "${suite.fullName()}": ${e && e.message}`); + } + } + for (const child of runnable) { + if (child.kind === "suite") await visitSuite(child.suite); + else await visitSpec(child); + } + for (const fn of suite.afterAll) { + try { + await runFn(fn, {}, DEFAULT_TIMEOUT_MS, `afterAll in "${suite.fullName()}"`); + } catch (e) { + log(`[ERROR] afterAll failed in "${suite.fullName()}": ${e && e.message}`); + } + } + } + + async function visitSpec(spec) { + const fullName = `${spec.suite.fullName()} ${spec.description}`.trim(); + if (spec.pending || spec.suite.pending || (options.filter && !options.filter.test(fullName))) { + results.push({ suite: spec.suite.fullName(), name: spec.description, fullName, status: "pending", failures: [], time: 0 }); + return; + } + const failures = []; + const t0 = Date.now(); + currentFailures = failures; + const ctx = {}; + const timeout = spec.timeout || DEFAULT_TIMEOUT_MS; + try { + for (const fn of chain(spec.suite, "beforeEach")) await runFn(fn, ctx, timeout, "beforeEach"); + await runFn(spec.fn, ctx, timeout, `"${fullName}"`); + } catch (e) { + failures.push(e); + } + try { + for (const fn of chain(spec.suite, "afterEach")) await runFn(fn, ctx, timeout, "afterEach"); + } catch (e) { + failures.push(e); + } + currentFailures = null; + const status = failures.length ? "failed" : "passed"; + results.push({ suite: spec.suite.fullName(), name: spec.description, fullName, status, failures: failures.map(describeError), time: (Date.now() - t0) / 1000 }); + if (status === "passed") log(`[PASS] ${fullName}`); + else for (const f of failures) log(`[FAIL] ${fullName} - ${describeError(f).message}`); + } + + await visitSuite(root); + const passed = results.filter((r) => r.status === "passed").length; + const failed = results.filter((r) => r.status === "failed").length; + const pending = results.filter((r) => r.status === "pending").length; + log(`[TEST SUMMARY] passed=${passed}, failed=${failed}, pending=${pending}`); + return { results, passed, failed, pending, time: (Date.now() - started) / 1000 }; +} + +function describeError(e) { + if (e && typeof e === "object" && "message" in e && "stack" in e) return e; + if (e && typeof e === "object") return { message: e.message !== undefined ? String(e.message) : fmt(e), stack: e.stack || "" }; + return { message: String(e), stack: "" }; +} + +let currentFailures = null; +const expect = makeExpect((err) => { + if (currentFailures) currentFailures.push(err); + else throw err; +}); + +function escapeXml(s) { + return String(s).replace(/[<>&"']/g, (c) => ({ "<": "<", ">": ">", "&": "&", '"': """, "'": "'" })[c]); +} + +/** JUnit XML in the shape the Android test-app reporter produces, so CI can consume either. */ +function toJUnitXml(run) { + const bySuite = new Map(); + for (const r of run.results) { + if (!bySuite.has(r.suite)) bySuite.set(r.suite, []); + bySuite.get(r.suite).push(r); + } + const lines = ['', ``]; + for (const [suite, specs] of bySuite) { + const failures = specs.filter((s) => s.status === "failed").length; + const skipped = specs.filter((s) => s.status === "pending").length; + lines.push(` `); + for (const s of specs) { + lines.push(` `); + if (s.status === "pending") lines.push(" "); + for (const f of s.failures) lines.push(` ${escapeXml(f.stack || f.message)}`); + lines.push(" "); + } + lines.push(" "); + } + lines.push(""); + return lines.join("\n"); +} + +const api = { + describe: (d, fn) => addSuite(d, fn, {}), + xdescribe: (d, fn) => addSuite(d, fn, { pending: true }), + fdescribe: (d, fn) => addSuite(d, fn, { focused: true }), + it: (d, fn, timeout) => addSpec(d, fn || (() => {}), { pending: !fn, timeout }), + xit: (d, fn) => addSpec(d, fn || (() => {}), { pending: true }), + fit: (d, fn, timeout) => addSpec(d, fn, { focused: true, timeout }), + beforeEach: (fn) => current.beforeEach.push(fn), + afterEach: (fn) => current.afterEach.push(fn), + beforeAll: (fn) => current.beforeAll.push(fn), + afterAll: (fn) => current.afterAll.push(fn), + expect, + fail: (message) => { + const err = new ExpectationFailed(message === undefined ? "Failed" : String(message)); + if (currentFailures) currentFailures.push(err); + else throw err; + }, + pending: () => {}, + jasmine: { + createSpy, + DEFAULT_TIMEOUT_INTERVAL: DEFAULT_TIMEOUT_MS, + }, + spyOn(obj, method) { + const original = obj[method]; + const spy = createSpy(method, function (...args) { + return original.apply(this, args); + }); + spy.and.callThrough = () => spy.and.callFake(original); + obj[method] = spy; + return spy; + }, +}; + +module.exports = { api, execute, toJUnitXml }; diff --git a/test-app/app/tests/csharp-sources.js b/test-app/app/tests/csharp-sources.js new file mode 100644 index 0000000..ee00d98 --- /dev/null +++ b/test-app/app/tests/csharp-sources.js @@ -0,0 +1,135 @@ +// C# sources dropped into App_Resources/Windows (or shipped in a plugin's platforms/windows) are +// compiled into the app and usable from JavaScript by namespace, like Java/Kotlin/Objective-C/ +// Swift sources are on Android and iOS. Fixtures: App_Resources/Windows/src/TestFixtures/Basics.cs, +// plugins/test-plugin/platforms/windows/src/PluginGreeter.cs. + +describe("C# sources in App_Resources", () => { + it("exposes the root namespace of app C# types as a global without registration", () => { + expect(typeof TestFixtures).not.toBe("undefined"); + expect(typeof TestFixtures.Basics.Greeter).toBe("function"); + }); + + it("constructs with the default constructor", () => { + const g = new TestFixtures.Basics.Greeter(); + expect(g.Name).toBe("World"); + expect(g.Greet()).toBe("Hello, World!"); + }); + + it("constructs with arguments", () => { + const g = new TestFixtures.Basics.Greeter("JS"); + expect(g.Greet()).toBe("Hello, JS!"); + }); + + it("selects overloads by argument count", () => { + const g = new TestFixtures.Basics.Greeter("JS"); + expect(g.Greet("C#")).toBe("Hello, C#, from JS!"); + }); + + it("reads and writes instance properties", () => { + const g = new TestFixtures.Basics.Greeter(); + g.Name = "Changed"; + expect(g.Name).toBe("Changed"); + expect(g.Greet()).toBe("Hello, Changed!"); + }); + + it("calls static methods", () => { + expect(TestFixtures.Basics.Greeter.Add(2, 3)).toBe(5); + expect(TestFixtures.Basics.Greeter.Scale(1.5, 2)).toBe(3); + }); + + it("reads static properties", () => { + expect(TestFixtures.Basics.Greeter.Version).toBe("1.0"); + }); + + it("marshals arrays", () => { + const g = new TestFixtures.Basics.Greeter(); + expect(g.Numbers()).toEqual([1, 2, 3]); + }); + + it("marshals enums as numbers", () => { + const g = new TestFixtures.Basics.Greeter(); + expect(g.Mood).toBe(0); + g.Mood = 10; + expect(g.Mood).toBe(10); + }); + + it("resolves nested namespaces", () => { + expect(TestFixtures.Basics.Nested.Deeper.Deep.Where()).toBe("deep"); + }); + + it("reaches internal types", () => { + expect(TestFixtures.Basics.InternalHelper.Ping()).toBe("pong"); + }); + + it("passes JavaScript functions as Func<> delegates", () => { + expect(TestFixtures.Basics.Callbacks.Apply((x) => x * 2, 21)).toBe(42); + expect(TestFixtures.Basics.Callbacks.Join((a, b) => a + "+" + b, "x", "y")).toBe("x+y"); + }); + + it("passes JavaScript functions as Action<> delegates", () => { + const seen = []; + const n = TestFixtures.Basics.Callbacks.Repeat((i) => seen.push(i), 3); + expect(n).toBe(3); + expect(seen).toEqual([0, 1, 2]); + }); + + it("subscribes to C# events with add_/remove_", () => { + const g = new TestFixtures.Basics.Greeter(); + const messages = []; + const handler = (sender, message) => messages.push(message); + g.add_Greeted(handler); + g.RaiseGreeted("one"); + expect(messages).toEqual(["one"]); + }); + + it("returns Task as an awaitable", async () => { + expect(await TestFixtures.Basics.Callbacks.AddLaterAsync(20, 22, 10)).toBe(42); + }); + + it("converts a Task to a promise with taskToPromise", async () => { + const task = TestFixtures.Basics.Callbacks.AddLaterAsync(1, 2, 10); + expect(await NSWinRT.dotnet.taskToPromise(task)).toBe(3); + // The same Task can be awaited again. + expect(await task).toBe(3); + }); + + it("does not block the UI thread while a Task runs", async () => { + let timerRan = false; + setTimeout(() => (timerRan = true), 0); + const result = await TestFixtures.Basics.Callbacks.AddLaterAsync(1, 1, 200); + expect(result).toBe(2); + expect(timerRan).toBe(true); + }); + + it("rejects when a Task faults", async () => { + let error = null; + try { + await TestFixtures.Basics.Callbacks.FailLaterAsync("boom", 10); + } catch (e) { + error = e; + } + expect(String(error && (error.message || error))).toContain("boom"); + }); + + it("keeps System the .NET namespace when app code assigns it", () => { + // What @nativescript/core does (a SystemJS shim). + const load = (p) => p; + globalThis.System = { import: load }; + expect(System.import).toBe(load); + expect(System.IO.Path.Combine("a", "b")).toBe("a\\b"); + }); + + it("throws a catchable JS error for a missing member", () => { + const g = new TestFixtures.Basics.Greeter(); + expect(() => g.NoSuchMethod()).toThrow(); + }); +}); + +describe("C# sources in plugins", () => { + it("exposes plugin C# types by namespace", () => { + expect(typeof TestPlugin).not.toBe("undefined"); + const g = new TestPlugin.Native.PluginGreeter(); + expect(g.Greet("app")).toBe("Hello from the plugin, app!"); + expect(TestPlugin.Native.PluginGreeter.PluginName).toBe("test-plugin"); + }); +}); diff --git a/test-app/app/tests/extend-dotnet.js b/test-app/app/tests/extend-dotnet.js new file mode 100644 index 0000000..63469bd --- /dev/null +++ b/test-app/app/tests/extend-dotnet.js @@ -0,0 +1,295 @@ +// Extending C# classes and implementing C# interfaces from JavaScript, with the semantics the +// Android and iOS runtimes give Java/Objective-C classes: native code calling a virtual member +// lands in the JS override, constructors forward their arguments, `super` reaches the base +// implementation, `this` is the JS object (fields survive native round-trips) and instanceof +// works. Fixtures: App_Resources/Windows/src/TestFixtures/Inheritance.cs. + +const { Animal, Shape, ICalculator, INamed, Native } = TestFixtures.Inheritance; + +describe("Extending C# classes", () => { + describe("with Class.extend()", () => { + it("dispatches native virtual calls to the JS override", () => { + const Dog = Animal.extend({ + Speak() { + return "Woof"; + }, + }); + const dog = new Dog(); + expect(dog.Speak()).toBe("Woof"); + expect(Native.Speak(dog)).toBe("Woof"); + expect(dog.Describe()).toBe("animal says Woof on 4 legs"); + }); + + it("supports a type name as the first argument", () => { + const Cow = Animal.extend("TestApp.Cow", { + Speak() { + return "Moo"; + }, + }); + expect(Native.Speak(new Cow())).toBe("Moo"); + }); + + it("forwards constructor arguments to the base constructor", () => { + const Dog = Animal.extend({ + Speak() { + return "Woof"; + }, + }); + const rex = new Dog("rex"); + expect(rex.Name).toBe("rex"); + expect(rex.Describe()).toBe("rex says Woof on 4 legs"); + const old = new Dog("fido", 12); + expect(old.Age).toBe(12); + }); + + it("calls the base implementation through this.super", () => { + const Loud = Animal.extend({ + Greet(other) { + return this.super.Greet(other).toUpperCase(); + }, + }); + expect(new Loud("max").GreetFromNative("bob")).toBe("MAX GREETS BOB"); + }); + + it("keeps members that are not overridden native", () => { + const Dog = Animal.extend({ + Speak() { + return "Woof"; + }, + }); + expect(new Dog("rex").Greet("bob")).toBe("rex greets bob"); + expect(Native.Legs(new Dog())).toBe(4); + }); + + it("overrides protected members", () => { + const Spy = Animal.extend({ + Secret() { + return "js-secret"; + }, + }); + expect(new Spy().RevealSecret()).toBe("js-secret"); + }); + + it("overrides virtual properties with accessors", () => { + const Bird = Animal.extend({ + get Legs() { + return 2; + }, + Speak() { + return "Tweet"; + }, + }); + expect(Native.Legs(new Bird())).toBe(2); + expect(new Bird("tweety").Describe()).toBe("tweety says Tweet on 2 legs"); + }); + + it("is instanceof the extended and the base class", () => { + const Dog = Animal.extend({ + Speak() { + return "Woof"; + }, + }); + const dog = new Dog(); + expect(dog instanceof Dog).toBe(true); + expect(dog instanceof Animal).toBe(true); + expect(Native.IsAnimal(dog)).toBe(true); + }); + + it("can be extended again", () => { + const Dog = Animal.extend({ + Speak() { + return "Woof"; + }, + }); + const Puppy = Dog.extend({ + Speak() { + return "Yip"; + }, + }); + const p = new Puppy("bit"); + expect(Native.Speak(p)).toBe("Yip"); + expect(p instanceof Dog).toBe(true); + expect(p instanceof Animal).toBe(true); + }); + }); + + describe("with ES2015 class syntax", () => { + class Cat extends Animal { + constructor(name) { + super(name, 3); + this.lives = 9; + } + + Speak() { + return "Meow x" + this.lives; + } + + Greet(other) { + return super.Greet(other) + "!"; + } + } + + it("dispatches native virtual calls to the JS override", () => { + const cat = new Cat("tom"); + expect(Native.Speak(cat)).toBe("Meow x9"); + expect(cat.Describe()).toBe("tom says Meow x9 on 4 legs"); + }); + + it("forwards super(...) arguments to the base constructor", () => { + const cat = new Cat("tom"); + expect(cat.Name).toBe("tom"); + expect(cat.Age).toBe(3); + }); + + it("keeps JS fields visible to overrides called from native code", () => { + const cat = new Cat("tom"); + cat.lives = 3; + expect(Native.Speak(cat)).toBe("Meow x3"); + }); + + it("calls the base implementation with super", () => { + expect(new Cat("tom").GreetFromNative("jerry")).toBe("tom greets jerry!"); + }); + + it("is instanceof the subclass and the base class", () => { + const cat = new Cat("tom"); + expect(cat instanceof Cat).toBe(true); + expect(cat instanceof Animal).toBe(true); + expect(Native.IsAnimal(cat)).toBe(true); + }); + + it("returns the same JS object when native code hands the instance back", () => { + const cat = new Cat("tom"); + Native.Keep(cat); + expect(Native.Kept()).toBe(cat); + }); + + it("supports subclasses of subclasses", () => { + class Kitten extends Cat { + Speak() { + return "mew (" + super.Speak() + ")"; + } + } + const k = new Kitten("kit"); + expect(Native.Speak(k)).toBe("mew (Meow x9)"); + expect(k instanceof Cat).toBe(true); + }); + + it("implements abstract members", () => { + class Square extends Shape { + constructor(side) { + super(); + this.side = side; + } + + Area() { + return this.side * this.side; + } + + get Kind() { + return "square"; + } + } + expect(Native.Report(new Square(2))).toBe("square:4"); + }); + + it("accepts `return global.__native(this)` in constructors, as on Android/iOS", () => { + class Shared extends Animal { + constructor() { + super("shared"); + return global.__native(this); + } + + Speak() { + return "shared"; + } + } + const s = new Shared(); + expect(s instanceof Shared).toBe(true); + expect(Native.Speak(s)).toBe("shared"); + }); + + it("accepts the @NativeClass decorator", () => { + expect(typeof NativeClass).toBe("function"); + // What TypeScript emits for `@NativeClass() class Decorated extends Animal {}`. + let Decorated = class Decorated extends Animal { + Speak() { + return "decorated"; + } + }; + Decorated = NativeClass()(Decorated) || Decorated; + expect(Native.Speak(new Decorated())).toBe("decorated"); + }); + }); +}); + +describe("Extending C# classes with TypeScript's ES5 output", () => { + // What the @NativeClass transform (and TypeScript targeting ES5) emits for + // `class Es5Dog extends Animal { constructor(name) { super(name); this.tricks = 2; } Speak() {...} }`. + const Es5Dog = (function (_super) { + __extends(Es5Dog, _super); + function Es5Dog(name) { + var _this = _super.call(this, name) || this; + _this.tricks = 2; + return _this; + } + Es5Dog.prototype.Speak = function () { + return "woof x" + this.tricks; + }; + Es5Dog.prototype.Greet = function (other) { + return _super.prototype.Greet.call(this, other) + "?"; + }; + return Es5Dog; + })(Animal); + + it("dispatches native virtual calls to the JS override", () => { + const dog = new Es5Dog("rex"); + expect(Native.Speak(dog)).toBe("woof x2"); + expect(dog.Describe()).toBe("rex says woof x2 on 4 legs"); + }); + + it("calls the base implementation through _super.prototype", () => { + expect(new Es5Dog("rex").GreetFromNative("bob")).toBe("rex greets bob?"); + }); + + it("is instanceof the subclass and the base class", () => { + const dog = new Es5Dog("rex"); + expect(dog instanceof Es5Dog).toBe(true); + expect(dog instanceof Animal).toBe(true); + }); +}); + +describe("Implementing C# interfaces", () => { + it("implements an interface with new Interface({...})", () => { + const calc = new ICalculator({ + Compute(a, b) { + return a * b; + }, + get Name() { + return "multiply"; + }, + }); + expect(Native.Run(calc, 6, 7)).toBe(42); + expect(Native.NameOf(calc)).toBe("multiply"); + }); + + it("implements interfaces with Object.extend({ interfaces })", () => { + const Named = Object.extend({ + interfaces: [INamed], + GetName() { + return "object-extend"; + }, + }); + expect(Native.NameOf(new Named())).toBe("object-extend"); + }); + + it("implements interfaces on a class with @Interfaces", () => { + class Named extends System.Object { + GetName() { + return "named"; + } + } + Interfaces([INamed])(Named); + expect(Native.NameOf(new Named())).toBe("named"); + }); +}); diff --git a/test-app/app/tests/extend-winrt.js b/test-app/app/tests/extend-winrt.js new file mode 100644 index 0000000..07ebf14 --- /dev/null +++ b/test-app/app/tests/extend-winrt.js @@ -0,0 +1,165 @@ +// Extending WinRT/WinUI classes from JavaScript. XAML's layout engine calls MeasureOverride / +// ArrangeOverride / OnApplyTemplate on our subclass, which must land in the JS overrides — the +// equivalent of overriding onMeasure/onLayout on an Android View or layoutSubviews on a UIView. + +const { Controls, host, detach, waitFor } = require("./helpers"); +const Size = (w, h) => ({ Width: w, Height: h }); + +describe("Extending WinRT classes", () => { + let container; + beforeEach(() => { + container = host(); + }); + afterEach(() => { + detach(container); + }); + + describe("with ES2015 class syntax", () => { + class FixedPanel extends Controls.Panel { + constructor() { + super(); + this.measures = 0; + this.arranges = 0; + } + + MeasureOverride(available) { + this.measures++; + return Size(120, 40); + } + + ArrangeOverride(finalSize) { + this.arranges++; + return finalSize; + } + } + + it("dispatches XAML layout to MeasureOverride/ArrangeOverride", async () => { + const panel = new FixedPanel(); + container.Children.Append(panel); + await waitFor(() => panel.arranges > 0); + expect(panel.measures).toBeGreaterThan(0); + expect(panel.DesiredSize.Width).toBe(120); + expect(panel.DesiredSize.Height).toBe(40); + }); + + it("is instanceof the subclass and its WinRT bases", () => { + const panel = new FixedPanel(); + expect(panel instanceof FixedPanel).toBe(true); + expect(panel instanceof Controls.Panel).toBe(true); + expect(panel instanceof Microsoft.UI.Xaml.UIElement).toBe(true); + }); + + it("returns the same JS object when XAML hands the instance back", () => { + const panel = new FixedPanel(); + panel.marker = "mine"; + container.Children.Append(panel); + const back = container.Children.GetAt(0); + expect(back).toBe(panel); + expect(back.marker).toBe("mine"); + }); + + it("keeps native members of the base class", () => { + const panel = new FixedPanel(); + panel.Width = 123; + expect(panel.Width).toBe(123); + panel.Children.Append(new Controls.TextBlock()); + expect(panel.Children.Size).toBe(1); + }); + + it("calls the base implementation with super", async () => { + class Logged extends Controls.StackPanel { + MeasureOverride(available) { + this.called = true; + return super.MeasureOverride(available); + } + } + const panel = new Logged(); + const text = new Controls.TextBlock(); + text.Text = "hello"; + panel.Children.Append(text); + container.Children.Append(panel); + await waitFor(() => panel.called === true && panel.ActualHeight > 0); + expect(panel.DesiredSize.Height).toBeGreaterThan(0); + }); + + it("dispatches OnApplyTemplate on a templated control", async () => { + class TemplatedButton extends Controls.Button { + OnApplyTemplate() { + super.OnApplyTemplate(); + this.applied = (this.applied || 0) + 1; + } + } + const button = new TemplatedButton(); + button.Content = "tap"; + container.Children.Append(button); + await waitFor(() => button.applied > 0); + expect(button.applied).toBe(1); + }); + }); + + describe("with TypeScript's ES5 output", () => { + // What the @NativeClass transform emits for a class extending a WinRT class. + const Es5Panel = (function (_super) { + __extends(Es5Panel, _super); + function Es5Panel() { + var _this = _super.call(this) || this; + _this.measured = 0; + return _this; + } + Es5Panel.prototype.MeasureOverride = function (available) { + this.measured++; + return Size(48, 24); + }; + return Es5Panel; + })(Controls.Panel); + + it("dispatches XAML layout to the overrides", async () => { + const panel = new Es5Panel(); + expect(panel instanceof Es5Panel).toBe(true); + expect(panel instanceof Controls.Panel).toBe(true); + container.Children.Append(panel); + await waitFor(() => panel.measured > 0 && panel.DesiredSize.Width === 48); + expect(panel.DesiredSize.Height).toBe(24); + }); + + it("calls the base implementation through _super.prototype", async () => { + const Es5Stack = (function (_super) { + __extends(Es5Stack, _super); + function Es5Stack() { + return _super.call(this) || this; + } + Es5Stack.prototype.MeasureOverride = function (available) { + this.called = true; + return _super.prototype.MeasureOverride.call(this, available); + }; + return Es5Stack; + })(Controls.StackPanel); + const panel = new Es5Stack(); + const label = new Controls.TextBlock(); + label.Text = "hello"; + panel.Children.Append(label); + container.Children.Append(panel); + await waitFor(() => panel.called === true && panel.ActualHeight > 0); + expect(panel.DesiredSize.Height).toBeGreaterThan(0); + }); + }); + + describe("with Class.extend()", () => { + it("dispatches XAML layout to the overrides", async () => { + const Sized = Controls.Panel.extend({ + MeasureOverride(available) { + return Size(64, 32); + }, + ArrangeOverride(finalSize) { + this.arranged = true; + return finalSize; + }, + }); + const panel = new Sized(); + container.Children.Append(panel); + await waitFor(() => panel.arranged === true); + expect(panel.DesiredSize.Width).toBe(64); + expect(panel instanceof Controls.Panel).toBe(true); + }); + }); +}); diff --git a/test-app/app/tests/helpers.js b/test-app/app/tests/helpers.js new file mode 100644 index 0000000..4cd5024 --- /dev/null +++ b/test-app/app/tests/helpers.js @@ -0,0 +1,66 @@ +// Shared helpers for specs that need the live XAML tree. + +const Controls = Microsoft.UI.Xaml.Controls; + +let rootPanel = null; +let window = null; + +function mainWindow() { + if (!window) { + window = new Microsoft.UI.Xaml.Window(); + window.Title = "NativeScript Windows TestRunner"; + window.Activate(); + } + return window; +} + +/** The window's root panel (a StackPanel), created on first use. */ +function root() { + if (rootPanel) return rootPanel; + const win = mainWindow(); + rootPanel = new Controls.StackPanel(); + win.Content = rootPanel; + return rootPanel; +} + +/** A fresh, empty Grid attached to the root for one spec; removed by `detach`. */ +function host(width = 300, height = 200) { + const grid = new Controls.Grid(); + grid.Width = width; + grid.Height = height; + root().Children.Append(grid); + return grid; +} + +function detach(element) { + const children = root().Children; + for (let i = 0; i < children.Size; i++) { + if (children.GetAt(i).Equals ? children.GetAt(i).Equals(element) : children.GetAt(i) === element) { + children.RemoveAt(i); + return; + } + } +} + +function waitFor(predicate, timeoutMs = 4000) { + return new Promise((resolve, reject) => { + const started = Date.now(); + (function poll() { + let ok = false; + try { + ok = predicate(); + } catch (e) { + return reject(e); + } + if (ok) return resolve(); + if (Date.now() - started > timeoutMs) return reject(new Error("timed out waiting for condition")); + setTimeout(poll, 10); + })(); + }); +} + +function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +module.exports = { Controls, mainWindow, root, host, detach, waitFor, delay }; diff --git a/test-app/app/tests/layout-mutation.js b/test-app/app/tests/layout-mutation.js new file mode 100644 index 0000000..95b5d99 --- /dev/null +++ b/test-app/app/tests/layout-mutation.js @@ -0,0 +1,187 @@ +// Changing the XAML tree synchronously from layout and rendering callbacks. In a C# WinUI app +// adding, removing or reparenting elements from SizeChanged, LayoutUpdated or +// CompositionTarget.Rendering is legal, and on Android/iOS changing views from onSizeChanged / +// layoutSubviews works too, so it must not take the app down (stowed exception 0xC000027B) when +// the handler is JavaScript. + +const { Controls, host, detach, waitFor, delay } = require("./helpers"); + +function text(value) { + const t = new Controls.TextBlock(); + t.Text = value; + return t; +} + +describe("Changing the UI during layout", () => { + let container; + beforeEach(() => { + container = host(); + }); + afterEach(() => { + detach(container); + }); + + it("adds children from SizeChanged", async () => { + const panel = new Controls.StackPanel(); + let added = false; + panel.SizeChanged = () => { + if (added) return; + added = true; + panel.Children.Append(text("from SizeChanged")); + panel.Children.Append(text("and another")); + }; + container.Children.Append(panel); + await waitFor(() => added && panel.Children.Size === 2); + await delay(50); + expect(panel.Children.Size).toBe(2); + }); + + it("removes and reparents children from SizeChanged", async () => { + const a = new Controls.StackPanel(); + const b = new Controls.StackPanel(); + const child = text("moving"); + a.Children.Append(child); + let moved = false; + a.SizeChanged = () => { + if (moved) return; + moved = true; + a.Children.Clear(); + b.Children.Append(child); + }; + container.Children.Append(a); + container.Children.Append(b); + await waitFor(() => moved); + await delay(50); + expect(a.Children.Size).toBe(0); + expect(b.Children.Size).toBe(1); + }); + + it("adds children from LayoutUpdated", async () => { + const panel = new Controls.StackPanel(); + let added = false; + panel.LayoutUpdated = () => { + if (added) return; + added = true; + panel.Children.Append(text("from LayoutUpdated")); + }; + container.Children.Append(panel); + await waitFor(() => added && panel.Children.Size === 1); + await delay(50); + panel.LayoutUpdated = null; + expect(panel.Children.Size).toBe(1); + }); + + it("adds and removes children from CompositionTarget.Rendering", async () => { + const panel = new Controls.StackPanel(); + container.Children.Append(panel); + let frames = 0; + const handler = () => { + frames++; + if (frames === 1) panel.Children.Append(text("frame 1")); + if (frames === 2) panel.Children.Append(text("frame 2")); + if (frames === 3) panel.Children.RemoveAt(0); + }; + Microsoft.UI.Xaml.Media.CompositionTarget.Rendering = handler; + try { + await waitFor(() => frames >= 4); + } finally { + Microsoft.UI.Xaml.Media.CompositionTarget.Rendering = null; + } + await delay(50); + expect(panel.Children.Size).toBe(1); + }); + + it("reparents children from LayoutUpdated", async () => { + const a = new Controls.StackPanel(); + const b = new Controls.StackPanel(); + const child = text("moving"); + a.Children.Append(child); + let moved = false; + a.LayoutUpdated = () => { + if (moved) return; + moved = true; + a.Children.RemoveAt(0); + b.Children.Append(child); + }; + container.Children.Append(a); + container.Children.Append(b); + await waitFor(() => moved); + await delay(50); + a.LayoutUpdated = null; + expect(b.Children.Size).toBe(1); + }); + + it("reparents a subtree from CompositionTarget.Rendering", async () => { + const a = new Controls.StackPanel(); + const b = new Controls.StackPanel(); + const subtree = new Controls.StackPanel(); + subtree.Children.Append(text("one")); + subtree.Children.Append(text("two")); + a.Children.Append(subtree); + container.Children.Append(a); + container.Children.Append(b); + let moved = false; + Microsoft.UI.Xaml.Media.CompositionTarget.Rendering = () => { + if (moved) return; + moved = true; + a.Children.Clear(); + b.Children.Append(subtree); + }; + try { + await waitFor(() => moved); + await delay(50); + } finally { + Microsoft.UI.Xaml.Media.CompositionTarget.Rendering = null; + } + expect(a.Children.Size).toBe(0); + expect(b.Children.Size).toBe(1); + }); + + it("removes the element whose SizeChanged is firing", async () => { + const panel = new Controls.StackPanel(); + panel.Children.Append(text("about to go")); + let removed = false; + panel.SizeChanged = () => { + if (removed) return; + removed = true; + container.Children.Clear(); + }; + container.Children.Append(panel); + await waitFor(() => removed); + await delay(50); + expect(container.Children.Size).toBe(0); + }); + + it("mutates the tree from promise continuations scheduled in a layout callback", async () => { + const panel = new Controls.StackPanel(); + let scheduled = false; + let ran = false; + panel.SizeChanged = () => { + if (scheduled) return; + scheduled = true; + Promise.resolve().then(() => { + panel.Children.Append(text("from a microtask")); + ran = true; + }); + }; + container.Children.Append(panel); + await waitFor(() => ran); + await delay(50); + expect(panel.Children.Size).toBe(1); + }); + + it("replaces content from SizeChanged", async () => { + const border = new Controls.Border(); + border.Child = text("before"); + let swapped = false; + border.SizeChanged = () => { + if (swapped) return; + swapped = true; + border.Child = text("after"); + }; + container.Children.Append(border); + await waitFor(() => swapped); + await delay(50); + expect(border.Child.Text).toBe("after"); + }); +}); diff --git a/test-app/app/tests/lifetime.js b/test-app/app/tests/lifetime.js new file mode 100644 index 0000000..d26e035 --- /dev/null +++ b/test-app/app/tests/lifetime.js @@ -0,0 +1,81 @@ +// Lifetime of JS subclass instances. An instance is a JS object plus a managed object; neither +// keeps the other alive on its own, so an instance nothing references is collected, while one +// native code holds keeps working (its JS object is made anew if it was collected, as on Android). +// Subclasses of WinRT UI classes stay alive, fields included, while they are in the visual tree. +// Fixtures: App_Resources/Windows/src/TestFixtures/Lifetime.cs. + +const { Controls, host, detach, delay } = require("./helpers"); +const { Tracked, Gc } = TestFixtures.Lifetime; +const { Animal, Native } = TestFixtures.Inheritance; + +// Collects garbage on both sides until `done()` holds: JS first (FinalizationRegistry callbacks run +// as tasks, so wait between rounds), then .NET. +async function collect(done, rounds = 10) { + for (let i = 0; i < rounds && !(done && done()); i++) { + gc(); + await delay(20); + Gc.Collect(); + await delay(20); + } +} + +const describeIfGc = typeof gc === "function" ? describe : xdescribe; + +describeIfGc("Lifetime of JS subclass instances", () => { + it("releases instances neither JS nor native code references", async () => { + class Dropped extends Tracked { + Name() { + return "dropped"; + } + } + const before = Tracked.Finalized; + (function () { + for (let i = 0; i < 20; i++) new Dropped(); + })(); + await collect(() => Tracked.Finalized - before >= 20); + expect(Tracked.Finalized - before).toBeGreaterThanOrEqual(15); + }, 15000); + + it("keeps working when only native code holds the instance", async () => { + class Parrot extends Animal { + Speak() { + return "polly"; + } + } + Native.Keep(new Parrot("p")); + await collect(null, 4); + const kept = Native.Kept(); + expect(Native.Speak(kept)).toBe("polly"); + expect(kept instanceof Parrot).toBe(true); + expect(kept.Name).toBe("p"); + expect(Native.Kept()).toBe(kept); + }, 15000); + + it("keeps a WinRT UI subclass in the visual tree alive, fields included", async () => { + class Sized extends Controls.Panel { + constructor() { + super(); + this.width = 77; + } + + MeasureOverride() { + return { Width: this.width, Height: 10 }; + } + } + const container = host(); + try { + container.Children.Append(new Sized()); + // Let it get into the tree and past the next attachment check. + await delay(2100); + container.InvalidateMeasure(); + container.UpdateLayout(); + await collect(null, 4); + const child = container.Children.GetAt(0); + expect(child instanceof Sized).toBe(true); + expect(child.width).toBe(77); + expect(child.DesiredSize.Width).toBe(77); + } finally { + detach(container); + } + }, 15000); +}); diff --git a/test-app/app/tests/threading.js b/test-app/app/tests/threading.js new file mode 100644 index 0000000..ecbf22d --- /dev/null +++ b/test-app/app/tests/threading.js @@ -0,0 +1,107 @@ +// Callbacks invoked by native code on a background thread are delivered to JavaScript, as on iOS +// and Android: the calling thread waits while the callback runs on the JS (UI) thread, so return +// values flow back to native code. Fixtures: App_Resources/Windows/src/TestFixtures/Threading.cs. + +function waitFor(predicate, timeoutMs = 4000) { + return new Promise((resolve, reject) => { + const started = Date.now(); + (function poll() { + if (predicate()) return resolve(); + if (Date.now() - started > timeoutMs) return reject(new Error("timed out waiting for condition")); + setTimeout(poll, 10); + })(); + }); +} + +describe("Threading", () => { + beforeAll(() => { + TestFixtures.Threading.BackgroundInvoker.CaptureUiThread(); + }); + + describe("WinRT delegates", () => { + it("delivers a WorkItemHandler invoked on the thread pool", async () => { + let ran = false; + let onUiThread = null; + const op = Windows.System.Threading.ThreadPool.RunAsync(() => { + ran = true; + onUiThread = TestFixtures.Threading.BackgroundInvoker.IsUiThread(); + }); + await NSWinRT.toPromise(op); + expect(ran).toBe(true); + expect(onUiThread).toBe(true); + }); + + it("delivers a ThreadPoolTimer callback", async () => { + let fired = 0; + Windows.System.Threading.ThreadPoolTimer.CreateTimer(() => { + fired++; + }, { Duration: 10 * 10000 }); + await waitFor(() => fired > 0); + expect(fired).toBe(1); + }); + + it("delivers many background invocations in order", async () => { + let count = 0; + const ops = []; + for (let i = 0; i < 20; i++) ops.push(NSWinRT.toPromise(Windows.System.Threading.ThreadPool.RunAsync(() => count++))); + await Promise.all(ops); + expect(count).toBe(20); + }); + }); + + describe(".NET delegates", () => { + it("delivers a Func<> invoked on a background thread and returns its result", async () => { + let result = null; + let background = null; + let calledOnUi = null; + TestFixtures.Threading.BackgroundInvoker.ComputeInBackground( + (v) => { + calledOnUi = TestFixtures.Threading.BackgroundInvoker.IsUiThread(); + return v * 2; + }, + 21, + (r, bg) => { + result = r; + background = bg; + } + ); + await waitFor(() => result !== null); + expect(result).toBe(42); + expect(background).toBe(true); + expect(calledOnUi).toBe(true); + }); + + it("delivers calls from several threads at once", async () => { + let done = null; + TestFixtures.Threading.BackgroundInvoker.FanOut((n) => n + 1, 8, (count, sum) => (done = { count, sum })); + await waitFor(() => done !== null); + expect(done).toEqual({ count: 8, sum: 36 }); + }); + + it("surfaces a JS exception thrown from a background call to the native caller", async () => { + let outcome = null; + TestFixtures.Threading.BackgroundInvoker.ThrowInBackground( + () => { + throw new Error("from js"); + }, + (r) => (outcome = r) + ); + await waitFor(() => outcome !== null); + expect(outcome).not.toBe("no-exception"); + }); + + it("delivers C# events raised on a background thread", async () => { + const ticker = new TestFixtures.Threading.Ticker(); + const ticks = []; + ticker.add_Tick((sender, i) => ticks.push(i)); + ticker.StartInBackground(3); + await waitFor(() => ticks.length === 3); + expect(ticks).toEqual([1, 2, 3]); + }); + + it("resolves Task continuations that complete on the thread pool", async () => { + const value = await TestFixtures.Basics.Callbacks.AddLaterAsync(1, 2, 20); + expect(value).toBe(3); + }); + }); +}); diff --git a/test-app/plugins/test-plugin/package.json b/test-app/plugins/test-plugin/package.json new file mode 100644 index 0000000..93799eb --- /dev/null +++ b/test-app/plugins/test-plugin/package.json @@ -0,0 +1,10 @@ +{ + "name": "test-plugin", + "version": "1.0.0", + "main": "index.js", + "nativescript": { + "platforms": { + "windows": "0.1.0" + } + } +} diff --git a/test-app/plugins/test-plugin/platforms/windows/src/PluginGreeter.cs b/test-app/plugins/test-plugin/platforms/windows/src/PluginGreeter.cs new file mode 100644 index 0000000..664676d --- /dev/null +++ b/test-app/plugins/test-plugin/platforms/windows/src/PluginGreeter.cs @@ -0,0 +1,11 @@ +// A plugin's C# sources (platforms/windows/**/*.cs) are compiled into the app, the way a plugin's +// platforms/android Java/Kotlin and platforms/ios Objective-C/Swift sources are. +namespace TestPlugin.Native +{ + public class PluginGreeter + { + public string Greet(string name) => $"Hello from the plugin, {name}!"; + + public static string PluginName => "test-plugin"; + } +} diff --git a/test-app/run.ps1 b/test-app/run.ps1 new file mode 100644 index 0000000..3a665f2 --- /dev/null +++ b/test-app/run.ps1 @@ -0,0 +1,210 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Builds and runs the Windows runtime test app (the counterpart of the Android/iOS test-app suites). + +.DESCRIPTION + Generates a platform project from template/framework the way `ns platform add windows` + + `ns prepare windows` do, then builds and launches it: + - template/framework/__PROJECT_NAME__ -> platforms/windows/TestRunner (placeholders replaced) + - test-app/app -> TestRunner/app (JS specs + runner) + - test-app/App_Resources/Windows -> TestRunner/App_Resources/Windows (C# fixtures in src/) + - test-app/plugins//platforms/windows -> TestRunner/plugins/ (plugin C# sources) + The freshly built nativescript.dll and the dotnet-bridge sources from this repo are used, and the + dotnet-tool runs from source via cargo, so the run reflects the working tree. + + The app writes JUnit XML and a plain log next to the executable, then exits with the number of + failed specs. This script prints the log and exits non-zero when any spec failed. + +.EXAMPLE + pwsh test-app/run.ps1 + pwsh test-app/run.ps1 -Filter "Threading" + pwsh test-app/run.ps1 -SkipRuntimeBuild + pwsh test-app/run.ps1 -EngineDll packages/windows-v8/target/release/windows_v8.dll # a napi engine +#> +param( + [ValidateSet("Debug", "Release")] + [string]$Configuration = "Debug", + [ValidateSet("x64", "arm64")] + [string]$Platform = "x64", + [switch]$SkipRuntimeBuild, + # Another runtime DLL to test instead of the classic one, e.g. an engine package's cdylib + # (packages/windows-, `cargo build --release --features host_dll`); DLLs next to it + # (engine sidecars) are deployed too. + [string]$EngineDll = "", + [switch]$Clean, + [string]$Filter = "", + [int]$TimeoutSeconds = 300 +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version Latest + +$TestAppDir = $PSScriptRoot +$RepoRoot = Resolve-Path (Join-Path $TestAppDir "..") +$Framework = Join-Path $RepoRoot "template\framework" +$PlatformsDir = Join-Path $TestAppDir "platforms\windows" +$ProjectName = "TestRunner" +$AppId = "org.nativescript.windows.testrunner" +$ProjectDir = Join-Path $PlatformsDir $ProjectName + +function Step([string]$msg) { Write-Host "==> $msg" -ForegroundColor Cyan } + +# ── 1. runtime ─────────────────────────────────────────────────────────────── +$rustTarget = if ($Platform -eq "arm64") { "aarch64-pc-windows-msvc" } else { "x86_64-pc-windows-msvc" } +$cargoProfile = if ($Configuration -eq "Debug") { "dev" } else { "release" } +$profileDir = if ($Configuration -eq "Debug") { "debug" } else { "release" } +$hostTarget = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "aarch64-pc-windows-msvc" } else { "x86_64-pc-windows-msvc" } +$runtimeDll = if ($rustTarget -eq $hostTarget) { + Join-Path $RepoRoot "target\$profileDir\nativescript.dll" +} else { + Join-Path $RepoRoot "target\$rustTarget\$profileDir\nativescript.dll" +} +if ($EngineDll) { + $runtimeDll = (Resolve-Path $EngineDll).Path + $SkipRuntimeBuild = $true +} +if (-not $SkipRuntimeBuild) { + Step "Building nativescript.dll ($cargoProfile, $rustTarget)" + Push-Location $RepoRoot + try { + if ($rustTarget -eq $hostTarget) { cargo build -p nativescript --profile $cargoProfile } + else { cargo build -p nativescript --profile $cargoProfile --target $rustTarget } + if ($LASTEXITCODE -ne 0) { throw "cargo build failed" } + } finally { Pop-Location } +} +if (-not (Test-Path $runtimeDll)) { throw "Runtime DLL not found at $runtimeDll (run without -SkipRuntimeBuild)" } + +# ── 2. platform project (ns platform add) ──────────────────────────────────── +if ($Clean -and (Test-Path $PlatformsDir)) { + Step "Removing $PlatformsDir" + Remove-Item -Recurse -Force $PlatformsDir +} +New-Item -ItemType Directory -Force -Path $PlatformsDir | Out-Null + +function Copy-Tree([string]$src, [string]$dest, [string[]]$excludeDirs = @("bin", "obj")) { + New-Item -ItemType Directory -Force -Path $dest | Out-Null + Get-ChildItem -LiteralPath $src -Force | ForEach-Object { + if ($_.PSIsContainer) { + if ($excludeDirs -notcontains $_.Name) { Copy-Tree $_.FullName (Join-Path $dest $_.Name) $excludeDirs } + } else { + Copy-Item -LiteralPath $_.FullName -Destination (Join-Path $dest $_.Name) -Force + } + } +} + +Step "Generating platform project from template/framework" +Copy-Tree (Join-Path $Framework "__PROJECT_NAME__") $ProjectDir +$placeholderCsproj = Join-Path $ProjectDir "__PROJECT_NAME__.csproj" +$csproj = Join-Path $ProjectDir "$ProjectName.csproj" +if (Test-Path $placeholderCsproj) { Move-Item -Force $placeholderCsproj $csproj } +$textExt = @(".cs", ".csproj", ".xaml", ".xml", ".json", ".appxmanifest", ".props", ".targets") +Get-ChildItem -LiteralPath $ProjectDir -Recurse -File | + Where-Object { $textExt -contains $_.Extension.ToLowerInvariant() -and $_.FullName -notmatch "\\(bin|obj)\\" } | + ForEach-Object { + $content = [IO.File]::ReadAllText($_.FullName) + if ($content.Contains("__PROJECT_NAME__") -or $content.Contains("__APP_IDENTIFIER__")) { + $content = $content.Replace("__PROJECT_NAME__", $ProjectName).Replace("__APP_IDENTIFIER__", $AppId) + [IO.File]::WriteAllText($_.FullName, $content) + } + } + +# Bridge from source (not the template's synced copy) and the freshly built runtime. +Copy-Tree (Join-Path $RepoRoot "dotnet-bridge") (Join-Path $PlatformsDir "dotnet-bridge") @("bin", "obj", "publish", "publish_build") +$bridgePublish = Join-Path $PlatformsDir "dotnet-bridge\publish" +if (Test-Path $bridgePublish) { Remove-Item -Recurse -Force $bridgePublish } +$libDir = Join-Path $PlatformsDir "libs\$Platform" +# Start from an empty libs dir and no deployed runtime: the csproj copies with PreserveNewest, and +# a switched DLL can be older than the one already in bin\. +if (Test-Path $libDir) { Remove-Item -Recurse -Force $libDir } +New-Item -ItemType Directory -Force -Path $libDir | Out-Null +Get-ChildItem -LiteralPath (Join-Path $ProjectDir "bin") -Filter *.dll -ErrorAction SilentlyContinue | + Where-Object { $_.Name -eq "nativescript.dll" -or ($EngineDll -and (Test-Path (Join-Path (Split-Path $runtimeDll) $_.Name))) } | + Remove-Item -Force +Copy-Item -Force $runtimeDll (Join-Path $libDir "nativescript.dll") +if ($EngineDll) { + Get-ChildItem -LiteralPath (Split-Path $runtimeDll) -Filter *.dll | + Where-Object { $_.FullName -ne $runtimeDll } | + ForEach-Object { Copy-Item -Force $_.FullName $libDir } +} +# The ManifestMerger task ships prebuilt; dotnet-tool runs from source (cargo) because the +# template's tools\*.exe are not copied, which makes the csproj fall back to `cargo run`. +Copy-Tree (Join-Path $Framework "tools\ManifestMerger") (Join-Path $PlatformsDir "tools\ManifestMerger") + +# ── 3. prepare (app, App_Resources, plugins) ───────────────────────────────── +Step "Preparing app, App_Resources and plugins" +$appDest = Join-Path $ProjectDir "app" +if (Test-Path $appDest) { Remove-Item -Recurse -Force $appDest } +Copy-Tree (Join-Path $TestAppDir "app") $appDest +$resDest = Join-Path $ProjectDir "App_Resources\Windows" +if (Test-Path $resDest) { Remove-Item -Recurse -Force $resDest } +Copy-Tree (Join-Path $TestAppDir "App_Resources\Windows") $resDest + +# Mirrors WindowsProjectService.preparePluginNativeCode/prepareProject in the CLI: stage each +# plugin's platforms/windows folder under plugins// and import its plugin.props/targets. +$pluginsDest = Join-Path $ProjectDir "plugins" +if (Test-Path $pluginsDest) { Remove-Item -Recurse -Force $pluginsDest } +New-Item -ItemType Directory -Force -Path $pluginsDest | Out-Null +$propsLines = @('', '') +$targetsLines = @('', '') +$pluginsSrc = Join-Path $TestAppDir "plugins" +if (Test-Path $pluginsSrc) { + Get-ChildItem -LiteralPath $pluginsSrc -Directory | ForEach-Object { + $native = Join-Path $_.FullName "platforms\windows" + if (-not (Test-Path $native)) { return } + Copy-Tree $native (Join-Path $pluginsDest $_.Name) + foreach ($f in @("plugin.props", "plugin.targets")) { + $p = Join-Path $_.FullName $f + if (Test-Path $p) { Copy-Item -Force $p (Join-Path $pluginsDest "$($_.Name)\$f") } + } + $propsLines += " " + $targetsLines += " " + } +} +$propsLines += '' +$targetsLines += '' +Set-Content -Encoding utf8 (Join-Path $pluginsDest "Plugins.props") ($propsLines -join "`n") +Set-Content -Encoding utf8 (Join-Path $pluginsDest "Plugins.targets") ($targetsLines -join "`n") + +# ── 4. build ───────────────────────────────────────────────────────────────── +Step "Building $ProjectName ($Configuration|$Platform)" +$outDir = Join-Path $ProjectDir "bin" +$env:NS_WINDOWS_RUNTIME_ROOT = "$RepoRoot" +# Unpackaged + self-contained Windows App SDK so the runner starts straight from bin\ without +# registering an MSIX package (the CLI's `ns run windows` registers one instead). +$buildLog = Join-Path $PlatformsDir "build.log" +dotnet build $csproj -c $Configuration "-p:Platform=$Platform" --output $outDir ` + "-p:WindowsPackageType=None" "-p:WindowsAppSDKSelfContained=true" -nologo -v:minimal *> $buildLog +if ($LASTEXITCODE -ne 0) { + Get-Content $buildLog | Select-String -Pattern "error" | Select-Object -First 40 | ForEach-Object { Write-Host $_ } + throw "dotnet build failed (full log: $buildLog)" +} + +# ── 5. run ─────────────────────────────────────────────────────────────────── +$exe = Join-Path $outDir "$ProjectName.exe" +$resultsXml = Join-Path $outDir "test-results.xml" +$resultsLog = Join-Path $outDir "test-results.log" +Remove-Item -Force -ErrorAction SilentlyContinue $resultsXml, $resultsLog + +Step "Running $exe" +$env:NS_TEST_RESULTS = $resultsXml +$env:NS_TEST_LOG = $resultsLog +$env:NS_TEST_FILTER = $Filter +$proc = Start-Process -FilePath $exe -WorkingDirectory $outDir -PassThru +if (-not $proc.WaitForExit($TimeoutSeconds * 1000)) { + Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue + if (Test-Path $resultsLog) { Get-Content $resultsLog } + throw "Test app did not finish within $TimeoutSeconds s" +} + +if (Test-Path $resultsLog) { Get-Content $resultsLog } +if (-not (Test-Path $resultsXml)) { + throw ("Test app exited with 0x{0:X8} without writing results (crash?). See {1}" -f $proc.ExitCode, $outDir) +} +Write-Host "JUnit results: $resultsXml" +$failed = $proc.ExitCode +if ($failed -ne 0) { + Write-Host ("{0} spec(s) failed" -f $failed) -ForegroundColor Red + exit 1 +} +Write-Host "All specs passed" -ForegroundColor Green diff --git a/typings/nswinrt-helpers.d.ts b/typings/nswinrt-helpers.d.ts index 7d11e8a..4be1290 100644 --- a/typings/nswinrt-helpers.d.ts +++ b/typings/nswinrt-helpers.d.ts @@ -7,6 +7,12 @@ declare global { // Usage: @Interfaces([Windows.UI.Xaml.Controls.Primitives.IButtonBase]) function Interfaces(interfaces: any[]): ClassDecorator; + // TypeScript @NativeClass decorator — marks a class extending a native (WinRT/.NET) class, as on + // iOS/Android. Extending works without it on Windows; it keeps shared code compiling unchanged. + // Usage: @NativeClass() class MyPanel extends Microsoft.UI.Xaml.Controls.Panel { ... } + function NativeClass(target: T): T; + function NativeClass(): ClassDecorator; + // TypeScript @CSharpProxy decorator — set an explicit managed type name. // Usage: @CSharpProxy('MyApp.Namespace.MyButton') // When present, creates a real C# subclass via the managed bridge. diff --git a/windows-napi/src/delegate_test.rs b/windows-napi/src/delegate_test.rs index bf9c196..292260c 100644 --- a/windows-napi/src/delegate_test.rs +++ b/windows-napi/src/delegate_test.rs @@ -7,7 +7,7 @@ use napi_derive::napi; use windows_core::GUID; use runtime::napi_engine::delegate::{ - invoke_delegate_raw, make_napi_delegate, release_delegate_raw, + invoke_delegate_raw, make_napi_void_delegate, release_delegate_raw, }; use runtime::napi_engine::NativeType; @@ -37,7 +37,7 @@ pub fn make_delegate(env: Env, func: JsFunction, param_types: Vec) -> na .collect::>>() .ok_or_else(|| napi::Error::from_reason("unknown param type"))?; let guid = GUID::from_u128(0x11223344_5566_7788_99aa_bbccddeeff00); - match make_napi_delegate(&env, &func, guid, types) { + match make_napi_void_delegate(&env, &func, guid, types) { Some(ptr) => Ok(ptr as usize as f64), None => Err(napi::Error::from_reason("make_napi_delegate failed")), } From 38d0a650927a60470a39181fbd40e6b988635acd Mon Sep 17 00:00:00 2001 From: Osei Fortune Date: Sun, 4 Oct 2026 01:20:16 -0400 Subject: [PATCH 2/2] feat: deliver worker callbacks on the worker's thread, unbox Object values - WinRT delegates and .NET callbacks created in a worker run on that worker's thread when invoked from another thread (the worker loop now waits on commands, messages and timers). - A callback whose worker has terminated is refused instead of running on a disposed isolate. - Messages a worker posts on its own reach the main thread without it polling. - The classic engine unboxes IPropertyValue results (Tag, PropertySet values) to JS primitives. - test-app: worker and boxing specs; hooks of fully skipped suites don't run. --- runtime/src/global_fns.rs | 104 ++++++++++-- runtime/src/lib.rs | 138 ++++++++++++--- runtime/src/ns_proxy.rs | 37 ++++ runtime/src/timers.rs | 5 + runtime/src/ui_dispatcher.rs | 36 ++-- runtime/src/worker_support.rs | 12 ++ runtime/src/worker_threads.rs | 159 ++++++++++++++---- .../Windows/src/TestFixtures/Threading.cs | 24 +++ test-app/README.md | 3 +- test-app/app/main.js | 1 + test-app/app/runner/jasmine-lite.js | 15 +- test-app/app/tests/boxing.js | 36 ++++ test-app/app/tests/threading.js | 104 ++++++++++++ 13 files changed, 586 insertions(+), 88 deletions(-) create mode 100644 test-app/app/tests/boxing.js diff --git a/runtime/src/global_fns.rs b/runtime/src/global_fns.rs index f713005..279bb91 100644 --- a/runtime/src/global_fns.rs +++ b/runtime/src/global_fns.rs @@ -1080,6 +1080,46 @@ pub(crate) fn handle_worker_post_message( } } +/// Runs on a worker's creating thread when the worker has queued messages: hands them to that +/// `Worker` object (`__nsWorkerDeliver`, installed by the Worker shim). +pub(crate) fn deliver_worker_events(worker_id: u64) { + let isolate_ptr = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()); + if isolate_ptr.is_null() { + return; + } + let isolate: &mut v8::Isolate = unsafe { &mut *isolate_ptr }; + v8::scope!(scope, isolate); + let Some(ctx_global) = scope.get_slot::>().cloned() else { + return; + }; + let context = v8::Local::new(scope, &ctx_global); + let scope = &mut v8::ContextScope::new(scope, context); + v8::tc_scope!(tc, scope); + + let global = context.global(tc); + let Some(key) = v8::String::new(tc, "__nsWorkerDeliver") else { + return; + }; + let Some(deliver) = global + .get(tc, key.into()) + .and_then(|v| v8::Local::::try_from(v).ok()) + else { + return; + }; + let id: v8::Local = v8::Number::new(tc, worker_id as f64).into(); + let _ = deliver.call(tc, global.into(), &[id]); + if tc.has_caught() { + if let Some(ex) = tc.exception() { + let msg = ex.to_rust_string_lossy(tc); + crate::store_last_js_error(msg); + } + tc.reset(); + } + if !crate::defer_microtask_drain() { + tc.perform_microtask_checkpoint(); + } +} + pub(crate) fn handle_worker_poll_messages( scope: &mut v8::PinScope<'_, '_>, args: v8::FunctionCallbackArguments, @@ -4510,18 +4550,23 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( _resp_len: *mut i32, ) { let isolate_ptr = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()); - if isolate_ptr.is_null() { + let owner = crate::dotnet_callback_owner(callback_id); + if isolate_ptr.is_null() || owner.is_some_and(|o| o != isolate_ptr) { // A managed delegate, event, Task continuation or overridden member running on a thread - // other than the JS thread: hand the call to the JS (UI) thread and wait for it, so the - // callback runs and its result reaches the managed caller (see `run_on_ui_thread_sync`). - if !crate::ui_dispatcher::is_ui_thread() { - let (args, resp, resp_len) = (args_ptr as usize, _resp_ptr as usize, _resp_len as usize); - let delivered = crate::ui_dispatcher::run_on_ui_thread_sync(move || { - invoke_dotnet_js_callback(callback_id, args as *const u8, args_len, resp as *mut *mut u8, resp_len as *mut i32) - }); - if delivered.is_none() { - write_callback_response(&[0x0F, 0, 0, 0, 0][..], _resp_ptr, _resp_len); - } + // other than the one its JS function belongs to (the UI thread or a worker): hand the call + // to that thread and wait for it, so the callback runs and its result reaches the managed + // caller (see `run_on_js_thread_sync`). + let (args, resp, resp_len) = (args_ptr as usize, _resp_ptr as usize, _resp_len as usize); + let call = move || { + invoke_dotnet_js_callback(callback_id, args as *const u8, args_len, resp as *mut *mut u8, resp_len as *mut i32) + }; + let delivered = match owner { + Some(owner) => crate::run_on_js_thread_sync(owner, call), + None if !crate::ui_dispatcher::is_ui_thread() => crate::ui_dispatcher::run_on_ui_thread_sync(call), + None => None, + }; + if delivered.is_none() { + write_callback_response(&[0x0F, 0, 0, 0, 0][..], _resp_ptr, _resp_len); } return; } @@ -4590,6 +4635,7 @@ pub(crate) unsafe extern "C" fn invoke_dotnet_js_callback( crate::DOTNET_JS_CALLBACKS.with(|m| { m.borrow_mut().remove(&callback_id); }); + crate::forget_dotnet_callback_owner(callback_id); set.remove(&callback_id); } }); @@ -4620,18 +4666,43 @@ unsafe fn write_callback_response(bytes: &[u8], resp_ptr: *mut *mut u8, resp_len } } -/// Drops the JS functions whose managed delegates the .NET GC has collected. +/// Drops the JS functions whose managed delegates the .NET GC has collected. The release queue is +/// process-wide; a function that belongs to another JS thread (a worker's) is dropped there. pub(crate) fn release_collected_js_callbacks() { let released = crate::dotnet::take_released_js_callbacks(); if released.is_empty() { return; } + let current = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()); + let mut elsewhere: HashMap> = HashMap::new(); crate::DOTNET_JS_CALLBACKS.with(|m| { let mut m = m.borrow_mut(); for id in released { - m.remove(&id); + match crate::dotnet_callback_owner(id) { + Some(owner) if owner != current => elsewhere.entry(owner as usize).or_default().push(id), + _ => { + m.remove(&id); + crate::forget_dotnet_callback_owner(id); + } + } } }); + for (owner, ids) in elsewhere { + let owned = ids.clone(); + let queued = crate::post_to_js_thread(owner as *mut v8::Isolate, move || { + crate::DOTNET_JS_CALLBACKS.with(|m| { + let mut m = m.borrow_mut(); + for id in ids { + m.remove(&id); + crate::forget_dotnet_callback_owner(id); + } + }); + }); + if !queued { + // That runtime is gone and took its functions with it. + owned.into_iter().for_each(crate::forget_dotnet_callback_owner); + } + } } /// Registers `func` as a callback the bridge can invoke and returns its id. @@ -4640,6 +4711,7 @@ pub(crate) fn register_dotnet_js_callback(scope: &mut v8::PinScope<'_, '_>, func crate::DOTNET_JS_CALLBACKS.with(|m| { m.borrow_mut().insert(cb_id, v8::Global::new(scope, func)); }); + crate::record_dotnet_callback_owner(cb_id); cb_id } @@ -4700,6 +4772,7 @@ pub(crate) fn handle_dotnet_create_delegate( crate::DOTNET_JS_CALLBACKS.with(|m| { m.borrow_mut().insert(cb_id, v8::Global::new(scope, func)); }); + crate::record_dotnet_callback_owner(cb_id); // opcode 0x09 | type_name (str16) | callback_id (i32) let mut req: Vec = Vec::with_capacity(32); @@ -4787,6 +4860,7 @@ pub(crate) fn handle_dotnet_create_js_subclass( crate::DOTNET_JS_CALLBACKS.with(|m| { m.borrow_mut().insert(cb_id, v8::Global::new(scope, cb_fn)); }); + crate::record_dotnet_callback_owner(cb_id); let mut req: Vec = Vec::with_capacity(64); req.push(0x0A); @@ -4871,6 +4945,8 @@ pub(crate) fn handle_dotnet_await_task( map.insert(resolve_id, v8::Global::new(scope, resolve_fn)); map.insert(reject_id, v8::Global::new(scope, reject_fn)); }); + crate::record_dotnet_callback_owner(resolve_id); + crate::record_dotnet_callback_owner(reject_id); // Binary instance call: 0x01 | handle(i32) | "__dotnet_await__"(str16) | 2 | i32 resolveId | i32 rejectId let mut req: Vec = Vec::with_capacity(32); @@ -4889,6 +4965,8 @@ pub(crate) fn handle_dotnet_await_task( map.remove(&resolve_id); map.remove(&reject_id); }); + crate::forget_dotnet_callback_owner(resolve_id); + crate::forget_dotnet_callback_owner(reject_id); throw_js_error(scope, &e); } } diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 922d91c..211ff20 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -374,6 +374,89 @@ pub fn pump_messages() -> bool { dispatched } +/// Runs `f` on the JS thread whose isolate is `owner` (the UI thread's or a worker's) and waits for +/// its result: inline when that is the current thread, otherwise handed over the way a callback +/// invoked on a background thread is. `None` when that thread can't run it (gone, or unknown). +#[cfg(feature = "classic")] +pub(crate) fn run_on_js_thread_sync(owner: *mut v8::Isolate, f: impl FnOnce() -> R + Send) -> Option { + if !is_live_isolate(owner) { + return None; + } + if DELEGATE_ISOLATE_PTR.with(|c| c.get()) == owner { + return Some(f()); + } + if worker_threads::is_worker_isolate(owner as usize) { + return worker_threads::run_on_worker_sync(owner as usize, f); + } + if ui_dispatcher::is_ui_thread() { + return None; + } + ui_dispatcher::run_on_ui_thread_sync(f) +} + +/// Queues `f` on the JS thread whose isolate is `owner` without waiting; runs it inline when that +/// is the current thread. `false` when there is no such thread to run it on. +#[cfg(feature = "classic")] +pub(crate) fn post_to_js_thread(owner: *mut v8::Isolate, f: impl FnOnce() + Send + 'static) -> bool { + if !is_live_isolate(owner) { + return false; + } + if DELEGATE_ISOLATE_PTR.with(|c| c.get()) == owner { + f(); + return true; + } + if worker_threads::is_worker_isolate(owner as usize) { + return worker_threads::post_to_worker(owner as usize, f); + } + if !ui_dispatcher::is_initialized() { + return false; + } + ui_dispatcher::post_to_ui_thread(f); + true +} + +/// The isolates of the runtimes alive in this process (the UI thread's and each worker's). A +/// callback that outlives its worker can't run anywhere: work for a disposed isolate is refused. +#[cfg(feature = "classic")] +static LIVE_ISOLATES: std::sync::LazyLock>> = + std::sync::LazyLock::new(|| std::sync::Mutex::new(std::collections::HashSet::new())); + +#[cfg(feature = "classic")] +fn is_live_isolate(isolate: *mut v8::Isolate) -> bool { + !isolate.is_null() && LIVE_ISOLATES.lock().is_ok_and(|live| live.contains(&(isolate as usize))) +} + +/// The isolate each .NET callback's JS function belongs to (callback ids are process-wide, the +/// functions live in their JS thread's `DOTNET_JS_CALLBACKS`), so a callback the bridge invokes on +/// another thread is run on the right one. +#[cfg(feature = "classic")] +static DOTNET_CALLBACK_OWNERS: std::sync::LazyLock>> = + std::sync::LazyLock::new(|| std::sync::Mutex::new(HashMap::new())); + +#[cfg(feature = "classic")] +pub(crate) fn record_dotnet_callback_owner(callback_id: i32) { + let owner = DELEGATE_ISOLATE_PTR.with(|c| c.get()) as usize; + if let Ok(mut owners) = DOTNET_CALLBACK_OWNERS.lock() { + owners.insert(callback_id, owner); + } +} + +#[cfg(feature = "classic")] +pub(crate) fn dotnet_callback_owner(callback_id: i32) -> Option<*mut v8::Isolate> { + DOTNET_CALLBACK_OWNERS + .lock() + .ok() + .and_then(|owners| owners.get(&callback_id).copied()) + .map(|o| o as *mut v8::Isolate) +} + +#[cfg(feature = "classic")] +pub(crate) fn forget_dotnet_callback_owner(callback_id: i32) { + if let Ok(mut owners) = DOTNET_CALLBACK_OWNERS.lock() { + owners.remove(&callback_id); + } +} + /// Retrieve (and clear) the last stored JS error. pub fn get_last_js_error() -> Option { LAST_JS_ERROR.with(|e| e.borrow_mut().take()) @@ -8009,8 +8092,8 @@ pub(crate) struct JsDelegateData { /// For a delegate whose Invoke the shared vtable can't implement (see [`delegate_invoke`]): /// the typed Invoke and the delegate's own vtable, which points at it. typed: Option<(delegate_invoke::TypedInvoke, Box)>, - /// The isolate `js_func` belongs to: the UI thread's, or null for a delegate created where no - /// isolate is registered (a worker), which can't be handed to the UI thread. + /// The isolate `js_func` belongs to (the UI thread's or a worker's): Invoke and the final + /// Release run on that isolate's thread. owner_isolate: *mut v8::Isolate, } @@ -8090,15 +8173,21 @@ unsafe extern "system" fn js_delegate_release(this: *mut JsDelegate) -> u32 { std::sync::atomic::fence(AtomicOrdering::Acquire); let b = Box::from_raw(this); let data = Box::from_raw(b.data); - // The function handle belongs to the UI thread's isolate: a final release on a background - // thread (the component that invoked the delegate there) frees it on the UI thread. - if !data.owner_isolate.is_null() && !ui_dispatcher::is_ui_thread() && ui_dispatcher::is_initialized() { - struct SendData(Box); - unsafe impl Send for SendData {} - let data = SendData(data); - ui_dispatcher::post_to_ui_thread(move || drop(data)); - } else { + // The function handle belongs to its JS thread's isolate: a final release on another thread + // (the component that invoked the delegate there) frees it on that thread. + let owner = data.owner_isolate; + if DELEGATE_ISOLATE_PTR.with(|c| c.get()) == owner || owner.is_null() { drop(data); + } else { + // Never dropped elsewhere: if that thread is gone (a terminated worker), the handle + // leaks rather than being freed into a disposed isolate. + struct SendData(std::mem::ManuallyDrop>); + unsafe impl Send for SendData {} + let data = SendData(std::mem::ManuallyDrop::new(data)); + post_to_js_thread(owner, move || { + let data = data; + drop(std::mem::ManuallyDrop::into_inner(data.0)); + }); } // b (JsDelegate) dropped here } @@ -8183,23 +8272,16 @@ fn js_delegate_invoke_with_args( result_slot: *mut c_void, ) -> HRESULT { let isolate_ptr = DELEGATE_ISOLATE_PTR.with(|c| c.get()); - if !isolate_ptr.is_null() && isolate_ptr != data.owner_isolate { - // Never run a function against an isolate it doesn't belong to. - return HRESULT(0x8001010Eu32 as i32); // RPC_E_WRONG_THREAD - } - if isolate_ptr.is_null() { - // Invoked directly on a background thread (a component that calls its handlers without - // marshaling them back to the registering apartment): run the JS on the JS (UI) thread - // and wait, so the call is delivered and its result written before Invoke returns. The - // arguments are borrowed for the duration of Invoke, which is exactly how long they're used. - // Only the UI thread's functions can go there; a worker's stay undeliverable. - if ui_dispatcher::is_ui_thread() || data.owner_isolate.is_null() { - return HRESULT(0x80004005u32 as i32); - } + if isolate_ptr != data.owner_isolate { + // Invoked on another thread (a component that calls its handlers without marshaling them + // back to the registering apartment): run the JS on the thread that owns the function — + // the UI thread or a worker — and wait, so the call is delivered and its result written + // before Invoke returns. The arguments are borrowed for the duration of Invoke, which is + // exactly how long they're used. struct SendPtr(*mut JsDelegate, *mut c_void); unsafe impl Send for SendPtr {} let ptrs = SendPtr(this, result_slot); - return ui_dispatcher::run_on_ui_thread_sync(move || { + return run_on_js_thread_sync(data.owner_isolate, move || { let ptrs = ptrs; // SAFETY: the caller holds a reference on the delegate for the duration of Invoke. let data = unsafe { &*(*ptrs.0).data }; @@ -9036,6 +9118,9 @@ impl Runtime { pub fn register_delegate_isolate_ptr(&mut self) { let raw_isolate: *mut v8::Isolate = &mut *self.isolate as *mut v8::Isolate; DELEGATE_ISOLATE_PTR.with(|cell| cell.set(raw_isolate)); + if let Ok(mut live) = LIVE_ISOLATES.lock() { + live.insert(raw_isolate as usize); + } } /// Provides mutable access to the underlying V8 isolate. @@ -9352,6 +9437,9 @@ impl Drop for Runtime { // raw isolate pointers) must be cleared here, while `self.isolate` is // still alive. Anything left behind dangles into freed isolate memory // and crashes the next Runtime created on this thread. + if let Ok(mut live) = LIVE_ISOLATES.lock() { + live.remove(&(&mut *self.isolate as *mut v8::Isolate as usize)); + } crate::wrapper_cache::clear(); EVENT_REGISTRY.with(|m| m.borrow_mut().clear()); ESM_MODULE_REGISTRY.with(|m| m.borrow_mut().clear()); @@ -9360,6 +9448,8 @@ impl Drop for Runtime { ESM_HTTP_URLS.with(|m| m.borrow_mut().clear()); ESM_LOAD_ERRORS.with(|m| m.borrow_mut().clear()); crate::esm_http::clear_thread_vocabulary(); + // The ids keep their owner: a managed delegate that outlives this runtime (a terminated + // worker's) is refused rather than run elsewhere, until .NET releases it. DOTNET_JS_CALLBACKS.with(|m| m.borrow_mut().clear()); DOTNET_ONESHOT_JS_CALLBACKS.with(|m| m.borrow_mut().clear()); crate::timers::clear_thread_tasks(); diff --git a/runtime/src/ns_proxy.rs b/runtime/src/ns_proxy.rs index 306f249..49f7bf7 100644 --- a/runtime/src/ns_proxy.rs +++ b/runtime/src/ns_proxy.rs @@ -466,6 +466,11 @@ pub(crate) fn try_wrap_inspectable_pointer<'a>( return None; } let instance = unsafe { IUnknown::from_raw(value) }; + // A boxed primitive (an `Object` property such as `Tag` holding a string, a PropertySet + // value) reads back as the JS primitive; dropping `instance` releases the box. + if let Some(v) = try_unbox_property_value(&instance, scope) { + return Some(v); + } let resolved = instance .cast::() .ok() @@ -494,6 +499,38 @@ pub(crate) fn try_wrap_inspectable_pointer<'a>( } } +/// The JS primitive for a boxed scalar (`IPropertyValue`: numbers, booleans, strings, GUIDs), or +/// `None` for anything else (arrays, structs and real objects stay wrapped). +fn try_unbox_property_value<'a>( + instance: &IUnknown, + scope: &mut v8::PinScope<'a, '_>, +) -> Option> { + use windows::Foundation::{IPropertyValue, PropertyType}; + let pv: IPropertyValue = instance.cast().ok()?; + let num = |scope: &mut v8::PinScope<'a, '_>, v: f64| Some(v8::Number::new(scope, v).into()); + match pv.Type().ok()? { + PropertyType::UInt8 => num(scope, pv.GetUInt8().ok()? as f64), + PropertyType::Int16 => num(scope, pv.GetInt16().ok()? as f64), + PropertyType::UInt16 => num(scope, pv.GetUInt16().ok()? as f64), + PropertyType::Int32 => num(scope, pv.GetInt32().ok()? as f64), + PropertyType::UInt32 => num(scope, pv.GetUInt32().ok()? as f64), + PropertyType::Int64 => num(scope, pv.GetInt64().ok()? as f64), + PropertyType::UInt64 => num(scope, pv.GetUInt64().ok()? as f64), + PropertyType::Single => num(scope, pv.GetSingle().ok()? as f64), + PropertyType::Double => num(scope, pv.GetDouble().ok()?), + PropertyType::Boolean => Some(v8::Boolean::new(scope, pv.GetBoolean().ok()?).into()), + PropertyType::String => { + let s = pv.GetString().ok()?; + v8::String::new_from_two_byte(scope, &s, v8::NewStringType::Normal).map(Into::into) + } + PropertyType::Guid => { + let g = pv.GetGuid().ok()?; + v8::String::new(scope, &format!("{g:?}")).map(Into::into) + } + _ => None, + } +} + /// Sets a method/property return value, resolving `Object`/IInspectable returns to a full typed /// proxy via GetRuntimeClassName so property/event interceptors work (e.g. the WebView2 returned by /// `XamlReader.Load`). Any other signature defers to `set_ret_val`. A non-resolvable Object falls diff --git a/runtime/src/timers.rs b/runtime/src/timers.rs index 6937c88..9f5b44d 100644 --- a/runtime/src/timers.rs +++ b/runtime/src/timers.rs @@ -255,6 +255,11 @@ fn invoke_callback_by_id(id: i32) { } } +/// Whether this thread's runtime has timers scheduled. +pub(crate) fn has_pending() -> bool { + TASKS.with(|t| !t.borrow().is_empty()) +} + pub fn pump() { crate::websocket::pump(); // If the scheduler hasn't been initialized yet, nothing to do. diff --git a/runtime/src/ui_dispatcher.rs b/runtime/src/ui_dispatcher.rs index 9ce9d34..7949dc2 100644 --- a/runtime/src/ui_dispatcher.rs +++ b/runtime/src/ui_dispatcher.rs @@ -137,7 +137,24 @@ pub fn run_on_ui_thread_sync(f: impl FnOnce() -> R + Send) -> Option return Some(f()); } let dq = UI_QUEUE.get()?; + run_job_sync(f, |job| { + let cell = std::sync::Mutex::new(Some(job)); + let handler = DispatcherQueueHandler::new(move || { + if let Some(job) = cell.lock().unwrap_or_else(|e| e.into_inner()).take() { + job(); + } + Ok(()) + }); + dq.TryEnqueue(&handler).unwrap_or(false) + }) +} +/// Hands `f` to another thread through `enqueue` and waits for its result. `None` when `enqueue` +/// reports failure or the job is dropped without running (its thread is shutting down). +pub(crate) fn run_job_sync( + f: impl FnOnce() -> R + Send, + enqueue: impl FnOnce(Box) -> bool, +) -> Option { let slot: std::sync::Arc<(std::sync::Mutex>, std::sync::Condvar)> = std::sync::Arc::new((std::sync::Mutex::new(None), std::sync::Condvar::new())); let slot2 = slot.clone(); @@ -148,21 +165,12 @@ pub fn run_on_ui_thread_sync(f: impl FnOnce() -> R + Send) -> Option cvar.notify_all(); }); // SAFETY: the job may borrow from the caller's stack (`f` is not 'static). Once queued, this - // function waits until the job has run or the dispatcher has dropped it unrun; if queueing - // fails, the job is dropped before returning. Either way it never outlives what it borrows. + // function waits until the job has run or has been dropped unrun; if queueing fails, the job + // is dropped before returning. Either way it never outlives what it borrows. let job: Box = unsafe { std::mem::transmute(job) }; - - let cell = std::sync::Mutex::new(Some(job)); - let handler = DispatcherQueueHandler::new(move || { - if let Some(job) = cell.lock().unwrap_or_else(|e| e.into_inner()).take() { - job(); - } - Ok(()) - }); - if !dq.TryEnqueue(&handler).unwrap_or(false) { + if !enqueue(job) { return None; } - drop(handler); let (lock, cvar) = &*slot; let mut guard = lock.lock().unwrap_or_else(|e| e.into_inner()); @@ -170,8 +178,8 @@ pub fn run_on_ui_thread_sync(f: impl FnOnce() -> R + Send) -> Option if let Some(r) = guard.take() { return Some(r); } - // The only way out without a result is the dispatcher dropping the job unrun (shutdown): - // then nothing else holds the job's half of `slot`. + // The only way out without a result is the job being dropped unrun (shutdown): then + // nothing else holds the job's half of `slot`. if std::sync::Arc::strong_count(&slot) == 1 { return None; } diff --git a/runtime/src/worker_support.rs b/runtime/src/worker_support.rs index 0c144c1..3211345 100644 --- a/runtime/src/worker_support.rs +++ b/runtime/src/worker_support.rs @@ -75,6 +75,8 @@ pub fn install_worker_runtime(scope: &mut ContextScope) { executor(workerGlobal, workerGlobal, workerGlobal.postMessage, MessagePort, MessageChannel, filename); } + var __threadedWorkers = {}; + function Worker(specifierOrSource, options) { if (!(this instanceof Worker)) { throw new TypeError('Class constructor Worker cannot be invoked without new'); @@ -100,6 +102,10 @@ pub fn install_worker_runtime(scope: &mut ContextScope) { resolved.filename, String(globalThis.__nsAppRoot || '') ); + if (workerId >= 0) { + // The runtime calls this whenever the worker has posted messages. + __threadedWorkers[workerId] = function () { dispatchThreadedMessages(); }; + } } function dispatchThreadedMessages(messages) { @@ -138,6 +144,7 @@ pub fn install_worker_runtime(scope: &mut ContextScope) { if (value && typeof value === 'object' && value.__workerExit) { terminated = true; + delete __threadedWorkers[workerId]; delivered += 1; continue; } @@ -178,6 +185,7 @@ pub fn install_worker_runtime(scope: &mut ContextScope) { this.terminate = function () { if (terminated) { return; } terminated = true; + delete __threadedWorkers[workerId]; if (canUseThreadedHost && workerId >= 0) { try { globalThis.__nsWorkerTerminate(workerId); } catch (_) {} @@ -233,6 +241,10 @@ pub fn install_worker_runtime(scope: &mut ContextScope) { } globalThis.Worker = Worker; + globalThis.__nsWorkerDeliver = function (workerId) { + var deliver = __threadedWorkers[workerId]; + if (deliver) { deliver(); } + }; })(); "#; diff --git a/runtime/src/worker_threads.rs b/runtime/src/worker_threads.rs index b654304..0bf2bcf 100644 --- a/runtime/src/worker_threads.rs +++ b/runtime/src/worker_threads.rs @@ -1,18 +1,79 @@ use crate::Runtime; use parking_lot::{Mutex, RwLock}; use std::collections::HashMap; -use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use std::sync::mpsc::{self, Receiver, Sender, TryRecvError}; use std::sync::{Arc, OnceLock}; use std::thread; use std::time::Duration; +use windows::Win32::Foundation::HANDLE; +use windows::Win32::System::Threading::{CreateEventW, SetEvent, INFINITE}; +use windows::Win32::UI::WindowsAndMessaging::{MsgWaitForMultipleObjectsEx, MWMO_INPUTAVAILABLE, QS_ALLINPUT}; -#[derive(Debug)] enum WorkerCommand { PostMessage(Vec), + /// Work handed to the worker's thread from another thread: a callback created in the worker + /// (see [`run_on_worker_sync`]) or the release of one. + Run(Box), Terminate, } +/// An auto-reset event that wakes a worker's loop; the loop also wakes for Windows messages, which +/// a worker (an STA thread) needs pumped for WinRT to deliver marshaled calls and completions. +#[derive(Clone, Copy)] +struct WakeEvent(isize); + +impl WakeEvent { + fn new() -> Self { + let handle = unsafe { CreateEventW(None, false, false, None) }.unwrap_or_default(); + WakeEvent(handle.0 as isize) + } + + fn handle(self) -> HANDLE { + HANDLE(self.0 as *mut std::ffi::c_void) + } + + fn signal(self) { + let _ = unsafe { SetEvent(self.handle()) }; + } +} + +/// The command channel of each worker's runtime, keyed by its isolate, so a callback created in a +/// worker can be handed to that worker's thread. +static WORKER_EXECUTORS: OnceLock, WakeEvent)>>> = OnceLock::new(); + +fn worker_executors() -> &'static Mutex, WakeEvent)>> { + WORKER_EXECUTORS.get_or_init(|| Mutex::new(HashMap::new())) +} + +/// Whether `isolate` is a worker's (as opposed to the UI thread's). +pub(crate) fn is_worker_isolate(isolate: usize) -> bool { + worker_executors().lock().contains_key(&isolate) +} + +/// Runs `f` on the thread of the worker that owns `isolate` and waits for its result, the way +/// [`crate::ui_dispatcher::run_on_ui_thread_sync`] does for the UI thread. `None` when the worker +/// is gone. +pub(crate) fn run_on_worker_sync(isolate: usize, f: impl FnOnce() -> R + Send) -> Option { + let (tx, wake) = worker_executors().lock().get(&isolate).cloned()?; + crate::ui_dispatcher::run_job_sync(f, |job| { + let sent = tx.send(WorkerCommand::Run(job)).is_ok(); + wake.signal(); + sent + }) +} + +/// Queues `f` on the thread of the worker that owns `isolate` without waiting. `false` when the +/// worker is gone. +pub(crate) fn post_to_worker(isolate: usize, f: impl FnOnce() + Send + 'static) -> bool { + let Some((tx, wake)) = worker_executors().lock().get(&isolate).cloned() else { + return false; + }; + let sent = tx.send(WorkerCommand::Run(Box::new(f))).is_ok(); + wake.signal(); + sent +} + #[derive(Debug)] enum WorkerEvent { Message(Vec), @@ -20,9 +81,9 @@ enum WorkerEvent { Exited, } -#[derive(Debug)] struct WorkerHandle { tx: Sender, + wake: WakeEvent, /// Wrapped in Arc so the WORKERS registry lock can be released before /// a blocking recv — otherwise poll_events_blocking would hold the global /// registry lock for the entire timeout duration, starving create/terminate. @@ -119,54 +180,84 @@ pub fn create_worker(app_root: String, source: String, filename: String) -> Resu let (cmd_tx, cmd_rx) = mpsc::channel::(); let (evt_tx, evt_rx) = mpsc::channel::(); let evt_rx = Arc::new(Mutex::new(evt_rx)); + let wake = WakeEvent::new(); + let executor_tx = cmd_tx.clone(); + // Events reach the creating thread's `Worker` without it having to poll: each batch queues a + // delivery there (one at a time). + let creator = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()) as usize; + let delivery_pending = Arc::new(AtomicBool::new(false)); + let notify_creator = move || { + if delivery_pending.swap(true, Ordering::AcqRel) { + return; + } + let pending = delivery_pending.clone(); + let queued = crate::post_to_js_thread(creator as *mut v8::Isolate, move || { + pending.store(false, Ordering::Release); + crate::global_fns::deliver_worker_events(worker_id); + }); + if !queued { + delivery_pending.store(false, Ordering::Release); + } + }; let join = thread::Builder::new() .name(format!("ns-worker-{worker_id}")) .spawn(move || { let mut runtime = Runtime::new(app_root.as_str()); + // `runtime` stays put on this thread's stack from here on. + runtime.register_delegate_isolate_ptr(); + let isolate = crate::DELEGATE_ISOLATE_PTR.with(|c| c.get()) as usize; + worker_executors().lock().insert(isolate, (executor_tx, wake)); match worker_bootstrap_script(source.as_str(), filename.as_str()) { Ok(script) => runtime.run_script(script.as_str(), filename.as_str()), Err(err) => { + worker_executors().lock().remove(&isolate); let _ = evt_tx.send(WorkerEvent::Error(err)); let _ = evt_tx.send(WorkerEvent::Exited); + notify_creator(); return; } } - for result in runtime.drain_outbox_bytes() { - match result { - Ok(bytes) => { - let _ = evt_tx.send(WorkerEvent::Message(bytes)); - } - Err(err) => { - let _ = evt_tx.send(WorkerEvent::Error(err)); - } + let forward_outbox = |runtime: &mut Runtime| { + let mut sent = false; + for result in runtime.drain_outbox_bytes() { + sent = true; + let _ = evt_tx.send(match result { + Ok(b) => WorkerEvent::Message(b), + Err(e) => WorkerEvent::Error(e), + }); } - } - - loop { - match cmd_rx.recv() { - Ok(WorkerCommand::PostMessage(bytes)) => { - runtime.dispatch_to_worker(&bytes); - for result in runtime.drain_outbox_bytes() { - match result { - Ok(b) => { - let _ = evt_tx.send(WorkerEvent::Message(b)); - } - Err(e) => { - let _ = evt_tx.send(WorkerEvent::Error(e)); - } - } - } - } - Ok(WorkerCommand::Terminate) | Err(_) => { - break; + if sent { + notify_creator(); + } + }; + forward_outbox(&mut runtime); + // Commands, Windows messages (WinRT calls marshaled to this STA thread, async + // completions) and the worker's timers, until terminated. + 'run: loop { + loop { + match cmd_rx.try_recv() { + Ok(WorkerCommand::PostMessage(bytes)) => runtime.dispatch_to_worker(&bytes), + Ok(WorkerCommand::Run(job)) => job(), + Ok(WorkerCommand::Terminate) | Err(TryRecvError::Disconnected) => break 'run, + Err(TryRecvError::Empty) => break, } + forward_outbox(&mut runtime); + } + crate::pump_messages(); + crate::timers::pump(); + forward_outbox(&mut runtime); + let timeout = if crate::timers::has_pending() { 10 } else { INFINITE }; + unsafe { + MsgWaitForMultipleObjectsEx(Some(&[wake.handle()]), timeout, QS_ALLINPUT, MWMO_INPUTAVAILABLE); } } + worker_executors().lock().remove(&isolate); let _ = evt_tx.send(WorkerEvent::Exited); + notify_creator(); }) .map_err(|e| format!("Failed to spawn worker thread: {e}"))?; @@ -174,6 +265,7 @@ pub fn create_worker(app_root: String, source: String, filename: String) -> Resu worker_id, WorkerHandle { tx: cmd_tx, + wake, rx: evt_rx, join, }, @@ -188,10 +280,12 @@ pub fn post_message(worker_id: u64, payload_bytes: Vec) -> Result<(), String return Err(format!("Unknown worker id: {worker_id}")); }; - worker + let sent = worker .tx .send(WorkerCommand::PostMessage(payload_bytes)) - .map_err(|e| format!("Failed to send worker message: {e}")) + .map_err(|e| format!("Failed to send worker message: {e}")); + worker.wake.signal(); + sent } fn collect_events(rx: &Receiver) -> Vec { @@ -266,6 +360,7 @@ pub fn terminate_worker(worker_id: u64) -> Result<(), String> { drop(workers_guard); let _ = worker.tx.send(WorkerCommand::Terminate); + worker.wake.signal(); let _ = worker.join.join(); Ok(()) diff --git a/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs b/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs index 91d11f2..c1affba 100644 --- a/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs +++ b/test-app/App_Resources/Windows/src/TestFixtures/Threading.cs @@ -16,6 +16,8 @@ public static class BackgroundInvoker public static bool IsUiThread() => Environment.CurrentManagedThreadId == UiThreadId; + public static int CurrentThreadId() => Environment.CurrentManagedThreadId; + /// Calls `compute` on a thread-pool thread and reports its result through `done`, also /// from that thread: (result, ranOnBackgroundThread). public static void ComputeInBackground(Func compute, int value, Action done) @@ -45,6 +47,28 @@ public static void FanOut(Func callback, int count, Action d } } + /// Calls `callback` from a thread-pool thread after `delayMs`; whether it was delivered is + /// reported through `LastLateCall` ("delivered" or the exception's type name). A Func, so a + /// call that can't run surfaces as an exception (a void delegate just returns). + public static void CallLater(Func callback, int delayMs) + { + LastLateCall = null; + Task.Delay(delayMs).ContinueWith(_ => + { + try + { + callback(); + LastLateCall = "delivered"; + } + catch (Exception e) + { + LastLateCall = e.GetType().Name; + } + }); + } + + public static string LastLateCall { get; private set; } + public static void ThrowInBackground(Func callback, Action done) { Task.Run(() => diff --git a/test-app/README.md b/test-app/README.md index 1134136..5bd184d 100644 --- a/test-app/README.md +++ b/test-app/README.md @@ -40,7 +40,8 @@ The script prints the log and exits non-zero when any spec failed. | `csharp-sources.js` | App and plugin C# types reachable by namespace with no registration step: constructors and overloads, properties, statics, arrays, enums, internal types, nested namespaces. Also JS functions passed as `Func<>`/`Action<>`, C# events, and `Task` results awaited without blocking the UI thread. | | `extend-dotnet.js` | Extending C# classes with `Class.extend()`, ES2015 `class`, `@NativeClass` and TypeScript ES5 output. Native code reaches JS overrides; constructor arguments are forwarded. `super` and `this.super` reach the base implementation; protected and abstract members and virtual properties can be overridden. JS fields are visible to native calls, `instanceof` works, and identity is kept across native round-trips. Interfaces are implemented with `new Interface({...})` and `@Interfaces`. | | `extend-winrt.js` | Extending WinUI classes: XAML calls `MeasureOverride`/`ArrangeOverride`/`OnApplyTemplate` on the JS subclass. Covers `super`, `instanceof` of the subclass and its WinRT bases, `Class.extend()` and TypeScript ES5 output. | -| `threading.js` | WinRT and .NET callbacks invoked on background threads are delivered on the JS thread. Return values and exceptions flow back to the native caller. | +| `threading.js` | WinRT and .NET callbacks invoked on background threads are delivered on the JS thread that created them (the UI thread or a worker). Return values and exceptions flow back to the native caller. Worker specs are skipped on engines without workers. | +| `boxing.js` | Values in `Object`-typed members (`Tag`, `PropertySet`) read back as JS primitives. | | `lifetime.js` | JS subclass instances that nothing references are collected on both sides. An instance only native code holds keeps working, with its JS object revived. WinRT UI subclasses in the visual tree keep their fields. Needs `gc()`, so it is skipped on engines that don't expose it. | | `layout-mutation.js` | Adding, removing and reparenting XAML elements synchronously from `SizeChanged`, `LayoutUpdated` and `CompositionTarget.Rendering`, and from promise continuations scheduled there. | diff --git a/test-app/app/main.js b/test-app/app/main.js index 376a673..7446752 100644 --- a/test-app/app/main.js +++ b/test-app/app/main.js @@ -17,6 +17,7 @@ const specs = [ "./tests/extend-dotnet.js", "./tests/extend-winrt.js", "./tests/threading.js", + "./tests/boxing.js", "./tests/layout-mutation.js", "./tests/lifetime.js", ]; diff --git a/test-app/app/runner/jasmine-lite.js b/test-app/app/runner/jasmine-lite.js index 7f20ea5..2de6313 100644 --- a/test-app/app/runner/jasmine-lite.js +++ b/test-app/app/runner/jasmine-lite.js @@ -230,10 +230,17 @@ async function execute(options) { const log = options.log || ((s) => console.log(s)); const started = Date.now(); + const fullNameOf = (spec) => `${spec.suite.fullName()} ${spec.description}`.trim(); + const isSkipped = (spec) => spec.pending || spec.suite.pending || (options.filter && !options.filter.test(fullNameOf(spec))); + const willRun = (node) => (!focused || isFocused(node)) && (node.kind === "spec" ? !isSkipped(node) : node.suite.children.some(willRun)); + async function visitSuite(suite) { const runnable = suite.children.filter((c) => !focused || isFocused(c)); if (runnable.length === 0) return; - for (const fn of suite.beforeAll) { + // A suite whose specs are all skipped only reports them: its hooks may depend on what made + // it skip (xdescribe on a missing feature). + const hooks = runnable.some(willRun); + for (const fn of hooks ? suite.beforeAll : []) { try { await runFn(fn, {}, DEFAULT_TIMEOUT_MS, `beforeAll in "${suite.fullName()}"`); } catch (e) { @@ -244,7 +251,7 @@ async function execute(options) { if (child.kind === "suite") await visitSuite(child.suite); else await visitSpec(child); } - for (const fn of suite.afterAll) { + for (const fn of hooks ? suite.afterAll : []) { try { await runFn(fn, {}, DEFAULT_TIMEOUT_MS, `afterAll in "${suite.fullName()}"`); } catch (e) { @@ -254,8 +261,8 @@ async function execute(options) { } async function visitSpec(spec) { - const fullName = `${spec.suite.fullName()} ${spec.description}`.trim(); - if (spec.pending || spec.suite.pending || (options.filter && !options.filter.test(fullName))) { + const fullName = fullNameOf(spec); + if (isSkipped(spec)) { results.push({ suite: spec.suite.fullName(), name: spec.description, fullName, status: "pending", failures: [], time: 0 }); return; } diff --git a/test-app/app/tests/boxing.js b/test-app/app/tests/boxing.js new file mode 100644 index 0000000..8e381ec --- /dev/null +++ b/test-app/app/tests/boxing.js @@ -0,0 +1,36 @@ +// Values stored in Object-typed WinRT members (FrameworkElement.Tag, PropertySet entries) are +// boxed as IPropertyValue; reading them back yields the JS primitive, as on iOS and Android. + +describe("Object values", () => { + const Controls = Microsoft.UI.Xaml.Controls; + + it("round-trips a string through Tag", () => { + const panel = new Controls.StackPanel(); + panel.Tag = "tagged"; + expect(panel.Tag).toBe("tagged"); + }); + + it("round-trips numbers and booleans through Tag", () => { + const panel = new Controls.StackPanel(); + panel.Tag = 42.5; + expect(panel.Tag).toBe(42.5); + panel.Tag = true; + expect(panel.Tag).toBe(true); + }); + + it("returns objects stored in Tag as themselves", () => { + const panel = new Controls.StackPanel(); + const text = new Controls.TextBlock(); + text.Text = "inner"; + panel.Tag = text; + expect(panel.Tag.Text).toBe("inner"); + }); + + it("unboxes PropertySet values", () => { + const set = new Windows.Foundation.Collections.PropertySet(); + set.Insert("name", "value"); + set.Insert("count", 3); + expect(set.Lookup("name")).toBe("value"); + expect(set.Lookup("count")).toBe(3); + }); +}); diff --git a/test-app/app/tests/threading.js b/test-app/app/tests/threading.js index ecbf22d..9cabe69 100644 --- a/test-app/app/tests/threading.js +++ b/test-app/app/tests/threading.js @@ -104,4 +104,108 @@ describe("Threading", () => { expect(value).toBe(3); }); }); + + // A callback created in a worker belongs to that worker's isolate: invoked on a background + // thread, it runs on the worker's thread (as on iOS and Android), not the UI thread. The + // Node-API engines don't implement workers. + (typeof Worker === "function" ? describe : xdescribe)("Workers", () => { + const workerSource = ` + for (const name of ["setTimeout", "setInterval", "clearTimeout", "clearInterval"]) { + if (typeof globalThis[name] !== "function") globalThis[name] = globalThis["__ns__" + name]; + } + const BI = TestFixtures.Threading.BackgroundInvoker; + const workerThread = BI.CurrentThreadId(); + const onWorker = () => BI.CurrentThreadId() === workerThread; + const report = (test, run) => + Promise.resolve() + .then(run) + .then((result) => self.postMessage({ test, result }), (e) => self.postMessage({ test, error: String(e && e.message || e) })); + self.onmessage = (e) => { + if (e.data === "winrt") { + report("winrt", async () => { + let ranOnWorker = null; + await NSWinRT.toPromise(Windows.System.Threading.ThreadPool.RunAsync(() => (ranOnWorker = onWorker()))); + return { ranOnWorker }; + }); + } else if (e.data === "dotnet") { + report("dotnet", () => new Promise((resolve) => { + let computedOnWorker = null; + BI.ComputeInBackground( + (v) => ((computedOnWorker = onWorker()), v * 2), + 21, + (r, background) => resolve({ r, background, computedOnWorker, doneOnWorker: onWorker() }) + ); + })); + } else if (e.data === "event") { + report("event", () => new Promise((resolve) => { + const ticker = new TestFixtures.Threading.Ticker(); + const ticks = []; + ticker.add_Tick((sender, i) => { + ticks.push(onWorker() ? i : -i); + if (ticks.length === 3) resolve(ticks); + }); + ticker.StartInBackground(3); + })); + } + }; + `; + let worker; + const replies = {}; + + function ask(test, timeoutMs = 6000) { + worker.postMessage(test); + return waitFor(() => test in replies, timeoutMs).then(() => { + const reply = replies[test]; + if (reply.error) throw new Error(reply.error); + return reply.result; + }); + } + + beforeAll(() => { + worker = new Worker(workerSource, { eval: true }); + worker.onmessage = (e) => (replies[e.data.test] = e.data); + }); + + afterAll(() => worker.terminate()); + + it("delivers a WinRT delegate created in a worker on the worker's thread", async () => { + expect(await ask("winrt")).toEqual({ ranOnWorker: true }); + }); + + it("delivers a .NET delegate created in a worker on the worker's thread", async () => { + expect(await ask("dotnet")).toEqual({ r: 42, background: true, computedOnWorker: true, doneOnWorker: true }); + }); + + it("delivers C# events subscribed in a worker on the worker's thread", async () => { + expect(await ask("event")).toEqual([1, 2, 3]); + }); + + it("delivers messages a worker posts on its own", async () => { + const seen = []; + const ticking = new Worker( + `for (const name of ["setTimeout", "clearTimeout"]) if (typeof globalThis[name] !== "function") globalThis[name] = globalThis["__ns__" + name]; + setTimeout(() => self.postMessage("later"), 50);`, + { eval: true } + ); + ticking.onmessage = (e) => seen.push(e.data); + await waitFor(() => seen.length > 0); + ticking.terminate(); + expect(seen).toEqual(["later"]); + }); + + it("refuses a callback whose worker has terminated without crashing", async () => { + const BI = TestFixtures.Threading.BackgroundInvoker; + let armed = false; + const doomed = new Worker( + `TestFixtures.Threading.BackgroundInvoker.CallLater(() => 1, 300); self.postMessage("armed");`, + { eval: true } + ); + doomed.onmessage = () => (armed = true); + await waitFor(() => armed); + doomed.terminate(); + await waitFor(() => BI.LastLateCall != null); + expect(BI.LastLateCall).toBe("JsException"); + expect(BI.CurrentThreadId()).toBeGreaterThan(0); + }); + }); });