OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
4 * Copyright (C) 2009 Joseph Pecoraro | 4 * Copyright (C) 2009 Joseph Pecoraro |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * | 9 * |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 { | 496 { |
497 m_backendIdToNode.clear(); | 497 m_backendIdToNode.clear(); |
498 m_nodeGroupToBackendIdMap.clear(); | 498 m_nodeGroupToBackendIdMap.clear(); |
499 } | 499 } |
500 | 500 |
501 int InspectorDOMAgent::pushNodeToFrontend(ErrorString* errorString, int document
NodeId, Node* nodeToPush) | 501 int InspectorDOMAgent::pushNodeToFrontend(ErrorString* errorString, int document
NodeId, Node* nodeToPush) |
502 { | 502 { |
503 Document* document = assertDocument(errorString, documentNodeId); | 503 Document* document = assertDocument(errorString, documentNodeId); |
504 if (!document) | 504 if (!document) |
505 return 0; | 505 return 0; |
506 if (nodeToPush->document() != document) { | 506 if (&nodeToPush->document() != document) { |
507 *errorString = "Node is not part of the document with given id"; | 507 *errorString = "Node is not part of the document with given id"; |
508 return 0; | 508 return 0; |
509 } | 509 } |
510 | 510 |
511 return pushNodePathToFrontend(nodeToPush); | 511 return pushNodePathToFrontend(nodeToPush); |
512 } | 512 } |
513 | 513 |
514 Node* InspectorDOMAgent::nodeForId(int id) | 514 Node* InspectorDOMAgent::nodeForId(int id) |
515 { | 515 { |
516 if (!id) | 516 if (!id) |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 m_domEditor->setAttribute(element, name, value, errorString); | 669 m_domEditor->setAttribute(element, name, value, errorString); |
670 } | 670 } |
671 | 671 |
672 void InspectorDOMAgent::setAttributesAsText(ErrorString* errorString, int elemen
tId, const String& text, const String* const name) | 672 void InspectorDOMAgent::setAttributesAsText(ErrorString* errorString, int elemen
tId, const String& text, const String* const name) |
673 { | 673 { |
674 Element* element = assertEditableElement(errorString, elementId); | 674 Element* element = assertEditableElement(errorString, elementId); |
675 if (!element) | 675 if (!element) |
676 return; | 676 return; |
677 | 677 |
678 String markup = "<span " + text + "></span>"; | 678 String markup = "<span " + text + "></span>"; |
679 RefPtr<DocumentFragment> fragment = element->document()->createDocumentFragm
ent(); | 679 RefPtr<DocumentFragment> fragment = element->document().createDocumentFragme
nt(); |
680 | 680 |
681 bool shouldIgnoreCase = element->document()->isHTMLDocument() && element->is
HTMLElement(); | 681 bool shouldIgnoreCase = element->document().isHTMLDocument() && element->isH
TMLElement(); |
682 // Not all elements can represent the context (i.e. IFRAME), hence using doc
ument.body. | 682 // Not all elements can represent the context (i.e. IFRAME), hence using doc
ument.body. |
683 if (shouldIgnoreCase && element->document()->body()) | 683 if (shouldIgnoreCase && element->document().body()) |
684 fragment->parseHTML(markup, element->document()->body(), DisallowScripti
ngContent); | 684 fragment->parseHTML(markup, element->document().body(), DisallowScriptin
gContent); |
685 else | 685 else |
686 fragment->parseXML(markup, 0, DisallowScriptingContent); | 686 fragment->parseXML(markup, 0, DisallowScriptingContent); |
687 | 687 |
688 Element* parsedElement = fragment->firstChild() && fragment->firstChild()->i
sElementNode() ? toElement(fragment->firstChild()) : 0; | 688 Element* parsedElement = fragment->firstChild() && fragment->firstChild()->i
sElementNode() ? toElement(fragment->firstChild()) : 0; |
689 if (!parsedElement) { | 689 if (!parsedElement) { |
690 *errorString = "Could not parse value as attributes"; | 690 *errorString = "Could not parse value as attributes"; |
691 return; | 691 return; |
692 } | 692 } |
693 | 693 |
694 String caseAdjustedName = name ? (shouldIgnoreCase ? name->lower() : *name)
: String(); | 694 String caseAdjustedName = name ? (shouldIgnoreCase ? name->lower() : *name)
: String(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
741 | 741 |
742 void InspectorDOMAgent::setNodeName(ErrorString* errorString, int nodeId, const
String& tagName, int* newId) | 742 void InspectorDOMAgent::setNodeName(ErrorString* errorString, int nodeId, const
String& tagName, int* newId) |
743 { | 743 { |
744 *newId = 0; | 744 *newId = 0; |
745 | 745 |
746 Node* oldNode = nodeForId(nodeId); | 746 Node* oldNode = nodeForId(nodeId); |
747 if (!oldNode || !oldNode->isElementNode()) | 747 if (!oldNode || !oldNode->isElementNode()) |
748 return; | 748 return; |
749 | 749 |
750 TrackExceptionState es; | 750 TrackExceptionState es; |
751 RefPtr<Element> newElem = oldNode->document()->createElement(tagName, es); | 751 RefPtr<Element> newElem = oldNode->document().createElement(tagName, es); |
752 if (es.hadException()) | 752 if (es.hadException()) |
753 return; | 753 return; |
754 | 754 |
755 // Copy over the original node's attributes. | 755 // Copy over the original node's attributes. |
756 newElem->cloneAttributesFromElement(*toElement(oldNode)); | 756 newElem->cloneAttributesFromElement(*toElement(oldNode)); |
757 | 757 |
758 // Copy over the original node's children. | 758 // Copy over the original node's children. |
759 Node* child; | 759 Node* child; |
760 while ((child = oldNode->firstChild())) { | 760 while ((child = oldNode->firstChild())) { |
761 if (!m_domEditor->insertBefore(newElem.get(), child, 0, errorString)) | 761 if (!m_domEditor->insertBefore(newElem.get(), child, 0, errorString)) |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 return; | 1330 return; |
1331 | 1331 |
1332 Vector<FloatQuad> quads; | 1332 Vector<FloatQuad> quads; |
1333 bool isInlineOrBox = m_overlay->getBoxModel(node, &quads); | 1333 bool isInlineOrBox = m_overlay->getBoxModel(node, &quads); |
1334 if (!isInlineOrBox) { | 1334 if (!isInlineOrBox) { |
1335 *errorString = "Could not compute box model."; | 1335 *errorString = "Could not compute box model."; |
1336 return; | 1336 return; |
1337 } | 1337 } |
1338 | 1338 |
1339 RenderObject* renderer = node->renderer(); | 1339 RenderObject* renderer = node->renderer(); |
1340 Frame* frame = node->document()->frame(); | 1340 Frame* frame = node->document().frame(); |
1341 FrameView* view = frame->view(); | 1341 FrameView* view = frame->view(); |
1342 | 1342 |
1343 IntRect boundingBox = pixelSnappedIntRect(view->contentsToRootView(renderer-
>absoluteBoundingBoxRect())); | 1343 IntRect boundingBox = pixelSnappedIntRect(view->contentsToRootView(renderer-
>absoluteBoundingBoxRect())); |
1344 RenderBoxModelObject* modelObject = renderer->isBoxModelObject() ? toRenderB
oxModelObject(renderer) : 0; | 1344 RenderBoxModelObject* modelObject = renderer->isBoxModelObject() ? toRenderB
oxModelObject(renderer) : 0; |
1345 | 1345 |
1346 model = TypeBuilder::DOM::BoxModel::create() | 1346 model = TypeBuilder::DOM::BoxModel::create() |
1347 .setContent(buildArrayForQuad(quads.at(3))) | 1347 .setContent(buildArrayForQuad(quads.at(3))) |
1348 .setPadding(buildArrayForQuad(quads.at(2))) | 1348 .setPadding(buildArrayForQuad(quads.at(2))) |
1349 .setBorder(buildArrayForQuad(quads.at(1))) | 1349 .setBorder(buildArrayForQuad(quads.at(1))) |
1350 .setMargin(buildArrayForQuad(quads.at(0))) | 1350 .setMargin(buildArrayForQuad(quads.at(0))) |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1526 while (child) { | 1526 while (child) { |
1527 children->addItem(buildObjectForNode(child, depth, nodesMap)); | 1527 children->addItem(buildObjectForNode(child, depth, nodesMap)); |
1528 child = innerNextSibling(child); | 1528 child = innerNextSibling(child); |
1529 } | 1529 } |
1530 return children.release(); | 1530 return children.release(); |
1531 } | 1531 } |
1532 | 1532 |
1533 PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEve
ntListener(const RegisteredEventListener& registeredEventListener, const AtomicS
tring& eventType, Node* node, const String* objectGroupId) | 1533 PassRefPtr<TypeBuilder::DOM::EventListener> InspectorDOMAgent::buildObjectForEve
ntListener(const RegisteredEventListener& registeredEventListener, const AtomicS
tring& eventType, Node* node, const String* objectGroupId) |
1534 { | 1534 { |
1535 RefPtr<EventListener> eventListener = registeredEventListener.listener; | 1535 RefPtr<EventListener> eventListener = registeredEventListener.listener; |
1536 Document* document = node->document(); | 1536 Document& document = node->document(); |
1537 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe
ner::create() | 1537 RefPtr<TypeBuilder::DOM::EventListener> value = TypeBuilder::DOM::EventListe
ner::create() |
1538 .setType(eventType) | 1538 .setType(eventType) |
1539 .setUseCapture(registeredEventListener.useCapture) | 1539 .setUseCapture(registeredEventListener.useCapture) |
1540 .setIsAttribute(eventListener->isAttribute()) | 1540 .setIsAttribute(eventListener->isAttribute()) |
1541 .setNodeId(pushNodePathToFrontend(node)) | 1541 .setNodeId(pushNodePathToFrontend(node)) |
1542 .setHandlerBody(eventListenerHandlerBody(document, eventListener.get()))
; | 1542 .setHandlerBody(eventListenerHandlerBody(&document, eventListener.get())
); |
1543 if (objectGroupId) { | 1543 if (objectGroupId) { |
1544 ScriptValue functionValue = eventListenerHandler(document, eventListener
.get()); | 1544 ScriptValue functionValue = eventListenerHandler(&document, eventListene
r.get()); |
1545 if (!functionValue.hasNoValue()) { | 1545 if (!functionValue.hasNoValue()) { |
1546 Frame* frame = document->frame(); | 1546 Frame* frame = document.frame(); |
1547 if (frame) { | 1547 if (frame) { |
1548 ScriptState* scriptState = eventListenerHandlerScriptState(frame
, eventListener.get()); | 1548 ScriptState* scriptState = eventListenerHandlerScriptState(frame
, eventListener.get()); |
1549 if (scriptState) { | 1549 if (scriptState) { |
1550 InjectedScript injectedScript = m_injectedScriptManager->inj
ectedScriptFor(scriptState); | 1550 InjectedScript injectedScript = m_injectedScriptManager->inj
ectedScriptFor(scriptState); |
1551 if (!injectedScript.hasNoValue()) { | 1551 if (!injectedScript.hasNoValue()) { |
1552 RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = i
njectedScript.wrapObject(functionValue, *objectGroupId); | 1552 RefPtr<TypeBuilder::Runtime::RemoteObject> valueJson = i
njectedScript.wrapObject(functionValue, *objectGroupId); |
1553 value->setHandler(valueJson); | 1553 value->setHandler(valueJson); |
1554 } | 1554 } |
1555 } | 1555 } |
1556 } | 1556 } |
1557 } | 1557 } |
1558 } | 1558 } |
1559 String sourceName; | 1559 String sourceName; |
1560 String scriptId; | 1560 String scriptId; |
1561 int lineNumber; | 1561 int lineNumber; |
1562 if (eventListenerHandlerLocation(node->document(), eventListener.get(), sour
ceName, scriptId, lineNumber)) { | 1562 if (eventListenerHandlerLocation(&node->document(), eventListener.get(), sou
rceName, scriptId, lineNumber)) { |
1563 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger
::Location::create() | 1563 RefPtr<TypeBuilder::Debugger::Location> location = TypeBuilder::Debugger
::Location::create() |
1564 .setScriptId(scriptId) | 1564 .setScriptId(scriptId) |
1565 .setLineNumber(lineNumber); | 1565 .setLineNumber(lineNumber); |
1566 value->setLocation(location); | 1566 value->setLocation(location); |
1567 if (!sourceName.isEmpty()) | 1567 if (!sourceName.isEmpty()) |
1568 value->setSourceName(sourceName); | 1568 value->setSourceName(sourceName); |
1569 } | 1569 } |
1570 return value.release(); | 1570 return value.release(); |
1571 } | 1571 } |
1572 | 1572 |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1876 *nodeId = pushNodePathToFrontend(node); | 1876 *nodeId = pushNodePathToFrontend(node); |
1877 | 1877 |
1878 if (nodeGroup == "") { | 1878 if (nodeGroup == "") { |
1879 m_backendIdToNode.remove(backendNodeId); | 1879 m_backendIdToNode.remove(backendNodeId); |
1880 m_nodeGroupToBackendIdMap.find(nodeGroup)->value.remove(node); | 1880 m_nodeGroupToBackendIdMap.find(nodeGroup)->value.remove(node); |
1881 } | 1881 } |
1882 } | 1882 } |
1883 | 1883 |
1884 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InspectorDOMAgent::resolveNode(No
de* node, const String& objectGroup) | 1884 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InspectorDOMAgent::resolveNode(No
de* node, const String& objectGroup) |
1885 { | 1885 { |
1886 Document* document = node->isDocumentNode() ? node->document() : node->owner
Document(); | 1886 Document* document = node->isDocumentNode() ? &node->document() : node->owne
rDocument(); |
1887 Frame* frame = document ? document->frame() : 0; | 1887 Frame* frame = document ? document->frame() : 0; |
1888 if (!frame) | 1888 if (!frame) |
1889 return 0; | 1889 return 0; |
1890 | 1890 |
1891 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m
ainWorldScriptState(frame)); | 1891 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m
ainWorldScriptState(frame)); |
1892 if (injectedScript.hasNoValue()) | 1892 if (injectedScript.hasNoValue()) |
1893 return 0; | 1893 return 0; |
1894 | 1894 |
1895 return injectedScript.wrapNode(node, objectGroup); | 1895 return injectedScript.wrapNode(node, objectGroup); |
1896 } | 1896 } |
1897 | 1897 |
1898 } // namespace WebCore | 1898 } // namespace WebCore |
1899 | 1899 |
OLD | NEW |