Add scheme to url_build error handler parameters
diff --git a/CHANGES b/CHANGES
index 1f687409ae..d8f2577a77 100644
--- a/CHANGES
+++ b/CHANGES
@@ -19,7 +19,10 @@ Major release, unreleased
   time the constructor adds the static route, and enables the static route to
   be properly associated with the required host. (``#1559``)
 - ``send_file`` supports Unicode in ``attachment_filename``. (`#2223`_)
+- Pass ``_scheme`` argument from ``url_for`` to ``handle_build_error``.
+  (`#2017`_)
 
+.. _#2017: https://github.com/pallets/flask/pull/2017
 .. _#2223: https://github.com/pallets/flask/pull/2223
 
 Version 0.12.1
diff --git a/flask/helpers.py b/flask/helpers.py
index bfdcf22454..828f584022 100644
--- a/flask/helpers.py
+++ b/flask/helpers.py
@@ -331,6 +331,7 @@ def external_url_handler(error, endpoint, values):
         values['_external'] = external
         values['_anchor'] = anchor
         values['_method'] = method
+        values['_scheme'] = scheme
         return appctx.app.handle_url_build_error(error, endpoint, values)
 
     if anchor is not None:
diff --git a/tests/test_basic.py b/tests/test_basic.py
index 76efd6e2ce..abce3ad44a 100644
--- a/tests/test_basic.py
+++ b/tests/test_basic.py
@@ -1131,6 +1131,23 @@ def handler_raises_build_error(error, endpoint, values):
         pytest.raises(BuildError, flask.url_for, 'not.existing')
 
 
+def test_url_for_passes_special_values_to_build_error_handler():
+    app = flask.Flask(__name__)
+
+    @app.url_build_error_handlers.append
+    def handler(error, endpoint, values):
+        assert values == {
+            '_external': False,
+            '_anchor': None,
+            '_method': None,
+            '_scheme': None,
+        }
+        return 'handled'
+
+    with app.test_request_context():
+        flask.url_for('/')
+
+
 def test_custom_converters():
     from werkzeug.routing import BaseConverter
 

`_scheme` is passed to `url_for` but is not forwarded to error handlers if an exception is raised