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() { ...@@ -88,7 +88,10 @@ void InspectorResourceContentLoader::Start() {
resource_request.SetCacheMode(mojom::FetchCacheMode::kOnlyIfCached); resource_request.SetCacheMode(mojom::FetchCacheMode::kOnlyIfCached);
} }
resource_request.SetRequestContext(mojom::RequestContextType::INTERNAL); 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()) { if (!resource_request.Url().GetString().IsEmpty()) {
urls_to_fetch.insert(resource_request.Url().GetString()); urls_to_fetch.insert(resource_request.Url().GetString());
......
Verifies that service workers do not throw errors from devtools css enable initiated fetch. 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 @@ ...@@ -24,7 +24,18 @@
await dp.DOM.enable(); await dp.DOM.enable();
await dp.CSS.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(); testRunner.completeTest();
}); });
self.addEventListener('fetch', fetchEvent => { self.addEventListener('fetch', fetchEvent => {
console.log('service worker making fetch for url: ' + fetchEvent.request.url); 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