echo-critical-hint.py (1869B)
1 import sys 2 3 def main(request, response): 4 """ 5 Simple handler that sets a response header based on which client hint 6 request headers were received. 7 """ 8 9 response.headers.append(b"Content-Type", b"text/html; charset=UTF-8") 10 response.headers.append(b"Access-Control-Allow-Origin", b"*") 11 response.headers.append(b"Access-Control-Allow-Headers", b"*") 12 response.headers.append(b"Access-Control-Expose-Headers", b"*") 13 14 accept = b"sec-ch-device-memory,device-memory" 15 if(request.GET.first(b"multiple", None) is not None): 16 for accept_part in accept.split(b","): 17 response.headers.append(b"Accept-CH", accept_part) 18 else: 19 response.headers.append(b"Accept-CH", accept) 20 21 critical = b"sec-ch-device-memory,device-memory" 22 if(request.GET.first(b"mismatch", None) is not None): 23 critical = b"sec-ch-viewport-width,viewport-width" 24 25 if(request.GET.first(b"multiple", None) is not None): 26 for critical_part in critical.split(b","): 27 response.headers.append(b"Critical-CH", critical_part) 28 else: 29 response.headers.append(b"Critical-CH", critical) 30 31 response.headers.append(b"Cache-Control", b"no-store") 32 33 result = "FAIL" 34 35 if b"sec-ch-device-memory" in request.headers and b"device-memory" in request.headers: 36 result = "PASS" 37 38 token = request.GET.first(b"token", None) 39 if(token is not None): 40 with request.server.stash.lock: 41 count = request.server.stash.take(token) 42 if(count == None): 43 count = 1 44 else: 45 count += 1 46 request.server.stash.put(token, count) 47 result = str(count) 48 49 if b"sec-ch-viewport-width" in request.headers and b"viewport-width" in request.headers: 50 result = "MISMATCH" 51 52 response.content = "<script>(window.opener || window.top).postMessage('{0}', '*')</script>".format(result)