| Index: chrome/test/chromedriver/test/webserver.py
|
| diff --git a/chrome/test/chromedriver/test/webserver.py b/chrome/test/chromedriver/test/webserver.py
|
| index 716e0f4a9b47d96cf4775667e6e9ff4df580952f..9de03395b9f744cee3fbaf7f4f743f00fb1735fc 100644
|
| --- a/chrome/test/chromedriver/test/webserver.py
|
| +++ b/chrome/test/chromedriver/test/webserver.py
|
| @@ -48,6 +48,9 @@ class Request(object):
|
| def GetPath(self):
|
| return self._handler.path
|
|
|
| + def GetHeader(self, name):
|
| + return self._handler.headers.getheader(name)
|
| +
|
|
|
| class _BaseServer(BaseHTTPServer.HTTPServer):
|
| """Internal server that throws if timed out waiting for a request."""
|
| @@ -120,19 +123,28 @@ class WebServer(object):
|
| self._thread.daemon = True
|
| self._thread.start()
|
| self._path_data_map = {}
|
| - self._path_data_lock = threading.Lock()
|
| + self._path_callback_map = {}
|
| + self._path_maps_lock = threading.Lock()
|
|
|
| def _OnRequest(self, request, responder):
|
| path = request.GetPath().split('?')[0]
|
|
|
| - # Serve from path -> data map.
|
| - self._path_data_lock.acquire()
|
| + # Serve from path -> callback and data maps.
|
| + self._path_maps_lock.acquire()
|
| try:
|
| + if path in self._path_callback_map:
|
| + body = self._path_callback_map[path](request)
|
| + if body:
|
| + responder.SendResponse(body)
|
| + else:
|
| + responder.SendError(503)
|
| + return
|
| +
|
| if path in self._path_data_map:
|
| responder.SendResponse(self._path_data_map[path])
|
| return
|
| finally:
|
| - self._path_data_lock.release()
|
| + self._path_maps_lock.release()
|
|
|
| # Serve from file.
|
| path = os.path.normpath(
|
| @@ -146,11 +158,19 @@ class WebServer(object):
|
| responder.SendResponseFromFile(path)
|
|
|
| def SetDataForPath(self, path, data):
|
| - self._path_data_lock.acquire()
|
| + self._path_maps_lock.acquire()
|
| try:
|
| self._path_data_map[path] = data
|
| finally:
|
| - self._path_data_lock.release()
|
| + self._path_maps_lock.release()
|
| +
|
| + def SetCallbackForPath(self, path, func):
|
| + self._path_maps_lock.acquire()
|
| + try:
|
| + self._path_callback_map[path] = func
|
| + finally:
|
| + self._path_maps_lock.release()
|
| +
|
|
|
| def GetUrl(self):
|
| """Returns the base URL of the server."""
|
|
|