Source code

Revision control

Copy as Markdown

Other Tools

from urllib.parse import unquote
from wptserve.utils import isomorphic_decode, isomorphic_encode
def redirect_response(request, response, visited_count):
# |visited_count| is used as a unique id to differentiate responses
# every time.
location = b'empty.js'
if b'Redirect' in request.GET:
location = isomorphic_encode(unquote(isomorphic_decode(request.GET[b'Redirect'])))
return (301,
[
(b'Cache-Control', b'no-cache, must-revalidate'),
(b'Pragma', b'no-cache'),
(b'Content-Type', b'application/javascript'),
(b'Location', location),
],
u'/* %s */' % str(visited_count))
def not_found_response():
return 404, [(b'Content-Type', b'text/plain')], u"Page not found"
def ok_response(request, response, visited_count,
extra_body=u'', mime_type=b'application/javascript'):
# |visited_count| is used as a unique id to differentiate responses
# every time.
return (
[
(b'Cache-Control', b'no-cache, must-revalidate'),
(b'Pragma', b'no-cache'),
(b'Content-Type', mime_type)
],
u'/* %s */ %s' % (str(visited_count), extra_body))
def main(request, response):
key = request.GET[b"Key"]
mode = request.GET[b"Mode"]
visited_count = request.server.stash.take(key)
if visited_count is None:
visited_count = 0
# Keep how many times the test requested this resource.
visited_count += 1
request.server.stash.put(key, visited_count)
# Return a response based on |mode| only when it's the second time (== update).
if visited_count == 2:
if mode == b'normal':
return ok_response(request, response, visited_count)
if mode == b'bad_mime_type':
return ok_response(request, response, visited_count, mime_type=b'text/html')
if mode == b'not_found':
return not_found_response()
if mode == b'redirect':
return redirect_response(request, response, visited_count)
if mode == b'syntax_error':
return ok_response(request, response, visited_count, extra_body=u'badsyntax(isbad;')
if mode == b'throw_install':
return ok_response(request, response, visited_count, extra_body=u"addEventListener('install', function(e) { throw new Error('boom'); });")
return ok_response(request, response, visited_count)