diff options
Diffstat (limited to 'WebCore/inspector/InspectorDOMAgent.cpp')
-rw-r--r-- | WebCore/inspector/InspectorDOMAgent.cpp | 256 |
1 files changed, 87 insertions, 169 deletions
diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp index 075944a..7cf0a82 100644 --- a/WebCore/inspector/InspectorDOMAgent.cpp +++ b/WebCore/inspector/InspectorDOMAgent.cpp @@ -384,10 +384,9 @@ Node* InspectorDOMAgent::nodeForId(long id) return 0; } -void InspectorDOMAgent::getChildNodes(long callId, long nodeId) +void InspectorDOMAgent::getChildNodes(long nodeId) { pushChildNodesToFrontend(nodeId); - m_frontend->didGetChildNodes(callId); } long InspectorDOMAgent::pushNodePathToFrontend(Node* nodeToPush) @@ -432,72 +431,56 @@ long InspectorDOMAgent::pushNodePathToFrontend(Node* nodeToPush) return map->get(nodeToPush); } -void InspectorDOMAgent::setAttribute(long callId, long elementId, const String& name, const String& value) +void InspectorDOMAgent::setAttribute(long elementId, const String& name, const String& value, bool* success) { Node* node = nodeForId(elementId); if (node && (node->nodeType() == Node::ELEMENT_NODE)) { Element* element = static_cast<Element*>(node); ExceptionCode ec = 0; element->setAttribute(name, value, ec); - m_frontend->didApplyDomChange(callId, ec == 0); - } else { - m_frontend->didApplyDomChange(callId, false); + *success = !ec; } } -void InspectorDOMAgent::removeAttribute(long callId, long elementId, const String& name) +void InspectorDOMAgent::removeAttribute(long elementId, const String& name, bool* success) { Node* node = nodeForId(elementId); if (node && (node->nodeType() == Node::ELEMENT_NODE)) { Element* element = static_cast<Element*>(node); ExceptionCode ec = 0; element->removeAttribute(name, ec); - m_frontend->didApplyDomChange(callId, ec == 0); - } else { - m_frontend->didApplyDomChange(callId, false); + *success = !ec; } } -void InspectorDOMAgent::removeNode(long callId, long nodeId) +void InspectorDOMAgent::removeNode(long nodeId, long* outNodeId) { Node* node = nodeForId(nodeId); - if (!node) { - m_frontend->didRemoveNode(callId, 0); + if (!node) return; - } Node* parentNode = node->parentNode(); - if (!parentNode) { - m_frontend->didRemoveNode(callId, 0); + if (!parentNode) return; - } ExceptionCode ec = 0; parentNode->removeChild(node, ec); - if (ec) { - m_frontend->didRemoveNode(callId, 0); + if (ec) return; - } - m_frontend->didRemoveNode(callId, nodeId); + *outNodeId = nodeId; } -void InspectorDOMAgent::changeTagName(long callId, long nodeId, const String& tagName) +void InspectorDOMAgent::changeTagName(long nodeId, const String& tagName, long* newId) { Node* oldNode = nodeForId(nodeId); - if (!oldNode || !oldNode->isElementNode()) { - m_frontend->didChangeTagName(callId, 0); + if (!oldNode || !oldNode->isElementNode()) return; - } - - bool childrenRequested = m_childrenRequested.contains(nodeId); ExceptionCode ec = 0; RefPtr<Element> newElem = oldNode->document()->createElement(tagName, ec); - if (ec) { - m_frontend->didChangeTagName(callId, 0); + if (ec) return; - } // Copy over the original node's attributes. Element* oldElem = static_cast<Element*>(oldNode); @@ -515,36 +498,28 @@ void InspectorDOMAgent::changeTagName(long callId, long nodeId, const String& ta parent->insertBefore(newElem, oldNode->nextSibling(), ec); parent->removeChild(oldNode, ec); - if (ec) { - m_frontend->didChangeTagName(callId, 0); + if (ec) return; - } - long newId = pushNodePathToFrontend(newElem.get()); - if (childrenRequested) - pushChildNodesToFrontend(newId); - m_frontend->didChangeTagName(callId, newId); + *newId = pushNodePathToFrontend(newElem.get()); + if (m_childrenRequested.contains(nodeId)) + pushChildNodesToFrontend(*newId); } -void InspectorDOMAgent::getOuterHTML(long callId, long nodeId) +void InspectorDOMAgent::getOuterHTML(long nodeId, WTF::String* outerHTML) { Node* node = nodeForId(nodeId); - if (!node || !node->isHTMLElement()) { - m_frontend->didGetOuterHTML(callId, ""); + if (!node || !node->isHTMLElement()) return; - } - HTMLElement* htmlElement = static_cast<HTMLElement*>(node); - m_frontend->didGetOuterHTML(callId, htmlElement->outerHTML()); + *outerHTML = static_cast<HTMLElement*>(node)->outerHTML(); } -void InspectorDOMAgent::setOuterHTML(long callId, long nodeId, const String& outerHTML) +void InspectorDOMAgent::setOuterHTML(long nodeId, const String& outerHTML, long* newId) { Node* node = nodeForId(nodeId); - if (!node || !node->isHTMLElement()) { - m_frontend->didSetOuterHTML(callId, 0); + if (!node || !node->isHTMLElement()) return; - } bool childrenRequested = m_childrenRequested.contains(nodeId); Node* previousSibling = node->previousSibling(); @@ -554,41 +529,35 @@ void InspectorDOMAgent::setOuterHTML(long callId, long nodeId, const String& out ExceptionCode ec = 0; htmlElement->setOuterHTML(outerHTML, ec); if (ec) - m_frontend->didSetOuterHTML(callId, 0); + return; Node* newNode = previousSibling ? previousSibling->nextSibling() : parentNode->firstChild(); - long newId = pushNodePathToFrontend(newNode); + *newId = pushNodePathToFrontend(newNode); if (childrenRequested) - pushChildNodesToFrontend(newId); - - m_frontend->didSetOuterHTML(callId, newId); + pushChildNodesToFrontend(*newId); } -void InspectorDOMAgent::setTextNodeValue(long callId, long nodeId, const String& value) +void InspectorDOMAgent::setTextNodeValue(long nodeId, const String& value, bool* success) { Node* node = nodeForId(nodeId); if (node && (node->nodeType() == Node::TEXT_NODE)) { Text* text_node = static_cast<Text*>(node); ExceptionCode ec = 0; text_node->replaceWholeText(value, ec); - m_frontend->didApplyDomChange(callId, ec == 0); - } else { - m_frontend->didApplyDomChange(callId, false); + *success = !ec; } } -void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) +void InspectorDOMAgent::getEventListenersForNode(long nodeId, long* outNodeId, RefPtr<InspectorArray>* listenersArray) { Node* node = nodeForId(nodeId); - RefPtr<InspectorArray> listenersArray = InspectorArray::create(); + *outNodeId = nodeId; EventTargetData* d; // Quick break if a null node or no listeners at all - if (!node || !(d = node->eventTargetData())) { - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); + if (!node || !(d = node->eventTargetData())) return; - } // Get the list of event types this Node is concerned with Vector<AtomicString> eventTypes; @@ -599,10 +568,8 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) // Quick break if no useful listeners size_t eventTypesLength = eventTypes.size(); - if (eventTypesLength == 0) { - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); + if (!eventTypesLength) return; - } // The Node's Event Ancestors (not including self) Vector<RefPtr<ContainerNode> > ancestors; @@ -633,7 +600,7 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) for (size_t j = 0; j < vector.size(); ++j) { const RegisteredEventListener& listener = vector[j]; if (listener.useCapture) - listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node)); + (*listenersArray)->push(buildObjectForEventListener(listener, info.eventType, info.node)); } } @@ -644,11 +611,9 @@ void InspectorDOMAgent::getEventListenersForNode(long callId, long nodeId) for (size_t j = 0; j < vector.size(); ++j) { const RegisteredEventListener& listener = vector[j]; if (!listener.useCapture) - listenersArray->push(buildObjectForEventListener(listener, info.eventType, info.node)); + (*listenersArray)->push(buildObjectForEventListener(listener, info.eventType, info.node)); } } - - m_frontend->didGetEventListenersForNode(callId, nodeId, listenersArray.release()); } void InspectorDOMAgent::addInspectedNode(long nodeId) @@ -1006,19 +971,15 @@ void InspectorDOMAgent::didModifyDOMAttr(Element* element) m_frontend->attributesUpdated(id, buildArrayForElementAttributes(element)); } -void InspectorDOMAgent::getStyles(long callId, long nodeId, bool authorOnly) +void InspectorDOMAgent::getStyles(long nodeId, bool authorOnly, RefPtr<InspectorValue>* styles) { Node* node = nodeForId(nodeId); - if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetStyles(callId, InspectorValue::null()); + if (!node || node->nodeType() != Node::ELEMENT_NODE) return; - } DOMWindow* defaultView = node->ownerDocument()->defaultView(); - if (!defaultView) { - m_frontend->didGetStyles(callId, InspectorValue::null()); + if (!defaultView) return; - } Element* element = static_cast<Element*>(node); RefPtr<CSSComputedStyleDeclaration> computedStyleInfo = computedStyle(node, true); // Support the viewing of :visited information in computed style. @@ -1050,41 +1011,35 @@ void InspectorDOMAgent::getStyles(long callId, long nodeId, bool authorOnly) parentElement = parentElement->parentElement(); currentStyle = parentStyle; } - m_frontend->didGetStyles(callId, result.release()); + *styles = result.release(); } -void InspectorDOMAgent::getAllStyles(long callId) +void InspectorDOMAgent::getAllStyles(RefPtr<InspectorArray>* styles) { - RefPtr<InspectorArray> result = InspectorArray::create(); for (ListHashSet<RefPtr<Document> >::iterator it = m_documents.begin(); it != m_documents.end(); ++it) { StyleSheetList* list = (*it)->styleSheets(); for (unsigned i = 0; i < list->length(); ++i) { StyleSheet* styleSheet = list->item(i); if (styleSheet->isCSSStyleSheet()) - result->push(buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet))); + (*styles)->push(buildObjectForStyleSheet((*it).get(), static_cast<CSSStyleSheet*>(styleSheet))); } } - m_frontend->didGetAllStyles(callId, result.release()); } -void InspectorDOMAgent::getStyleSheet(long callId, long styleSheetId) +void InspectorDOMAgent::getStyleSheet(long styleSheetId, RefPtr<InspectorObject>* styleSheetObject) { CSSStyleSheet* styleSheet = cssStore()->styleSheetForId(styleSheetId); if (styleSheet && styleSheet->doc()) - m_frontend->didGetStyleSheet(callId, buildObjectForStyleSheet(styleSheet->doc(), styleSheet)); - else - m_frontend->didGetStyleSheet(callId, InspectorObject::create()); + *styleSheetObject = buildObjectForStyleSheet(styleSheet->doc(), styleSheet); } -void InspectorDOMAgent::getRuleRanges(long callId, long styleSheetId) +void InspectorDOMAgent::getRuleRanges(long styleSheetId, RefPtr<InspectorValue>* ruleRange) { CSSStyleSheet* styleSheet = cssStore()->styleSheetForId(styleSheetId); if (styleSheet && styleSheet->doc()) { HashMap<long, SourceRange> ruleRanges = cssStore()->getRuleRanges(styleSheet); - if (!ruleRanges.size()) { - m_frontend->didGetStyleSheet(callId, InspectorObject::create()); + if (!ruleRanges.size()) return; - } RefPtr<InspectorObject> result = InspectorObject::create(); for (HashMap<long, SourceRange>::iterator it = ruleRanges.begin(); it != ruleRanges.end(); ++it) { if (it->second.second) { @@ -1096,39 +1051,30 @@ void InspectorDOMAgent::getRuleRanges(long callId, long styleSheetId) bodyRange->setNumber("end", it->second.second); } } - m_frontend->didGetRuleRanges(callId, result); - } else - m_frontend->didGetRuleRanges(callId, InspectorValue::null()); + *ruleRange = result.release(); + } } -void InspectorDOMAgent::getInlineStyle(long callId, long nodeId) +void InspectorDOMAgent::getInlineStyle(long nodeId, RefPtr<InspectorValue>* style) { Node* node = nodeForId(nodeId); - if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetInlineStyle(callId, InspectorValue::null()); + if (!node || node->nodeType() != Node::ELEMENT_NODE) return; - } - Element* element = static_cast<Element*>(node); - m_frontend->didGetInlineStyle(callId, buildObjectForStyle(element->style(), true)); + *style = buildObjectForStyle(static_cast<Element*>(node)->style(), true); } -void InspectorDOMAgent::getComputedStyle(long callId, long nodeId) +void InspectorDOMAgent::getComputedStyle(long nodeId, RefPtr<InspectorValue>* style) { Node* node = nodeForId(nodeId); - if (!node || node->nodeType() != Node::ELEMENT_NODE) { - m_frontend->didGetComputedStyle(callId, InspectorValue::null()); + if (!node || node->nodeType() != Node::ELEMENT_NODE) return; - } DOMWindow* defaultView = node->ownerDocument()->defaultView(); - if (!defaultView) { - m_frontend->didGetComputedStyle(callId, InspectorValue::null()); + if (!defaultView) return; - } Element* element = static_cast<Element*>(node); - RefPtr<CSSStyleDeclaration> computedStyle = defaultView->getComputedStyle(element, ""); - m_frontend->didGetComputedStyle(callId, buildObjectForStyle(computedStyle.get(), false)); + *style = buildObjectForStyle(defaultView->getComputedStyle(element, "").get(), false); } PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForAttributeStyles(Element* element) @@ -1174,13 +1120,11 @@ PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForPseudoElements(Elemen return result.release(); } -void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& styleText, const String& propertyName) +void InspectorDOMAgent::applyStyleText(long styleId, const String& styleText, const String& propertyName, bool* success, RefPtr<InspectorValue>* styleObject, RefPtr<InspectorArray>* changedPropertiesArray) { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); - if (!style) { - m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); + if (!style) return; - } // Remove disabled property entry for property with given name. DisabledStyleDeclaration* disabledStyle = cssStore()->disabledStyleForId(styleId, false); @@ -1207,24 +1151,19 @@ void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& if (!ec) style->removeProperty(propertyName, ec); - if (ec) { - m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); + if (ec) return; - } } // Notify caller that the property was successfully deleted. if (!styleTextLength) { - RefPtr<InspectorArray> changedProperties = InspectorArray::create(); - changedProperties->pushString(propertyName); - m_frontend->didApplyStyleText(callId, true, InspectorValue::null(), changedProperties.release()); + (*changedPropertiesArray)->pushString(propertyName); + *success = true; return; } - if (!tempStyle->length()) { - m_frontend->didApplyStyleText(callId, false, InspectorValue::null(), InspectorArray::create()); + if (!tempStyle->length()) return; - } // Iterate of the properties on the test element's style declaration and // add them to the real style declaration. We take care to move shorthands. @@ -1258,41 +1197,37 @@ void InspectorDOMAgent::applyStyleText(long callId, long styleId, const String& disabledStyle->remove(name); changedProperties.append(name); } - m_frontend->didApplyStyleText(callId, true, buildObjectForStyle(style, true), toArray(changedProperties)); + *success = true; + *styleObject = buildObjectForStyle(style, true); + *changedPropertiesArray = toArray(changedProperties); } -void InspectorDOMAgent::setStyleText(long callId, long styleId, const String& cssText) +void InspectorDOMAgent::setStyleText(long styleId, const String& cssText, bool* success) { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); - if (!style) { - m_frontend->didSetStyleText(callId, false); + if (!style) return; - } ExceptionCode ec = 0; style->setCssText(cssText, ec); - m_frontend->didSetStyleText(callId, !ec); + *success = !ec; } -void InspectorDOMAgent::setStyleProperty(long callId, long styleId, const String& name, const String& value) +void InspectorDOMAgent::setStyleProperty(long styleId, const String& name, const String& value, bool* success) { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); - if (!style) { - m_frontend->didSetStyleProperty(callId, false); + if (!style) return; - } ExceptionCode ec = 0; style->setProperty(name, value, ec); - m_frontend->didSetStyleProperty(callId, !ec); + *success = !ec; } -void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const String& propertyName, bool disabled) +void InspectorDOMAgent::toggleStyleEnabled(long styleId, const String& propertyName, bool disabled, RefPtr<InspectorValue>* styleObject) { CSSStyleDeclaration* style = cssStore()->styleForId(styleId); - if (!style) { - m_frontend->didToggleStyleEnabled(callId, InspectorValue::null()); + if (!style) return; - } DisabledStyleDeclaration* disabledStyle = cssStore()->disabledStyleForId(styleId, true); @@ -1308,30 +1243,24 @@ void InspectorDOMAgent::toggleStyleEnabled(long callId, long styleId, const Stri if (!ec) disabledStyle->remove(propertyName); } - if (ec) { - m_frontend->didToggleStyleEnabled(callId, InspectorValue::null()); + if (ec) return; - } - m_frontend->didToggleStyleEnabled(callId, buildObjectForStyle(style, true)); + *styleObject = buildObjectForStyle(style, true); } -void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String& selector, long selectedNodeId) +void InspectorDOMAgent::setRuleSelector(long ruleId, const String& selector, long selectedNodeId, RefPtr<InspectorValue>* ruleObject, bool* selectorAffectsNode) { CSSStyleRule* rule = cssStore()->ruleForId(ruleId); - if (!rule) { - m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); + if (!rule) return; - } Node* node = nodeForId(selectedNodeId); CSSStyleSheet* styleSheet = rule->parentStyleSheet(); ExceptionCode ec = 0; styleSheet->addRule(selector, rule->style()->cssText(), ec); - if (ec) { - m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); + if (ec) return; - } CSSStyleRule* newRule = static_cast<CSSStyleRule*>(styleSheet->item(styleSheet->length() - 1)); for (unsigned i = 0; i < styleSheet->length(); ++i) { @@ -1341,35 +1270,31 @@ void InspectorDOMAgent::setRuleSelector(long callId, long ruleId, const String& } } - if (ec) { - m_frontend->didSetRuleSelector(callId, InspectorValue::null(), false); + if (ec) return; - } - m_frontend->didSetRuleSelector(callId, buildObjectForRule(node->ownerDocument(), newRule), ruleAffectsNode(newRule, node)); + *selectorAffectsNode = ruleAffectsNode(newRule, node); + *ruleObject = buildObjectForRule(node->ownerDocument(), newRule); } -void InspectorDOMAgent::addRule(long callId, const String& selector, long selectedNodeId) +void InspectorDOMAgent::addRule(const String& selector, long selectedNodeId, RefPtr<InspectorValue>* ruleObject, bool* selectorAffectsNode) { Node* node = nodeForId(selectedNodeId); - if (!node) { - m_frontend->didAddRule(callId, InspectorValue::null(), false); + if (!node) return; - } - CSSStyleSheet* styleSheet = cssStore()->inspectorStyleSheet(node->ownerDocument(), true, callId); + CSSStyleSheet* styleSheet = cssStore()->inspectorStyleSheet(node->ownerDocument(), true); if (!styleSheet) return; // could not add a stylesheet to the ownerDocument ExceptionCode ec = 0; styleSheet->addRule(selector, "", ec); - if (ec) { - m_frontend->didAddRule(callId, InspectorValue::null(), false); + if (ec) return; - } CSSStyleRule* newRule = static_cast<CSSStyleRule*>(styleSheet->item(styleSheet->length() - 1)); - m_frontend->didAddRule(callId, buildObjectForRule(node->ownerDocument(), newRule), ruleAffectsNode(newRule, node)); + *selectorAffectsNode = ruleAffectsNode(newRule, node); + *ruleObject = buildObjectForRule(node->ownerDocument(), newRule); } PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForStyle(CSSStyleDeclaration* style, bool bind) @@ -1471,7 +1396,7 @@ PassRefPtr<InspectorObject> InspectorDOMAgent::buildObjectForRule(Document* owne bool isUser = parentStyleSheet && parentStyleSheet->ownerNode() && parentStyleSheet->ownerNode()->nodeName() == "#document"; result->setBool("isUserAgent", isUserAgent); result->setBool("isUser", isUser); - result->setBool("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false, -1)); + result->setBool("isViaInspector", rule->parentStyleSheet() == cssStore()->inspectorStyleSheet(ownerDocument, false)); // Bind editable scripts only. bool bind = !isUserAgent && !isUser; @@ -1642,17 +1567,10 @@ void InspectorDOMAgent::copyNode(long nodeId) Pasteboard::generalPasteboard()->writePlainText(markup); } -void InspectorDOMAgent::pushNodeByPathToFrontend(long callId, const String& path) +void InspectorDOMAgent::pushNodeByPathToFrontend(const String& path, long* nodeId) { - if (!m_frontend) - return; - - long id = 0; - Node* node = nodeForPath(path); - if (node) - id = pushNodePathToFrontend(node); - - m_frontend->didPushNodeByPathToFrontend(callId, id); + if (Node* node = nodeForPath(path)) + *nodeId = pushNodePathToFrontend(node); } } // namespace WebCore |