Commit 3e4e10cf authored by John Abd-El-Malek's avatar John Abd-El-Malek Committed by Commit Bot

Fix service worker subresource requests failing after a network process crash.

With https://chromium-review.googlesource.com/c/chromium/src/+/1235593, Gmail re-loads correctly after a network process crash. However if Gmail isn't reloaded or opened in a new tab, it still thinks it's disconnected because its subresource requests are failing.

The problem is that ServiceWorkerSubresourceLoader::fallback_factory_ was a ChildURLLoaderFactoryBundle (which doesn't handle updating after crashes) instead of being a HostChildURLLoaderFactoryBundle (which is properly updated after a crash).

Bug: 884007
Change-Id: I63d61811005a57f1a43ec91961fd5c5f5de5d0e8
Reviewed-on: https://chromium-review.googlesource.com/1237720Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: John Abd-El-Malek <jam@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593076}
parent d8226d35
......@@ -85,7 +85,7 @@ class CONTENT_EXPORT ChildURLLoaderFactoryBundle
// Returns an info that omits this bundle's default factory, if any. This is
// useful to make a clone that bypasses AppCache, for example.
std::unique_ptr<network::SharedURLLoaderFactoryInfo>
virtual std::unique_ptr<network::SharedURLLoaderFactoryInfo>
CloneWithoutDefaultFactory();
std::unique_ptr<ChildURLLoaderFactoryBundleInfo> PassInterface();
......
......@@ -134,6 +134,23 @@ HostChildURLLoaderFactoryBundle::Clone() {
std::move(main_thread_host_bundle_clone), info->bypass_redirect_checks());
}
std::unique_ptr<network::SharedURLLoaderFactoryInfo>
HostChildURLLoaderFactoryBundle::CloneWithoutDefaultFactory() {
auto info = base::WrapUnique(static_cast<ChildURLLoaderFactoryBundleInfo*>(
ChildURLLoaderFactoryBundle::CloneWithoutDefaultFactory().release()));
DCHECK(base::SequencedTaskRunnerHandle::IsSet());
auto main_thread_host_bundle_clone = std::make_unique<
TrackedChildURLLoaderFactoryBundle::HostPtrAndTaskRunner>(AsWeakPtr(),
task_runner_);
return std::make_unique<TrackedChildURLLoaderFactoryBundleInfo>(
std::move(info->default_factory_info()),
std::move(info->factories_info()),
std::move(info->direct_network_factory_info()),
std::move(main_thread_host_bundle_clone), info->bypass_redirect_checks());
}
void HostChildURLLoaderFactoryBundle::UpdateThisAndAllClones(
std::unique_ptr<URLLoaderFactoryBundleInfo> info) {
DCHECK(RenderThread::Get()) << "Should run on the main renderer thread";
......
......@@ -115,6 +115,8 @@ class CONTENT_EXPORT HostChildURLLoaderFactoryBundle
// ChildURLLoaderFactoryBundle overrides.
// Returns |std::unique_ptr<TrackedChildURLLoaderFactoryBundleInfo>|.
std::unique_ptr<network::SharedURLLoaderFactoryInfo> Clone() override;
std::unique_ptr<network::SharedURLLoaderFactoryInfo>
CloneWithoutDefaultFactory() override;
bool IsHostChildURLLoaderFactoryBundle() const override;
// Update this bundle with |info|, and post cloned |info| to tracked bundles.
......
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