Chromium Code Reviews| 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..82a0bc21451e7fb0c53fe93746c8d86817e6ef29 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,14 +123,23 @@ class WebServer(object): |
| self._thread.daemon = True |
| self._thread.start() |
| self._path_data_map = {} |
| + self._path_callback_map = {} |
| self._path_data_lock = threading.Lock() |
| def _OnRequest(self, request, responder): |
| path = request.GetPath().split('?')[0] |
| - # Serve from path -> data map. |
| + # Serve from path -> callback and data maps. |
| self._path_data_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 |
| @@ -152,6 +164,14 @@ class WebServer(object): |
| finally: |
| self._path_data_lock.release() |
| + def SetCallbackForPath(self, path, func): |
| + self._path_data_lock.acquire() |
|
samuong
2014/05/07 23:39:36
Rename this lock?
sam.rawlins
2014/05/09 05:35:17
Done.
|
| + try: |
| + self._path_callback_map[path] = func |
| + finally: |
| + self._path_data_lock.release() |
| + |
| + |
| def GetUrl(self): |
| """Returns the base URL of the server.""" |
| return self._server.GetUrl() |