• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 
25 #ifndef InspectorConsoleAgent_h
26 #define InspectorConsoleAgent_h
27 
28 #include "bindings/v8/ScriptState.h"
29 #include "bindings/v8/ScriptString.h"
30 #include "core/InspectorFrontend.h"
31 #include "core/inspector/ConsoleAPITypes.h"
32 #include "core/inspector/InspectorBaseAgent.h"
33 #include "core/frame/ConsoleTypes.h"
34 #include "wtf/Forward.h"
35 #include "wtf/HashCountedSet.h"
36 #include "wtf/HashMap.h"
37 #include "wtf/Noncopyable.h"
38 #include "wtf/Vector.h"
39 #include "wtf/text/StringHash.h"
40 
41 namespace WebCore {
42 
43 class ConsoleMessage;
44 class DocumentLoader;
45 class LocalDOMWindow;
46 class LocalFrame;
47 class InspectorFrontend;
48 class InjectedScriptManager;
49 class InspectorTimelineAgent;
50 class InstrumentingAgents;
51 class ResourceError;
52 class ResourceLoader;
53 class ResourceResponse;
54 class ScriptArguments;
55 class ScriptCallStack;
56 class ScriptProfile;
57 class ThreadableLoaderClient;
58 class XMLHttpRequest;
59 
60 typedef String ErrorString;
61 
62 class InspectorConsoleAgent : public InspectorBaseAgent<InspectorConsoleAgent>, public InspectorBackendDispatcher::ConsoleCommandHandler {
63     WTF_MAKE_NONCOPYABLE(InspectorConsoleAgent);
64 public:
65     InspectorConsoleAgent(InspectorTimelineAgent*, InjectedScriptManager*);
66     virtual ~InspectorConsoleAgent();
67 
68     virtual void init() OVERRIDE;
69     virtual void enable(ErrorString*) OVERRIDE FINAL;
70     virtual void disable(ErrorString*) OVERRIDE FINAL;
71     virtual void clearMessages(ErrorString*) OVERRIDE;
enabled()72     bool enabled() { return m_enabled; }
73     void reset();
74 
75     virtual void setFrontend(InspectorFrontend*) OVERRIDE FINAL;
76     virtual void clearFrontend() OVERRIDE FINAL;
77     virtual void restore() OVERRIDE FINAL;
78 
79     void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, ScriptState*, PassRefPtrWillBeRawPtr<ScriptArguments>, unsigned long requestIdentifier = 0);
80     void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, const String& scriptId, unsigned lineNumber, unsigned columnNumber = 0, ScriptState* = 0, unsigned long requestIdentifier = 0);
81 
82     // FIXME: Remove once we no longer generate stacks outside of Inspector.
83     void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, PassRefPtrWillBeRawPtr<ScriptCallStack>, unsigned long requestIdentifier = 0);
84 
85     Vector<unsigned> consoleMessageArgumentCounts();
86 
87     void consoleTime(ExecutionContext*, const String& title);
88     void consoleTimeEnd(ExecutionContext*, const String& title, ScriptState*);
89     void consoleTimeline(ExecutionContext*, const String& title, ScriptState*);
90     void consoleTimelineEnd(ExecutionContext*, const String& title, ScriptState*);
91 
92     void consoleCount(ScriptState*, PassRefPtrWillBeRawPtr<ScriptArguments>);
93 
94     void frameWindowDiscarded(LocalDOMWindow*);
95     void didCommitLoad(LocalFrame*, DocumentLoader*);
96 
97     void didFinishXHRLoading(XMLHttpRequest*, ThreadableLoaderClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& method, const String& url, const String& sendURL, unsigned sendLineNumber);
98     void didReceiveResourceResponse(LocalFrame*, unsigned long requestIdentifier, DocumentLoader*, const ResourceResponse&, ResourceLoader*);
99     void didFailLoading(unsigned long requestIdentifier, const ResourceError&);
100     void addProfileFinishedMessageToConsole(PassRefPtrWillBeRawPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL);
101     void addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL);
102     virtual void setMonitoringXHREnabled(ErrorString*, bool enabled) OVERRIDE;
103     virtual void addInspectedNode(ErrorString*, int nodeId) = 0;
104     virtual void addInspectedHeapObject(ErrorString*, int inspectedHeapObjectId) OVERRIDE;
105 
106     virtual bool isWorkerAgent() = 0;
107 
108 protected:
109     void addConsoleMessage(PassOwnPtr<ConsoleMessage>);
110 
111     InspectorTimelineAgent* m_timelineAgent;
112     InjectedScriptManager* m_injectedScriptManager;
113     InspectorFrontend::Console* m_frontend;
114     Vector<OwnPtr<ConsoleMessage> > m_consoleMessages;
115     int m_expiredConsoleMessageCount;
116     HashCountedSet<String> m_counts;
117     HashMap<String, double> m_times;
118     bool m_enabled;
119 private:
120     static int s_enabledAgentCount;
121 };
122 
123 } // namespace WebCore
124 
125 
126 #endif // !defined(InspectorConsoleAgent_h)
127