summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-18 14:48:37 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-18 14:48:37 +0000
commitda4b92fee136f90425c3400c2fe11469972178cf (patch)
tree184d916852c6e697fc7da11cef5696f09dbf3be3 /webkit
parente80cb893343a457c181b0bd26a208bd71a99f661 (diff)
downloadchromium_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.cc12
-rw-r--r--webkit/glue/devtools/debugger_agent_impl.h4
-rw-r--r--webkit/glue/webdevtoolsagent_impl.cc72
-rw-r--r--webkit/glue/webdevtoolsagent_impl.h1
-rw-r--r--webkit/glue/webframeloaderclient_impl.cc11
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