10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Apple Inc. All rights reserved. 32daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved. 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * are met: 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 1. Redistributions of source code must retain the above copyright 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer. 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer in the 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * documentation and/or other materials provided with the distribution. 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * its contributors may be used to endorse or promote products derived 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * from this software without specific prior written permission. 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef InspectorDOMAgent_h 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define InspectorDOMAgent_h 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "EventTarget.h" 34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "InjectedScript.h" 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "InjectedScriptManager.h" 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorFrontend.h" 37e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "InspectorValues.h" 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "Timer.h" 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <wtf/Deque.h> 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/ListHashSet.h> 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/HashMap.h> 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/HashSet.h> 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/OwnPtr.h> 452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <wtf/PassOwnPtr.h> 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/RefPtr.h> 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <wtf/Vector.h> 48f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h> 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore { 51ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass ContainerNode; 52ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass CharacterData; 53ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass Document; 54ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass Element; 55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass Event; 562bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass GraphicsContext; 572bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InspectorClient; 58ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass InspectorDOMAgent; 59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass InspectorFrontend; 602bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass HitTestResult; 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass MatchJob; 622bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass HTMLElement; 6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorState; 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InstrumentingAgents; 65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass NameNodeMap; 66ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass Node; 67ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass Page; 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass RevalidateStyleAttributeTask; 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ScriptValue; 7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtypedef String ErrorString; 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 73437eb84238c98f59ef5768ee86ee27c160416c4cLeon Clarke#if ENABLE(INSPECTOR) 74437eb84238c98f59ef5768ee86ee27c160416c4cLeon Clarke 75ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstruct EventListenerInfo { 76ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch EventListenerInfo(Node* node, const AtomicString& eventType, const EventListenerVector& eventListenerVector) 77ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch : node(node) 78ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , eventType(eventType) 79ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , eventListenerVector(eventListenerVector) 80ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 81ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 82ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 83ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Node* node; 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch const AtomicString eventType; 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch const EventListenerVector eventListenerVector; 86ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}; 87ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 882fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass InspectorDOMAgent { 89ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochpublic: 90ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch struct DOMListener { 91ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual ~DOMListener() 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 94ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void didRemoveDocument(Document*) = 0; 95ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void didRemoveDOMNode(Node*) = 0; 96ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void didModifyDOMAttr(Element*) = 0; 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 992bde8e466a4451c7319e3a072d118917957d6554Steve Block static PassOwnPtr<InspectorDOMAgent> create(InstrumentingAgents* instrumentingAgents, Page* page, InspectorClient* client, InspectorState* inspectorState, InjectedScriptManager* injectedScriptManager) 100ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch { 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block return adoptPtr(new InspectorDOMAgent(instrumentingAgents, page, client, inspectorState, injectedScriptManager)); 102ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 103ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 104ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ~InspectorDOMAgent(); 105ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setFrontend(InspectorFrontend*); 10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void clearFrontend(); 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block void restore(); 10981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block Vector<Document*> documents(); 111ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void reset(); 112ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 113ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Methods called from the frontend for DOM nodes inspection. 1142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void querySelector(ErrorString*, int nodeId, const String& selectors, int* elementId); 1152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void querySelectorAll(ErrorString*, int nodeId, const String& selectors, RefPtr<InspectorArray>* result); 11681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void getDocument(ErrorString*, RefPtr<InspectorObject>* root); 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block void getChildNodes(ErrorString*, int nodeId); 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block void setAttribute(ErrorString*, int elementId, const String& name, const String& value); 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block void removeAttribute(ErrorString*, int elementId, const String& name); 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block void removeNode(ErrorString*, int nodeId); 1212bde8e466a4451c7319e3a072d118917957d6554Steve Block void setNodeName(ErrorString*, int nodeId, const String& name, int* newId); 1222bde8e466a4451c7319e3a072d118917957d6554Steve Block void getOuterHTML(ErrorString*, int nodeId, WTF::String* outerHTML); 1232bde8e466a4451c7319e3a072d118917957d6554Steve Block void setOuterHTML(ErrorString*, int nodeId, const String& outerHTML, int* newId); 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block void setNodeValue(ErrorString*, int nodeId, const String& value); 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block void getEventListenersForNode(ErrorString*, int nodeId, RefPtr<InspectorArray>* listenersArray); 1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void performSearch(ErrorString*, const String& whitespaceTrimmedQuery, const bool* const runSynchronously); 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block void cancelSearch(ErrorString*); 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block void resolveNode(ErrorString*, int nodeId, RefPtr<InspectorObject>* result); 1292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void setSearchingForNode(ErrorString*, bool enabled); 1302bde8e466a4451c7319e3a072d118917957d6554Steve Block void pushNodeToFrontend(ErrorString*, const String& objectId, int* nodeId); 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block void pushNodeByPathToFrontend(ErrorString*, const String& path, int* nodeId); 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block void hideHighlight(ErrorString*); 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block void highlightDOMNode(ErrorString*, int nodeId); 1342bde8e466a4451c7319e3a072d118917957d6554Steve Block void hideDOMNodeHighlight(ErrorString* error) { hideHighlight(error); } 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block void highlightFrame(ErrorString*, const String& frameId); 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block void hideFrameHighlight(ErrorString* error) { hideHighlight(error); } 1372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Node* highlightedNode() const { return m_highlightedNode.get(); } 138ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 139ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Methods called from the InspectorInstrumentation. 140ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void setDocument(Document*); 141ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void releaseDanglingNodes(); 142ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void mainFrameDOMContentLoaded(); 1442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void loadEventFired(Document*); 1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 146ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void didInsertDOMNode(Node*); 147ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void didRemoveDOMNode(Node*); 148ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void didModifyDOMAttr(Element*); 149ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void characterDataModified(CharacterData*); 15081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void didInvalidateStyleAttr(Node*); 151ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1522bde8e466a4451c7319e3a072d118917957d6554Steve Block Node* nodeForId(int nodeId); 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block int boundNodeId(Node*); 1542bde8e466a4451c7319e3a072d118917957d6554Steve Block void copyNode(ErrorString*, int nodeId); 155ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void setDOMListener(DOMListener*); 156ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 157ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch String documentURLString(Document*) const; 158ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1592bde8e466a4451c7319e3a072d118917957d6554Steve Block PassRefPtr<InspectorObject> resolveNode(Node*); 1602bde8e466a4451c7319e3a072d118917957d6554Steve Block bool handleMousePress(); 1612bde8e466a4451c7319e3a072d118917957d6554Steve Block bool searchingForNodeInPage() const; 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags); 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block void inspect(Node*); 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block void focusNode(); 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block void drawNodeHighlight(GraphicsContext&) const; 16781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 168ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // We represent embedded doms as a part of the same hierarchy. Hence we treat children of frame owners differently. 169ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // We also skip whitespace text nodes conditionally. Following methods encapsulate these specifics. 170ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static Node* innerFirstChild(Node*); 171ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static Node* innerNextSibling(Node*); 172ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static Node* innerPreviousSibling(Node*); 173ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static unsigned innerChildNodeCount(Node*); 174ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static Node* innerParentNode(Node*); 175ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch static bool isWhitespace(Node*); 176ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 177ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochprivate: 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorDOMAgent(InstrumentingAgents*, Page*, InspectorClient*, InspectorState*, InjectedScriptManager*); 1792bde8e466a4451c7319e3a072d118917957d6554Steve Block 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block void setSearchingForNode(bool enabled); 1812bde8e466a4451c7319e3a072d118917957d6554Steve Block void highlight(ErrorString*, Node*); 18281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 183ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Node-related methods. 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block typedef HashMap<RefPtr<Node>, int> NodeToIdMap; 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block int bind(Node*, NodeToIdMap*); 186ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void unbind(Node*, NodeToIdMap*); 1872bde8e466a4451c7319e3a072d118917957d6554Steve Block Node* assertNode(ErrorString*, int nodeId); 1882bde8e466a4451c7319e3a072d118917957d6554Steve Block Element* assertElement(ErrorString*, int nodeId); 1892bde8e466a4451c7319e3a072d118917957d6554Steve Block HTMLElement* assertHTMLElement(ErrorString*, int nodeId); 190ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1912bde8e466a4451c7319e3a072d118917957d6554Steve Block int pushNodePathToFrontend(Node*); 1922bde8e466a4451c7319e3a072d118917957d6554Steve Block void pushChildNodesToFrontend(int nodeId); 193ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block bool hasBreakpoint(Node*, int type); 195ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void updateSubtreeBreakpoints(Node* root, uint32_t rootMask, bool value); 1962bde8e466a4451c7319e3a072d118917957d6554Steve Block void descriptionForDOMEvent(Node* target, int breakpointType, bool insertion, PassRefPtr<InspectorObject> description); 197ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 198ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PassRefPtr<InspectorObject> buildObjectForNode(Node*, int depth, NodeToIdMap*); 199ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PassRefPtr<InspectorArray> buildArrayForElementAttributes(Element*); 200ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PassRefPtr<InspectorArray> buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap); 201ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PassRefPtr<InspectorObject> buildObjectForEventListener(const RegisteredEventListener&, const AtomicString& eventType, Node*); 202ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 203ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void onMatchJobsTimer(Timer<InspectorDOMAgent>*); 204ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void reportNodesAsSearchResults(ListHashSet<Node*>& resultCollector); 205ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 206ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Node* nodeForPath(const String& path); 207ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch PassRefPtr<InspectorArray> toArray(const Vector<String>& data); 208ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 209ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void discardBindings(); 210ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 21181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InstrumentingAgents* m_instrumentingAgents; 2122bde8e466a4451c7319e3a072d118917957d6554Steve Block Page* m_inspectedPage; 2132bde8e466a4451c7319e3a072d118917957d6554Steve Block InspectorClient* m_client; 21481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InspectorState* m_inspectorState; 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block InjectedScriptManager* m_injectedScriptManager; 21681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch InspectorFrontend::DOM* m_frontend; 217ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch DOMListener* m_domListener; 218ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch NodeToIdMap m_documentNodeToIdMap; 219ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Owns node mappings for dangling nodes. 220ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Vector<NodeToIdMap*> m_danglingNodeToIdMaps; 2212bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<int, Node*> m_idToNode; 2222bde8e466a4451c7319e3a072d118917957d6554Steve Block HashMap<int, NodeToIdMap*> m_idToNodesMap; 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block HashSet<int> m_childrenRequested; 2242bde8e466a4451c7319e3a072d118917957d6554Steve Block int m_lastNodeId; 2252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<Document> m_document; 226ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Deque<MatchJob*> m_pendingMatchJobs; 227ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Timer<InspectorDOMAgent> m_matchJobsTimer; 228ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch HashSet<RefPtr<Node> > m_searchResults; 22981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch OwnPtr<RevalidateStyleAttributeTask> m_revalidateStyleAttrTask; 2302bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<Node> m_highlightedNode; 2312bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<Node> m_nodeToFocus; 2322bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_searchingForNode; 233ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}; 234ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 235ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif // ENABLE(INSPECTOR) 236437eb84238c98f59ef5768ee86ee27c160416c4cLeon Clarke 2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore 2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // !defined(InspectorDOMAgent_h) 240