From 7b0146274ccaad18115a66ded6753cb68bd22357 Mon Sep 17 00:00:00 2001 From: Michael Gratton Date: Fri, 28 Aug 2020 11:45:35 +1000 Subject: [PATCH 077/124] =?UTF-8?q?Conversation.WebView:=20Convert=20to=20?= =?UTF-8?q?using=20messages=20for=20JS=20=E2=86=92=20client=20comms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conversation-web-view.vala | 71 +++++++++---------- ui/conversation-web-view.js | 4 +- 2 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/client/conversation-viewer/conversation-web-view.vala b/src/client/conversation-viewer/conversation-web-view.vala index d77af642..a1ba21a6 100644 --- a/src/client/conversation-viewer/conversation-web-view.vala +++ b/src/client/conversation-viewer/conversation-web-view.vala @@ -1,6 +1,6 @@ /* - * Copyright 2016 Software Freedom Conservancy Inc. - * Copyright 2017 Michael Gratton + * Copyright © 2016 Software Freedom Conservancy Inc. + * Copyright © 2017-2020 Michael Gratton * * This software is licensed under the GNU Lesser General Public License * (version 2.1 or later). See the COPYING file in this distribution. @@ -9,7 +9,7 @@ public class ConversationWebView : Components.WebView { - private const string DECEPTIVE_LINK_CLICKED = "deceptiveLinkClicked"; + private const string DECEPTIVE_LINK_CLICKED = "deceptive_link_clicked"; // Key codes we don't forward on to the super class on key press // since we want to override them elsewhere, especially @@ -221,48 +221,47 @@ public class ConversationWebView : Components.WebView { } private void init() { - register_message_handler( + register_message_callback( DECEPTIVE_LINK_CLICKED, on_deceptive_link_clicked ); this.notify["preferred-height"].connect(() => queue_resize()); } - private void on_deceptive_link_clicked(WebKit.JavascriptResult result) { - try { - JSC.Value object = result.get_js_value(); - uint reason = (uint) Util.JS.to_int32( - Util.JS.get_property(object, "reason") - ); - - string href = Util.JS.to_string( - Util.JS.get_property(object, "href") - ); + private void on_deceptive_link_clicked(GLib.Variant? parameters) { + var dict = new GLib.VariantDict(parameters); + uint reason = (uint) dict.lookup_value( + "reason", GLib.VariantType.DOUBLE + ).get_double(); - string text = Util.JS.to_string( - Util.JS.get_property(object, "text") - ); - - JSC.Value js_location = Util.JS.get_property(object, "location"); + string href = dict.lookup_value( + "href", GLib.VariantType.STRING + ).get_string(); - Gdk.Rectangle location = Gdk.Rectangle(); - location.x = Util.JS.to_int32( - Util.JS.get_property(js_location, "x") - ); - location.y = Util.JS.to_int32( - Util.JS.get_property(js_location, "y") - ); - location.width = Util.JS.to_int32( - Util.JS.get_property(js_location, "width") - ); - location.height = Util.JS.to_int32( - Util.JS.get_property(js_location, "height") - ); + string text = dict.lookup_value( + "text", GLib.VariantType.STRING + ).get_string(); - deceptive_link_clicked((DeceptiveText) reason, text, href, location); - } catch (Util.JS.Error err) { - debug("Could not get deceptive link param: %s", err.message); - } + Gdk.Rectangle location = Gdk.Rectangle(); + var location_dict = new GLib.VariantDict( + dict.lookup_value("location", GLib.VariantType.VARDICT) + ); + location.x = (int) location_dict.lookup_value( + "x", GLib.VariantType.DOUBLE + ).get_double(); + location.y = (int) location_dict.lookup_value( + "y", GLib.VariantType.DOUBLE + ).get_double(); + location.width = (int) location_dict.lookup_value( + "width", GLib.VariantType.DOUBLE + ).get_double(); + location.height = (int) location_dict.lookup_value( + "height", GLib.VariantType.DOUBLE + ).get_double(); + + deceptive_link_clicked( + (DeceptiveText) reason, text, href, location + ); } } diff --git a/ui/conversation-web-view.js b/ui/conversation-web-view.js index 451db288..1d730d47 100644 --- a/ui/conversation-web-view.js +++ b/ui/conversation-web-view.js @@ -26,6 +26,8 @@ ConversationPageState.prototype = { init: function() { PageState.prototype.init.apply(this, []); + this._deceptiveLinkClicked = MessageSender("deceptive_link_clicked"); + let state = this; document.addEventListener("click", function(e) { if (e.target.tagName == "A" && @@ -267,7 +269,7 @@ ConversationPageState.prototype = { let reason = ConversationPageState.isDeceptiveText(text, href); if (reason != ConversationPageState.NOT_DECEPTIVE) { cancelClick = true; - window.webkit.messageHandlers.deceptiveLinkClicked.postMessage({ + this._deceptiveLinkClicked({ reason: reason, text: text, href: href, -- 2.29.2