Skip to content

Commit 3a73df6

Browse files
committed
refactor(platforms): migrate GTK WebView P/Invoke to LibraryImport + UnmanagedCallersOnly (Phase 4)
Align the GTK adapter with the modernized iOS/macOS pattern landed in Phase 3 so every desktop WebView backend shares one AOT-friendly interop shape. GtkWebViewAdapter.cs: - Switch `NativeMethods` to `static partial class` and migrate all ~30 DllImport declarations to LibraryImport with StringMarshalling.Utf8 and UnmanagedCallConv(CallConvs = [CallConvCdecl]). - Drop 17 [UnmanagedFunctionPointer] delegate types; native callbacks are now typed as `delegate* unmanaged[Cdecl]<...>` parameters on partial methods. - Convert 12 per-adapter delegate-holding fields into static trampoline methods tagged [UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvCdecl) })], covering policy, navigation, script-result, message, download, permission, scheme, context-menu, drag-drop, screenshot, pdf, find, and cookie flows. - Marshal bool parameters and return values explicitly as byte in unmanaged trampolines (isMainFrame, allowed, handled, cookieOp success) to keep [UnmanagedCallersOnly] AOT-safe. - Rewrite Initialize() to populate AgGtkCallbacks via `&Trampoline` function pointers inside an unsafe block; all 7 callback-accepting entry points (CookiesGet, CookieSet, CookieDelete, CookiesClearAll, CaptureScreenshot, PrintToPdf, FindText) now pass function pointers directly. Housekeeping: - .gitignore: exclude transient iOS native shim outputs (*.o and *.xcframework/); only the .mm source and the .a archives stay tracked. - Refresh packages.lock.json across every CPM-enabled project to track VersionPrefix 1.6.3 (bumped via `nuke UpdateVersion`). Local validation: `./build.sh LocalPreflight` green -- 2282 unit tests pass, `dotnet format --verify-no-changes` reports 0 warnings / 0 errors. Made-with: Cursor
1 parent d35b630 commit 3a73df6

26 files changed

Lines changed: 499 additions & 643 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,3 +400,7 @@ coverage-report/
400400
# DocFX generated outputs (do not commit generated artifacts)
401401
docs/_site/
402402
docs/api/
403+
404+
# iOS native shim transient build outputs (only .mm source and .a archives are tracked)
405+
src/Agibuild.Fulora.Adapters.iOS/Native/*.o
406+
src/Agibuild.Fulora.Adapters.iOS/Native/*.xcframework/

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
stable (none) main push when version is bumped
4949
5050
To publish an RC: trigger workflow_dispatch with prerelease_suffix=rc.1 -->
51-
<VersionPrefix>1.6.2</VersionPrefix>
51+
<VersionPrefix>1.6.3</VersionPrefix>
5252
<FileVersion Condition="'$(BuildNumber)' != ''">$(VersionPrefix).$(BuildNumber)</FileVersion>
5353

5454
<!-- Shared NuGet package metadata -->

benchmarks/Agibuild.Fulora.Benchmarks/packages.lock.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@
156156
"agibuild.fulora.adapters.abstractions": {
157157
"type": "Project",
158158
"dependencies": {
159-
"Agibuild.Fulora.Core": "[1.5.6-local, )"
159+
"Agibuild.Fulora.Core": "[1.6.3-local, )"
160160
}
161161
},
162162
"agibuild.fulora.core": {
@@ -165,17 +165,17 @@
165165
"agibuild.fulora.runtime": {
166166
"type": "Project",
167167
"dependencies": {
168-
"Agibuild.Fulora.Adapters.Abstractions": "[1.5.6-local, )",
169-
"Agibuild.Fulora.Core": "[1.5.6-local, )",
168+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
169+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
170170
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
171171
}
172172
},
173173
"agibuild.fulora.testing": {
174174
"type": "Project",
175175
"dependencies": {
176-
"Agibuild.Fulora.Adapters.Abstractions": "[1.5.6-local, )",
177-
"Agibuild.Fulora.Core": "[1.5.6-local, )",
178-
"Agibuild.Fulora.Runtime": "[1.5.6-local, )"
176+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
177+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
178+
"Agibuild.Fulora.Runtime": "[1.6.3-local, )"
179179
}
180180
},
181181
"Microsoft.CodeAnalysis.CSharp": {

src/Agibuild.Fulora.AI.Ollama/packages.lock.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@
185185
"agibuild.fulora.ai": {
186186
"type": "Project",
187187
"dependencies": {
188-
"Agibuild.Fulora.Core": "[1.5.11-local, )",
188+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
189189
"Microsoft.Extensions.AI": "[10.4.1, )",
190190
"Microsoft.Extensions.AI.Abstractions": "[10.4.1, )",
191191
"Microsoft.Extensions.DependencyInjection.Abstractions": "[11.0.0-preview.2.26159.112, )",

src/Agibuild.Fulora.AI.OpenAI/packages.lock.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230
"agibuild.fulora.ai": {
231231
"type": "Project",
232232
"dependencies": {
233-
"Agibuild.Fulora.Core": "[1.5.11-local, )",
233+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
234234
"Microsoft.Extensions.AI": "[10.4.1, )",
235235
"Microsoft.Extensions.AI.Abstractions": "[10.4.1, )",
236236
"Microsoft.Extensions.DependencyInjection.Abstractions": "[11.0.0-preview.2.26159.112, )",

src/Agibuild.Fulora.Adapters.iOS/packages.lock.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"agibuild.fulora.adapters.abstractions": {
4141
"type": "Project",
4242
"dependencies": {
43-
"Agibuild.Fulora.Core": "[1.5.11-local, )"
43+
"Agibuild.Fulora.Core": "[1.6.3-local, )"
4444
}
4545
},
4646
"agibuild.fulora.core": {

src/Agibuild.Fulora.Avalonia/packages.lock.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@
150150
"agibuild.fulora.adapters.abstractions": {
151151
"type": "Project",
152152
"dependencies": {
153-
"Agibuild.Fulora.Core": "[1.6.0-local, )"
153+
"Agibuild.Fulora.Core": "[1.6.3-local, )"
154154
}
155155
},
156156
"agibuild.fulora.core": {
@@ -159,8 +159,8 @@
159159
"agibuild.fulora.dependencyinjection": {
160160
"type": "Project",
161161
"dependencies": {
162-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
163-
"Agibuild.Fulora.Runtime": "[1.6.0-local, )",
162+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
163+
"Agibuild.Fulora.Runtime": "[1.6.3-local, )",
164164
"Microsoft.Extensions.DependencyInjection.Abstractions": "[11.0.0-preview.2.26159.112, )",
165165
"Microsoft.Extensions.Http": "[11.0.0-preview.2.26159.112, )",
166166
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
@@ -169,16 +169,16 @@
169169
"agibuild.fulora.platforms": {
170170
"type": "Project",
171171
"dependencies": {
172-
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.0-local, )",
173-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
172+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
173+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
174174
"Microsoft.Web.WebView2": "[1.0.3856.49, )"
175175
}
176176
},
177177
"agibuild.fulora.runtime": {
178178
"type": "Project",
179179
"dependencies": {
180-
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.0-local, )",
181-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
180+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
181+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
182182
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
183183
}
184184
},
@@ -791,7 +791,7 @@
791791
"agibuild.fulora.adapters.abstractions": {
792792
"type": "Project",
793793
"dependencies": {
794-
"Agibuild.Fulora.Core": "[1.6.0-local, )"
794+
"Agibuild.Fulora.Core": "[1.6.3-local, )"
795795
}
796796
},
797797
"agibuild.fulora.core": {
@@ -800,8 +800,8 @@
800800
"agibuild.fulora.dependencyinjection": {
801801
"type": "Project",
802802
"dependencies": {
803-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
804-
"Agibuild.Fulora.Runtime": "[1.6.0-local, )",
803+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
804+
"Agibuild.Fulora.Runtime": "[1.6.3-local, )",
805805
"Microsoft.Extensions.DependencyInjection.Abstractions": "[11.0.0-preview.2.26159.112, )",
806806
"Microsoft.Extensions.Http": "[11.0.0-preview.2.26159.112, )",
807807
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
@@ -810,16 +810,16 @@
810810
"agibuild.fulora.platforms": {
811811
"type": "Project",
812812
"dependencies": {
813-
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.0-local, )",
814-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
813+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
814+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
815815
"Xamarin.AndroidX.Activity": "[1.12.4.1, )"
816816
}
817817
},
818818
"agibuild.fulora.runtime": {
819819
"type": "Project",
820820
"dependencies": {
821-
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.0-local, )",
822-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
821+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
822+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
823823
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
824824
}
825825
},

src/Agibuild.Fulora.DependencyInjection/packages.lock.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
"agibuild.fulora.adapters.abstractions": {
133133
"type": "Project",
134134
"dependencies": {
135-
"Agibuild.Fulora.Core": "[1.6.0-local, )"
135+
"Agibuild.Fulora.Core": "[1.6.3-local, )"
136136
}
137137
},
138138
"agibuild.fulora.core": {
@@ -141,8 +141,8 @@
141141
"agibuild.fulora.runtime": {
142142
"type": "Project",
143143
"dependencies": {
144-
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.0-local, )",
145-
"Agibuild.Fulora.Core": "[1.6.0-local, )",
144+
"Agibuild.Fulora.Adapters.Abstractions": "[1.6.3-local, )",
145+
"Agibuild.Fulora.Core": "[1.6.3-local, )",
146146
"Microsoft.Extensions.Logging.Abstractions": "[11.0.0-preview.2.26159.112, )"
147147
}
148148
},

0 commit comments

Comments
 (0)