/* * Copyright (C) 2012 Google Inc. All rights reserved. * Copyright (C) 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef Internals_h #define Internals_h #include "bindings/v8/ExceptionStatePlaceholder.h" #include "bindings/v8/ScriptValue.h" #include "core/css/CSSComputedStyleDeclaration.h" #include "core/dom/ContextLifecycleObserver.h" #include "core/dom/NodeList.h" #include "core/page/scrolling/ScrollingCoordinator.h" #include #include #include #include namespace WebCore { class ClientRect; class ClientRectList; class DOMPoint; class DOMStringList; class DOMWindow; class Document; class DocumentMarker; class Element; class ExceptionState; class Frame; class GCObservation; class InspectorFrontendChannelDummy; class InternalProfilers; class InternalRuntimeFlags; class InternalSettings; class LayerRectList; class MallocStatistics; class Node; class Page; class PagePopupController; class Range; class ScriptExecutionContext; class SerializedScriptValue; class ShadowRoot; class TypeConversions; class Internals : public RefCounted , public ContextLifecycleObserver , public ScrollingCoordinator::TouchEventTargetRectsObserver { public: static PassRefPtr create(Document*); virtual ~Internals(); static void resetToConsistentState(Page*); String elementRenderTreeAsText(Element*, ExceptionState&); String address(Node*); PassRefPtr observeGC(ScriptValue); bool isPreloaded(const String& url); bool isLoadingFromMemoryCache(const String& url); void crash(); size_t numberOfScopedHTMLStyleChildren(const Node*, ExceptionState&) const; PassRefPtr computedStyleIncludingVisitedInfo(Node*, ExceptionState&) const; ShadowRoot* ensureShadowRoot(Element* host, ExceptionState&); ShadowRoot* shadowRoot(Element* host, ExceptionState&); ShadowRoot* youngestShadowRoot(Element* host, ExceptionState&); ShadowRoot* oldestShadowRoot(Element* host, ExceptionState&); ShadowRoot* youngerShadowRoot(Node* shadow, ExceptionState&); ShadowRoot* olderShadowRoot(Node* shadow, ExceptionState&); String shadowRootType(const Node*, ExceptionState&) const; bool hasShadowInsertionPoint(const Node*, ExceptionState&) const; bool hasContentElement(const Node*, ExceptionState&) const; size_t countElementShadow(const Node*, ExceptionState&) const; Element* includerFor(Node*, ExceptionState&); String shadowPseudoId(Element*, ExceptionState&); void setShadowPseudoId(Element*, const String&, ExceptionState&); // CSS Animation / Transition testing. unsigned numberOfActiveAnimations() const; void suspendAnimations(Document*, ExceptionState&) const; void resumeAnimations(Document*, ExceptionState&) const; void pauseAnimations(double pauseTime, ExceptionState&); PassRefPtr createContentElement(ExceptionState&); bool isValidContentSelect(Element* insertionPoint, ExceptionState&); Node* treeScopeRootNode(Node*, ExceptionState&); Node* parentTreeScope(Node*, ExceptionState&); bool hasSelectorForIdInShadow(Element* host, const String& idValue, ExceptionState&); bool hasSelectorForClassInShadow(Element* host, const String& className, ExceptionState&); bool hasSelectorForAttributeInShadow(Element* host, const String& attributeName, ExceptionState&); bool hasSelectorForPseudoClassInShadow(Element* host, const String& pseudoClass, ExceptionState&); unsigned short compareTreeScopePosition(const Node*, const Node*, ExceptionState&) const; bool attached(Node*, ExceptionState&); // FIXME: Rename these functions if walker is prefered. Node* nextSiblingByWalker(Node*, ExceptionState&); Node* firstChildByWalker(Node*, ExceptionState&); Node* lastChildByWalker(Node*, ExceptionState&); Node* nextNodeByWalker(Node*, ExceptionState&); Node* previousNodeByWalker(Node*, ExceptionState&); String visiblePlaceholder(Element*); void selectColorInColorChooser(Element*, const String& colorValue); Vector formControlStateOfPreviousHistoryItem(ExceptionState&); void setFormControlStateOfPreviousHistoryItem(const Vector&, ExceptionState&); void setEnableMockPagePopup(bool, ExceptionState&); PassRefPtr pagePopupController(); PassRefPtr unscaledViewportRect(ExceptionState&); PassRefPtr absoluteCaretBounds(ExceptionState&); PassRefPtr boundingBox(Element*, ExceptionState&); PassRefPtr inspectorHighlightRects(Document*, ExceptionState&); unsigned markerCountForNode(Node*, const String&, ExceptionState&); PassRefPtr markerRangeForNode(Node*, const String& markerType, unsigned index, ExceptionState&); String markerDescriptionForNode(Node*, const String& markerType, unsigned index, ExceptionState&); void addTextMatchMarker(const Range*, bool isActive); void setScrollViewPosition(Document*, long x, long y, ExceptionState&); void setPagination(Document* document, const String& mode, int gap, ExceptionState& ec) { setPagination(document, mode, gap, 0, ec); } void setPagination(Document*, const String& mode, int gap, int pageLength, ExceptionState&); String configurationForViewport(Document*, float devicePixelRatio, int deviceWidth, int deviceHeight, int availableWidth, int availableHeight, ExceptionState&); bool wasLastChangeUserEdit(Element* textField, ExceptionState&); bool elementShouldAutoComplete(Element* inputElement, ExceptionState&); String suggestedValue(Element* inputElement, ExceptionState&); void setSuggestedValue(Element* inputElement, const String&, ExceptionState&); void setEditingValue(Element* inputElement, const String&, ExceptionState&); void setAutofilled(Element*, bool enabled, ExceptionState&); void scrollElementToRect(Element*, long x, long y, long w, long h, ExceptionState&); void paintControlTints(Document*, ExceptionState&); PassRefPtr rangeFromLocationAndLength(Element* scope, int rangeLocation, int rangeLength, ExceptionState&); unsigned locationFromRange(Element* scope, const Range*, ExceptionState&); unsigned lengthFromRange(Element* scope, const Range*, ExceptionState&); String rangeAsText(const Range*, ExceptionState&); PassRefPtr touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document*, ExceptionState&); Node* touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document*, ExceptionState&); PassRefPtr touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document*, ExceptionState&); Node* touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document*, ExceptionState&); PassRefPtr bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document*, ExceptionState&); int lastSpellCheckRequestSequence(Document*, ExceptionState&); int lastSpellCheckProcessedSequence(Document*, ExceptionState&); Vector userPreferredLanguages() const; void setUserPreferredLanguages(const Vector&); unsigned wheelEventHandlerCount(Document*, ExceptionState&); unsigned touchEventHandlerCount(Document*, ExceptionState&); LayerRectList* touchEventTargetLayerRects(Document*, ExceptionState&); unsigned touchEventTargetLayerRectsUpdateCount(Document*, ExceptionState&); virtual void touchEventTargetRectsChanged(const LayerHitTestRects&); // This is used to test rect based hit testing like what's done on touch screens. PassRefPtr nodesFromRect(Document*, int x, int y, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, bool allowChildFrameContent, ExceptionState&) const; void emitInspectorDidBeginFrame(); void emitInspectorDidCancelFrame(); bool hasSpellingMarker(Document*, int from, int length, ExceptionState&); bool hasGrammarMarker(Document*, int from, int length, ExceptionState&); void setContinuousSpellCheckingEnabled(bool enabled, ExceptionState&); bool isOverwriteModeEnabled(Document*, ExceptionState&); void toggleOverwriteModeEnabled(Document*, ExceptionState&); unsigned numberOfScrollableAreas(Document*, ExceptionState&); bool isPageBoxVisible(Document*, int pageNumber, ExceptionState&); static const char* internalsId; InternalSettings* settings() const; InternalRuntimeFlags* runtimeFlags() const; InternalProfilers* profilers(); unsigned workerThreadCount() const; void setDeviceProximity(Document*, const String& eventType, double value, double min, double max, ExceptionState&); String layerTreeAsText(Document*, unsigned flags, ExceptionState&) const; String layerTreeAsText(Document*, ExceptionState&) const; String elementLayerTreeAsText(Element*, unsigned flags, ExceptionState&) const; String elementLayerTreeAsText(Element*, ExceptionState&) const; PassRefPtr paintOrderListBeforePromote(Element*, ExceptionState&); PassRefPtr paintOrderListAfterPromote(Element*, ExceptionState&); void setNeedsCompositedScrolling(Element*, unsigned value, ExceptionState&); String repaintRectsAsText(Document*, ExceptionState&) const; String scrollingStateTreeAsText(Document*, ExceptionState&) const; String mainThreadScrollingReasons(Document*, ExceptionState&) const; PassRefPtr nonFastScrollableRects(Document*, ExceptionState&) const; void garbageCollectDocumentResources(Document*, ExceptionState&) const; void evictAllResources() const; void allowRoundingHacks() const; void insertAuthorCSS(Document*, const String&) const; void insertUserCSS(Document*, const String&) const; unsigned numberOfLiveNodes() const; unsigned numberOfLiveDocuments() const; Vector consoleMessageArgumentCounts(Document*) const; PassRefPtr openDummyInspectorFrontend(const String& url); void closeDummyInspectorFrontend(); Vector setMemoryCacheCapacities(unsigned long minDeadBytes, unsigned long maxDeadBytes, unsigned long totalBytes); void setInspectorResourcesDataSizeLimits(int maximumResourcesContentSize, int maximumSingleResourceContentSize, ExceptionState&); String counterValue(Element*); int pageNumber(Element*, float pageWidth = 800, float pageHeight = 600); Vector shortcutIconURLs(Document*) const; Vector allIconURLs(Document*) const; int numberOfPages(float pageWidthInPixels = 800, float pageHeightInPixels = 600); String pageProperty(String, int, ExceptionState& = ASSERT_NO_EXCEPTION) const; String pageSizeAndMarginsInPixels(int, int, int, int, int, int, int, ExceptionState& = ASSERT_NO_EXCEPTION) const; void setDeviceScaleFactor(float scaleFactor, ExceptionState&); void setIsCursorVisible(Document*, bool, ExceptionState&); void webkitWillEnterFullScreenForElement(Document*, Element*); void webkitDidEnterFullScreenForElement(Document*, Element*); void webkitWillExitFullScreenForElement(Document*, Element*); void webkitDidExitFullScreenForElement(Document*, Element*); void registerURLSchemeAsBypassingContentSecurityPolicy(const String& scheme); void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(const String& scheme); PassRefPtr mallocStatistics() const; PassRefPtr typeConversions() const; Vector getReferencedFilePaths() const; void startTrackingRepaints(Document*, ExceptionState&); void stopTrackingRepaints(Document*, ExceptionState&); PassRefPtr serializeObject(PassRefPtr) const; PassRefPtr deserializeBuffer(PassRefPtr) const; void setUsesOverlayScrollbars(bool enabled); String getCurrentCursorInfo(Document*, ExceptionState&); String markerTextForListItem(Element*, ExceptionState&); void forceReload(bool endToEnd); void enableMockSpeechSynthesizer(); String getImageSourceURL(Element*, ExceptionState&); bool isSelectPopupVisible(Node*); PassRefPtr selectionBounds(ExceptionState&); String baseURL(Document*, ExceptionState&); bool loseSharedGraphicsContext3D(); private: explicit Internals(Document*); Document* contextDocument() const; Frame* frame() const; Vector iconURLs(Document*, int iconTypesMask) const; DocumentMarker* markerAt(Node*, const String& markerType, unsigned index, ExceptionState&); RefPtr m_frontendWindow; OwnPtr m_frontendChannel; RefPtr m_runtimeFlags; RefPtr m_scrollingCoordinator; int m_touchEventTargetRectUpdateCount; RefPtr m_currentTouchEventRects; RefPtr m_profilers; }; } // namespace WebCore #endif