update-worker.py (2257B)
1 from urllib.parse import unquote 2 3 from wptserve.utils import isomorphic_decode, isomorphic_encode 4 5 def redirect_response(request, response, visited_count): 6 # |visited_count| is used as a unique id to differentiate responses 7 # every time. 8 location = b'empty.js' 9 if b'Redirect' in request.GET: 10 location = isomorphic_encode(unquote(isomorphic_decode(request.GET[b'Redirect']))) 11 return (301, 12 [ 13 (b'Cache-Control', b'no-cache, must-revalidate'), 14 (b'Pragma', b'no-cache'), 15 (b'Content-Type', b'application/javascript'), 16 (b'Location', location), 17 ], 18 u'/* %s */' % str(visited_count)) 19 20 def not_found_response(): 21 return 404, [(b'Content-Type', b'text/plain')], u"Page not found" 22 23 def ok_response(request, response, visited_count, 24 extra_body=u'', mime_type=b'application/javascript'): 25 # |visited_count| is used as a unique id to differentiate responses 26 # every time. 27 return ( 28 [ 29 (b'Cache-Control', b'no-cache, must-revalidate'), 30 (b'Pragma', b'no-cache'), 31 (b'Content-Type', mime_type) 32 ], 33 u'/* %s */ %s' % (str(visited_count), extra_body)) 34 35 def main(request, response): 36 key = request.GET[b"Key"] 37 mode = request.GET[b"Mode"] 38 39 visited_count = request.server.stash.take(key) 40 if visited_count is None: 41 visited_count = 0 42 43 # Keep how many times the test requested this resource. 44 visited_count += 1 45 request.server.stash.put(key, visited_count) 46 47 # Return a response based on |mode| only when it's the second time (== update). 48 if visited_count == 2: 49 if mode == b'normal': 50 return ok_response(request, response, visited_count) 51 if mode == b'bad_mime_type': 52 return ok_response(request, response, visited_count, mime_type=b'text/html') 53 if mode == b'not_found': 54 return not_found_response() 55 if mode == b'redirect': 56 return redirect_response(request, response, visited_count) 57 if mode == b'syntax_error': 58 return ok_response(request, response, visited_count, extra_body=u'badsyntax(isbad;') 59 if mode == b'throw_install': 60 return ok_response(request, response, visited_count, extra_body=u"addEventListener('install', function(e) { throw new Error('boom'); });") 61 62 return ok_response(request, response, visited_count)