summaryrefslogtreecommitdiffstats
path: root/webkit/glue/devtools/dom_agent_impl.cc
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-30 08:19:40 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-30 08:19:40 +0000
commit46ce4c7d272138e15282ee102f9c6ff0508353c7 (patch)
treeb0e00ae8d60ae169aa27f7cb8a522a8b255c21d1 /webkit/glue/devtools/dom_agent_impl.cc
parent646dce40970192643ce533518888dfaf9c736815 (diff)
downloadchromium_src-46ce4c7d272138e15282ee102f9c6ff0508353c7.zip
chromium_src-46ce4c7d272138e15282ee102f9c6ff0508353c7.tar.gz
chromium_src-46ce4c7d272138e15282ee102f9c6ff0508353c7.tar.bz2
DevTools: Implement basic DOM edit operations.
Review URL: http://codereview.chromium.org/56005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12765 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/devtools/dom_agent_impl.cc')
-rw-r--r--webkit/glue/devtools/dom_agent_impl.cc28
1 files changed, 24 insertions, 4 deletions
diff --git a/webkit/glue/devtools/dom_agent_impl.cc b/webkit/glue/devtools/dom_agent_impl.cc
index 6d6471c..d946a7e 100644
--- a/webkit/glue/devtools/dom_agent_impl.cc
+++ b/webkit/glue/devtools/dom_agent_impl.cc
@@ -69,7 +69,9 @@ DomAgentImpl::~DomAgentImpl() {
}
void DomAgentImpl::SetDocument(Document* doc) {
- DiscardBindings();
+ if (documents_.size() && doc == documents_.begin()->get()) {
+ return;
+ }
ListHashSet<RefPtr<Document> > copy = documents_;
for (ListHashSet<RefPtr<Document> >::iterator it = copy.begin();
@@ -84,6 +86,8 @@ void DomAgentImpl::SetDocument(Document* doc) {
GetDocumentElement();
document_element_requested_ = false;
}
+ } else {
+ DiscardBindings();
}
}
@@ -289,33 +293,49 @@ int DomAgentImpl::PushNodePathToClient(Node* node_to_select) {
}
void DomAgentImpl::SetAttribute(
+ int call_id,
int element_id,
const String& name,
const String& value) {
Node* node = GetNodeForId(element_id);
if (node && (node->nodeType() == Node::ELEMENT_NODE)) {
Element* element = static_cast<Element*>(node);
- ExceptionCode ec = 0;
+ ExceptionCode ec = 0;
element->setAttribute(name, value, ec);
+ delegate_->DidApplyDomChange(call_id, ec == 0);
+ } else {
+ delegate_->DidApplyDomChange(call_id, false);
}
}
-void DomAgentImpl::RemoveAttribute(int element_id, const String& name) {
+void DomAgentImpl::RemoveAttribute(
+ int call_id,
+ int element_id,
+ const String& name) {
Node* node = GetNodeForId(element_id);
if (node && (node->nodeType() == Node::ELEMENT_NODE)) {
Element* element = static_cast<Element*>(node);
ExceptionCode ec = 0;
element->removeAttribute(name, ec);
+ delegate_->DidApplyDomChange(call_id, ec == 0);
+ } else {
+ delegate_->DidApplyDomChange(call_id, false);
}
}
-void DomAgentImpl::SetTextNodeValue(int element_id, const String& value) {
+void DomAgentImpl::SetTextNodeValue(
+ int call_id,
+ int element_id,
+ const String& value) {
Node* node = GetNodeForId(element_id);
if (node && (node->nodeType() == Node::TEXT_NODE)) {
Text* text_node = static_cast<Text*>(node);
ExceptionCode ec = 0;
// TODO(pfeldman): Add error handling
text_node->replaceWholeText(value, ec);
+ delegate_->DidApplyDomChange(call_id, ec == 0);
+ } else {
+ delegate_->DidApplyDomChange(call_id, false);
}
}