2011-07-04 Vsevolod Vlasov <vsevik@chromium.org>
[WebKit-https.git] / Source / WebCore / inspector / InspectorController.h
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 are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef InspectorController_h
32 #define InspectorController_h
33
34 #include "PlatformString.h"
35 #include <wtf/Forward.h>
36 #include <wtf/Noncopyable.h>
37 #include <wtf/Vector.h>
38
39 namespace WebCore {
40
41 class DOMWrapperWorld;
42 class Frame;
43 class GraphicsContext;
44 class InjectedScriptManager;
45 class InspectorAgent;
46 class InspectorApplicationCacheAgent;
47 class InspectorBackendDispatcher;
48 class InspectorCSSAgent;
49 class InspectorClient;
50 class InspectorConsoleAgent;
51 class InspectorDOMAgent;
52 class InspectorDOMDebuggerAgent;
53 class InspectorDOMStorageAgent;
54 class InspectorDatabaseAgent;
55 class InspectorDebuggerAgent;
56 class InspectorFrontend;
57 class InspectorFrontendClient;
58 class InspectorPageAgent;
59 class InspectorProfilerAgent;
60 class InspectorResourceAgent;
61 class InspectorRuntimeAgent;
62 class InspectorState;
63 class InspectorStorageAgent;
64 class InspectorTimelineAgent;
65 class InspectorWorkerAgent;
66 class InstrumentingAgents;
67 class Page;
68 class PostWorkerNotificationToFrontendTask;
69 class Node;
70
71 class InspectorController {
72     WTF_MAKE_NONCOPYABLE(InspectorController);
73     WTF_MAKE_FAST_ALLOCATED;
74 public:
75     InspectorController(Page*, InspectorClient*);
76     ~InspectorController();
77     void inspectedPageDestroyed();
78
79     bool enabled() const;
80     Page* inspectedPage() const;
81
82     void show();
83     void close();
84
85     void setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient>);
86     bool hasInspectorFrontendClient() const;
87     void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*);
88     void setInspectorExtensionAPI(const String& source);
89
90     void dispatchMessageFromFrontend(const String& message);
91
92     bool hasFrontend() const { return m_inspectorFrontend; }
93     void connectFrontend();
94     void disconnectFrontend();
95     void restoreInspectorStateFromCookie(const String& inspectorCookie);
96     void setAgentIdentifierPrefix(const String&);
97
98     void showConsole();
99     void inspect(Node*);
100     void drawNodeHighlight(GraphicsContext&) const;
101     void hideHighlight();
102     Node* highlightedNode() const;
103
104     void evaluateForTestInFrontend(long callId, const String& script);
105
106     void startTimelineProfiler();
107     void stopTimelineProfiler();
108     bool timelineProfilerEnabled();
109
110 #if ENABLE(JAVASCRIPT_DEBUGGER)
111     bool profilerEnabled();
112     void enableProfiler();
113     void startUserInitiatedProfiling();
114     bool isRecordingUserInitiatedProfile() const;
115     void stopUserInitiatedProfiling();
116     void disableProfiler();
117     void showAndEnableDebugger();
118     bool debuggerEnabled();
119     void disableDebugger();
120     void resume();
121 #endif
122
123     void setResourcesDataSizeLimitsFromInternals(int maximumResourcesContentSize, int maximumSingleResourceContentSize);
124
125 private:
126     friend class PostWorkerNotificationToFrontendTask;
127
128     OwnPtr<InstrumentingAgents> m_instrumentingAgents;
129     OwnPtr<InjectedScriptManager> m_injectedScriptManager;
130     OwnPtr<InspectorState> m_state;
131     OwnPtr<InspectorAgent> m_inspectorAgent;
132
133     OwnPtr<InspectorPageAgent> m_pageAgent;
134     OwnPtr<InspectorDOMAgent> m_domAgent;
135     OwnPtr<InspectorCSSAgent> m_cssAgent;
136 #if ENABLE(DATABASE)
137     OwnPtr<InspectorDatabaseAgent> m_databaseAgent;
138 #endif
139 #if ENABLE(DOM_STORAGE)
140     OwnPtr<InspectorDOMStorageAgent> m_domStorageAgent;
141 #endif
142     OwnPtr<InspectorTimelineAgent> m_timelineAgent;
143 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
144     OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent;
145 #endif
146     RefPtr<InspectorResourceAgent> m_resourceAgent;
147     OwnPtr<InspectorRuntimeAgent> m_runtimeAgent;
148     OwnPtr<InspectorConsoleAgent> m_consoleAgent;
149 #if ENABLE(JAVASCRIPT_DEBUGGER)
150     OwnPtr<InspectorDebuggerAgent> m_debuggerAgent;
151     OwnPtr<InspectorDOMDebuggerAgent> m_domDebuggerAgent;
152     OwnPtr<InspectorProfilerAgent> m_profilerAgent;
153 #endif
154 #if ENABLE(WORKERS)
155     OwnPtr<InspectorWorkerAgent> m_workerAgent;
156 #endif
157
158     RefPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher;
159     OwnPtr<InspectorFrontendClient> m_inspectorFrontendClient;
160     OwnPtr<InspectorFrontend> m_inspectorFrontend;
161     Page* m_page;
162     InspectorClient* m_inspectorClient;
163     bool m_openingFrontend;
164     bool m_startUserInitiatedDebuggingWhenFrontedIsConnected;
165 };
166
167 }
168
169 #endif // !defined(InspectorController_h)