Make Sauce download the prerun script and Ahem over the tunnel
diff --git a/tools/serve/serve.py b/tools/serve/serve.py
index fb6675d..b2093d9 100644
--- a/tools/serve/serve.py
+++ b/tools/serve/serve.py
@@ -203,7 +203,8 @@
     def __init__(self):
         self.forbidden_override = [("GET", "/tools/runner/*", handlers.file_handler),
                                    ("POST", "/tools/runner/update_manifest.py",
-                                    handlers.python_script_handler)]
+                                    handlers.python_script_handler),
+                                   ("GET", "/tools/wptrunner/wptrunner/browsers/sauce_setup/*", handlers.file_handler)]
 
         self.forbidden = [("*", "/_certs/*", handlers.ErrorHandler(404)),
                           ("*", "/tools/*", handlers.ErrorHandler(404)),
diff --git a/tools/wptrunner/wptrunner/browsers/sauce.py b/tools/wptrunner/wptrunner/browsers/sauce.py
index 9ae2f7e..0f91b57 100644
--- a/tools/wptrunner/wptrunner/browsers/sauce.py
+++ b/tools/wptrunner/wptrunner/browsers/sauce.py
@@ -39,13 +39,15 @@
     build = kwargs["sauce_build"]
     tags = kwargs["sauce_tags"]
     tunnel_id = kwargs["sauce_tunnel_id"]
+    base_url = "http://%s:%d/tools/wptrunner/wptrunner/browsers/sauce_setup/" % \
+               (kwargs.config.domains[""], kwargs.config.ports["http"][0])
     prerun_script = {
         "MicrosoftEdge": {
-            "executable": "sauce-storage:edge-prerun.bat",
+            "executable": base_url + "edge-prerun.sub.bat",
             "background": False,
         },
         "safari": {
-            "executable": "sauce-storage:safari-prerun.sh",
+            "executable": base_url + "safari-prerun.sub.sh",
             "background": False,
         }
     }
@@ -103,7 +105,7 @@
     executor_kwargs = base_executor_kwargs(test_type, server_config,
                                            cache_manager, **kwargs)
 
-    executor_kwargs["capabilities"] = get_capabilities(**kwargs)
+    executor_kwargs["capabilities"] = get_capabilities(config=server_config, **kwargs)
 
     return executor_kwargs
 
@@ -154,9 +156,6 @@
             get_tar("https://saucelabs.com/downloads/sc-4.4.9-linux.tar.gz", self.temp_dir)
             self.sauce_connect_binary = glob.glob(os.path.join(self.temp_dir, "sc-*-linux/bin/sc"))[0]
 
-        self.upload_prerun_exec('edge-prerun.bat')
-        self.upload_prerun_exec('safari-prerun.sh')
-
         self.sc_process = subprocess.Popen([
             self.sauce_connect_binary,
             "--user=%s" % self.sauce_user,
@@ -201,13 +200,6 @@
             except OSError:
                 pass
 
-    def upload_prerun_exec(self, file_name):
-        auth = (self.sauce_user, self.sauce_key)
-        url = "https://saucelabs.com/rest/v1/storage/%s/%s?overwrite=true" % (self.sauce_user, file_name)
-
-        with open(os.path.join(here, 'sauce_setup', file_name), 'rb') as f:
-            requests.post(url, data=f, auth=auth)
-
 
 class SauceException(Exception):
     pass
diff --git a/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat b/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.sub.bat
similarity index 81%
rename from tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat
rename to tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.sub.bat
index 9d0878e..ab6e973 100644
--- a/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat
+++ b/tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.sub.bat
@@ -5,5 +5,5 @@
 REM Download and install the Ahem font
 REM - https://wiki.saucelabs.com/display/DOCS/Downloading+Files+to+a+Sauce+Labs+Virtual+Machine+Prior+to+Testing
 REM - https://superuser.com/questions/201896/how-do-i-install-a-font-from-the-windows-command-prompt
-bitsadmin.exe /transfer "JobName" https://github.com/w3c/web-platform-tests/raw/master/fonts/Ahem.ttf "%WINDIR%\Fonts\Ahem.ttf"
+bitsadmin.exe /transfer "JobName" http://{{domains[]}}:{{ports[http][0]}}/fonts/Ahem.ttf "%WINDIR%\Fonts\Ahem.ttf"
 reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "Ahem (TrueType)" /t REG_SZ /d Ahem.ttf /f
diff --git a/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh b/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh
deleted file mode 100644
index 06c48bd..0000000
--- a/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-curl https://raw.githubusercontent.com/w3c/web-platform-tests/master/fonts/Ahem.ttf > ~/Library/Fonts/Ahem.ttf
-defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically -bool true
diff --git a/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sub.sh b/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sub.sh
new file mode 100644
index 0000000..728f4c7
--- /dev/null
+++ b/tools/wptrunner/wptrunner/browsers/sauce_setup/safari-prerun.sub.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+curl http://{{domains[]}}:{{ports[http][0]}}/fonts/Ahem.ttf > ~/Library/Fonts/Ahem.ttf
+defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2JavaScriptCanOpenWindowsAutomatically -bool true
diff --git a/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py b/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py
index aa1bc01..0030a6d 100644
--- a/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py
+++ b/tools/wptrunner/wptrunner/tests/browsers/test_sauce.py
@@ -12,8 +12,7 @@
 
 
 def test_sauceconnect_success():
-    with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\
-            mock.patch.object(sauce.subprocess, "Popen") as Popen,\
+    with mock.patch.object(sauce.subprocess, "Popen") as Popen,\
             mock.patch.object(sauce.os.path, "exists") as exists:
         # Act as if it's still running
         Popen.return_value.poll.return_value = None
@@ -42,8 +41,7 @@
     (False, 2),
 ])
 def test_sauceconnect_failure_exit(readyfile, returncode):
-    with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\
-            mock.patch.object(sauce.subprocess, "Popen") as Popen,\
+    with mock.patch.object(sauce.subprocess, "Popen") as Popen,\
             mock.patch.object(sauce.os.path, "exists") as exists,\
             mock.patch.object(sauce.time, "sleep") as sleep:
         Popen.return_value.poll.return_value = returncode
@@ -67,8 +65,7 @@
 
 
 def test_sauceconnect_failure_never_ready():
-    with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\
-            mock.patch.object(sauce.subprocess, "Popen") as Popen,\
+    with mock.patch.object(sauce.subprocess, "Popen") as Popen,\
             mock.patch.object(sauce.os.path, "exists") as exists,\
             mock.patch.object(sauce.time, "sleep") as sleep:
         Popen.return_value.poll.return_value = None
@@ -96,8 +93,7 @@
 
 
 def test_sauceconnect_tunnel_domains():
-    with mock.patch.object(sauce.SauceConnect, "upload_prerun_exec"),\
-            mock.patch.object(sauce.subprocess, "Popen") as Popen,\
+    with mock.patch.object(sauce.subprocess, "Popen") as Popen,\
             mock.patch.object(sauce.os.path, "exists") as exists:
         Popen.return_value.poll.return_value = None
         Popen.return_value.returncode = None