165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions are
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     * Redistributions of source code must retain the above copyright
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer.
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     * Redistributions in binary form must reproduce the above
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * copyright notice, this list of conditions and the following disclaimer
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * in the documentation and/or other materials provided with the
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * distribution.
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     * Neither the name of Google Inc. nor the names of its
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * contributors may be used to endorse or promote products derived from
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * this software without specific prior written permission.
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef InspectorBrowserDebuggerAgent_h
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define InspectorBrowserDebuggerAgent_h
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorDebuggerAgent.h"
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PlatformString.h"
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/HashMap.h>
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/PassOwnPtr.h>
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RefCounted.h>
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebCore {
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass Element;
452fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass InspectorAgent;
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorDOMAgent;
4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorDebuggerAgent;
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorFrontend;
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass InspectorObject;
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorState;
5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InstrumentingAgents;
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass Node;
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtypedef String ErrorString;
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorBrowserDebuggerAgent : public InspectorDebuggerAgent::Listener {
57ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(InspectorBrowserDebuggerAgent);
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic:
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static PassOwnPtr<InspectorBrowserDebuggerAgent> create(InstrumentingAgents*, InspectorState*, InspectorDOMAgent*, InspectorDebuggerAgent*, InspectorAgent*);
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual ~InspectorBrowserDebuggerAgent();
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void clearFrontend();
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // BrowserDebugger API for InspectorFrontend
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setXHRBreakpoint(ErrorString*, const String& url);
672bde8e466a4451c7319e3a072d118917957d6554Steve Block    void removeXHRBreakpoint(ErrorString*, const String& url);
682bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setEventListenerBreakpoint(ErrorString*, const String& eventName);
692bde8e466a4451c7319e3a072d118917957d6554Steve Block    void removeEventListenerBreakpoint(ErrorString*, const String& eventName);
702bde8e466a4451c7319e3a072d118917957d6554Steve Block    void setDOMBreakpoint(ErrorString*, int nodeId, int type);
712bde8e466a4451c7319e3a072d118917957d6554Steve Block    void removeDOMBreakpoint(ErrorString*, int nodeId, int type);
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // InspectorInstrumentation API
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void willInsertDOMNode(Node*, Node* parent);
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didInsertDOMNode(Node*);
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void willRemoveDOMNode(Node*);
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didRemoveDOMNode(Node*);
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void willModifyDOMAttr(Element*);
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void willSendXMLHttpRequest(const String& url);
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous);
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprivate:
8381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorBrowserDebuggerAgent(InstrumentingAgents*, InspectorState*, InspectorDOMAgent*, InspectorDebuggerAgent*, InspectorAgent*);
8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // InspectorDebuggerAgent::Listener implementation.
8681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void debuggerWasEnabled();
8781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void debuggerWasDisabled();
8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void disable();
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
902bde8e466a4451c7319e3a072d118917957d6554Steve Block    void descriptionForDOMEvent(Node* target, int breakpointType, bool insertion, InspectorObject* description);
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set);
922bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool hasBreakpoint(Node*, int type);
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void discardBindings();
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void clear();
9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InstrumentingAgents* m_instrumentingAgents;
9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorState* m_inspectorState;
9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorDOMAgent* m_domAgent;
10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorDebuggerAgent* m_debuggerAgent;
1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    InspectorAgent* m_inspectorAgent;
102ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    HashMap<Node*, uint32_t> m_domBreakpoints;
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch};
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebCore
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR)
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // !defined(InspectorBrowserDebuggerAgent_h)
110