| Index: third_party/WebKit/LayoutTests/external/wpt/fetch/http-cache/resources/http-cache.py
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/http-cache/resources/http-cache.py b/third_party/WebKit/LayoutTests/external/wpt/fetch/http-cache/resources/http-cache.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aedd52e51aef880e409348e2a433082ab0f33d7c
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/http-cache/resources/http-cache.py
|
| @@ -0,0 +1,51 @@
|
| +from json import JSONEncoder, JSONDecoder
|
| +from base64 import b64decode
|
| +
|
| +def main(request, response):
|
| + uuid = request.GET.first("token", None)
|
| + if "querystate" in request.GET:
|
| + response.headers.set("Content-Type", "text/plain")
|
| + return JSONEncoder().encode(request.server.stash.take(uuid))
|
| +
|
| + server_state = request.server.stash.take(uuid)
|
| + if not server_state:
|
| + server_state = []
|
| +
|
| + requests = JSONDecoder().decode(b64decode(request.GET.first("info", "")))
|
| + config = requests[len(server_state)]
|
| +
|
| + state = dict()
|
| + state["request_method"] = request.method
|
| + state["request_headers"] = dict([[h.lower(), request.headers[h]] for h in request.headers])
|
| + server_state.append(state)
|
| + request.server.stash.put(uuid, server_state)
|
| +
|
| + note_headers = ['content-type', 'access-control-allow-origin', 'last-modified', 'etag']
|
| + noted_headers = {}
|
| + for header in config.get('response_headers', []):
|
| + if header[0].lower() in ["location", "content-location"]: # magic!
|
| + header[1] = "%s&target=%s" % (request.url, header[1])
|
| + response.headers.set(header[0], header[1])
|
| + if header[0].lower() in note_headers:
|
| + noted_headers[header[0].lower()] = header[1]
|
| +
|
| + if "access-control-allow-origin" not in noted_headers:
|
| + response.headers.set("Access-Control-Allow-Origin", "*");
|
| + if "content-type" not in noted_headers:
|
| + response.headers.set("Content-Type", "text/plain")
|
| + response.headers.set("Server-Request-Count", len(server_state))
|
| +
|
| + code, phrase = config.get("response_status", [200, "OK"])
|
| +
|
| + if request.headers.get("If-Modified-Since", False) == noted_headers.get('last-modified', True):
|
| + code, phrase = [304, "Not Modified"]
|
| + if request.headers.get("If-None-Match", False) == noted_headers.get('etag', True):
|
| + code, phrase = [304, "Not Modified"]
|
| +
|
| + response.status = (code, phrase)
|
| +
|
| + content = config.get("response_body", uuid)
|
| + if code in [204, 304]:
|
| + return ""
|
| + else:
|
| + return content
|
|
|