diff --git a/CakeScripts/Settings.cake b/CakeScripts/Settings.cake index 53742c2c7..e9f1ae045 100644 --- a/CakeScripts/Settings.cake +++ b/CakeScripts/Settings.cake @@ -39,10 +39,15 @@ class Settings { Deps = new[] { "GLibSharp", "GtkSharp", "GioSharp", "CairoSharp", "PangoSharp", "GdkSharp" }, }, - new GAssembly("WebkitGtkSharp") + new GAssembly("JavaScriptCoreSharp") { Deps = new[] { "GtkSharp","GLibSharp", "GioSharp", "AtkSharp", "CairoSharp", "PangoSharp", "GdkSharp" }, - ExtraArgs = "--abi-cs-usings=Webkit,Gtk,GLib,Gdk,Atk,Pango,Cairo" + ExtraArgs = "--abi-cs-usings=Gtk,GLib,Gdk,Atk,Pango,Cairo" + }, + new GAssembly("WebkitGtkSharp") + { + Deps = new[] { "JavaScriptCoreSharp","GtkSharp","GLibSharp", "GioSharp", "AtkSharp", "CairoSharp", "PangoSharp", "GdkSharp" }, + ExtraArgs = "--abi-cs-usings=Webkit,JavaScriptCore,Gtk,GLib,Gdk,Atk,Pango,Cairo" } }; } diff --git a/Source/GtkSharp.sln b/Source/GtkSharp.sln index 0af4f26a1..a7c0a75d5 100644 --- a/Source/GtkSharp.sln +++ b/Source/GtkSharp.sln @@ -24,6 +24,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GtkSourceSharp", "Libs\GtkS EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebkitGtkSharp", "Libs\WebkitGtkSharp\WebkitGtkSharp.csproj", "{60E31DAD-B6E8-4074-B2ED-53FCDFCB0F4D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JavaScriptCoreSharp", "Libs\JavaScriptCoreSharp\JavaScriptCoreSharp.csproj", "{C0989C4E-E767-41C5-B26A-9EFB3E176AC0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -154,6 +156,18 @@ Global {60E31DAD-B6E8-4074-B2ED-53FCDFCB0F4D}.Release|x64.Build.0 = Release|Any CPU {60E31DAD-B6E8-4074-B2ED-53FCDFCB0F4D}.Release|x86.ActiveCfg = Release|Any CPU {60E31DAD-B6E8-4074-B2ED-53FCDFCB0F4D}.Release|x86.Build.0 = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|x64.ActiveCfg = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|x64.Build.0 = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|x86.ActiveCfg = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Debug|x86.Build.0 = Debug|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|Any CPU.Build.0 = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|x64.ActiveCfg = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|x64.Build.0 = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|x86.ActiveCfg = Release|Any CPU + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -168,6 +182,7 @@ Global {04597E0B-375D-4E08-A16C-EE5FF3937B73} = {CCEA1235-D75F-4919-83F6-16793B11BEF5} {2BD3D08E-0FDD-4DC3-A063-58B10B525DA8} = {CCEA1235-D75F-4919-83F6-16793B11BEF5} {60E31DAD-B6E8-4074-B2ED-53FCDFCB0F4D} = {CCEA1235-D75F-4919-83F6-16793B11BEF5} + {C0989C4E-E767-41C5-B26A-9EFB3E176AC0} = {CCEA1235-D75F-4919-83F6-16793B11BEF5} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DA4DD75D-B6C8-4836-AF84-B5FF538D9D86} diff --git a/Source/Libs/JavaScriptCoreSharp/Context.cs b/Source/Libs/JavaScriptCoreSharp/Context.cs new file mode 100644 index 000000000..68f6ed018 --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/Context.cs @@ -0,0 +1,32 @@ +namespace JavaScriptCore { + + using System; + using System.Collections; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using static GLib.AbiStructExtension; + + public partial class Context + { + + [UnmanagedFunctionPointer (CallingConvention.Cdecl)] + delegate void d_jsc_context_push_exception_handler(IntPtr raw, JavaScriptCoreSharp.ExceptionHandlerNative handler, IntPtr user_data, GLib.DestroyNotify destroy_notify); + static d_jsc_context_push_exception_handler jsc_context_push_exception_handler = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.JavaScriptCore), "jsc_context_push_exception_handler")); + + public void PushExceptionHandler(JavaScriptCore.ExceptionHandler handler) { + JavaScriptCoreSharp.ExceptionHandlerWrapper handler_wrapper = new JavaScriptCoreSharp.ExceptionHandlerWrapper (handler); + IntPtr user_data; + GLib.DestroyNotify destroy_notify; + if (handler == null) { + user_data = IntPtr.Zero; + destroy_notify = null; + } else { + user_data = (IntPtr) GCHandle.Alloc (handler_wrapper); + destroy_notify = GLib.DestroyHelper.NotifyHandler; + } + jsc_context_push_exception_handler(Handle, handler_wrapper.NativeDelegate, user_data, destroy_notify); + } + + } + +} \ No newline at end of file diff --git a/Source/Libs/JavaScriptCoreSharp/Global.cs b/Source/Libs/JavaScriptCoreSharp/Global.cs new file mode 100644 index 000000000..b32d975fc --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/Global.cs @@ -0,0 +1,13 @@ +namespace JavaScriptCore +{ + + // https://webkitgtk.org/reference/jsc-glib/2.32.2/ + + public partial class Global + { + + public static bool IsSupported => GLibrary.IsSupported(Library.JavaScriptCore); + + } + +} \ No newline at end of file diff --git a/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-api.xml b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-api.xml new file mode 100644 index 000000000..a7fb28d0c --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-api.xml @@ -0,0 +1,877 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-symbols.xml b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-symbols.xml new file mode 100644 index 000000000..8a5341672 --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp-symbols.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.csproj b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.csproj new file mode 100644 index 000000000..7a3f77456 --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.csproj @@ -0,0 +1,26 @@ + + + true + netstandard2.0 + false + https://github.com/GtkSharp/GtkSharp + https://github.com/GtkSharp/GtkSharp + JavaScriptCoreSharp is a C# wrapper for the Gtk-JavaScriptCore library. + javascriptcore;javascriptcoregtksharp;javascriptcore-sharp;wrapper + JavaScriptCore + + + ..\..\..\BuildOutput\Debug + + + ..\..\..\BuildOutput\Release + + + + %(RecursiveDir)%(Filename)%(Extension) + + + + + + diff --git a/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.metadata b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.metadata new file mode 100644 index 000000000..8a9b97777 --- /dev/null +++ b/Source/Libs/JavaScriptCoreSharp/JavaScriptCoreSharp.metadata @@ -0,0 +1,5 @@ + + + true + + diff --git a/Source/Libs/Shared/GLibrary.cs b/Source/Libs/Shared/GLibrary.cs index 86a58c38f..3ca92245e 100644 --- a/Source/Libs/Shared/GLibrary.cs +++ b/Source/Libs/Shared/GLibrary.cs @@ -19,19 +19,22 @@ static GLibrary() _customlibraries = new Dictionary(); _librariesNotFound = new HashSet(); _libraries = new Dictionary(); - _libraryDefinitions = new Dictionary(); - _libraryDefinitions[Library.GLib] = new[] {"libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib", "glib-2.dll"}; - _libraryDefinitions[Library.GObject] = new[] {"libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib", "gobject-2.dll"}; - _libraryDefinitions[Library.Cairo] = new[] {"libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib", "cairo.dll"}; - _libraryDefinitions[Library.Gio] = new[] {"libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib", "gio-2.dll"}; - _libraryDefinitions[Library.Atk] = new[] {"libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib", "atk-1.dll"}; - _libraryDefinitions[Library.Pango] = new[] {"libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib", "pango-1.dll"}; - _libraryDefinitions[Library.Gdk] = new[] {"libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib", "gdk-3.dll"}; - _libraryDefinitions[Library.GdkPixbuf] = new[] {"libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib", "gdk_pixbuf-2.dll"}; - _libraryDefinitions[Library.Gtk] = new[] {"libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib", "gtk-3.dll"}; - _libraryDefinitions[Library.PangoCairo] = new[] {"libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib", "pangocairo-1.dll"}; - _libraryDefinitions[Library.GtkSource] = new[] {"libgtksourceview-4-0.dll", "libgtksourceview-4.so.0", "libgtksourceview-4.0.dylib", "gtksourceview-4.dll"}; - _libraryDefinitions[Library.Webkit] = new[] { "libwebkit2gtk-4.0.dll", "libwebkit2gtk-4.0.so.37", "libwebkit2gtk-4.0.dylib", "libwebkit2gtk-4.0.0.dll" }; + + _libraryDefinitions = new Dictionary { + [Library.GLib] = new[] {"libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib", "glib-2.dll"}, + [Library.GObject] = new[] {"libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib", "gobject-2.dll"}, + [Library.Cairo] = new[] {"libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib", "cairo.dll"}, + [Library.Gio] = new[] {"libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib", "gio-2.dll"}, + [Library.Atk] = new[] {"libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib", "atk-1.dll"}, + [Library.Pango] = new[] {"libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib", "pango-1.dll"}, + [Library.Gdk] = new[] {"libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib", "gdk-3.dll"}, + [Library.GdkPixbuf] = new[] {"libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib", "gdk_pixbuf-2.dll"}, + [Library.Gtk] = new[] {"libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib", "gtk-3.dll"}, + [Library.PangoCairo] = new[] {"libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib", "pangocairo-1.dll"}, + [Library.GtkSource] = new[] {"libgtksourceview-4-0.dll", "libgtksourceview-4.so.0", "libgtksourceview-4.0.dylib", "gtksourceview-4.dll"}, + [Library.Webkit] = new[] {"libwebkit2gtk-4.0.dll", "libwebkit2gtk-4.0.so.37", "libwebkit2gtk-4.0.dylib", "libwebkit2gtk-4.0.0.dll"}, + [Library.JavaScriptCore] = new[] {"libjavascriptcoregtk-4.0.dll", "libjavascriptcoregtk-4.0.so.18", "libjavascriptcoregtk-4.0.dylib", "libjavascriptcoregtk-4.0.dll"}, + }; } public static IntPtr Load(Library library) diff --git a/Source/Libs/Shared/Library.cs b/Source/Libs/Shared/Library.cs index d07809f0f..b2d5eb31b 100644 --- a/Source/Libs/Shared/Library.cs +++ b/Source/Libs/Shared/Library.cs @@ -12,5 +12,6 @@ enum Library GdkPixbuf, Gtk, GtkSource, - Webkit + Webkit, + JavaScriptCore } \ No newline at end of file diff --git a/Source/Libs/SoupSharp/Global.cs b/Source/Libs/SoupSharp/Global.cs new file mode 100644 index 000000000..254302142 --- /dev/null +++ b/Source/Libs/SoupSharp/Global.cs @@ -0,0 +1,11 @@ +namespace Soup +{ + + public partial class Global + { + + public static bool IsSupported => GLibrary.IsSupported(Library.Soup); + + } + +} \ No newline at end of file diff --git a/Source/Libs/SoupSharp/SoupSharp-api.xml b/Source/Libs/SoupSharp/SoupSharp-api.xml new file mode 100644 index 000000000..17f3bc264 --- /dev/null +++ b/Source/Libs/SoupSharp/SoupSharp-api.xml @@ -0,0 +1,5296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + missing glib:type-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + missing glib:type-name + + + + + + + + + + + + + missing glib:type-name + + + + + + + + + + + + missing glib:type-name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Libs/SoupSharp/SoupSharp.csproj b/Source/Libs/SoupSharp/SoupSharp.csproj new file mode 100644 index 000000000..7b47ef6cc --- /dev/null +++ b/Source/Libs/SoupSharp/SoupSharp.csproj @@ -0,0 +1,26 @@ + + + true + netstandard2.0 + false + https://github.com/GtkSharp/GtkSharp + https://github.com/GtkSharp/GtkSharp + GtkSoupSharp is a C# wrapper for the Gtk-Soup library. + soupgtk;soupgtksharp;soup-sharp;wrapper + Soup + + + ..\..\..\BuildOutput\Debug + + + ..\..\..\BuildOutput\Release + + + + %(RecursiveDir)%(Filename)%(Extension) + + + + + + diff --git a/Source/Libs/WebkitGtkSharp/Global.cs b/Source/Libs/WebkitGtkSharp/Global.cs index 7f70a401a..61c50ce71 100644 --- a/Source/Libs/WebkitGtkSharp/Global.cs +++ b/Source/Libs/WebkitGtkSharp/Global.cs @@ -1,6 +1,8 @@ -namespace WebKit +namespace WebKit { + // https://webkitgtk.org/reference/webkit2gtk/stable/index.html + public partial class Global { diff --git a/Source/Libs/WebkitGtkSharp/WebView.cs b/Source/Libs/WebkitGtkSharp/WebView.cs new file mode 100644 index 000000000..53b50a3ff --- /dev/null +++ b/Source/Libs/WebkitGtkSharp/WebView.cs @@ -0,0 +1,37 @@ +using System; +using System.Threading.Tasks; + +namespace WebKit +{ + + public partial class WebView + { + + public Task RunJavascriptAsync(string script) + { + var tcs = new TaskCompletionSource(); + IntPtr native_script = GLib.Marshaller.StringToPtrGStrdup(script); + + try { + + void Callback(IntPtr sourceObject, IntPtr res, IntPtr userData) + { + var jsResult = webkit_web_view_run_javascript_finish(sourceObject, res, out var error); + WebKit.JavascriptResult ret = new JavascriptResult(jsResult); + + if (error != IntPtr.Zero) throw new GLib.GException(error); + + tcs.SetResult(ret); + } + + webkit_web_view_run_javascript(Handle, native_script, IntPtr.Zero, Callback, IntPtr.Zero); + } finally { + GLib.Marshaller.Free(native_script); + } + + return tcs.Task; + } + + } + +} \ No newline at end of file diff --git a/Source/Libs/WebkitGtkSharp/WebkitGtkSharp-api.xml b/Source/Libs/WebkitGtkSharp/WebkitGtkSharp-api.xml index b6feeeeb6..f4b293cdc 100644 --- a/Source/Libs/WebkitGtkSharp/WebkitGtkSharp-api.xml +++ b/Source/Libs/WebkitGtkSharp/WebkitGtkSharp-api.xml @@ -4233,10 +4233,10 @@