diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 17:46:31 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 17:46:31 +0000 |
commit | a6f5ce00cdba02f54f3e80dbec99eaf78443e9ac (patch) | |
tree | 8e653f45fffa4b2203ed5aa6b09c6948a0e8c9b6 | |
parent | 0ca47854e874c3f2a5af86590608f4629e8c84ac (diff) | |
download | chromium_src-a6f5ce00cdba02f54f3e80dbec99eaf78443e9ac.zip chromium_src-a6f5ce00cdba02f54f3e80dbec99eaf78443e9ac.tar.gz chromium_src-a6f5ce00cdba02f54f3e80dbec99eaf78443e9ac.tar.bz2 |
DevTools: Fix access violation (null pointer) on document tear down.
Review URL: http://codereview.chromium.org/100261
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15067 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | webkit/glue/devtools/debugger_agent_impl.cc | 5 | ||||
-rw-r--r-- | webkit/glue/devtools/debugger_agent_impl.h | 4 | ||||
-rw-r--r-- | webkit/glue/webdevtoolsagent_impl.cc | 4 |
3 files changed, 8 insertions, 5 deletions
diff --git a/webkit/glue/devtools/debugger_agent_impl.cc b/webkit/glue/devtools/debugger_agent_impl.cc index f8d99ec..ac69664 100644 --- a/webkit/glue/devtools/debugger_agent_impl.cc +++ b/webkit/glue/devtools/debugger_agent_impl.cc @@ -61,12 +61,15 @@ void DebuggerAgentImpl::DebuggerOutput(const std::string& command) { webdevtools_agent_->ForceRepaint(); } -void DebuggerAgentImpl::CreateUtilityContext( +void DebuggerAgentImpl::ResetUtilityContext( Document* document, v8::Persistent<v8::Context>* context) { if (!context->IsEmpty()) { context->Dispose(); } + if (!document) { + return; + } v8::HandleScope scope; // TODO(pfeldman): Validate against Soeren. diff --git a/webkit/glue/devtools/debugger_agent_impl.h b/webkit/glue/devtools/debugger_agent_impl.h index 2f9b2b8..bfd3e96 100644 --- a/webkit/glue/devtools/debugger_agent_impl.h +++ b/webkit/glue/devtools/debugger_agent_impl.h @@ -29,8 +29,8 @@ class DebuggerAgentImpl : public DebuggerAgent { virtual ~DebuggerAgentImpl(); // Creates utility context with injected js agent. - void CreateUtilityContext(WebCore::Document* document, - v8::Persistent<v8::Context>* context); + void ResetUtilityContext(WebCore::Document* document, + v8::Persistent<v8::Context>* context); // DebuggerAgent implementation. virtual void DebugBreak(); diff --git a/webkit/glue/webdevtoolsagent_impl.cc b/webkit/glue/webdevtoolsagent_impl.cc index 49f457b..6de1ec5 100644 --- a/webkit/glue/webdevtoolsagent_impl.cc +++ b/webkit/glue/webdevtoolsagent_impl.cc @@ -78,7 +78,7 @@ void WebDevToolsAgentImpl::Attach() { if (doc) { // Reuse existing context in case detached/attached. if (utility_context_.IsEmpty()) { - debugger_agent_impl_->CreateUtilityContext(doc, &utility_context_); + debugger_agent_impl_->ResetUtilityContext(doc, &utility_context_); } dom_agent_impl_->SetDocument(doc); net_agent_impl_->SetDocument(doc); @@ -116,7 +116,7 @@ void WebDevToolsAgentImpl::SetMainFrameDocumentReady(bool ready) { } else { doc = NULL; } - debugger_agent_impl_->CreateUtilityContext(doc, &utility_context_); + debugger_agent_impl_->ResetUtilityContext(doc, &utility_context_); dom_agent_impl_->SetDocument(doc); net_agent_impl_->SetDocument(doc); } |