From 9c9417e5255836be1d428e82b48b92070258efd8 Mon Sep 17 00:00:00 2001 From: Tsuyoshi Horo Date: Sun, 1 Apr 2018 20:41:31 -0700 Subject: [PATCH] Set SkipServiceWorker flag for synchronous loads from the main thread. Before 5e1b52dd7e828fb2e4bd69f599c0c30eec3e873c, synchronous XHR on worker was handled by service workers. It is because the |is_sync_load| was false when the sync request is from worker thread. But after the CL, the |is_sync_load| flag for the sync request from worker became true, so the request will not go to the service worker. This CL will fix this by - Set the SkipServiceWorker flag for synchronous loads from the main thread in the renderer process. (FetchParameters.cpp) - Don't set skip_service_worker even if is_sync_load is true in the browser process. (resource_dispatcher_host_impl.cc) Bug: 706331,827473 Change-Id: I186bc97f3f8d298e0a04942d0ec4b708b3022cc1 Reviewed-on: https://chromium-review.googlesource.com/989376 Reviewed-by: Kinuko Yasuda Commit-Queue: Tsuyoshi Horo Cr-Commit-Position: refs/heads/master@{#547407} --- ...etch-request-xhr-sync-on-worker.https.html | 41 +++++++++++++++++++ ...fetch-request-xhr-sync-on-worker-worker.js | 41 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 service-workers/service-worker/fetch-request-xhr-sync-on-worker.https.html create mode 100644 service-workers/service-worker/resources/fetch-request-xhr-sync-on-worker-worker.js diff --git a/service-workers/service-worker/fetch-request-xhr-sync-on-worker.https.html b/service-workers/service-worker/fetch-request-xhr-sync-on-worker.https.html new file mode 100644 index 00000000000000..9f18096aa29bb4 --- /dev/null +++ b/service-workers/service-worker/fetch-request-xhr-sync-on-worker.https.html @@ -0,0 +1,41 @@ + +Service Worker: Synchronous XHR on Worker is intercepted + + + + diff --git a/service-workers/service-worker/resources/fetch-request-xhr-sync-on-worker-worker.js b/service-workers/service-worker/resources/fetch-request-xhr-sync-on-worker-worker.js new file mode 100644 index 00000000000000..0d24ffc1f33330 --- /dev/null +++ b/service-workers/service-worker/resources/fetch-request-xhr-sync-on-worker-worker.js @@ -0,0 +1,41 @@ +'use strict'; + +self.onfetch = function(event) { + if (event.request.url.indexOf('non-existent-file.txt') !== -1) { + event.respondWith(new Response('Response from service worker')); + } else if (event.request.url.indexOf('/iframe_page') !== -1) { + event.respondWith(new Response( + '\n' + + '', + { + headers: [['content-type', 'text/html']] + })); + } else if (event.request.url.indexOf('/worker_script') !== -1) { + event.respondWith(new Response( + 'self.onmessage = (msg) => {' + + ' const syncXhr = new XMLHttpRequest();' + + ' syncXhr.open(\'GET\', msg.data.url, false);' + + ' syncXhr.send();' + + ' self.postMessage({' + + ' status: syncXhr.status,' + + ' responseText: syncXhr.responseText' + + ' });' + + '}', + { + headers: [['content-type', 'application/javascript']] + })); + } +};