gjdwebserver-overlay/mail-client/geary/files/0078-GearyWebExtension-Untangle-extension-and-JS-interact.patch

139 lines
5.2 KiB
Diff
Raw Normal View History

2021-03-23 14:05:24 +01:00
From 7950ce50c6bdb6ca77561a00d1afb9bc689278cf Mon Sep 17 00:00:00 2001
From: Michael Gratton <mike@vee.net>
Date: Fri, 28 Aug 2020 11:59:11 +1000
Subject: [PATCH 078/124] GearyWebExtension: Untangle extension and JS
interaction a bit
Move selection changed event listener into JS so it doesn't have to
cross the JS/native boundary twice.
Move sending remote load blocked from JS to the extension since we can
do that directly now and again so the JS/native boundary doesn't need
to be double-crossed again.
---
.../web-process/web-process-extension.vala | 60 ++-----------------
ui/components-web-view.js | 8 +--
2 files changed, 8 insertions(+), 60 deletions(-)
diff --git a/src/client/web-process/web-process-extension.vala b/src/client/web-process/web-process-extension.vala
index 31f2b0f0..6eed7746 100644
--- a/src/client/web-process/web-process-extension.vala
+++ b/src/client/web-process/web-process-extension.vala
@@ -77,7 +77,10 @@ public class GearyWebExtension : Object {
if (should_load_remote_images(page)) {
should_load = true;
} else {
- remote_image_load_blocked(page);
+ page.send_message_to_view.begin(
+ new WebKit.UserMessage("remote_image_load_blocked", null),
+ null
+ );
}
}
@@ -99,54 +102,6 @@ public class GearyWebExtension : Object {
return should_load;
}
- private void remote_image_load_blocked(WebKit.WebPage page) {
- WebKit.Frame frame = page.get_main_frame();
- JSC.Context context = frame.get_js_context();
- try {
- execute_script(
- context,
- "geary.remoteImageLoadBlocked();",
- GLib.Log.FILE,
- GLib.Log.METHOD,
- GLib.Log.LINE
- );
- } catch (Error err) {
- debug(
- "Error calling PageState::remoteImageLoadBlocked: %s",
- err.message
- );
- }
- }
-
- private void selection_changed(WebKit.WebPage page) {
- WebKit.Frame frame = page.get_main_frame();
- JSC.Context context = frame.get_js_context();
- try {
- execute_script(
- context,
- "geary.selectionChanged();",
- GLib.Log.FILE,
- GLib.Log.METHOD,
- GLib.Log.LINE
- );
- } catch (Error err) {
- debug("Error calling PageStates::selectionChanged: %s", err.message);
- }
- }
-
- private JSC.Value execute_script(JSC.Context context,
- string script,
- string file_name,
- string method_name,
- int line_number)
- throws Util.JS.Error {
- JSC.Value ret = context.evaluate_with_source_uri(
- script, -1, "geary:%s/%s".printf(file_name, method_name), line_number
- );
- Util.JS.check_exception(context);
- return ret;
- }
-
private WebKit.UserMessage to_exception_message(string? name,
string? message,
string? backtrace = null,
@@ -208,13 +163,6 @@ public class GearyWebExtension : Object {
page.console_message_sent.connect(on_console_message);
page.send_request.connect(on_send_request);
- // XXX investigate whether the earliest supported
- // version of WK supports the DOM "selectionchanged"
- // event, and if so use that rather that doing it in
- // here in the extension
- page.get_editor().selection_changed.connect(() => {
- selection_changed(page);
- });
page.user_message_received.connect(on_page_message_received);
}
diff --git a/ui/components-web-view.js b/ui/components-web-view.js
index 29b6acd5..d0998a67 100644
--- a/ui/components-web-view.js
+++ b/ui/components-web-view.js
@@ -22,7 +22,6 @@ PageState.prototype = {
this._selectionChanged = MessageSender("selection_changed");
this._contentLoaded = MessageSender("content_loaded");
- this._remoteImageLoadBlocked = MessageSender("remote_image_load_blocked");
this._preferredHeightChanged = MessageSender("preferred_height_changed");
this._commandStackChanged = MessageSender("command_stack_changed");
this._documentModified = MessageSender("document_modified");
@@ -46,6 +45,10 @@ PageState.prototype = {
state.loaded();
});
+ document.addEventListener("selectionchange", function(e) {
+ state.selectionChanged();
+ });
+
// Coalesce multiple calls to updatePreferredHeight using a
// timeout to avoid the overhead of multiple JS messages sent
// to the app and hence view multiple resizes being queued.
@@ -148,9 +151,6 @@ PageState.prototype = {
stopBodyObserver: function() {
this.bodyObserver.disconnect();
},
- remoteImageLoadBlocked: function() {
- this._remoteImageLoadBlocked();
- },
/**
* Sends "preferredHeightChanged" message if it has changed.
*/
--
2.29.2