bug-texinfo
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [webkit-gtk] Future of direct DOM access in WebKitGTK


From: Carlos Garcia Campos
Subject: Re: [webkit-gtk] Future of direct DOM access in WebKitGTK
Date: Mon, 28 Oct 2019 09:16:03 +0100
User-agent: Evolution 3.34.1-2+b1

El vie, 25-10-2019 a las 14:02 +0100, Gavin Smith escribió:
> On Mon, Oct 21, 2019 at 10:12 AM Carlos Garcia Campos
> <address@hidden> wrote:
> > El mié, 16-10-2019 a las 19:38 +0100, Gavin Smith escribió:
> > > I'd like to ask what is the future of the DOM access functions
> > > that
> > > were deprecated in WebKitGTK+ 2.22.0. The documentation advises
> > > using
> > > a "JavaScriptCore" API instead.
> > > 
> > > https://webkitgtk.org/2018/09/03/webkitgtk2.22.0-released.html
> > 
> > Yes, current DOM bindings API marked as deprecated will be removed
> > in
> > the next binary version bump.
> > 
> > > I think it would be unfortunate if this functionality were
> > > removed.
> > 
> > The functionality is not removed, everything you can do with the
> > DOM
> > API can be done with JSC
> > (https://webkitgtk.org/reference/jsc-glib/stable/index.html)
> 
> That manual doesn't explain how to use JavaScriptCore to do this. For
> example, there is a type called JSCContext, representing the
> "JavaScript execution context", but it doesn't explain how to get the
> reference for a webpage being displayed in a WebKitWebView.
> 
> https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html
> and 
> https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebContext.html
> make no reference to "JSCContext".

The JavaScript runs in the web process, so it's no possible to get the
JSCContext from the UI process, you need to use 

https://webkitgtk.org/reference/webkit2gtk/stable/WebKitFrame.html#webkit-frame-get-js-context

> > I'm not sure I understand. You can use the JSC API from C like you
> > do
> > with the DOM API. You can take a look at epiphany code to see how
> > it
> > uses the JSC API to access the DOM.
> 
> I downloaded a ZIP file of the source code for epiphany from
> https://github.com/GNOME/epiphany and grepped for the string "JSC" in
> the source files. It appeared to be using a function
> "webkit_frame_get_js_context" to get the JSCContext object,
> documented
> here: 
> https://webkitgtk.org/reference/webkit2gtk/stable/WebKitFrame.html#webkit-frame-get-js-context
> .
> This is part of the "web extension" API.

Exactly, because both the JavaScript and the DOM tree are in the web
process.

> It is probably possible to do but it would require looking over all
> the documentation to find the relevant information and possibly
> looking at the epiphany source code as well to try to understand how
> epiphany does it.
> 
> > > As an aside, it would be even better if you could have direct DOM
> > > access in the main thread, as was the case with WebKitGTK version
> > > 1.
> > 
> > I guess you mean, from the UI process, instead of the main thread.
> > The
> > DOM is in the web process, and that can't be changed.
> 
> I wonder if JSC could prevent the need for an extension module in the
> web process. For example, could you get a JSCValue[1] in the UI
> process representing a DOM element for a page inside a web process?
> 
> [1] https://webkitgtk.org/reference/jsc-glib/stable/JSCValue.html

No, it's not possible.

> This would simplify the architecture of the program from
> 
> UI process <-------> Web process <--------> JavaScript context
> 
> where there are two levels of message passing to just
> 
> UI process <-------> JavaScript context
> 
> There is already some provision for executing JavaScript from the UI
> process[1] but I am not sure if it is enough.
> 
> [1] 
> https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-run-javascript

It depends on what you need, it might be enough, but not everything can
be serialized and sent from web to UI process.

> > Yes, probably not for this use case, but the multi-process
> > architecture
> > is the only one right now, and we can't maintain both. Btw,
> > regarding
> > the communication between UI and web processes, we have recently
> > landed
> > a patch to add a user message API, so you won't have to use your
> > socket
> > based one. See https://bugs.webkit.org/show_bug.cgi?id=202847
> 
> That would be an improvement. The socket method currently used puts a
> limit on the size of the message and converts non-linear structures
> to
> and from a linear text format using an ad-hoc protocol. This probably
> accounts for 40%-50% of the complexity of the program. It would
> certainly help to be able to send richer data structures of arbitrary
> size.
> 
-- 
Carlos Garcia Campos
http://pgp.rediris.es:11371/pks/lookup?op=get&search=0xF3D322D0EC4582C3

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]