From 44ebb170ffebe66cdb041c70fc7226df34892147 Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Mon, 4 Jan 2021 15:39:10 -0500
Subject: [PATCH] messagewebview: add support for pasting and drafting js
 special characters

Note: it will also prevent potential js template literal

Gitlab: #250
Gitlab: #246
Change-Id: Ic925a18ae768d168b8e340f9e05ef6ddd0260c84
---
 src/mainview/components/MessageWebView.qml | 10 ++++++++++
 src/messagesadapter.cpp                    |  8 ++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml
index c749eb522..f68392daf 100644
--- a/src/mainview/components/MessageWebView.qml
+++ b/src/mainview/components/MessageWebView.qml
@@ -43,6 +43,10 @@ Rectangle {
     signal messagesCleared
     signal messagesLoaded
 
+    function setSendMessageContent(content) {
+        jsBridgeObject.setSendMessageContentRequest(content)
+    }
+
     function focusMessageWebView() {
         messageWebView.forceActiveFocus()
     }
@@ -140,6 +144,10 @@ Rectangle {
         // ID, under which this object will be known at chatview.js side.
         WebChannel.id: "jsbridge"
 
+        // signals to trigger functions in chatview.js
+        // mainly used to avoid input arg string escape
+        signal setSendMessageContentRequest(string content)
+
         // Functions that are exposed, return code can be derived from js side
         // by setting callback function.
         function deleteInteraction(arg) {
@@ -240,6 +248,8 @@ Rectangle {
 
         settings.javascriptEnabled: true
         settings.javascriptCanOpenWindows: true
+        settings.javascriptCanAccessClipboard: true
+        settings.javascriptCanPaste: true
         settings.fullScreenSupportEnabled: true
         settings.allowRunningInsecureContent: true
         settings.localContentCanAccessRemoteUrls: true
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 819285bd3..d085f57b6 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -421,10 +421,11 @@ MessagesAdapter::pasteKeyDetected()
             }
         }
     } else {
+        // Treat as text content, make chatview.js handle in order to
+        // avoid string escape problems
         QMetaObject::invokeMethod(qmlObj_,
                                   "webViewRunJavaScript",
-                                  Q_ARG(QVariant,
-                                        QStringLiteral("replaceText(`%1`)").arg(mimeData->text())));
+                                  Q_ARG(QVariant, QStringLiteral("replaceText()")));
     }
 }
 
@@ -640,8 +641,7 @@ MessagesAdapter::removeInteraction(uint64_t interactionId)
 void
 MessagesAdapter::setSendMessageContent(const QString& content)
 {
-    QString s = QString::fromLatin1("setSendMessageContent(`%1`);").arg(content);
-    QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
+    QMetaObject::invokeMethod(qmlObj_, "setSendMessageContent", Q_ARG(QVariant, content));
 }
 
 void
-- 
GitLab