01e5c4458b498a1b4c0be807fe21507682c9a1ae
[WebKit-https.git] / Source / WebCore / inspector / InspectorController.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  * Copyright (C) 2015 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifndef InspectorController_h
33 #define InspectorController_h
34
35 #include "InspectorInstrumentationCookie.h"
36 #include "InspectorOverlay.h"
37 #include <inspector/InspectorAgentRegistry.h>
38 #include <inspector/InspectorEnvironment.h>
39 #include <wtf/Forward.h>
40 #include <wtf/HashMap.h>
41 #include <wtf/Noncopyable.h>
42 #include <wtf/Vector.h>
43 #include <wtf/text/WTFString.h>
44
45 namespace Inspector {
46 class BackendDispatcher;
47 class FrontendChannel;
48 class FrontendRouter;
49 class InspectorAgent;
50 class InspectorObject;
51
52 namespace Protocol {
53 namespace OverlayTypes {
54 class NodeHighlightData;
55 }
56 }
57 }
58
59 namespace WebCore {
60
61 class DOMWrapperWorld;
62 class Frame;
63 class GraphicsContext;
64 class InspectorClient;
65 class InspectorDOMAgent;
66 class InspectorDOMDebuggerAgent;
67 class InspectorFrontendClient;
68 class InspectorInstrumentation;
69 class InspectorPageAgent;
70 class InspectorResourceAgent;
71 class InspectorTimelineAgent;
72 class InstrumentingAgents;
73 class Node;
74 class Page;
75 class PageDebuggerAgent;
76 class WebInjectedScriptManager;
77
78 class InspectorController final : public Inspector::InspectorEnvironment {
79     WTF_MAKE_NONCOPYABLE(InspectorController);
80     WTF_MAKE_FAST_ALLOCATED;
81 public:
82     InspectorController(Page&, InspectorClient*);
83     virtual ~InspectorController();
84
85     void inspectedPageDestroyed();
86
87     bool enabled() const;
88     Page& inspectedPage() const;
89
90     WEBCORE_EXPORT void show();
91
92     WEBCORE_EXPORT void setInspectorFrontendClient(InspectorFrontendClient*);
93     bool hasInspectorFrontendClient() const;
94     void didClearWindowObjectInWorld(Frame&, DOMWrapperWorld&);
95
96     WEBCORE_EXPORT void dispatchMessageFromFrontend(const String& message);
97
98     bool hasLocalFrontend() const;
99     bool hasRemoteFrontend() const;
100
101     WEBCORE_EXPORT void connectFrontend(Inspector::FrontendChannel*, bool isAutomaticInspection = false);
102     WEBCORE_EXPORT void disconnectFrontend(Inspector::FrontendChannel*);
103     WEBCORE_EXPORT void disconnectAllFrontends();
104     void setProcessId(long);
105
106     void inspect(Node*);
107     WEBCORE_EXPORT void drawHighlight(GraphicsContext&) const;
108     WEBCORE_EXPORT void getHighlight(Highlight&, InspectorOverlay::CoordinateSystem) const;
109     void hideHighlight();
110     Node* highlightedNode() const;
111
112     void setIndicating(bool);
113
114     WEBCORE_EXPORT Ref<Inspector::Protocol::Array<Inspector::Protocol::OverlayTypes::NodeHighlightData>> buildObjectForHighlightedNodes() const;
115
116     bool isUnderTest() const { return m_isUnderTest; }
117     void setIsUnderTest(bool isUnderTest) { m_isUnderTest = isUnderTest; }
118     WEBCORE_EXPORT void evaluateForTestInFrontend(const String& script);
119
120     WEBCORE_EXPORT bool profilerEnabled() const;
121     WEBCORE_EXPORT void setProfilerEnabled(bool);
122
123     InspectorClient* inspectorClient() const { return m_inspectorClient; }
124     InspectorPageAgent* pageAgent() const { return m_pageAgent; }
125
126     virtual bool developerExtrasEnabled() const override;
127     virtual bool canAccessInspectedScriptState(JSC::ExecState*) const override;
128     virtual Inspector::InspectorFunctionCallHandler functionCallHandler() const override;
129     virtual Inspector::InspectorEvaluateHandler evaluateHandler() const override;
130     virtual void willCallInjectedScriptFunction(JSC::ExecState*, const String& scriptName, int scriptLine) override;
131     virtual void didCallInjectedScriptFunction(JSC::ExecState*) override;
132     virtual void frontendInitialized() override;
133     virtual Ref<WTF::Stopwatch> executionStopwatch() override;
134     virtual JSC::VM& vm() override;
135
136     WEBCORE_EXPORT void didComposite(Frame&);
137
138 private:
139     friend class InspectorInstrumentation;
140
141     Ref<InstrumentingAgents> m_instrumentingAgents;
142     std::unique_ptr<WebInjectedScriptManager> m_injectedScriptManager;
143     Ref<Inspector::FrontendRouter> m_frontendRouter;
144     Ref<Inspector::BackendDispatcher> m_backendDispatcher;
145     std::unique_ptr<InspectorOverlay> m_overlay;
146     Ref<WTF::Stopwatch> m_executionStopwatch;
147     Inspector::AgentRegistry m_agents;
148
149     Page& m_page;
150     InspectorClient* m_inspectorClient;
151     InspectorFrontendClient* m_inspectorFrontendClient { nullptr };
152
153     Inspector::InspectorAgent* m_inspectorAgent { nullptr };
154     InspectorDOMAgent* m_domAgent { nullptr };
155     InspectorResourceAgent* m_resourceAgent { nullptr };
156     InspectorPageAgent* m_pageAgent { nullptr };
157     InspectorDOMDebuggerAgent* m_domDebuggerAgent { nullptr };
158     InspectorTimelineAgent* m_timelineAgent { nullptr };
159
160     Vector<InspectorInstrumentationCookie, 2> m_injectedScriptInstrumentationCookies;
161     bool m_isUnderTest { false };
162     bool m_isAutomaticInspection { false };
163 };
164
165 } // namespace WebCore
166
167 #endif // !defined(InspectorController_h)