Skip to content

Commit

Permalink
Set net::LOAD_VALIDATE_CACHE flag instead when requesting service wor…
Browse files Browse the repository at this point in the history
…ker scripts with viaCache value

Bug: 925249
Change-Id: I45578d8c0f61676b0958cfab9a7057796c0d2d0d
Reviewed-on: https://chromium-review.googlesource.com/c/1474386
Commit-Queue: Ayu Ishii <[email protected]>
Reviewed-by: Matt Falkenhagen <[email protected]>
Cr-Commit-Position: refs/heads/master@{#636576}
  • Loading branch information
ayuishii authored and chromium-wpt-export-bot committed Feb 28, 2019
1 parent b7ddf2f commit d0d5bc3
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
48 changes: 48 additions & 0 deletions service-workers/service-worker/request-headers.https.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test that cache is being bypassed/validated in no-cache mode on update</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
// Tests a service worker script fetch during an update check which
// bypasses/validates the browser cache. The fetch should have the
// 'if-none-match' request header.
//
// This tests the Update step:
// "Set request’s cache mode to "no-cache" if any of the following are true..."
// https://w3c.github.io/ServiceWorker/#update-algorithm
//
// The test works by registering a service worker with |updateViaCache|
// set to "none". It then does an update. The test server responds with
// an updated worker script that remembers the http request headers.
// The updated worker reports back these headers to the test page.
promise_test(async (t) => {
const script = "resources/test-request-headers-worker.py";
const scope = "resources/";

// Register the service worker.
await service_worker_unregister(t, scope);
const registration = await navigator.serviceWorker.register(
script, {scope, updateViaCache: 'none'});
await wait_for_state(t, registration.installing, 'activated');

// Do an update.
await registration.update();

// Ask the new worker what the request headers were.
const newWorker = registration.installing;
const sawMessage = new Promise((resolve) => {
navigator.serviceWorker.onmessage = (event) => {
resolve(event.data);
};
});
newWorker.postMessage('getHeaders');
const result = await sawMessage;

// Test the result.
assert_equals(result['service-worker'], 'script');
assert_equals(result['if-none-match'], 'etag');
}, 'headers in no-cache mode');

</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// The server injects the request headers here as a JSON string.
const headersAsJson = `%HEADERS%`;
const headers = JSON.parse(headersAsJson);

self.addEventListener('message', async (e) => {
e.source.postMessage(headers);
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import json
import os

def main(request, response):
path = os.path.join(os.path.dirname(__file__),
"test-request-headers-worker.js")
body = open(path, "rb").read()

data = {key:request.headers[key] for key,value in request.headers.iteritems()}
body = body.replace("%HEADERS%", json.dumps(data))

headers = []
headers.append(("ETag", "etag"))
headers.append(("Content-Type", 'text/javascript'))

return headers, body

0 comments on commit d0d5bc3

Please sign in to comment.