[webkit-gtk] webextensions, iframes and main gui process

Gaute Hope eg at gaute.vetsj.com
Tue Jun 26 01:21:44 PDT 2018


Michael Gratton writes on June 23, 2018 8:22:
> On Thu, Jun 21, 2018 at 11:47 PM, Gaute Hope <eg at gaute.vetsj.com> wrote:
>> Do you have any suggestions for how I could design or circumvent this?
> 
> Everything involving I/O that needs to be done on the main loop should 
> be done asynchronously. That's precisely why GLib-based libs have such 
> good support for async operations: To avoid blocking the GUI.
> 
> In particular for WebKitGTK, if the data you need to exchange between 
> the GUI process and WebExtension can be trivially formatted and 
> re-parsed (GVariant helps a lot with that), then consider using 
> webkit_web_view_run_javascript() instead of your own custom protobuf 
> IPC.
> 
> If the data you need to load from the GUI process is large enough, 
> maybe consider registering a custom URI scheme handler using 
> webkit_web_context_register_uri_scheme(), then let WebKitGTK handle 
> getting the data to the WebProcess asynchronously for you.
> 
> If neither of those are a good fit, write an async protobuf wrapper 
> using a background thread, so that when it blocks, it doesn't block the 
> GUI as well.
> 
> Geary uses the first two of these approaches with WebKitGTK, and the 
> last approach for interacting asynchronously with SQLite, and they all 
> work quite well.

Hi Mike,

thanks for your answer. As you might have noticed I have found a lot of 
inspiration in Geary when it comes to message rendering - thanks! I 
noticed that I could use the set_inner_html() on the body from 
iframe_get_content_document() without generating a request. This solves 
my problem.

The necessicity to do all DOM manipulation on the main WE-thread 
(sync'ed) and the interactivity between the webpage and the GUI allows 
my design to become a lot simpler if I can do sync'ed requests between 
my GUI thread and the WE-thread. Async-options would require me to keep 
blocking user-events and making my GUI inactive when I am waiting for a 
request to finish. I was hoping to avoid this since it would be really 
hard to reliably guard against this. Especially since external events / 
timers also need to be blocked untill the request is done. The last 
option is what I am doing now (I just choose to do most things sync'ed).

- gaute

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.webkit.org/pipermail/webkit-gtk/attachments/20180626/51383e77/attachment.bin>


More information about the webkit-gtk mailing list