Fix about:protocols in EWW
* lisp/net/eww.el (eww--dwim-expand-url): Handle `about: ' URLs. (bug#56885) * lisp/url/url-about.el (url-about): Return correct content type for HTML data. * lisp/url/url-http.el (url-http--get-referer): Refrain from looking for a referrer if the lastloc had no host.
This commit is contained in:
parent
78129dcf53
commit
b49c174010
3 changed files with 30 additions and 23 deletions
|
@ -450,6 +450,9 @@ For more information, see Info node `(eww) Top'."
|
|||
;; Don't mangle file: URLs at all.
|
||||
((string-match-p "\\`ftp://" url)
|
||||
(user-error "FTP is not supported"))
|
||||
((string-match-p "\\`about:" url)
|
||||
;; Treat this as an about: url. (bug#56885)
|
||||
url)
|
||||
(t
|
||||
;; Anything that starts with something that vaguely looks
|
||||
;; like a protocol designator is interpreted as a full URL.
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
(if (fboundp func)
|
||||
(progn
|
||||
(set-buffer (generate-new-buffer " *about-data*"))
|
||||
(insert "Content-type: text/plain\n\n")
|
||||
(insert "Content-type: text/html\n\n")
|
||||
(funcall func url)
|
||||
(current-buffer))
|
||||
(error "URL does not know about `%s'" item))))
|
||||
|
|
|
@ -237,28 +237,32 @@ request.")
|
|||
(if (not (url-p url-current-lastloc))
|
||||
(setq url-current-lastloc (url-generic-parse-url url-current-lastloc)))
|
||||
(let ((referer (copy-sequence url-current-lastloc)))
|
||||
(setf (url-host referer) (puny-encode-domain (url-host referer)))
|
||||
(let ((referer-string (url-recreate-url referer)))
|
||||
(when (and (not (memq url-privacy-level '(low high paranoid)))
|
||||
(not (and (listp url-privacy-level)
|
||||
(memq 'lastloc url-privacy-level))))
|
||||
;; url-privacy-level allows referer. But url-lastloc-privacy-level
|
||||
;; may restrict who we send it to.
|
||||
(cl-case url-lastloc-privacy-level
|
||||
(host-match
|
||||
(let ((referer-host (url-host referer))
|
||||
(url-host (url-host url)))
|
||||
(when (string= referer-host url-host)
|
||||
referer-string)))
|
||||
(domain-match
|
||||
(let ((referer-domain (url-domain referer))
|
||||
(url-domain (url-domain url)))
|
||||
(when (and referer-domain
|
||||
url-domain
|
||||
(string= referer-domain url-domain))
|
||||
referer-string)))
|
||||
(otherwise
|
||||
referer-string)))))))
|
||||
;; In the case of `url-about', there is actually no host.
|
||||
(if (url-host referer)
|
||||
(progn
|
||||
(setf (url-host referer) (puny-encode-domain (url-host referer)))
|
||||
(let ((referer-string (url-recreate-url referer)))
|
||||
(when (and (not (memq url-privacy-level '(low high paranoid)))
|
||||
(not (and (listp url-privacy-level)
|
||||
(memq 'lastloc url-privacy-level))))
|
||||
;; url-privacy-level allows referer. But url-lastloc-privacy-level
|
||||
;; may restrict who we send it to.
|
||||
(cl-case url-lastloc-privacy-level
|
||||
(host-match
|
||||
(let ((referer-host (url-host referer))
|
||||
(url-host (url-host url)))
|
||||
(when (string= referer-host url-host)
|
||||
referer-string)))
|
||||
(domain-match
|
||||
(let ((referer-domain (url-domain referer))
|
||||
(url-domain (url-domain url)))
|
||||
(when (and referer-domain
|
||||
url-domain
|
||||
(string= referer-domain url-domain))
|
||||
referer-string)))
|
||||
(otherwise
|
||||
referer-string)))))
|
||||
nil))))
|
||||
|
||||
;; Building an HTTP request
|
||||
(defun url-http-user-agent-string ()
|
||||
|
|
Loading…
Add table
Reference in a new issue