diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-18 14:48:37 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-18 14:48:37 +0000 |
commit | da4b92fee136f90425c3400c2fe11469972178cf (patch) | |
tree | 184d916852c6e697fc7da11cef5696f09dbf3be3 /webkit | |
parent | e80cb893343a457c181b0bd26a208bd71a99f661 (diff) | |
download | chromium_src-da4b92fee136f90425c3400c2fe11469972178cf.zip chromium_src-da4b92fee136f90425c3400c2fe11469972178cf.tar.gz chromium_src-da4b92fee136f90425c3400c2fe11469972178cf.tar.bz2 |
DevTools: Reset utility context for given document only once.
Review URL: http://codereview.chromium.org/172091
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23621 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/devtools/debugger_agent_impl.cc | 12 | ||||
-rw-r--r-- | webkit/glue/devtools/debugger_agent_impl.h | 4 | ||||
-rw-r--r-- | webkit/glue/webdevtoolsagent_impl.cc | 72 | ||||
-rw-r--r-- | webkit/glue/webdevtoolsagent_impl.h | 1 | ||||
-rw-r--r-- | webkit/glue/webframeloaderclient_impl.cc | 11 |
5 files changed, 31 insertions, 69 deletions
diff --git a/webkit/glue/devtools/debugger_agent_impl.cc b/webkit/glue/devtools/debugger_agent_impl.cc index 8bcbe80..80db427 100644 --- a/webkit/glue/devtools/debugger_agent_impl.cc +++ b/webkit/glue/devtools/debugger_agent_impl.cc @@ -90,25 +90,21 @@ void DebuggerAgentImpl::DebuggerOutput(const std::string& command) { } // static -void DebuggerAgentImpl::ResetUtilityContext( - Document* document, +void DebuggerAgentImpl::CreateUtilityContext( + Frame* frame, v8::Persistent<v8::Context>* context) { - if (!context->IsEmpty()) { - context->Dispose(); - context->Clear(); - } v8::HandleScope scope; // TODO(pfeldman): Validate against Soeren. // Set up the DOM window as the prototype of the new global object. v8::Handle<v8::Context> window_context = - V8Proxy::context(document->frame()); + V8Proxy::context(frame); v8::Handle<v8::Object> window_global = window_context->Global(); v8::Handle<v8::Object> window_wrapper = V8DOMWrapper::lookupDOMWrapper(V8ClassIndex::DOMWINDOW, window_global); ASSERT(V8DOMWrapper::convertDOMWrapperToNative<DOMWindow>(window_wrapper) == - document->frame()->domWindow()); + frame->domWindow()); // Create a new environment using an empty template for the shadow // object. Reuse the global object if one has been created earlier. diff --git a/webkit/glue/devtools/debugger_agent_impl.h b/webkit/glue/devtools/debugger_agent_impl.h index 36c9367..20db532 100644 --- a/webkit/glue/devtools/debugger_agent_impl.h +++ b/webkit/glue/devtools/debugger_agent_impl.h @@ -26,8 +26,8 @@ class String; class DebuggerAgentImpl : public DebuggerAgent { public: // Creates utility context with injected js agent. - static void ResetUtilityContext(WebCore::Document* document, - v8::Persistent<v8::Context>* context); + static void CreateUtilityContext(WebCore::Frame* frame, + v8::Persistent<v8::Context>* context); DebuggerAgentImpl(WebViewImpl* web_view_impl, DebuggerAgentDelegate* delegate, diff --git a/webkit/glue/webdevtoolsagent_impl.cc b/webkit/glue/webdevtoolsagent_impl.cc index 4cbcbf5..35d3d5c 100644 --- a/webkit/glue/webdevtoolsagent_impl.cc +++ b/webkit/glue/webdevtoolsagent_impl.cc @@ -57,7 +57,6 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( : host_id_(delegate->GetHostId()), delegate_(delegate), web_view_impl_(web_view_impl), - document_(NULL), attached_(false) { debugger_agent_delegate_stub_.set(new DebuggerAgentDelegateStub(this)); tools_agent_delegate_stub_.set(new ToolsAgentDelegateStub(this)); @@ -85,34 +84,25 @@ void WebDevToolsAgentImpl::Attach() { debugger_agent_delegate_stub_.get(), this)); Page* page = web_view_impl_->page(); + debugger_agent_impl_->CreateUtilityContext(page->mainFrame(), &utility_context_); + InitDevToolsAgentHost(); - // We are potentially attaching to the running page -> init agents with - // Document if any. - Document* doc = page->mainFrame()->document(); - if (doc) { - // Reuse existing context in case detached/attached. - if (utility_context_.IsEmpty()) { - debugger_agent_impl_->ResetUtilityContext(doc, &utility_context_); - InitDevToolsAgentHost(); - } - - InspectorController* ic = web_view_impl_->page()->inspectorController(); - // Unhide resources panel if necessary. - tools_agent_delegate_stub_->SetResourcesPanelEnabled( - ic->resourceTrackingEnabled()); - v8::HandleScope scope; - v8::Context::Scope context_scope(utility_context_); - - ScriptState* state = scriptStateFromPage(web_view_impl_->page()); - v8::Handle<v8::Object> injected_script = v8::Local<v8::Object>::Cast( - utility_context_->Global()->Get(v8::String::New("InjectedScript"))); - ic->setFrontendProxyObject( - state, - ScriptObject(state, utility_context_->Global()), - ScriptObject(state, injected_script)); - // Allow controller to send messages to the frontend. - ic->setWindowVisible(true, false); - } + InspectorController* ic = web_view_impl_->page()->inspectorController(); + // Unhide resources panel if necessary. + tools_agent_delegate_stub_->SetResourcesPanelEnabled( + ic->resourceTrackingEnabled()); + v8::HandleScope scope; + v8::Context::Scope context_scope(utility_context_); + + ScriptState* state = scriptStateFromPage(web_view_impl_->page()); + v8::Handle<v8::Object> injected_script = v8::Local<v8::Object>::Cast( + utility_context_->Global()->Get(v8::String::New("InjectedScript"))); + ic->setFrontendProxyObject( + state, + ScriptObject(state, utility_context_->Global()), + ScriptObject(state, injected_script)); + // Allow controller to send messages to the frontend. + ic->setWindowVisible(true, false); attached_ = true; } @@ -120,6 +110,7 @@ void WebDevToolsAgentImpl::Detach() { // Prevent controller from sending messages to the frontend. InspectorController* ic = web_view_impl_->page()->inspectorController(); ic->setWindowVisible(false, false); + DisposeUtilityContext(); devtools_agent_host_.set(NULL); debugger_agent_impl_.set(NULL); attached_ = false; @@ -129,31 +120,11 @@ void WebDevToolsAgentImpl::OnNavigate() { DebuggerAgentManager::OnNavigate(); } -void WebDevToolsAgentImpl::SetMainFrameDocumentReady(bool ready) { - if (!attached_) { - return; - } - - // We were attached prior to the page load -> init agents with Document. - Document* doc; - if (ready) { - Page* page = web_view_impl_->page(); - doc = page->mainFrame()->document(); - } else { - doc = NULL; - } - if (doc) { - debugger_agent_impl_->ResetUtilityContext(doc, &utility_context_); - InitDevToolsAgentHost(); - } -} - void WebDevToolsAgentImpl::DidCommitLoadForFrame( WebViewImpl* webview, WebFrame* frame, bool is_new_navigation) { if (!attached_) { - DisposeUtilityContext(); return; } WebDataSource* ds = frame->dataSource(); @@ -162,6 +133,10 @@ void WebDevToolsAgentImpl::DidCommitLoadForFrame( ds->unreachableURL() : request.url(); if (webview->GetMainFrame() == frame) { + DisposeUtilityContext(); + debugger_agent_impl_->CreateUtilityContext(webview->page()->mainFrame(), + &utility_context_); + InitDevToolsAgentHost(); tools_agent_delegate_stub_->FrameNavigate( url.possibly_invalid_spec()); } @@ -249,6 +224,7 @@ void WebDevToolsAgentImpl::DispatchMessageFromClient( void WebDevToolsAgentImpl::InspectElement(int x, int y) { // TODO(pfeldman): implement using new inspector controller API. + } void WebDevToolsAgentImpl::SendRpcMessage( diff --git a/webkit/glue/webdevtoolsagent_impl.h b/webkit/glue/webdevtoolsagent_impl.h index 81b22f4..abc4d09 100644 --- a/webkit/glue/webdevtoolsagent_impl.h +++ b/webkit/glue/webdevtoolsagent_impl.h @@ -86,7 +86,6 @@ class WebDevToolsAgentImpl int host_id_; WebDevToolsAgentDelegate* delegate_; WebViewImpl* web_view_impl_; - WebCore::Document* document_; OwnPtr<DebuggerAgentDelegateStub> debugger_agent_delegate_stub_; OwnPtr<ToolsAgentDelegateStub> tools_agent_delegate_stub_; OwnPtr<ToolsAgentNativeDelegateStub> tools_agent_native_delegate_stub_; diff --git a/webkit/glue/webframeloaderclient_impl.cc b/webkit/glue/webframeloaderclient_impl.cc index b9cdd59..520d999 100644 --- a/webkit/glue/webframeloaderclient_impl.cc +++ b/webkit/glue/webframeloaderclient_impl.cc @@ -939,16 +939,7 @@ void WebFrameLoaderClient::postProgressFinishedNotification() { } void WebFrameLoaderClient::setMainFrameDocumentReady(bool ready) { - WebViewImpl* web_view = webframe_->GetWebViewImpl(); - if (!web_view) - return; - WebDevToolsAgentImpl* tools_agent = web_view->GetWebDevToolsAgentImpl(); - if (!tools_agent) - return; - - if (webframe_ == web_view->GetMainFrame()) { - tools_agent->SetMainFrameDocumentReady(ready); - } + // FIXME } // Creates a new connection and begins downloading from that (contrast this |