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
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1.  Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2.  Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *     documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef InspectorConsoleAgent_h
2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define InspectorConsoleAgent_h
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "Console.h"
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorFrontend.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Forward.h>
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/HashMap.h>
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Noncopyable.h>
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/StringHash.h>
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/Vector.h>
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebCore {
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ConsoleMessage;
412fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass InspectorAgent;
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InspectorDOMAgent;
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass InspectorFrontend;
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass InspectorState;
452bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass InjectedScriptManager;
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass InstrumentingAgents;
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ResourceError;
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ResourceResponse;
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ScriptArguments;
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ScriptCallStack;
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass ScriptProfile;
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtypedef String ErrorString;
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass InspectorConsoleAgent {
56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(InspectorConsoleAgent);
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic:
582bde8e466a4451c7319e3a072d118917957d6554Steve Block    InspectorConsoleAgent(InstrumentingAgents*, InspectorAgent*, InspectorState*, InjectedScriptManager*, InspectorDOMAgent*);
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ~InspectorConsoleAgent();
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
612bde8e466a4451c7319e3a072d118917957d6554Steve Block    void enable(ErrorString*, int* consoleMessageExpireCount);
622bde8e466a4451c7319e3a072d118917957d6554Steve Block    void disable(ErrorString*);
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void clearConsoleMessages(ErrorString* error);
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void reset();
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void setFrontend(InspectorFrontend*);
6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void clearFrontend();
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID);
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void startTiming(const String& title);
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void stopTiming(const String& title, PassRefPtr<ScriptCallStack>);
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void count(PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>);
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void resourceRetrievedByXMLHttpRequest(const String& url, const String& sendURL, unsigned sendLineNumber);
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didReceiveResponse(unsigned long identifier, const ResourceResponse&);
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void didFailLoading(unsigned long identifier, const ResourceError&);
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(JAVASCRIPT_DEBUGGER)
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL);
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL);
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
8281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void setMonitoringXHREnabled(ErrorString* error, bool enabled);
832bde8e466a4451c7319e3a072d118917957d6554Steve Block    void addInspectedNode(ErrorString*, int nodeId);
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprivate:
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    void addConsoleMessage(PassOwnPtr<ConsoleMessage>);
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InstrumentingAgents* m_instrumentingAgents;
892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    InspectorAgent* m_inspectorAgent;
9081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorState* m_inspectorState;
912bde8e466a4451c7319e3a072d118917957d6554Steve Block    InjectedScriptManager* m_injectedScriptManager;
9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorDOMAgent* m_inspectorDOMAgent;
9381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    InspectorFrontend::Console* m_frontend;
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ConsoleMessage* m_previousMessage;
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Vector<OwnPtr<ConsoleMessage> > m_consoleMessages;
962bde8e466a4451c7319e3a072d118917957d6554Steve Block    int m_expiredConsoleMessageCount;
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashMap<String, unsigned> m_counts;
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HashMap<String, double> m_times;
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch};
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebCore
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // !defined(InspectorConsoleAgent_h)
106