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