| 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.DefaultResponseHandler]
|
|
|
| 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
|
| @@ -395,7 +403,7 @@
|
|
|
| self.send_response(200)
|
| self.send_header('Cache-Control', 'max-age=0')
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
|
|
| self.wfile.write('<html><head><title>%s</title></head></html>' %
|
| @@ -412,7 +420,7 @@
|
|
|
| self.send_response(200)
|
| self.send_header('Cache-Control', 'no-cache')
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
|
|
| self.wfile.write('<html><head><title>%s</title></head></html>' %
|
| @@ -429,7 +437,7 @@
|
|
|
| self.send_response(200)
|
| self.send_header('Cache-Control', 'max-age=60')
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
|
|
| self.wfile.write('<html><head><title>%s</title></head></html>' %
|
| @@ -446,7 +454,7 @@
|
|
|
| self.send_response(200)
|
| self.send_header('Expires', 'Thu, 1 Jan 2099 00:00:00 GMT')
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
|
|
| self.wfile.write('<html><head><title>%s</title></head></html>' %
|
| @@ -462,7 +470,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=60, proxy-revalidate')
|
| self.end_headers()
|
|
|
| @@ -479,7 +487,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=3, private')
|
| self.end_headers()
|
|
|
| @@ -496,7 +504,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=3, public')
|
| self.end_headers()
|
|
|
| @@ -513,7 +521,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'public, s-maxage = 60, max-age = 0')
|
| self.end_headers()
|
|
|
| @@ -530,7 +538,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'must-revalidate')
|
| self.end_headers()
|
|
|
| @@ -548,7 +556,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=60, must-revalidate')
|
| self.end_headers()
|
|
|
| @@ -565,7 +573,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'no-store')
|
| self.end_headers()
|
|
|
| @@ -583,7 +591,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=60, no-store')
|
| self.end_headers()
|
|
|
| @@ -602,7 +610,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'no-transform')
|
| self.end_headers()
|
|
|
| @@ -630,7 +638,7 @@
|
| header_name = self.path[query_char+1:]
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/plain')
|
| + self.send_header('Content-Type', 'text/plain')
|
| if echo_header == '/echoheadercache':
|
| self.send_header('Cache-control', 'max-age=60000')
|
| else:
|
| @@ -674,7 +682,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write(self.ReadRequestBody())
|
| return True
|
| @@ -686,7 +694,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| request = self.ReadRequestBody()
|
| self.wfile.write('<html><head><title>')
|
| @@ -702,7 +710,7 @@
|
| return False
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><head><style>'
|
| 'pre { border: 1px solid black; margin: 5px; padding: 5px }'
|
| @@ -748,7 +756,7 @@
|
| size_chunk2 = 10*1024
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'application/octet-stream')
|
| + self.send_header('Content-Type', 'application/octet-stream')
|
| self.send_header('Cache-Control', 'max-age=0')
|
| if send_length:
|
| self.send_header('Content-Length', size_chunk1 + size_chunk2)
|
| @@ -775,7 +783,7 @@
|
|
|
| self.server.waitForDownload = False
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-Control', 'max-age=0')
|
| self.end_headers()
|
| return True
|
| @@ -859,7 +867,7 @@
|
| content_length = compressed_len + uncompressed_len
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'application/msword')
|
| + self.send_header('Content-Type', 'application/msword')
|
| self.send_header('Content-encoding', 'deflate')
|
| self.send_header('Connection', 'close')
|
| self.send_header('Content-Length', content_length)
|
| @@ -938,13 +946,14 @@
|
| else:
|
| self.send_response(200)
|
|
|
| - self.send_header('Content-type', self.GetMIMETypeFromName(file_path))
|
| + self.send_header('Content-Type', self.GetMIMETypeFromName(file_path))
|
| self.send_header('Accept-Ranges', 'bytes')
|
| self.send_header('Content-Length', len(data))
|
| self.send_header('ETag', '\'' + file_path + '\'')
|
| self.end_headers()
|
|
|
| - self.wfile.write(data)
|
| + if (self.command != 'HEAD'):
|
| + self.wfile.write(data)
|
|
|
| return True
|
|
|
| @@ -960,7 +969,7 @@
|
| else:
|
| cookie_values = ("",)
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| for cookie_value in cookie_values:
|
| self.send_header('Set-Cookie', '%s' % cookie_value)
|
| self.end_headers()
|
| @@ -1002,7 +1011,7 @@
|
| # Authentication failed.
|
| self.send_response(401)
|
| self.send_header('WWW-Authenticate', 'Basic realm="%s"' % realm)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| if set_cookie_if_challenged:
|
| self.send_header('Set-Cookie', 'got_challenged=true')
|
| self.end_headers()
|
| @@ -1041,14 +1050,14 @@
|
| f.close()
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'image/gif')
|
| + self.send_header('Content-Type', 'image/gif')
|
| self.send_header('Cache-control', 'max-age=60000')
|
| self.send_header('Etag', 'abc')
|
| self.end_headers()
|
| self.wfile.write(data)
|
| else:
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.send_header('Cache-control', 'max-age=60000')
|
| self.send_header('Etag', 'abc')
|
| self.end_headers()
|
| @@ -1136,7 +1145,7 @@
|
| if stale:
|
| hdr += ', stale="TRUE"'
|
| self.send_header('WWW-Authenticate', hdr)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><head>')
|
| self.wfile.write('<title>Denied: %s</title>' % e)
|
| @@ -1150,7 +1159,7 @@
|
|
|
| # Authentication successful.
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><head>')
|
| self.wfile.write('<title>%s/%s</title>' % (pairs['username'], password))
|
| @@ -1175,7 +1184,7 @@
|
| pass
|
| time.sleep(wait_sec)
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/plain')
|
| + self.send_header('Content-Type', 'text/plain')
|
| self.end_headers()
|
| self.wfile.write("waited %d seconds" % wait_sec)
|
| return True
|
| @@ -1207,7 +1216,7 @@
|
| time.sleep(0.001 * chunkedSettings['waitBeforeHeaders']);
|
| self.protocol_version = 'HTTP/1.1' # Needed for chunked encoding
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/plain')
|
| + self.send_header('Content-Type', 'text/plain')
|
| self.send_header('Connection', 'close')
|
| self.send_header('Transfer-Encoding', 'chunked')
|
| self.end_headers()
|
| @@ -1262,7 +1271,7 @@
|
|
|
| self.send_response(301) # moved permanently
|
| self.send_header('Location', dest)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><head>')
|
| self.wfile.write('</head><body>Redirecting to %s</body></html>' % dest)
|
| @@ -1285,7 +1294,7 @@
|
| dest = self.path[query_char + 1:]
|
|
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><head>')
|
| self.wfile.write('<meta http-equiv="refresh" content="0;url=%s">' % dest)
|
| @@ -1302,13 +1311,13 @@
|
| num_frames = 10
|
| bound = '12345'
|
| self.send_response(200)
|
| - self.send_header('Content-type',
|
| + self.send_header('Content-Type',
|
| 'multipart/x-mixed-replace;boundary=' + bound)
|
| self.end_headers()
|
|
|
| for i in xrange(num_frames):
|
| self.wfile.write('--' + bound + '\r\n')
|
| - self.wfile.write('Content-type: text/html\r\n\r\n')
|
| + self.wfile.write('Content-Type: text/html\r\n\r\n')
|
| self.wfile.write('<title>page ' + str(i) + '</title>')
|
| self.wfile.write('page ' + str(i))
|
|
|
| @@ -1326,13 +1335,13 @@
|
| num_frames = 3
|
| bound = '12345'
|
| self.send_response(200)
|
| - self.send_header('Content-type',
|
| + self.send_header('Content-Type',
|
| 'multipart/x-mixed-replace;boundary=' + bound)
|
| self.end_headers()
|
|
|
| for i in xrange(num_frames):
|
| self.wfile.write('--' + bound + '\r\n')
|
| - self.wfile.write('Content-type: text/html\r\n\r\n')
|
| + self.wfile.write('Content-Type: text/html\r\n\r\n')
|
| time.sleep(0.25)
|
| if i == 2:
|
| self.wfile.write('<title>PASS</title>')
|
| @@ -1351,10 +1360,11 @@
|
|
|
| contents = "Default response given for path: " + self.path
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| - self.send_header("Content-Length", len(contents))
|
| + self.send_header('Content-Type', 'text/html')
|
| + self.send_header('Content-Length', len(contents))
|
| self.end_headers()
|
| - self.wfile.write(contents)
|
| + if (self.command != 'HEAD'):
|
| + self.wfile.write(contents)
|
| return True
|
|
|
| def RedirectConnectHandler(self):
|
| @@ -1396,8 +1406,8 @@
|
|
|
| contents = "Your client has issued a malformed or illegal request."
|
| self.send_response(400) # bad request
|
| - self.send_header('Content-type', 'text/html')
|
| - self.send_header("Content-Length", len(contents))
|
| + self.send_header('Content-Type', 'text/html')
|
| + self.send_header('Content-Length', len(contents))
|
| self.end_headers()
|
| self.wfile.write(contents)
|
| return True
|
| @@ -1423,7 +1433,7 @@
|
| raw_request))
|
| self.send_response(http_response)
|
| if (http_response == 200):
|
| - self.send_header('Content-type', 'application/x-protobuffer')
|
| + self.send_header('Content-Type', 'application/x-protobuffer')
|
| self.end_headers()
|
| self.wfile.write(raw_reply)
|
| return True
|
| @@ -1431,7 +1441,7 @@
|
| # called by the redirect handling function when there is no parameter
|
| def sendRedirectHelp(self, redirect_name):
|
| self.send_response(200)
|
| - self.send_header('Content-type', 'text/html')
|
| + self.send_header('Content-Type', 'text/html')
|
| self.end_headers()
|
| self.wfile.write('<html><body><h1>Error: no redirect destination</h1>')
|
| self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name)
|
| @@ -1463,7 +1473,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, [])
|
|
|
|
|
|
|