[geary/mjog/1170-webview-remote-resource-loading: 4/4] client: Ensure non-image remote resources are also loaded when permitted




commit 1fe1a7fc2d8e2e9185fe2a85cf5e2afcd36cde00
Author: Michael Gratton <mike vee net>
Date:   Sun Apr 4 21:34:33 2021 +1000

    client: Ensure non-image remote resources are also loaded when permitted
    
    Update `PageState.loadRemoteResources` to process any child of the BODY
    element that has a `src` or `srcset` element.

 ui/components-web-view.js | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/ui/components-web-view.js b/ui/components-web-view.js
index 97fb2d497..6fa5e0b1b 100644
--- a/ui/components-web-view.js
+++ b/ui/components-web-view.js
@@ -73,13 +73,32 @@ PageState.prototype = {
         this._contentLoaded();
     },
     loadRemoteResources: function() {
-        window._gearyAllowRemoteResourceLoads = true;
-        let images = document.getElementsByTagName("IMG");
-        for (let i = 0; i < images.length; i++) {
-            let img = images.item(i);
-            let src = img.src;
-            img.src = "";
-            img.src = src;
+        if (window._gearyAllowRemoteResourceLoads == false) {
+            window._gearyAllowRemoteResourceLoads = true;
+            const TYPES = "*[src], *[srcset]";
+            for (const element of document.body.querySelectorAll(TYPES)) {
+                let src = "";
+                try {
+                    src = element.src;
+                } catch (e) {
+                    // fine
+                }
+                if (src != "") {
+                    element.src = "";
+                    element.src = src;
+                }
+
+                let srcset = "";
+                try {
+                    srcset = element.srcset;
+                } catch (e) {
+                    // fine
+                }
+                if (srcset != "") {
+                    element.srcset = "";
+                    element.srcset = srcset;
+                }
+            }
         }
     },
     setEditable: function(enabled) {


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