Index: third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/resources/cache.py |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/resources/cache.py b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/resources/cache.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e0b058bddf6fb405047016e9fd3d66bbc92c3aea |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/fetch/api/request/resources/cache.py |
@@ -0,0 +1,65 @@ |
+def main(request, response): |
+ token = request.GET.first("token", None) |
+ if "querystate" in request.GET: |
+ from json import JSONEncoder |
+ response.headers.set("Content-Type", "text/plain") |
+ return JSONEncoder().encode(request.server.stash.take(token)) |
+ content = request.GET.first("content", None) |
+ tag = request.GET.first("tag", None) |
+ date = request.GET.first("date", None) |
+ expires = request.GET.first("expires", None) |
+ vary = request.GET.first("vary", None) |
+ cc = request.GET.first("cache_control", None) |
+ redirect = request.GET.first("redirect", None) |
+ inm = request.headers.get("If-None-Match", None) |
+ ims = request.headers.get("If-Modified-Since", None) |
+ pragma = request.headers.get("Pragma", None) |
+ cache_control = request.headers.get("Cache-Control", None) |
+ ignore = "ignore" in request.GET |
+ |
+ if tag: |
+ tag = '"%s"' % tag |
+ |
+ server_state = request.server.stash.take(token) |
+ if not server_state: |
+ server_state = [] |
+ state = dict() |
+ if not ignore: |
+ if inm: |
+ state["If-None-Match"] = inm |
+ if ims: |
+ state["If-Modified-Since"] = ims |
+ if pragma: |
+ state["Pragma"] = pragma |
+ if cache_control: |
+ state["Cache-Control"] = cache_control |
+ server_state.append(state) |
+ request.server.stash.put(token, server_state) |
+ |
+ if tag: |
+ response.headers.set("ETag", '%s' % tag) |
+ elif date: |
+ response.headers.set("Last-Modified", date) |
+ if expires: |
+ response.headers.set("Expires", expires) |
+ if vary: |
+ response.headers.set("Vary", vary) |
+ if cc: |
+ response.headers.set("Cache-Control", cc) |
+ |
+ # The only-if-cached redirect tests wants CORS to be okay, the other tests |
+ # are all same-origin anyways and don't care. |
+ response.headers.set("Access-Control-Allow-Origin", "*"); |
+ |
+ if redirect: |
+ response.headers.set("Location", redirect); |
+ response.status = (302, "Redirect") |
+ return "" |
+ elif ((inm is not None and inm == tag) or |
+ (ims is not None and ims == date)): |
+ response.status = (304, "Not Modified") |
+ return "" |
+ else: |
+ response.status = (200, "OK") |
+ response.headers.set("Content-Type", "text/plain") |
+ return content |