+(defvar oauth--url-advice nil)
+(defvar oauth--token-data)
+
+;; FIXME: We should change URL so that this can be done without an advice.
+(defadvice url-http-handle-authentication (around oauth-hack activate)
+ (if (not oauth--url-advice)
+ ad-do-it
+ (let ((url-request-method url-http-method)
+ (url-request-data url-http-data)
+ (url-request-extra-headers url-http-extra-headers)))
+ (url-retrieve-internal (oauth2-url-append-access-token
+ (oauth2-refresh-access (car oauth--token-data))
+ (cdr oauth--token-data))
+ url-callback-function
+ url-callback-arguments)
+ ;; This is to make `url' think it's done.
+ (when (boundp 'success) (setq success t)) ;For URL library in Emacs<24.4.
+ (setq ad-return-value t))) ;For URL library in Emacsā„24.4.
+
+;;;###autoload
+(defun oauth2-url-retrieve-synchronously (token url &optional request-method request-data request-extra-headers)
+ "Retrieve an URL synchronously using TOKEN to access it.
+TOKEN can be obtained with `oauth2-auth'."
+ (let* ((oauth--token-data (cons token url)))
+ (let ((oauth--url-advice t) ;Activate our advice.
+ (url-request-method request-method)
+ (url-request-data request-data)
+ (url-request-extra-headers request-extra-headers))
+ (url-retrieve-synchronously
+ (oauth2-url-append-access-token token url)))))
+