From: Lars Ingebrigtsen <larsi@gnus.org>
Date: Fri, 25 Dec 2015 17:18:42 +0000 (+0100)
Subject: Follow meta refresh tags in eww
X-Git-Tag: emacs-26.0.90~2869
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bdaff9c813973c31dfe1cd357b0f5099ccd0b883;p=emacs.git

Follow meta refresh tags in eww

* eww.el (eww-tag-meta): Follow meta refresh tags (bug#22234).
---

diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 593ed22dd38..742e1e4d1c0 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -415,6 +415,7 @@ Currently this means either text/html or application/xhtml+xml."
                 (textarea . eww-tag-textarea)
                 (select . eww-tag-select)
                 (link . eww-tag-link)
+                (meta . eww-tag-meta)
                 (a . eww-tag-a)))))
 	(erase-buffer)
 	(shr-insert-document document)
@@ -460,6 +461,27 @@ Currently this means either text/html or application/xhtml+xml."
 	 where
 	 (plist-put eww-data (cdr where) href))))
 
+(defvar eww-redirect-level 1)
+
+(defun eww-tag-meta (dom)
+  (when (and (cl-equalp (dom-attr dom 'http-equiv) "refresh")
+             (< eww-redirect-level 5))
+    (when-let (refresh (dom-attr dom 'content))
+      (when (or (string-match "^\\([0-9]+\\) *;.*url=\"\\([^\"]+\\)\"" refresh)
+                (string-match "^\\([0-9]+\\) *;.*url=\\([^ ]+\\)" refresh))
+        (let ((timeout (match-string 1 refresh))
+              (url (match-string 2 refresh))
+              (eww-redirect-level (1+ eww-redirect-level)))
+          (if (equal timeout "0")
+              (eww (shr-expand-url url))
+            (eww-tag-a
+             (dom-node 'a `((href . ,(shr-expand-url url)))
+                       (format "Auto refresh in %s second%s disabled"
+                               timeout
+                               (if (equal timeout "1")
+                                   ""
+                                 "s"))))))))))
+
 (defun eww-tag-link (dom)
   (eww-handle-link dom)
   (shr-generic dom))