<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 18, 2019 at 7:03 PM Adrian Perez de Castro <<a href="mailto:aperez@igalia.com">aperez@igalia.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello Munez,<br>
<br>
First of all: yes, the WebKitWebExtension API is supported in WPE WebKit,<br>
and I have successfully used it myself in a couple of projects — it works.<br>
<br></blockquote><div><br></div><div>Thanks for confirming.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
On Sat, 08 Jun 2019 20:43:17 +0530, Munez Bn <<a href="mailto:munezbn.dev@gmail.com" target="_blank">munezbn.dev@gmail.com</a>> wrote:<br>
<br>
> I had written a test webextension for WebKitGTK long back (WebKitGTK<br>
> 2.16.6). I wanted o test it with WPE 2.24.x (RPI3) and the page was not<br>
> launching. After debugging I found that JSContextGetGlobalObject() is<br>
> getting struck and never returns. Same extension when i Tried on WebKitGTK<br>
> 2.24.x on Fedora, I don't see this issue.<br>
> <br>
> static void<br>
> window_object_cleared_callback (WebKitScriptWorld *world,<br>
>                                 WebKitWebPage     *web_page,<br>
>                                 WebKitFrame       *frame,<br>
>                                 gpointer           user_data)<br>
> {<br>
>     JSGlobalContextRef globalContext;<br>
>     JSObjectRef        globalObject;<br>
> <br>
>     GRefPtr<JSCContext> jsContext =<br>
> doptGRef(webkit_frame_get_js_context_for_script_world(frame, world));<br>
> <br>
>     globalContext = jscContextGetJSContext(jsContext.get());<br>
>     globalObject = JSContextGetGlobalObject (globalContext);  ---> Blocked<br>
> and doesn't return<br>
> ..........<br>
<br>
Is the function really blocked, or did the “WPEWebProcess” program crash?<br></blockquote><div><br></div><div>There is no WebProcess crash, the call is  blocked in function  JSObjectRef JSContextGetGlobalObject(JSContextRef ctx) at line  "JSLockHolder locker(vm);"</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I did a very quick check of the “JSContextGetGlobalObject” function and<br>
unless I missed something, the only way it can fail is if your build has<br>
assertions enabled and the the passed “JSContextRef” is null — there<br>
is “ASSERT_NOT_REACHED()” in that case.<br>
<br></blockquote><div><br></div><div>Like I mentioned above, it has crossed ASSERT and struck at locker(vm) call.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
This “window_object_cleared_callback” function is not in the upstream WebKit<br>
sources... Is this is code from your own WebExtension, or have you patched<br>
WPE WebKit in any way?<br>
<br></blockquote><div><br></div><div>It is my callback code of extension</div><div>    g_signal_connect (webkit_script_world_get_default (),   "window-object-cleared",  G_CALLBACK (window_object_cleared_callback),  usrData);</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
In case the above is the code of your WebExtension, please update it to use<br>
the JSC GLib API [1] because the plain C JavaScriptCore API that this piece of<br>
code has never been public in WPE WebKit, and there is no stability guarantee<br>
for it. </blockquote><div><br></div><div> I realized this recently and started moving my code to use JSC GLIB API, but I was not sure how to return native objects using JSC Gib API. Please refer to my post in 

<a href="https://stackoverflow.com/questions/56516809/returning-native-objects-using-javascriptcore-glib-api">https://stackoverflow.com/questions/56516809/returning-native-objects-using-javascriptcore-glib-api</a></div><div></div><div>Can you please help me answering above question? Basically i want something like this, Create a File object ( GFile *) which has properties path and size. Return this object to javascript code such that I can access its properties path and size.</div><div>I was able to do this in JS object C API, But not sure how to do it in JSC Glib API..<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Also, this is using the “GRefPtr”, which is internal to WebKit and<br>
the header that defines that is not even installed as part of the public API.<br>
<br></blockquote><div>Agree. I will update my code and give a try.<br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
As a reminder: please use only public symbols from the installed API headers<br>
in software that uses WebKit.<br>
<br></blockquote><div>Agree. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Best regards,<br>
—Adrián<br>
<br>
---<br>
[1] <a href="https://webkitgtk.org/reference/jsc-glib/stable/index.html" rel="noreferrer" target="_blank">https://webkitgtk.org/reference/jsc-glib/stable/index.html</a><br>
</blockquote></div></div>