Make sure BrowserContext is always destroyed after WebContents

This commit is contained in:
Cheng Zhao 2016-05-17 21:49:05 +09:00
parent 242508e22f
commit 118afab67b
3 changed files with 11 additions and 4 deletions

View file

@ -274,7 +274,7 @@ WebContents::WebContents(v8::Isolate* isolate,
} }
Observe(web_contents); Observe(web_contents);
InitWithWebContents(web_contents); InitWithWebContents(web_contents, session->browser_context());
managed_web_contents()->GetView()->SetDelegate(this); managed_web_contents()->GetView()->SetDelegate(this);
@ -397,7 +397,7 @@ void WebContents::HandleKeyboardEvent(
if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) { if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) {
// Escape exits tabbed fullscreen mode. // Escape exits tabbed fullscreen mode.
ExitFullscreenModeForTab(source); ExitFullscreenModeForTab(source);
} else if (type_ == BROWSER_WINDOW) { } else if (type_ == BROWSER_WINDOW && owner_window()) {
owner_window()->HandleKeyboardEvent(source, event); owner_window()->HandleKeyboardEvent(source, event);
} else if (type_ == WEB_VIEW && guest_delegate_) { } else if (type_ == WEB_VIEW && guest_delegate_) {
// Send the unhandled keyboard events back to the embedder. // Send the unhandled keyboard events back to the embedder.

View file

@ -182,7 +182,9 @@ CommonWebContentsDelegate::~CommonWebContentsDelegate() {
} }
void CommonWebContentsDelegate::InitWithWebContents( void CommonWebContentsDelegate::InitWithWebContents(
content::WebContents* web_contents) { content::WebContents* web_contents,
AtomBrowserContext* browser_context) {
browser_context_ = browser_context;
web_contents->SetDelegate(this); web_contents->SetDelegate(this);
printing::PrintViewManagerBasic::CreateForWebContents(web_contents); printing::PrintViewManagerBasic::CreateForWebContents(web_contents);

View file

@ -19,6 +19,7 @@ using brightray::DevToolsFileSystemIndexer;
namespace atom { namespace atom {
class AtomBrowserContext;
class AtomJavaScriptDialogManager; class AtomJavaScriptDialogManager;
class NativeWindow; class NativeWindow;
class WebDialogHelper; class WebDialogHelper;
@ -33,7 +34,8 @@ class CommonWebContentsDelegate
// Creates a InspectableWebContents object and takes onwership of // Creates a InspectableWebContents object and takes onwership of
// |web_contents|. // |web_contents|.
void InitWithWebContents(content::WebContents* web_contents); void InitWithWebContents(content::WebContents* web_contents,
AtomBrowserContext* browser_context);
// Set the window as owner window. // Set the window as owner window.
void SetOwnerWindow(NativeWindow* owner_window); void SetOwnerWindow(NativeWindow* owner_window);
@ -145,6 +147,9 @@ class CommonWebContentsDelegate
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_; scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
scoped_refptr<DevToolsFileSystemIndexer> devtools_file_system_indexer_; scoped_refptr<DevToolsFileSystemIndexer> devtools_file_system_indexer_;
// Make sure BrowserContext is alwasys destroyed after WebContents.
scoped_refptr<AtomBrowserContext> browser_context_;
// The stored InspectableWebContents object. // The stored InspectableWebContents object.
// Notice that web_contents_ must be placed after dialog_manager_, so we can // Notice that web_contents_ must be placed after dialog_manager_, so we can
// make sure web_contents_ is destroyed before dialog_manager_, otherwise a // make sure web_contents_ is destroyed before dialog_manager_, otherwise a