diff --git a/browser/devtools_delegate.cc b/browser/devtools_delegate.cc index 77b8923c51..dc11dd35e1 100644 --- a/browser/devtools_delegate.cc +++ b/browser/devtools_delegate.cc @@ -47,7 +47,7 @@ void DevToolsDelegate::DispatchOnEmbedder(const std::string& message) { } void DevToolsDelegate::InspectedContentsClosing() { - owner_window_->CloseImmediately(); + delete owner_window_; } void DevToolsDelegate::AboutToNavigateRenderView( @@ -56,4 +56,8 @@ void DevToolsDelegate::AboutToNavigateRenderView( owner_window_->GetWebContents()->GetRenderViewHost()); } +void DevToolsDelegate::OnWindowClosed() { + delete owner_window_; +} + } // namespace atom diff --git a/browser/devtools_delegate.h b/browser/devtools_delegate.h index d281e3b62a..d8a8be5297 100644 --- a/browser/devtools_delegate.h +++ b/browser/devtools_delegate.h @@ -6,6 +6,7 @@ #define ATOM_BROWSER_DEVTOOLS_DELEGATE_H_ #include "base/memory/scoped_ptr.h" +#include "browser/native_window_observer.h" #include "content/public/browser/devtools_frontend_host_delegate.h" #include "content/public/browser/web_contents_observer.h" @@ -19,7 +20,8 @@ namespace atom { class NativeWindow; class DevToolsDelegate : public content::DevToolsFrontendHostDelegate, - public content::WebContentsObserver { + public content::WebContentsObserver, + public NativeWindowObserver { public: DevToolsDelegate(NativeWindow* window, content::WebContents* target_web_contents); @@ -34,6 +36,9 @@ class DevToolsDelegate : public content::DevToolsFrontendHostDelegate, virtual void AboutToNavigateRenderView( content::RenderViewHost* render_view_host) OVERRIDE; + // Implementations of NativeWindowObserver. + virtual void OnWindowClosed() OVERRIDE; + private: NativeWindow* owner_window_; diff --git a/browser/native_window.cc b/browser/native_window.cc index 3afdea5458..c54e32d573 100644 --- a/browser/native_window.cc +++ b/browser/native_window.cc @@ -185,16 +185,14 @@ void NativeWindow::InspectElement(int x, int y) { agent->InspectElement(x, y); } -scoped_ptr NativeWindow::DebugDevTools() { - scoped_ptr window; - if (IsDevToolsOpened()) { - base::DictionaryValue options; - window.reset(NativeWindow::Create(&options)); - window->devtools_delegate_.reset(new DevToolsDelegate( - window.get(), GetDevToolsWebContents())); - } +void NativeWindow::DebugDevTools() { + if (!IsDevToolsOpened()) + return; - return window.Pass(); + base::DictionaryValue options; + NativeWindow* window = NativeWindow::Create(&options); + window->devtools_delegate_.reset(new DevToolsDelegate( + window, GetDevToolsWebContents())); } void NativeWindow::FocusOnWebView() { diff --git a/browser/native_window.h b/browser/native_window.h index d17f41df84..b1eb6e695b 100644 --- a/browser/native_window.h +++ b/browser/native_window.h @@ -130,7 +130,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, virtual void InspectElement(int x, int y); // Creates a new window to debug the devtools. - virtual scoped_ptr DebugDevTools(); + virtual void DebugDevTools(); virtual void FocusOnWebView(); virtual void BlurWebView();