fix: crash when destroying WebContentsView during GC (#22674)

This commit is contained in:
Jeremy Apthorp 2020-03-13 10:33:37 -07:00 committed by GitHub
parent 1b353d1ed3
commit 9c5874306d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 3 deletions

View file

@ -67,9 +67,16 @@ WebContentsView::WebContentsView(v8::Isolate* isolate,
WebContentsView::~WebContentsView() {
if (api_web_contents_) { // destroy() is called
// Destroy WebContents asynchronously unless app is shutting down,
// because destroy() might be called inside WebContents's event handler.
api_web_contents_->DestroyWebContents(!Browser::Get()->is_shutting_down());
// Destroy WebContents asynchronously, as we might be in GC currently and
// WebContents emits an event in its destructor.
base::PostTask(FROM_HERE, {content::BrowserThread::UI},
base::BindOnce(
[](base::WeakPtr<WebContents> contents) {
if (contents)
contents->DestroyWebContents(
!Browser::Get()->is_shutting_down());
},
api_web_contents_->GetWeakPtr()));
}
}