Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37508239
en ru br
Репозитории ALT

Группа :: Сети/Почта
Пакет: geary

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: geary-0.12-use-upstream-jsc.patch
Скачать


commit a0b1827298dc3210ad0ad16b09cff3507c3ad333
Author: Thomas Moschny <thomas.moschny@gmx.de>
Date:   Sat Jul 14 12:33:47 2018
    Squashed commit of the following:
    
    commit e091f24b00ec421e1aadd5e360d1550e658ad5ef
    Author: Michael James Gratton <mike@vee.net>
    Date:   Sun May 20 19:07:56 2018 +1000
    
        Clean up JS util API courtesy the new bindings.
    
    commit 0d966950a2cba888873cd3a7f4f42bb7a017dc6d
    Author: Rico Tzschichholz <ricotz@ubuntu.com>
    Date:   Mon Apr 23 19:56:18 2018 +0200
    
        Adjust to upstream javascriptcore-4.0 bindings
    
    commit 5d0f711426d76f878cf9b71f7e8f785199c7cde1
    Author: Rico Tzschichholz <ricotz@ubuntu.com>
    Date:   Thu Jun 22 15:01:19 2017 +0200
    
        bindings: Drop custom javascriptcore-4.0 and webkit2gtk-4.0 vapi
diff --git a/bindings/metadata/Soup-2.4.metadata b/bindings/metadata/Soup-2.4.metadata
deleted file mode 100644
index f3e72e8..0000000
--- a/bindings/metadata/Soup-2.4.metadata
+++ /dev/null
@@ -1,3 +0,0 @@
-AuthDomain.accepts skip
-AuthDomain.challenge skip
-
diff --git a/bindings/metadata/WebKit2-4.0.metadata b/bindings/metadata/WebKit2-4.0.metadata
deleted file mode 100644
index 3e3044f..0000000
--- a/bindings/metadata/WebKit2-4.0.metadata
+++ /dev/null
@@ -1,15 +0,0 @@
-
-JavascriptResult
-    .get_global_context nullable=false unowned=true
-    .get_value nullable=false unowned=true
-
-//Forward upstream
-Download
-  .failed#signal.error type="WebKit.DownloadError"
-PrintOperation
-  .failed#signal.error type="WebKit.PrintError"
-WebResource
-  .failed#signal.error type="GLib.Error"
-WebView
-  .load_failed#signal.error type="GLib.Error"
-  .show_option_menu#signal skip
diff --git a/bindings/metadata/WebKit2WebExtension-4.0-custom.vala b/bindings/metadata/WebKit2WebExtension-4.0-custom.vala
deleted file mode 100644
index a994a77..0000000
--- a/bindings/metadata/WebKit2WebExtension-4.0-custom.vala
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace WebKit {
-	namespace DOM {
-		public delegate void EventTargetFunc (WebKit.DOM.EventTarget target, WebKit.DOM.Event event);
-	}
-}
diff --git a/bindings/metadata/WebKit2WebExtension-4.0.metadata b/bindings/metadata/WebKit2WebExtension-4.0.metadata
deleted file mode 100644
index c496dba..0000000
--- a/bindings/metadata/WebKit2WebExtension-4.0.metadata
+++ /dev/null
@@ -1,9 +0,0 @@
-DOM* parent="WebKit.DOM" name="DOM(.+)"
-
-DOMEventTarget.add_event_listener skip
-_ContextMenu skip
-_ContextMenuItem skip
-
-Frame.get_javascript_* nullable=false unowned=true
-
-DOMEventTarget.add_event_listener_with_closure.handler type="owned WebKit.DOM.EventTargetFunc"
diff --git a/bindings/vapi/javascriptcore-4.0.vapi b/bindings/vapi/javascriptcore-4.0.vapi
deleted file mode 100644
index d152ce2..0000000
--- a/bindings/vapi/javascriptcore-4.0.vapi
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2017 Michael Gratton <mike@vee.net>
- *
- * This software is licensed under the GNU Lesser General Public License
- * (version 2.1 or later). See the COPYING file in this distribution.
- */
-
-[CCode (cprefix = "JS",
-        gir_namespace = "JavaScriptCore",
-        gir_version = "4.0",
-        lower_case_cprefix = "JS_",
-        cheader_filename = "JavaScriptCore/JavaScript.h")]
-namespace JS {
-
-	[CCode (cname = "JSContextRef")]
-    [SimpleType]
-	public struct Context {
-
-        [CCode (cname = "JSEvaluateScript")]
-        public Value evaluate_script(String script,
-                                     Object? thisObject,
-                                     String? sourceURL,
-                                     int startingLineNumber,
-                                     out Value? exception);
-
-        [CCode (cname = "JSCheckScriptSyntax")]
-        public Value check_script_syntax(String script,
-                                         String? sourceURL,
-                                         int startingLineNumber,
-                                         out Value? exception);
-
-	}
-
-	[CCode (cname = "JSGlobalContextRef")]
-    [SimpleType]
-	public struct GlobalContext : Context {
-
-        [CCode (cname = "JSGlobalContextRetain")]
-        public bool retain();
-
-        [CCode (cname = "JSGlobalContextRelease")]
-        public bool release();
-
-	}
-
-	[CCode (cname = "JSType", has_type_id = false)]
-	public enum Type {
-
-        [CCode (cname = "kJSTypeUndefined")]
-        UNDEFINED,
-
-        [CCode (cname = "kJSTypeNull")]
-        NULL,
-
-        [CCode (cname = "kJSTypeBoolean")]
-        BOOLEAN,
-
-        [CCode (cname = "kJSTypeNumber")]
-        NUMBER,
-
-        [CCode (cname = "kJSTypeString")]
-        STRING,
-
-        [CCode (cname = "kJSTypeObject")]
-        OBJECT
-    }
-
-	[CCode (cname = "JSObjectRef")]
-    [SimpleType]
-	public struct Object {
-
-        [CCode (cname = "JSObjectMakeFunction")]
-        public Object.make_function(String? name,
-                                    [CCode (array_length_pos=1.5)]
-                                    String[]? parameterNames,
-                                    String body,
-                                    String? sourceURL,
-                                    int startingLineNumber,
-                                    out Value? exception);
-
-        [CCode (cname = "JSObjectCallAsFunction", instance_pos = 1.1)]
-        public Value call_as_function(Context ctx,
-                                      Object? thisObject,
-                                      [CCode (array_length_pos=2.5)]
-                                      Value[]? arguments,
-                                      out Value? exception);
-
-        [CCode (cname = "JSObjectHasProperty", instance_pos = 1.1)]
-        public bool has_property(Context ctx, String property_name);
-
-        [CCode (cname = "JSObjectGetProperty", instance_pos = 1.1)]
-        public Value get_property(Context ctx,
-                                  String property_name,
-                                  out Value? exception);
-
-	}
-
-	[CCode (cname = "JSValueRef")]
-    [SimpleType]
-	public struct Value {
-
-        [CCode (cname = "JSValueGetType", instance_pos = 1.1)]
-        public Type get_type(Context context);
-
-        [CCode (cname = "JSValueIsBoolean", instance_pos = 1.1)]
-        public bool is_boolean(Context ctx);
-
-        [CCode (cname = "JSValueIsNumber", instance_pos = 1.1)]
-        public bool is_number(Context ctx);
-
-        [CCode (cname = "JSValueIsObject", instance_pos = 1.1)]
-        public bool is_object(Context ctx);
-
-        [CCode (cname = "JSValueIsString", instance_pos = 1.1)]
-        public bool is_string(Context ctx);
-
-        [CCode (cname = "JSValueToBoolean", instance_pos = 1.1)]
-        public bool to_boolean(Context ctx);
-
-        [CCode (cname = "JSValueToNumber", instance_pos = 1.1)]
-        public double to_number(Context ctx, out Value exception);
-
-        [CCode (cname = "JSValueToObject", instance_pos = 1.1)]
-        public Object to_object(Context ctx, out Value exception);
-
-        [CCode (cname = "JSValueToStringCopy", instance_pos = 1.1)]
-        public String to_string_copy(Context ctx, out Value exception);
-
-	}
-
-	[CCode (cname = "JSStringRef")]
-    [SimpleType]
-	public struct String {
-
-        [CCode (cname = "JSStringCreateWithUTF8CString")]
-        public String.create_with_utf8_cstring(string str);
-
-        [CCode (cname = "JSStringGetLength")]
-        public int String.get_length();
-
-        [CCode (cname = "JSStringGetMaximumUTF8CStringSize")]
-        public int String.get_maximum_utf8_cstring_size();
-
-        [CCode (cname = "JSStringGetUTF8CString")]
-        public void String.get_utf8_cstring(string* buffer, int bufferSize);
-
-        [CCode (cname = "JSStringRetain")]
-        public void String.retain();
-
-        [CCode (cname = "JSStringRelease")]
-        public void String.release();
-
-	}
-
-}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1e4213f..e0bebdf 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -526,7 +526,7 @@ set(ENGINE_PACKAGES
   gio-2.0
   glib-2.0
   gmime-2.6
-  javascriptcore-4.0
+  javascriptcoregtk-4.0
   libxml-2.0
   posix
   sqlite3
@@ -551,7 +551,7 @@ set(WEB_PROCESS_PACKAGES
   geary-engine
   gee-0.8
   gtk+-3.0
-  javascriptcore-4.0
+  javascriptcoregtk-4.0
   libsoup-2.4
   webkit2gtk-web-extension-4.0
 )
@@ -618,7 +618,6 @@ add_definitions(${CFLAGS})
 set(VALAC_OPTIONS
     --vapidir=${CMAKE_BINARY_DIR}/src
     --vapidir=${CMAKE_SOURCE_DIR}/bindings/vapi
-    --metadatadir=${CMAKE_SOURCE_DIR}/bindings/metadata
     --target-glib=${TARGET_GLIB}
     --thread
     --debug
@@ -650,38 +649,6 @@ set_property(
 )
 target_link_libraries(geary-engine m ${DEPS_LIBRARIES} sqlite3-unicodesn)
 
-# WebKit2GTK VAPI generation
-#################################################
-add_custom_target(webkit2gtk-vapi
-  DEPENDS
-    "${CMAKE_BINARY_DIR}/src/webkit2gtk-4.0.vapi"
-    "${CMAKE_BINARY_DIR}/src/webkit2gtk-web-extension-4.0.vapi"
-    "${CMAKE_SOURCE_DIR}/bindings/vapi/javascriptcore-4.0.vapi"
-)
-add_custom_command(
-    OUTPUT
-        ${CMAKE_BINARY_DIR}/src/webkit2gtk-4.0.vapi
-    DEPENDS
-        "${CMAKE_SOURCE_DIR}/bindings/metadata/WebKit2-4.0.metadata"
-        "${CMAKE_SOURCE_DIR}/bindings/vapi/javascriptcore-4.0.vapi"
-    WORKING_DIRECTORY
-        "${CMAKE_SOURCE_DIR}/bindings/metadata"
-    COMMAND
-        vapigen --library=webkit2gtk-4.0 --pkg gtk+-3.0 --pkg libsoup-2.4 --pkg javascriptcore-4.0 --vapidir=${CMAKE_SOURCE_DIR}/bindings/vapi --metadatadir=${CMAKE_SOURCE_DIR}/bindings/metadata --directory=${CMAKE_BINARY_DIR}/src `${PKG_CONFIG_EXECUTABLE} --variable=girdir gobject-introspection-1.0`/WebKit2-4.0.gir
-)
-add_custom_command(
-    OUTPUT
-        "${CMAKE_BINARY_DIR}/src/webkit2gtk-web-extension-4.0.vapi"
-    DEPENDS
-        "${CMAKE_SOURCE_DIR}/bindings/metadata/WebKit2WebExtension-4.0.metadata"
-        "${CMAKE_SOURCE_DIR}/bindings/metadata/WebKit2WebExtension-4.0-custom.vala"
-        "${CMAKE_SOURCE_DIR}/bindings/vapi/javascriptcore-4.0.vapi"
-    WORKING_DIRECTORY
-        "${CMAKE_SOURCE_DIR}/bindings/metadata"
-    COMMAND
-        vapigen --library=webkit2gtk-web-extension-4.0 --pkg gtk+-3.0 --pkg libsoup-2.4 --pkg javascriptcore-4.0 --vapidir=${CMAKE_SOURCE_DIR}/bindings/vapi --metadatadir=${CMAKE_SOURCE_DIR}/bindings/metadata --directory=${CMAKE_BINARY_DIR}/src `${PKG_CONFIG_EXECUTABLE} --variable=girdir gobject-introspection-1.0`/WebKit2WebExtension-4.0.gir WebKit2WebExtension-4.0-custom.vala
-)
-
 # Client library (static lib used for building client and unit tests)
 #################################################
 
@@ -698,7 +665,7 @@ OPTIONS
 )
 
 add_library(geary-client STATIC ${CLIENT_VALA_C})
-add_dependencies(geary-client resource_copy webkit2gtk-vapi)
+add_dependencies(geary-client resource_copy)
 target_link_libraries(geary-client m ${DEPS_LIBRARIES} geary-engine)
 
 # Main client application binary
diff --git a/src/client/conversation-viewer/conversation-web-view.vala b/src/client/conversation-viewer/conversation-web-view.vala
index 588d39b..d851235 100644
--- a/src/client/conversation-viewer/conversation-web-view.vala
+++ b/src/client/conversation-viewer/conversation-web-view.vala
@@ -183,7 +183,7 @@ public class ConversationWebView : ClientWebView {
 
     private void on_deceptive_link_clicked(WebKit.JavascriptResult result) {
         try {
-            JS.GlobalContext context = result.get_global_context();
+            unowned JS.GlobalContext context = result.get_global_context();
             JS.Object details = WebKitUtil.to_object(result);
 
             uint reason = (uint) Geary.JS.to_number(
diff --git a/src/client/util/util-webkit.vala b/src/client/util/util-webkit.vala
index 319e28a..45a27c4 100644
--- a/src/client/util/util-webkit.vala
+++ b/src/client/util/util-webkit.vala
@@ -18,8 +18,8 @@ namespace WebKitUtil {
      */
     public bool to_bool(WebKit.JavascriptResult result)
         throws Geary.JS.Error {
-        JS.GlobalContext context = result.get_global_context();
-        JS.Value value = result.get_value();
+        unowned JS.GlobalContext context = result.get_global_context();
+        unowned JS.Value value = result.get_value();
         if (!value.is_boolean(context)) {
             throw new Geary.JS.Error.TYPE("Result is not a JS Boolean object");
         }
@@ -59,12 +59,12 @@ namespace WebKitUtil {
      */
     public string as_string(WebKit.JavascriptResult result)
         throws Geary.JS.Error {
-        JS.GlobalContext context = result.get_global_context();
-        JS.Value js_str_value = result.get_value();
+        unowned JS.GlobalContext context = result.get_global_context();
+        unowned JS.Value js_str_value = result.get_value();
         JS.Value? err = null;
         JS.String js_str = js_str_value.to_string_copy(context, out err);
         Geary.JS.check_exception(context, err);
-        return Geary.JS.to_string_released(js_str);
+        return Geary.JS.to_native_string(js_str);
     }
 
     /**
diff --git a/src/client/web-process/web-process-extension.vala b/src/client/web-process/web-process-extension.vala
index ee89139..1f478a6 100644
--- a/src/client/web-process/web-process-extension.vala
+++ b/src/client/web-process/web-process-extension.vala
@@ -87,10 +87,9 @@ public class GearyWebExtension : Object {
         bool should_load = false;
         WebKit.Frame frame = page.get_main_frame();
         // Explicit cast fixes build on s390x/ppc64. Bug 783882
-        JS.GlobalContext context = (JS.GlobalContext)
-            frame.get_javascript_global_context();
+        unowned JS.GlobalContext context = frame.get_javascript_global_context();
         try {
-            JS.Value ret = execute_script(
+            unowned JS.Value ret = execute_script(
                 context, "geary.allowRemoteImages", int.parse("__LINE__")
             );
             should_load = ret.to_boolean(context);
@@ -106,8 +105,7 @@ public class GearyWebExtension : Object {
     private void remote_image_load_blocked(WebKit.WebPage page) {
         WebKit.Frame frame = page.get_main_frame();
         // Explicit cast fixes build on s390x/ppc64. Bug 783882
-        JS.GlobalContext context = (JS.GlobalContext)
-            frame.get_javascript_global_context();
+        unowned JS.GlobalContext context = frame.get_javascript_global_context();
         try {
             execute_script(
                 context, "geary.remoteImageLoadBlocked();", int.parse("__LINE__")
@@ -123,8 +121,7 @@ public class GearyWebExtension : Object {
     private void selection_changed(WebKit.WebPage page) {
         WebKit.Frame frame = page.get_main_frame();
         // Explicit cast fixes build on s390x/ppc64. Bug 783882
-        JS.GlobalContext context = (JS.GlobalContext)
-            frame.get_javascript_global_context();
+        unowned JS.GlobalContext context = frame.get_javascript_global_context();
         try {
             execute_script(
                 context, "geary.selectionChanged();", int.parse("__LINE__")
@@ -136,20 +133,18 @@ public class GearyWebExtension : Object {
 
     // Return type is nullable as a workaround for Bug 778046, it will
     // never actually be null.
-    private JS.Value? execute_script(JS.Context context, string script, int line)
+    private unowned JS.Value? execute_script(JS.Context context, string script, int line)
     throws Geary.JS.Error {
         JS.String js_script = new JS.String.create_with_utf8_cstring(script);
         JS.String js_source = new JS.String.create_with_utf8_cstring("__FILE__");
         JS.Value? err = null;
         try {
-            JS.Value ret = context.evaluate_script(
+            unowned JS.Value ret = context.evaluate_script(
                 js_script, null, js_source, line, out err
             );
             Geary.JS.check_exception(context, err);
             return ret;
         } finally {
-            js_script.release();
-            js_source.release();
         }
     }
 
diff --git a/src/engine/util/util-js.vala b/src/engine/util/util-js.vala
index 4d22429..a98d798 100644
--- a/src/engine/util/util-js.vala
+++ b/src/engine/util/util-js.vala
@@ -10,6 +10,16 @@
  */
 namespace Geary.JS {
 
+#if !VALA_0_42
+    // Workaround broken version of this in the vala bindings. See Bug
+    // 788113.
+    [CCode (cname = "JSStringGetUTF8CString")]
+    private extern size_t js_string_get_utf8_cstring(
+        global::JS.String js,
+        [CCode (array_length_type = "gsize")] char[] buffer
+    );
+#endif
+
     /**
      * Errors produced by functions in {@link Geary.JS}.
      */
@@ -72,7 +82,7 @@ namespace Geary.JS {
         global::JS.String js_str = value.to_string_copy(context, out err);
         Geary.JS.check_exception(context, err);
 
-        return Geary.JS.to_string_released(js_str);
+        return to_native_string(js_str);
     }
 
     /**
@@ -101,12 +111,15 @@ namespace Geary.JS {
     /**
      * Returns a JSC {@link JS.String} as a Vala {@link string}.
      */
-    public inline string to_string_released(global::JS.String js) {
-        int len = js.get_maximum_utf8_cstring_size();
-        string str = string.nfill(len, 0);
-        js.get_utf8_cstring(str, len);
-        js.release();
-        return str;
+    public inline string to_native_string(global::JS.String js) {
+        size_t len = js.get_maximum_utf8_cstring_size();
+        uint8[] str = new uint8[len];
+#if VALA_0_42
+        js.get_utf8_cstring(str);
+#else
+        js_string_get_utf8_cstring(js, (char[]) str);
+#endif
+        return (string) str;
     }
 
     /**
@@ -125,11 +138,8 @@ namespace Geary.JS {
         global::JS.String js_name = new global::JS.String.create_with_utf8_cstring(name);
         global::JS.Value? err = null;
         global::JS.Value prop = object.get_property(context, js_name, out err);
-        try {
-            Geary.JS.check_exception(context, err);
-        } finally {
-            js_name.release();
-        }
+        Geary.JS.check_exception(context, err);
+
         return prop;
     }
 
@@ -157,7 +167,7 @@ namespace Geary.JS {
 
             throw new Error.EXCEPTION(
                 "JS exception thrown [%s]: %s"
-                .printf(err_type.to_string(), to_string_released(err_str))
+                .printf(err_type.to_string(), to_native_string(err_str))
             );
         }
     }
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index afcca95..7517b3d 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -56,7 +56,7 @@ set(TEST_PACKAGES
   glib-2.0
   gmime-2.6
   gtk+-3.0
-  javascriptcore-4.0
+  javascriptcoregtk-4.0
   libsoup-2.4
   webkit2gtk-4.0
 )
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin