Commit 145c32ab authored by Joey Arhar's avatar Joey Arhar Committed by Commit Bot

[DevTools] Make css enable fetch compatible with service workers

This is a replacement for the fix made in
https://chromium-review.googlesource.com/c/chromium/src/+/1350170
which uses the same-origin mode instead of bypassing service workers in
order to make sure changes made by the service worker get into devtools
properly.

Bug: 823392
Change-Id: I7773a0281d52ebeddc1aa3b9facb7353f7fd1dcc
Reviewed-on: https://chromium-review.googlesource.com/c/1353991
Commit-Queue: Joey Arhar <jarhar@chromium.org>
Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612491}
parent d2ad0f87
......@@ -88,7 +88,10 @@ void InspectorResourceContentLoader::Start() {
resource_request.SetCacheMode(mojom::FetchCacheMode::kOnlyIfCached);
}
resource_request.SetRequestContext(mojom::RequestContextType::INTERNAL);
resource_request.SetSkipServiceWorker(true);
if (document->Loader() &&
document->Loader()->GetResponse().WasFetchedViaServiceWorker()) {
resource_request.SetCacheMode(mojom::FetchCacheMode::kDefault);
}
if (!resource_request.Url().GetString().IsEmpty()) {
urls_to_fetch.insert(resource_request.Url().GetString());
......
Verifies that service workers do not throw errors from devtools css enable initiated fetch.
finished awaiting for css enable
finished awaiting for CSS.enable
document resource from CSS.enable:
<!DOCTYPE html>
<html>
<head>
<title>webpage for repeat-fetch-service-worker.js</title>
<script>
function installSW() {
navigator.serviceWorker.register('repeat-fetch-service-worker.js');
}
</script>
</head>
<body onload="installSW()"><p>injected by service worker</p></body>
</html>
......@@ -24,7 +24,18 @@
await dp.DOM.enable();
await dp.CSS.enable();
testRunner.log('finished awaiting for CSS.enable');
testRunner.log('finished awaiting for css enable');
// Also make sure changes from service workers are seen by CSS.enable
const getResourceTreeResponse = await dp.Page.getResourceTree();
const mainFrameId = getResourceTreeResponse.result.frameTree.frame.id;
const getResourceContentResponse = await dp.Page.getResourceContent({
frameId: mainFrameId,
url:
'http://127.0.0.1:8000/inspector-protocol/service-worker/resources/repeat-fetch-service-worker.html'
});
testRunner.log(
'document resource from CSS.enable:\n' +
getResourceContentResponse.result.content);
testRunner.completeTest();
});
self.addEventListener('fetch', fetchEvent => {
console.log('service worker making fetch for url: ' + fetchEvent.request.url);
fetch(fetchEvent.request);
const responsePromise = fetch(fetchEvent.request);
if (fetchEvent.request.url ===
'http://127.0.0.1:8000/inspector-protocol/service-worker/resources/repeat-fetch-service-worker.html') {
fetchEvent.respondWith(responsePromise.then(response => {
const init = {
status: response.status,
statusText: response.statusText,
headers: {}
};
response.headers.forEach((v, k) => {
init.headers[k] = v;
});
return response.text().then(body => {
const newBody =
body.replace('</body>', '<p>injected by service worker</p></body>');
return new Response(newBody, init);
});
}));
} else {
fetchEvent.respondWith(responsePromise);
}
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment