diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-06 14:01:45 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-06 14:01:45 +0000 |
commit | 449be361bb402d93a2bfa59dc61c72beafac6959 (patch) | |
tree | 13978441ed9c6de996972897c57a59d5bee8b5db /webkit/glue/devtools/dom_agent_impl.cc | |
parent | b75b7d079cffabab306e5701645f8d6a3c595873 (diff) | |
download | chromium_src-449be361bb402d93a2bfa59dc61c72beafac6959.zip chromium_src-449be361bb402d93a2bfa59dc61c72beafac6959.tar.gz chromium_src-449be361bb402d93a2bfa59dc61c72beafac6959.tar.bz2 |
DevTools: Glue part for the 'attach early' functionality.
- Establish 2 main scenarios for attach: 'attach to live' and 'start attached'
- Make WebFrameLoaderImpl call setMainFrameDocumentReady only for main frame document.
Review URL: http://codereview.chromium.org/62038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13154 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/devtools/dom_agent_impl.cc')
-rw-r--r-- | webkit/glue/devtools/dom_agent_impl.cc | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/webkit/glue/devtools/dom_agent_impl.cc b/webkit/glue/devtools/dom_agent_impl.cc index 54e4445..f67dfdd 100644 --- a/webkit/glue/devtools/dom_agent_impl.cc +++ b/webkit/glue/devtools/dom_agent_impl.cc @@ -71,11 +71,11 @@ DomAgentImpl::DomAgentImpl(DomAgentDelegate* delegate) } DomAgentImpl::~DomAgentImpl() { - SetDocument(NULL); + SetDocument(NULL, false); } -void DomAgentImpl::SetDocument(Document* doc) { - if (documents_.size() && doc == documents_.begin()->get()) { +void DomAgentImpl::SetDocument(Document* doc, bool loaded) { + if (doc == GetMainFrameDocument()) { return; } @@ -85,12 +85,12 @@ void DomAgentImpl::SetDocument(Document* doc) { StopListening((*it).get()); } ASSERT(documents_.size() == 0); + ASSERT(loaded_documents_.size() == 0); if (doc) { StartListening(doc); - if (document_element_requested_) { - GetDocumentElement(); - document_element_requested_ = false; + if (loaded) { + loaded_documents_.add(doc); } } else { DiscardBindings(); @@ -125,6 +125,7 @@ void DomAgentImpl::StopListening(Document* doc) { doc->removeEventListener(eventNames().DOMAttrModifiedEvent, event_listener_.get(), false); documents_.remove(doc); + loaded_documents_.remove(doc); } int DomAgentImpl::Bind(Node* node) { @@ -153,7 +154,7 @@ void DomAgentImpl::Unbind(Node* node) { } void DomAgentImpl::PushDocumentElementToClient() { - Element* doc_elem = (*documents_.begin())->documentElement(); + Element* doc_elem = GetMainFrameDocument()->documentElement(); if (!node_to_id_.contains(doc_elem)) { OwnPtr<Value> value(BuildValueForNode(doc_elem, 0)); delegate_->SetDocumentElement(*value.get()); @@ -249,12 +250,18 @@ void DomAgentImpl::handleEvent(Event* event, bool isWindowEvent) { delegate_->ChildNodeRemoved(parent_id, id); } } else if (type == eventNames().DOMContentLoadedEvent) { - //TODO(pfeldman): handle content load event. + Document* doc = static_cast<Document*>(node); + loaded_documents_.add(doc); + if (document_element_requested_ && + loaded_documents_.contains(GetMainFrameDocument())) { + GetDocumentElement(); + document_element_requested_ = false; + } } } void DomAgentImpl::GetDocumentElement() { - if (documents_.size() > 0) { + if (loaded_documents_.contains(GetMainFrameDocument())) { PushDocumentElementToClient(); } else { document_element_requested_ = true; @@ -390,7 +397,7 @@ void DomAgentImpl::PerformSearch(int call_id, const String& query) { ExceptionCode ec = 0; Vector<Document*> search_documents; - Document* main_document = (*documents_.begin()).get(); + Document* main_document = GetMainFrameDocument(); search_documents.append(main_document); // Find all frames, iframes and object elements to search their documents. @@ -646,3 +653,11 @@ Element* DomAgentImpl::InnerParentElement(Node* node) { } return element; } + +Document* DomAgentImpl::GetMainFrameDocument() { + ListHashSet<RefPtr<WebCore::Document> >::iterator it = documents_.begin(); + if (it != documents_.end()) { + return it->get(); + } + return NULL; +} |