| Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/update-recovery-worker.py
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/update-recovery-worker.py b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/update-recovery-worker.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8aaa5ca934457714ee0e529ad4b2b1740d9758dd
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/update-recovery-worker.py
|
| @@ -0,0 +1,25 @@
|
| +def main(request, response):
|
| + # Set mode to 'init' for initial fetch.
|
| + mode = 'init'
|
| + if 'update-recovery-mode' in request.cookies:
|
| + mode = request.cookies['update-recovery-mode'].value
|
| +
|
| + # no-cache itself to ensure the user agent finds a new version for each update.
|
| + headers = [('Cache-Control', 'no-cache, must-revalidate'),
|
| + ('Pragma', 'no-cache')]
|
| +
|
| + extra_body = ''
|
| +
|
| + if mode == 'init':
|
| + # Install a bad service worker that will break the controlled
|
| + # document navigation.
|
| + response.set_cookie('update-recovery-mode', 'bad')
|
| + extra_body = "addEventListener('fetch', function(e) { e.respondWith(Promise.reject()); });"
|
| + elif mode == 'bad':
|
| + # When the update tries to pull the script again, update to
|
| + # a worker service worker that does not break document
|
| + # navigation. Serve the same script from then on.
|
| + response.delete_cookie('update-recovery-mode')
|
| +
|
| + headers.append(('Content-Type', 'application/javascript'))
|
| + return headers, '%s' % (extra_body)
|
|
|