fix: crash when destroying WebContentsView during GC (#22674)
This commit is contained in:
		
					parent
					
						
							
								1b353d1ed3
							
						
					
				
			
			
				commit
				
					
						9c5874306d
					
				
			
		
					 2 changed files with 35 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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()));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue