Chromium Code Reviews| Index: net/tools/testserver/testserver.py |
| =================================================================== |
| --- net/tools/testserver/testserver.py (revision 107962) |
| +++ net/tools/testserver/testserver.py (working copy) |
| @@ -266,9 +266,11 @@ |
| class BasePageHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
| def __init__(self, request, client_address, socket_server, |
| - connect_handlers, get_handlers, post_handlers, put_handlers): |
| + connect_handlers, get_handlers, head_handlers, post_handlers, |
| + put_handlers): |
| self._connect_handlers = connect_handlers |
| self._get_handlers = get_handlers |
| + self._head_handlers = head_handlers |
| self._post_handlers = post_handlers |
| self._put_handlers = put_handlers |
| BaseHTTPServer.BaseHTTPRequestHandler.__init__( |
| @@ -298,6 +300,11 @@ |
| if handler(): |
| return |
| + def do_HEAD(self): |
| + for handler in self._head_handlers: |
| + if handler(): |
| + return |
| + |
| def do_POST(self): |
| for handler in self._post_handlers: |
| if handler(): |
| @@ -351,13 +358,14 @@ |
| self.DefaultResponseHandler] |
| post_handlers = [ |
| self.EchoTitleHandler, |
| - self.EchoAllHandler, |
| self.EchoHandler, |
| self.DeviceManagementHandler] + get_handlers |
| put_handlers = [ |
| self.EchoTitleHandler, |
| - self.EchoAllHandler, |
| self.EchoHandler] + get_handlers |
| + head_handlers = [ |
| + self.FileHandler, |
| + self.DefaultHeadResponseHandler] |
| self._mime_types = { |
| 'crx' : 'application/x-chrome-extension', |
| @@ -371,8 +379,8 @@ |
| self._default_mime_type = 'text/html' |
| BasePageHandler.__init__(self, request, client_address, socket_server, |
| - connect_handlers, get_handlers, post_handlers, |
| - put_handlers) |
| + connect_handlers, get_handlers, head_handlers, |
| + post_handlers, put_handlers) |
| def GetMIMETypeFromName(self, file_name): |
| """Returns the mime type for the specified file_name. So far it only looks |
| @@ -944,7 +952,8 @@ |
| self.send_header('ETag', '\'' + file_path + '\'') |
| self.end_headers() |
| - self.wfile.write(data) |
| + if (self.command != 'HEAD'): |
| + self.wfile.write(data) |
| return True |
| @@ -1357,6 +1366,16 @@ |
| self.wfile.write(contents) |
| return True |
| + def DefaultHeadResponseHandler(self): |
| + """This is the catch-all response handler for HEAD requests that aren't |
| + handled by one of the special handlers above.""" |
| + |
| + self.send_response(200) |
| + self.send_header('Content-Type', 'text/html') |
| + self.send_header('Content-Length', '0') |
|
wtc
2011/10/31 23:02:51
An alternative to sending a Content-Length of 0 is
mmenke
2011/10/31 23:29:12
The last suggestion sounds like a good idea to me.
|
| + self.end_headers() |
| + return True |
| + |
| def RedirectConnectHandler(self): |
| """Sends a redirect to the CONNECT request for www.redirect.com. This |
| response is not specified by the RFC, so the browser should not follow |
| @@ -1463,7 +1482,7 @@ |
| post_handlers = [self.ChromiumSyncCommandHandler, |
| self.ChromiumSyncTimeHandler] |
| BasePageHandler.__init__(self, request, client_address, |
| - sync_http_server, [], get_handlers, |
| + sync_http_server, [], get_handlers, [], |
| post_handlers, []) |