Make AllowServiceWorker return false during SW shutdown
This is just speculatively applying https://crrev.com/c/3820185 to yet
another execution path that caused the similar crash.
I suppose the issue caused if AllowServiceWorker is called while the
service worker is being shutdown.
Bug: 1350843
Change-Id: Id08200b0302a1da5121290c8ca49024d85193a95
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3831837
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Auto-Submit: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1035040}
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 59e66dc..f341631 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2722,6 +2722,7 @@
const absl::optional<url::Origin>& top_frame_origin,
const GURL& script_url,
content::BrowserContext* context) {
+ DCHECK(context);
DCHECK_CURRENTLY_ON(BrowserThread::UI);
GURL first_party_url = top_frame_origin ? top_frame_origin->GetURL() : GURL();
diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc
index 130d793..ce824b5c 100644
--- a/content/browser/service_worker/service_worker_container_host.cc
+++ b/content/browser/service_worker/service_worker_container_host.cc
@@ -1012,10 +1012,16 @@
const GURL& script_url) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(context_);
+ auto* browser_context = context_->wrapper()->browser_context();
+ // Check that the browser context is not nullptr. It becomes nullptr
+ // when the service worker process manager is being shutdown.
+ if (!browser_context) {
+ return false;
+ }
AllowServiceWorkerResult allowed =
GetContentClient()->browser()->AllowServiceWorker(
scope, site_for_cookies(), top_frame_origin(), script_url,
- context_->wrapper()->browser_context());
+ browser_context);
if (IsContainerForWindowClient()) {
auto* rfh = RenderFrameHostImpl::FromID(GetRenderFrameHostId());
auto* web_contents =