4820ed663fd84f77e7a244827186b13f302d476a
[WebKit-https.git] / Source / WebCore / inspector / InspectorPageAgent.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 InspectorPageAgent_h
32 #define InspectorPageAgent_h
33
34 #if ENABLE(INSPECTOR)
35
36 #include "InspectorWebAgentBase.h"
37 #include "InspectorWebBackendDispatchers.h"
38 #include "InspectorWebFrontendDispatchers.h"
39 #include "IntSize.h"
40 #include "LayoutRect.h"
41 #include <wtf/HashMap.h>
42 #include <wtf/RefCounted.h>
43 #include <wtf/Vector.h>
44 #include <wtf/text/WTFString.h>
45
46 namespace Inspector {
47 class InspectorArray;
48 class InspectorObject;
49 }
50
51 namespace WebCore {
52
53 class CachedResource;
54 class DOMWrapperWorld;
55 class DocumentLoader;
56 class Frame;
57 class Frontend;
58 class GraphicsContext;
59 class InspectorClient;
60 class InspectorOverlay;
61 class InstrumentingAgents;
62 class URL;
63 class Page;
64 class RegularExpression;
65 class SharedBuffer;
66 class TextResourceDecoder;
67
68 typedef String ErrorString;
69
70 class InspectorPageAgent : public InspectorAgentBase, public Inspector::InspectorPageBackendDispatcherHandler {
71     WTF_MAKE_NONCOPYABLE(InspectorPageAgent);
72 public:
73     InspectorPageAgent(InstrumentingAgents*, Page*, InspectorClient*, InspectorOverlay*);
74
75     enum ResourceType {
76         DocumentResource,
77         StylesheetResource,
78         ImageResource,
79         FontResource,
80         ScriptResource,
81         XHRResource,
82         WebSocketResource,
83         OtherResource
84     };
85
86     static bool cachedResourceContent(CachedResource*, String* result, bool* base64Encoded);
87     static bool sharedBufferContent(PassRefPtr<SharedBuffer>, const String& textEncodingName, bool withBase64Encode, String* result);
88     static void resourceContent(ErrorString*, Frame*, const URL&, String* result, bool* base64Encoded);
89     static String sourceMapURLForResource(CachedResource*);
90
91     static PassRefPtr<SharedBuffer> resourceData(Frame*, const URL&, String* textEncodingName);
92     static CachedResource* cachedResource(Frame*, const URL&);
93     static Inspector::TypeBuilder::Page::ResourceType::Enum resourceTypeJson(ResourceType);
94     static ResourceType cachedResourceType(const CachedResource&);
95     static Inspector::TypeBuilder::Page::ResourceType::Enum cachedResourceTypeJson(const CachedResource&);
96
97     // Page API for InspectorFrontend
98     virtual void enable(ErrorString*);
99     virtual void disable(ErrorString*);
100     virtual void addScriptToEvaluateOnLoad(ErrorString*, const String& source, String* result);
101     virtual void removeScriptToEvaluateOnLoad(ErrorString*, const String& identifier);
102     virtual void reload(ErrorString*, const bool* optionalIgnoreCache, const String* optionalScriptToEvaluateOnLoad);
103     virtual void navigate(ErrorString*, const String& url);
104     virtual void getCookies(ErrorString*, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Page::Cookie>>& cookies);
105     virtual void deleteCookie(ErrorString*, const String& cookieName, const String& url);
106     virtual void getResourceTree(ErrorString*, RefPtr<Inspector::TypeBuilder::Page::FrameResourceTree>&);
107     virtual void getResourceContent(ErrorString*, const String& frameId, const String& url, String* content, bool* base64Encoded);
108     virtual void searchInResource(ErrorString*, const String& frameId, const String& url, const String& query, const bool* optionalCaseSensitive, const bool* optionalIsRegex, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::GenericTypes::SearchMatch>>&);
109     virtual void searchInResources(ErrorString*, const String&, const bool* caseSensitive, const bool* isRegex, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::Page::SearchResult>>&);
110     virtual void setDocumentContent(ErrorString*, const String& frameId, const String& html);
111     virtual void setShowPaintRects(ErrorString*, bool show);
112     virtual void canShowDebugBorders(ErrorString*, bool*);
113     virtual void setShowDebugBorders(ErrorString*, bool show);
114     virtual void canShowFPSCounter(ErrorString*, bool*);
115     virtual void setShowFPSCounter(ErrorString*, bool show);
116     virtual void canContinuouslyPaint(ErrorString*, bool*);
117     virtual void setContinuousPaintingEnabled(ErrorString*, bool enabled);
118     virtual void getScriptExecutionStatus(ErrorString*, Inspector::InspectorPageBackendDispatcherHandler::Result::Enum*);
119     virtual void setScriptExecutionDisabled(ErrorString*, bool);
120     virtual void setTouchEmulationEnabled(ErrorString*, bool);
121     virtual void setEmulatedMedia(ErrorString*, const String&);
122     virtual void getCompositingBordersVisible(ErrorString*, bool* out_param);
123     virtual void setCompositingBordersVisible(ErrorString*, bool);
124     virtual void snapshotNode(ErrorString*, int nodeId, String* outDataURL);
125     virtual void snapshotRect(ErrorString*, int x, int y, int width, int height, const String& coordinateSystem, String* outDataURL);
126     virtual void handleJavaScriptDialog(ErrorString*, bool accept, const String* promptText);
127     virtual void archive(ErrorString*, String* data);
128
129     // InspectorInstrumentation API
130     void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld&);
131     void domContentEventFired();
132     void loadEventFired();
133     void frameNavigated(DocumentLoader*);
134     void frameDetached(Frame*);
135     void loaderDetachedFromFrame(DocumentLoader*);
136     void frameStartedLoading(Frame&);
137     void frameStoppedLoading(Frame&);
138     void frameScheduledNavigation(Frame&, double delay);
139     void frameClearedScheduledNavigation(Frame&);
140     void willRunJavaScriptDialog(const String& message);
141     void didRunJavaScriptDialog();
142     void applyEmulatedMedia(String*);
143     void didPaint(GraphicsContext*, const LayoutRect&);
144     void didLayout();
145     void didScroll();
146     void didRecalculateStyle();
147     void scriptsEnabled(bool isEnabled);
148
149     // Inspector Controller API
150     virtual void didCreateFrontendAndBackend(Inspector::InspectorFrontendChannel*, Inspector::InspectorBackendDispatcher*) override;
151     virtual void willDestroyFrontendAndBackend() override;
152
153     // Cross-agents API
154     Page* page() { return m_page; }
155     Frame* mainFrame();
156     String createIdentifier();
157     Frame* frameForId(const String& frameId);
158     String frameId(Frame*);
159     bool hasIdForFrame(Frame*) const;
160     String loaderId(DocumentLoader*);
161     Frame* findFrameWithSecurityOrigin(const String& originRawString);
162     Frame* assertFrame(ErrorString*, const String& frameId);
163     static DocumentLoader* assertDocumentLoader(ErrorString*, Frame*);
164
165 private:
166 #if ENABLE(TOUCH_EVENTS)
167     void updateTouchEventEmulationInPage(bool);
168 #endif
169
170     static bool mainResourceContent(Frame*, bool withBase64Encode, String* result);
171     static bool dataContent(const char* data, unsigned size, const String& textEncodingName, bool withBase64Encode, String* result);
172
173     PassRefPtr<Inspector::TypeBuilder::Page::Frame> buildObjectForFrame(Frame*);
174     PassRefPtr<Inspector::TypeBuilder::Page::FrameResourceTree> buildObjectForFrameTree(Frame*);
175     Page* m_page;
176     InspectorClient* m_client;
177     std::unique_ptr<Inspector::InspectorPageFrontendDispatcher> m_frontendDispatcher;
178     RefPtr<Inspector::InspectorPageBackendDispatcher> m_backendDispatcher;
179     InspectorOverlay* m_overlay;
180     long m_lastScriptIdentifier;
181     String m_pendingScriptToEvaluateOnLoadOnce;
182     String m_scriptToEvaluateOnLoadOnce;
183     HashMap<Frame*, String> m_frameToIdentifier;
184     HashMap<String, Frame*> m_identifierToFrame;
185     HashMap<DocumentLoader*, String> m_loaderToIdentifier;
186     bool m_enabled;
187     bool m_isFirstLayoutAfterOnLoad;
188     bool m_originalScriptExecutionDisabled;
189     bool m_ignoreScriptsEnabledNotification;
190     bool m_showPaintRects;
191     String m_emulatedMedia;
192     RefPtr<Inspector::InspectorObject> m_scriptsToEvaluateOnLoad;
193 };
194
195
196 } // namespace WebCore
197
198 #endif // ENABLE(INSPECTOR)
199
200 #endif // !defined(InspectorPagerAgent_h)