Changeset 147428 in webkit
- Timestamp:
- Apr 2, 2013 7:28:48 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r147426 r147428 1 2013-04-02 Dmitry Gozman <dgozman@chromium.org> 2 3 Web Inspector: allow referencing of nodes that have not been pushed to the front-end 4 https://bugs.webkit.org/show_bug.cgi?id=110921 5 6 Reviewed by Pavel Feldman. 7 8 Nodes not yet pushed to front-end are referenced by BackendNodeId and retained. 9 One can group nodes when generating BackendNodeIds to release them all together later. 10 11 To resolve node references by BackendNodeId, frontend should use new pushNodeByBackendIdToFrontend method. 12 This will invalidate the generated BackendNodeId. 13 14 * inspector/Inspector.json: 15 * inspector/InspectorDOMAgent.cpp: 16 (WebCore::InspectorDOMAgent::discardBindings): 17 (WebCore::InspectorDOMAgent::backendNodeIdForNode): 18 (WebCore::InspectorDOMAgent::releaseBackendNodeIds): 19 (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend): 20 * inspector/InspectorDOMAgent.h: 21 (WebCore): 22 (InspectorDOMAgent): 23 1 24 2013-04-02 Andrei Bucur <abucur@adobe.com> 2 25 -
trunk/Source/WebCore/inspector/Inspector.json
r147202 r147428 1714 1714 "type": "integer", 1715 1715 "description": "Unique DOM node identifier." 1716 }, 1717 { 1718 "id": "BackendNodeId", 1719 "type": "integer", 1720 "description": "Unique DOM node identifier used to reference a node that may not have been pushed to the front-end.", 1721 "hidden": true 1716 1722 }, 1717 1723 { … … 2015 2021 ], 2016 2022 "description": "Requests that the node is sent to the caller given its path. // FIXME, use XPath", 2023 "hidden": true 2024 }, 2025 { 2026 "name": "pushNodeByBackendIdToFrontend", 2027 "parameters": [ 2028 { "name": "backendNodeId", "$ref": "BackendNodeId", "description": "The backend node id of the node." } 2029 ], 2030 "returns": [ 2031 { "name": "nodeId", "$ref": "NodeId", "description": "The pushed node's id." } 2032 ], 2033 "description": "Requests that the node is sent to the caller given its backend node id.", 2034 "hidden": true 2035 }, 2036 { 2037 "name": "releaseBackendNodeIds", 2038 "parameters": [ 2039 { "name": "nodeGroup", "type": "string", "description": "The backend node ids group name." } 2040 ], 2041 "description": "Requests that group of <code>BackendNodeIds</code> is released.", 2017 2042 "hidden": true 2018 2043 }, -
trunk/Source/WebCore/inspector/InspectorDOMAgent.cpp
r147202 r147428 228 228 , m_domListener(0) 229 229 , m_lastNodeId(1) 230 , m_lastBackendNodeId(-1) 230 231 , m_searchingForNode(false) 231 232 , m_suppressAttributeModifiedEvent(false) … … 492 493 releaseDanglingNodes(); 493 494 m_childrenRequested.clear(); 495 m_backendIdToNode.clear(); 496 m_nodeGroupToBackendIdMap.clear(); 494 497 } 495 498 … … 623 626 { 624 627 return m_documentNodeToIdMap.get(node); 628 } 629 630 BackendNodeId InspectorDOMAgent::backendNodeIdForNode(Node* node, const String& nodeGroup) 631 { 632 if (!node) 633 return 0; 634 635 if (!m_nodeGroupToBackendIdMap.contains(nodeGroup)) 636 m_nodeGroupToBackendIdMap.set(nodeGroup, NodeToBackendIdMap()); 637 638 NodeToBackendIdMap& map = m_nodeGroupToBackendIdMap.find(nodeGroup)->value; 639 BackendNodeId id = map.get(node); 640 if (!id) { 641 id = --m_lastBackendNodeId; 642 map.set(node, id); 643 m_backendIdToNode.set(id, std::make_pair(node, nodeGroup)); 644 } 645 646 return id; 647 } 648 649 void InspectorDOMAgent::releaseBackendNodeIds(ErrorString* errorString, const String& nodeGroup) 650 { 651 if (m_nodeGroupToBackendIdMap.contains(nodeGroup)) { 652 NodeToBackendIdMap& map = m_nodeGroupToBackendIdMap.find(nodeGroup)->value; 653 for (NodeToBackendIdMap::iterator it = map.begin(); it != map.end(); ++it) 654 m_backendIdToNode.remove(it->value); 655 m_nodeGroupToBackendIdMap.remove(nodeGroup); 656 return; 657 } 658 *errorString = "Group name not found"; 625 659 } 626 660 … … 1768 1802 } 1769 1803 1804 void InspectorDOMAgent::pushNodeByBackendIdToFrontend(ErrorString* errorString, BackendNodeId backendNodeId, int* nodeId) 1805 { 1806 if (!m_backendIdToNode.contains(backendNodeId)) { 1807 *errorString = "No node with given backend id found"; 1808 return; 1809 } 1810 1811 Node* node = m_backendIdToNode.get(backendNodeId).first; 1812 String nodeGroup = m_backendIdToNode.get(backendNodeId).second; 1813 *nodeId = pushNodePathToFrontend(node); 1814 1815 if (nodeGroup == "") { 1816 m_backendIdToNode.remove(backendNodeId); 1817 m_nodeGroupToBackendIdMap.find(nodeGroup)->value.remove(node); 1818 } 1819 } 1820 1770 1821 PassRefPtr<TypeBuilder::Runtime::RemoteObject> InspectorDOMAgent::resolveNode(Node* node, const String& objectGroup) 1771 1822 { -
trunk/Source/WebCore/inspector/InspectorDOMAgent.h
r147202 r147428 76 76 77 77 typedef String ErrorString; 78 typedef int BackendNodeId; 78 79 79 80 #if ENABLE(INSPECTOR) … … 142 143 virtual void requestNode(ErrorString*, const String& objectId, int* nodeId); 143 144 virtual void pushNodeByPathToFrontend(ErrorString*, const String& path, int* nodeId); 145 virtual void pushNodeByBackendIdToFrontend(ErrorString*, BackendNodeId, int* nodeId); 146 virtual void releaseBackendNodeIds(ErrorString*, const String& nodeGroup); 144 147 virtual void hideHighlight(ErrorString*); 145 148 virtual void highlightRect(ErrorString*, int x, int y, int width, int height, const RefPtr<InspectorObject>* color, const RefPtr<InspectorObject>* outlineColor); … … 180 183 int boundNodeId(Node*); 181 184 void setDOMListener(DOMListener*); 185 BackendNodeId backendNodeIdForNode(Node*, const String& nodeGroup); 182 186 183 187 static String documentURLString(Document*); … … 247 251 DOMListener* m_domListener; 248 252 NodeToIdMap m_documentNodeToIdMap; 253 typedef HashMap<RefPtr<Node>, BackendNodeId> NodeToBackendIdMap; 254 HashMap<String, NodeToBackendIdMap> m_nodeGroupToBackendIdMap; 249 255 // Owns node mappings for dangling nodes. 250 256 Vector<OwnPtr<NodeToIdMap> > m_danglingNodeToIdMaps; … … 252 258 HashMap<int, NodeToIdMap*> m_idToNodesMap; 253 259 HashSet<int> m_childrenRequested; 260 HashMap<BackendNodeId, std::pair<Node*, String> > m_backendIdToNode; 254 261 int m_lastNodeId; 262 BackendNodeId m_lastBackendNodeId; 255 263 RefPtr<Document> m_document; 256 264 typedef HashMap<String, Vector<RefPtr<Node> > > SearchResults;
Note: See TracChangeset
for help on using the changeset viewer.