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, []) |