Remove document as a parameter from a few internals methods
[WebKit-https.git] / Source / WebCore / testing / Internals.h
1 /*
2  * Copyright (C) 2012 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef Internals_h
27 #define Internals_h
28
29 #include "ContextDestructionObserver.h"
30 #include "ExceptionCodePlaceholder.h"
31 #include "NodeList.h"
32 #include <wtf/ArrayBuffer.h>
33 #include <wtf/PassRefPtr.h>
34 #include <wtf/RefCounted.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38
39 class ClientRect;
40 class ClientRectList;
41 class DOMStringList;
42 class DOMWindow;
43 class Document;
44 class DocumentMarker;
45 class Element;
46 class Frame;
47 class InspectorFrontendChannelDummy;
48 class InternalSettings;
49 class Node;
50 class Page;
51 class PagePopupController;
52 class Range;
53 class ScriptExecutionContext;
54 class ShadowRoot;
55 class WebKitPoint;
56 class MallocStatistics;
57 class SerializedScriptValue;
58 class TypeConversions;
59
60 typedef int ExceptionCode;
61
62 class Internals : public RefCounted<Internals>
63                 , public ContextDestructionObserver {
64 public:
65     static PassRefPtr<Internals> create(Document*);
66     virtual ~Internals();
67
68     static void resetToConsistentState(Page*);
69
70     String elementRenderTreeAsText(Element*, ExceptionCode&);
71
72     String address(Node*);
73
74     bool isPreloaded(const String& url);
75
76     size_t numberOfScopedHTMLStyleChildren(const Node*, ExceptionCode&) const;
77
78 #if ENABLE(SHADOW_DOM)
79     typedef ShadowRoot ShadowRootIfShadowDOMEnabledOrNode;
80 #else
81     typedef Node ShadowRootIfShadowDOMEnabledOrNode;
82 #endif
83     ShadowRootIfShadowDOMEnabledOrNode* ensureShadowRoot(Element* host, ExceptionCode&);
84     ShadowRootIfShadowDOMEnabledOrNode* createShadowRoot(Element* host, ExceptionCode&);
85     ShadowRootIfShadowDOMEnabledOrNode* shadowRoot(Element* host, ExceptionCode&);
86     ShadowRootIfShadowDOMEnabledOrNode* youngestShadowRoot(Element* host, ExceptionCode&);
87     ShadowRootIfShadowDOMEnabledOrNode* oldestShadowRoot(Element* host, ExceptionCode&);
88     ShadowRootIfShadowDOMEnabledOrNode* youngerShadowRoot(Node* shadow, ExceptionCode&);
89     ShadowRootIfShadowDOMEnabledOrNode* olderShadowRoot(Node* shadow, ExceptionCode&);
90     String shadowRootType(const Node*, ExceptionCode&) const;
91     bool hasShadowInsertionPoint(const Node*, ExceptionCode&) const;
92     bool hasContentElement(const Node*, ExceptionCode&) const;
93     size_t countElementShadow(const Node*, ExceptionCode&) const;
94     Element* includerFor(Node*, ExceptionCode&);
95     String shadowPseudoId(Element*, ExceptionCode&);
96     void setShadowPseudoId(Element*, const String&, ExceptionCode&);
97
98     bool pauseAnimationAtTimeOnPseudoElement(const String& animationName, double pauseTime, Element*, const String& pseudoId, ExceptionCode&);
99     bool pauseTransitionAtTimeOnPseudoElement(const String& property, double pauseTime, Element*, const String& pseudoId, ExceptionCode&);
100
101     PassRefPtr<Element> createContentElement(ExceptionCode&);
102     bool isValidContentSelect(Element* insertionPoint, ExceptionCode&);
103     Node* treeScopeRootNode(Node*, ExceptionCode&);
104     Node* parentTreeScope(Node*, ExceptionCode&);
105     bool hasSelectorForIdInShadow(Element* host, const String& idValue, ExceptionCode&);
106     bool hasSelectorForClassInShadow(Element* host, const String& className, ExceptionCode&);
107     bool hasSelectorForAttributeInShadow(Element* host, const String& attributeName, ExceptionCode&);
108     bool hasSelectorForPseudoClassInShadow(Element* host, const String& pseudoClass, ExceptionCode&);
109
110     bool attached(Node*, ExceptionCode&);
111
112     // FIXME: Rename these functions if walker is prefered.
113     Node* nextSiblingByWalker(Node*, ExceptionCode&);
114     Node* firstChildByWalker(Node*, ExceptionCode&);
115     Node* lastChildByWalker(Node*, ExceptionCode&);
116     Node* nextNodeByWalker(Node*, ExceptionCode&);
117     Node* previousNodeByWalker(Node*, ExceptionCode&);
118
119     String visiblePlaceholder(Element*);
120 #if ENABLE(INPUT_TYPE_COLOR)
121     void selectColorInColorChooser(Element*, const String& colorValue);
122 #endif
123     Vector<String> formControlStateOfPreviousHistoryItem(ExceptionCode&);
124     void setFormControlStateOfPreviousHistoryItem(const Vector<String>&, ExceptionCode&);
125     void setEnableMockPagePopup(bool, ExceptionCode&);
126 #if ENABLE(PAGE_POPUP)
127     PassRefPtr<PagePopupController> pagePopupController();
128 #endif
129
130     PassRefPtr<ClientRect> absoluteCaretBounds(ExceptionCode&);
131
132     PassRefPtr<ClientRect> boundingBox(Element*, ExceptionCode&);
133
134     PassRefPtr<ClientRectList> inspectorHighlightRects(Document*, ExceptionCode&);
135
136     void setBackgroundBlurOnNode(Node*, int blurLength, ExceptionCode&);
137
138     unsigned markerCountForNode(Node*, const String&, ExceptionCode&);
139     PassRefPtr<Range> markerRangeForNode(Node*, const String& markerType, unsigned index, ExceptionCode&);
140     String markerDescriptionForNode(Node*, const String& markerType, unsigned index, ExceptionCode&);
141     void addTextMatchMarker(const Range*, bool isActive);
142
143     void setScrollViewPosition(Document*, long x, long y, ExceptionCode&);
144     void setPagination(Document* document, const String& mode, int gap, ExceptionCode& ec) { setPagination(document, mode, gap, 0, ec); }
145     void setPagination(Document*, const String& mode, int gap, int pageLength, ExceptionCode&);
146     String configurationForViewport(Document*, float devicePixelRatio, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight, ExceptionCode&);
147
148     bool wasLastChangeUserEdit(Element* textField, ExceptionCode&);
149     String suggestedValue(Element* inputElement, ExceptionCode&);
150     void setSuggestedValue(Element* inputElement, const String&, ExceptionCode&);
151     void setEditingValue(Element* inputElement, const String&, ExceptionCode&);
152     void scrollElementToRect(Element*, long x, long y, long w, long h, ExceptionCode&);
153
154     void paintControlTints(Document*, ExceptionCode&);
155
156     PassRefPtr<Range> rangeFromLocationAndLength(Element* scope, int rangeLocation, int rangeLength, ExceptionCode&);
157     unsigned locationFromRange(Element* scope, const Range*, ExceptionCode&);
158     unsigned lengthFromRange(Element* scope, const Range*, ExceptionCode&);
159     String rangeAsText(const Range*, ExceptionCode&);
160
161     void setDelegatesScrolling(bool enabled, Document*, ExceptionCode&);
162 #if ENABLE(TOUCH_ADJUSTMENT)
163     PassRefPtr<WebKitPoint> touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document*, ExceptionCode&);
164     Node* touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document*, ExceptionCode&);
165     PassRefPtr<WebKitPoint> touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document*, ExceptionCode&);
166     Node* touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document*, ExceptionCode&);
167     PassRefPtr<ClientRect> bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document*, ExceptionCode&);
168 #endif
169
170     int lastSpellCheckRequestSequence(Document*, ExceptionCode&);
171     int lastSpellCheckProcessedSequence(Document*, ExceptionCode&);
172
173     Vector<String> userPreferredLanguages() const;
174     void setUserPreferredLanguages(const Vector<String>&);
175
176     unsigned wheelEventHandlerCount(Document*, ExceptionCode&);
177     unsigned touchEventHandlerCount(Document*, ExceptionCode&);
178 #if ENABLE(TOUCH_EVENT_TRACKING)
179     PassRefPtr<ClientRectList> touchEventTargetClientRects(Document*, ExceptionCode&);
180 #endif
181
182     PassRefPtr<NodeList> nodesFromRect(Document*, int x, int y, unsigned topPadding, unsigned rightPadding,
183         unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, ExceptionCode&) const;
184
185     void emitInspectorDidBeginFrame();
186     void emitInspectorDidCancelFrame();
187
188     bool hasSpellingMarker(Document*, int from, int length, ExceptionCode&);
189     bool hasGrammarMarker(Document*, int from, int length, ExceptionCode&);
190     bool hasAutocorrectedMarker(Document*, int from, int length, ExceptionCode&);
191
192     unsigned numberOfScrollableAreas(Document*, ExceptionCode&);
193
194     bool isPageBoxVisible(Document*, int pageNumber, ExceptionCode&);
195
196     static const char* internalsId;
197
198     InternalSettings* settings() const;
199
200     void setBatteryStatus(Document*, const String& eventType, bool charging, double chargingTime, double dischargingTime, double level, ExceptionCode&);
201
202     void setNetworkInformation(Document*, const String& eventType, double bandwidth, bool metered, ExceptionCode&);
203
204     void setDeviceProximity(Document*, const String& eventType, double value, double min, double max, ExceptionCode&);
205
206     void suspendAnimations(Document*, ExceptionCode&) const;
207     void resumeAnimations(Document*, ExceptionCode&) const;
208
209     enum {
210         // Values need to be kept in sync with Internals.idl.
211         LAYER_TREE_INCLUDES_VISIBLE_RECTS = 1,
212         LAYER_TREE_INCLUDES_TILE_CACHES = 2,
213         LAYER_TREE_INCLUDES_REPAINT_RECTS = 4
214         
215     };
216     String layerTreeAsText(Document*, unsigned flags, ExceptionCode&) const;
217     String layerTreeAsText(Document*, ExceptionCode&) const;
218     String repaintRectsAsText(Document*, ExceptionCode&) const;
219     String scrollingStateTreeAsText(Document*, ExceptionCode&) const;
220     String mainThreadScrollingReasons(Document*, ExceptionCode&) const;
221     PassRefPtr<ClientRectList> nonFastScrollableRects(Document*, ExceptionCode&) const;
222
223     void garbageCollectDocumentResources(Document*, ExceptionCode&) const;
224
225     void allowRoundingHacks() const;
226
227     void insertAuthorCSS(Document*, const String&) const;
228     void insertUserCSS(Document*, const String&) const;
229
230 #if ENABLE(INSPECTOR)
231     unsigned numberOfLiveNodes() const;
232     unsigned numberOfLiveDocuments() const;
233     Vector<String> consoleMessageArgumentCounts(Document*) const;
234     PassRefPtr<DOMWindow> openDummyInspectorFrontend(const String& url);
235     void closeDummyInspectorFrontend();
236     void setInspectorResourcesDataSizeLimits(int maximumResourcesContentSize, int maximumSingleResourceContentSize, ExceptionCode&);
237     void setJavaScriptProfilingEnabled(bool enabled, ExceptionCode&);
238 #endif
239
240     String counterValue(Element*);
241
242     int pageNumber(Element*, float pageWidth = 800, float pageHeight = 600);
243     Vector<String> iconURLs(Document*) const;
244
245     int numberOfPages(float pageWidthInPixels = 800, float pageHeightInPixels = 600);
246     String pageProperty(String, int, ExceptionCode& = ASSERT_NO_EXCEPTION) const;
247     String pageSizeAndMarginsInPixels(int, int, int, int, int, int, int, ExceptionCode& = ASSERT_NO_EXCEPTION) const;
248
249     void setPageScaleFactor(float scaleFactor, int x, int y, ExceptionCode&);
250
251 #if ENABLE(FULLSCREEN_API)
252     void webkitWillEnterFullScreenForElement(Document*, Element*);
253     void webkitDidEnterFullScreenForElement(Document*, Element*);
254     void webkitWillExitFullScreenForElement(Document*, Element*);
255     void webkitDidExitFullScreenForElement(Document*, Element*);
256 #endif
257
258     void registerURLSchemeAsBypassingContentSecurityPolicy(const String& scheme);
259     void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(const String& scheme);
260
261     PassRefPtr<MallocStatistics> mallocStatistics() const;
262     PassRefPtr<TypeConversions> typeConversions() const;
263
264     Vector<String> getReferencedFilePaths() const;
265
266     void startTrackingRepaints(Document*, ExceptionCode&);
267     void stopTrackingRepaints(Document*, ExceptionCode&);
268
269     PassRefPtr<ArrayBuffer> serializeObject(PassRefPtr<SerializedScriptValue>) const;
270     PassRefPtr<SerializedScriptValue> deserializeBuffer(PassRefPtr<ArrayBuffer>) const;
271
272     void setUsesOverlayScrollbars(bool enabled);
273
274     String getCurrentCursorInfo(Document*, ExceptionCode&);
275
276 private:
277     explicit Internals(Document*);
278     Document* contextDocument() const;
279     Frame* frame() const;
280
281     DocumentMarker* markerAt(Node*, const String& markerType, unsigned index, ExceptionCode&);
282 #if ENABLE(INSPECTOR)
283     RefPtr<DOMWindow> m_frontendWindow;
284     OwnPtr<InspectorFrontendChannelDummy> m_frontendChannel;
285 #endif
286 };
287
288 } // namespace WebCore
289
290 #endif