On Mon, Jan 2, 2017 at 8:13 PM, Carlos Garcia Campos
<cgar...@igalia.com> wrote:
El lun, 02-01-2017 a las 11:47 +1100, Michael Gratton escribió:
Yes, we plan to have GObject bindings of JSC that would make your life
easier. There's a wip patch in [1] that is waiting review (I've been
quite busy, but it's still in my TODO). Memory management is indeed
the
main challenge, because it requires to have a good knowledge of JSC
internals and how the garbage collector works. It's also important to
understand how apps will use the API to try to make the lib as
convenient as possible, so your feedback would be really useful.
Thanks for pointing that bug out, I just added some comments to it
then, but in short it's about 95% there to covering Geary's current use
cases.
I've been trying to work out when to use functions like
JSGlobalContextRelease, JSStringRelease, and JSValueUnprotect, but
haven't been able to find any useful documentation about it. Also,
examples on the web seem to conflict: E.g. The WebKitGTK docs and
Cookbook[1] uses JSStringRelease on a string copied from a
JSValueRef,
whereas others (e.g. [2]) suggest that JSStringRelease only needs to
be
used in certain instances, or that it needs to be used all the time.
Any pointers to canonical docs and examples would be appreciated.
JavaScript objects are garbage collected, that affects JSValueRef,
JSObjectRef, but not JSGlobalContext or JSString. You should always
release those. JSValueUnprotectc is not comparable with
JSGlobalContextRelease or JSStringRelease, Release methods do actually
release/free/unrefs the objects, but Unprotect tells the garbage
collector that it's ok to release that object. It only makes sense if
the value has been protected before, note that values are not
protected
by default.
That makes sense.
I assume I never need to release a JSGlobalContextRef obtained from
JavascriptResult or Frame, since the web process will effectively
retain it, but what about the others? Would it hurt to call
JSGlobalContextRelease and JSStringRelease even if not needed? What
about JSValueRefs?
Yes, the global context returned by
webkit_frame_get_javascript_global_context() is owned by WebKit, it's
transfer-none. You shouldn't Unprotect values returned by
WebKitJavaScriptResult either, unless you explicitly protect them, of
course. But you should release strings returned by JSValueRef.
Diito, however WebKitJavaScriptResult presumably needs to be un-refed
via webkit_javascript_result_unref() after it has been obtained from a
WebView/UserContentManager?
Also, my assumption that JSC objects should be treated as Vala
simple
types, i.e. they should be passed as copies (not by reference),
that's
correct isn't it?
I'm not sure, because I don't know anything about vala, but JSValueRef
is a pointer.
Most of the questions are not specific to WebKitGTK+, but to
JavaScriptCore C API which is cross-platform, so I would ask in
webkit-
dev mailing list, since JSC developers can answer the questions much
better than me :-)
Fair enough. This approach seems to be working reasonably well for now,
but I'll ping webkit-
dev if I have any more in-depth queries about JSC.
Thanks for the assistance!
//Mike
PS: I was wondering if the WebKitGTK+ team is aware of Bug 88595[0] -
basically a request for exposing the UndoManager, which would be very
useful to be able to query the state of the stack and add custom
transactions to it. I ask since the bug doesn't seem to reference GTK
except in the summary, or CC any GTK people.
[0] - <https://bugs.webkit.org/show_bug.cgi?id=88595>
--
⊨ Michael Gratton, Percept Wrangler.
⚙ <http://mjog.vee.net/>
_______________________________________________
webkit-gtk mailing list
webkit-gtk@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-gtk