X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fthird_party%2FWebKit%2FSource%2Fcore%2Ftesting%2FInternals.cpp;h=ad01f3807c8729819291c85a6d27a28c9316c741;hb=004985e17e624662a4c85c76a7654039dc83f028;hp=5ee36888ad208615e11289f2c93eebacb18a2bd7;hpb=2f108dbacb161091e42a3479f4e171339b7e7623;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/third_party/WebKit/Source/core/testing/Internals.cpp b/src/third_party/WebKit/Source/core/testing/Internals.cpp index 5ee3688..ad01f38 100644 --- a/src/third_party/WebKit/Source/core/testing/Internals.cpp +++ b/src/third_party/WebKit/Source/core/testing/Internals.cpp @@ -28,7 +28,6 @@ #include "Internals.h" #include -#include "InspectorFrontendClientLocal.h" #include "InternalProfilers.h" #include "InternalRuntimeFlags.h" #include "InternalSettings.h" @@ -80,6 +79,7 @@ #include "core/fetch/ResourceFetcher.h" #include "core/frame/DOMPoint.h" #include "core/frame/DOMWindow.h" +#include "core/frame/EventHandlerRegistry.h" #include "core/frame/FrameView.h" #include "core/frame/LocalFrame.h" #include "core/frame/Settings.h" @@ -143,27 +143,6 @@ static MockPagePopupDriver* s_pagePopupDriver = 0; using namespace HTMLNames; -class InspectorFrontendChannelDummy : public InspectorFrontendChannel { -public: - explicit InspectorFrontendChannelDummy(Page*); - virtual ~InspectorFrontendChannelDummy() { } - virtual void sendMessageToFrontend(PassRefPtr message) OVERRIDE; - virtual void flush() OVERRIDE { } - -private: - Page* m_frontendPage; -}; - -InspectorFrontendChannelDummy::InspectorFrontendChannelDummy(Page* page) - : m_frontendPage(page) -{ -} - -void InspectorFrontendChannelDummy::sendMessageToFrontend(PassRefPtr message) -{ - InspectorClient::doDispatchMessageOnFrontendPage(m_frontendPage, message->toJSONString()); -} - static bool markerTypesFrom(const String& markerType, DocumentMarker::MarkerTypes& result) { if (markerType.isEmpty() || equalIgnoringCase(markerType, "all")) @@ -602,7 +581,7 @@ size_t Internals::numberOfScopedHTMLStyleChildren(const Node* scope, ExceptionSt return 0; } -PassRefPtr Internals::computedStyleIncludingVisitedInfo(Node* node, ExceptionState& exceptionState) const +PassRefPtrWillBeRawPtr Internals::computedStyleIncludingVisitedInfo(Node* node, ExceptionState& exceptionState) const { if (!node) { exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Node")); @@ -742,6 +721,7 @@ void Internals::setFormControlStateOfHistoryItem(const Vector& state, Ex exceptionState.throwDOMException(InvalidAccessError, "No history item is available."); return; } + mainItem->clearDocumentState(); mainItem->setDocumentState(state); } @@ -765,7 +745,7 @@ PassRefPtrWillBeRawPtr Internals::pagePopupController() return s_pagePopupDriver ? s_pagePopupDriver->pagePopupController() : 0; } -PassRefPtr Internals::unscaledViewportRect(ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::unscaledViewportRect(ExceptionState& exceptionState) { Document* document = contextDocument(); if (!document || !document->view()) { @@ -776,7 +756,7 @@ PassRefPtr Internals::unscaledViewportRect(ExceptionState& exception return ClientRect::create(document->view()->visibleContentRect()); } -PassRefPtr Internals::absoluteCaretBounds(ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::absoluteCaretBounds(ExceptionState& exceptionState) { Document* document = contextDocument(); if (!document || !document->frame()) { @@ -787,7 +767,7 @@ PassRefPtr Internals::absoluteCaretBounds(ExceptionState& exceptionS return ClientRect::create(document->frame()->selection().absoluteCaretBounds()); } -PassRefPtr Internals::boundingBox(Element* element, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::boundingBox(Element* element, ExceptionState& exceptionState) { if (!element) { exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Element")); @@ -801,18 +781,6 @@ PassRefPtr Internals::boundingBox(Element* element, ExceptionState& return ClientRect::create(renderer->absoluteBoundingBoxRectIgnoringTransforms()); } -PassRefPtr Internals::inspectorHighlightRects(Document* document, ExceptionState& exceptionState) -{ - if (!document || !document->page()) { - exceptionState.throwDOMException(InvalidAccessError, document ? "The document's Page cannot be retrieved." : "No context document can be obtained."); - return ClientRectList::create(); - } - - Highlight highlight; - document->page()->inspectorController().getHighlight(&highlight); - return ClientRectList::create(highlight.quads); -} - unsigned Internals::markerCountForNode(Node* node, const String& markerType, ExceptionState& exceptionState) { if (!node) { @@ -868,7 +836,7 @@ DocumentMarker* Internals::markerAt(Node* node, const String& markerType, unsign return markers[index]; } -PassRefPtr Internals::markerRangeForNode(Node* node, const String& markerType, unsigned index, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::markerRangeForNode(Node* node, const String& markerType, unsigned index, ExceptionState& exceptionState) { DocumentMarker* marker = markerAt(node, markerType, index, exceptionState); if (!marker) @@ -942,7 +910,7 @@ String Internals::viewportAsText(Document* document, float, int availableWidth, document->page()->mainFrame()->view()->setFrameRect(IntRect(IntPoint::zero(), initialViewportSize)); ViewportDescription description = page->viewportDescription(); - PageScaleConstraints constraints = description.resolve(initialViewportSize); + PageScaleConstraints constraints = description.resolve(initialViewportSize, Length()); constraints.fitToContentsWidth(constraints.layoutSize.width(), availableWidth); @@ -1078,7 +1046,7 @@ void Internals::scrollElementToRect(Element* element, long x, long y, long w, lo frameView->scrollElementToRect(element, IntRect(x, y, w, h)); } -PassRefPtr Internals::rangeFromLocationAndLength(Element* scope, int rangeLocation, int rangeLength, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::rangeFromLocationAndLength(Element* scope, int rangeLocation, int rangeLength, ExceptionState& exceptionState) { if (!scope) { exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Element")); @@ -1207,7 +1175,7 @@ Node* Internals::touchNodeAdjustedToBestContextMenuNode(long x, long y, long wid return targetNode; } -PassRefPtr Internals::bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document* document, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document* document, ExceptionState& exceptionState) { if (!document || !document->frame()) { exceptionState.throwDOMException(InvalidAccessError, document ? "The document's frame cannot be retrieved." : "The document provided is invalid."); @@ -1278,6 +1246,20 @@ unsigned Internals::activeDOMObjectCount(Document* document, ExceptionState& exc return document->activeDOMObjectCount(); } +static unsigned eventHandlerCount(Document& document, EventHandlerRegistry::EventHandlerClass handlerClass) +{ + if (!document.frameHost()) + return 0; + EventHandlerRegistry* registry = &document.frameHost()->eventHandlerRegistry(); + unsigned count = 0; + const EventTargetSet* targets = registry->eventHandlerTargets(handlerClass); + if (targets) { + for (EventTargetSet::const_iterator iter = targets->begin(); iter != targets->end(); ++iter) + count += iter->value; + } + return count; +} + unsigned Internals::wheelEventHandlerCount(Document* document, ExceptionState& exceptionState) { if (!document) { @@ -1288,6 +1270,16 @@ unsigned Internals::wheelEventHandlerCount(Document* document, ExceptionState& e return WheelController::from(*document)->wheelEventHandlerCount(); } +unsigned Internals::scrollEventHandlerCount(Document* document, ExceptionState& exceptionState) +{ + if (!document) { + exceptionState.throwDOMException(InvalidAccessError, "No context document is available."); + return 0; + } + + return eventHandlerCount(*document, EventHandlerRegistry::ScrollEvent); +} + unsigned Internals::touchEventHandlerCount(Document* document, ExceptionState& exceptionState) { if (!document) { @@ -1305,10 +1297,15 @@ unsigned Internals::touchEventHandlerCount(Document* document, ExceptionState& e return count; } -static RenderLayer* findRenderLayerForGraphicsLayer(RenderLayer* searchRoot, GraphicsLayer* graphicsLayer, String* layerType) +static RenderLayer* findRenderLayerForGraphicsLayer(RenderLayer* searchRoot, GraphicsLayer* graphicsLayer, IntSize* layerOffset, String* layerType) { - if (searchRoot->hasCompositedLayerMapping() && graphicsLayer == searchRoot->compositedLayerMapping()->mainGraphicsLayer()) + *layerOffset = IntSize(); + if (searchRoot->hasCompositedLayerMapping() && graphicsLayer == searchRoot->compositedLayerMapping()->mainGraphicsLayer()) { + CompositedLayerMappingPtr compositedLayerMapping = searchRoot->compositedLayerMapping(); + LayoutSize offset = compositedLayerMapping->contentOffsetInCompositingLayer(); + *layerOffset = IntSize(offset.width(), offset.height()); return searchRoot; + } GraphicsLayer* layerForScrolling = searchRoot->scrollableArea() ? searchRoot->scrollableArea()->layerForScrolling() : 0; if (graphicsLayer == layerForScrolling) { @@ -1316,6 +1313,15 @@ static RenderLayer* findRenderLayerForGraphicsLayer(RenderLayer* searchRoot, Gra return searchRoot; } + if (searchRoot->compositingState() == PaintsIntoGroupedBacking) { + GraphicsLayer* squashingLayer = searchRoot->groupedMapping()->squashingLayer(); + if (graphicsLayer == squashingLayer) { + *layerType ="squashing"; + *layerOffset = -searchRoot->offsetFromSquashingLayerOrigin(); + return searchRoot; + } + } + GraphicsLayer* layerForHorizontalScrollbar = searchRoot->scrollableArea() ? searchRoot->scrollableArea()->layerForHorizontalScrollbar() : 0; if (graphicsLayer == layerForHorizontalScrollbar) { *layerType = "horizontalScrollbar"; @@ -1334,8 +1340,10 @@ static RenderLayer* findRenderLayerForGraphicsLayer(RenderLayer* searchRoot, Gra return searchRoot; } - for (RenderLayer* child = searchRoot->firstChild(); child; child = child->nextSibling()) { - RenderLayer* foundLayer = findRenderLayerForGraphicsLayer(child, graphicsLayer, layerType); + // Search right to left to increase the chances that we'll choose the top-most layers in a + // grouped mapping for squashing. + for (RenderLayer* child = searchRoot->lastChild(); child; child = child->previousSibling()) { + RenderLayer* foundLayer = findRenderLayerForGraphicsLayer(child, graphicsLayer, layerOffset, layerType); if (foundLayer) return foundLayer; } @@ -1394,11 +1402,13 @@ static void accumulateLayerRectList(RenderLayerCompositor* compositor, GraphicsL if (!layerRects.isEmpty()) { mergeRects(layerRects); String layerType; - RenderLayer* renderLayer = findRenderLayerForGraphicsLayer(compositor->rootRenderLayer(), graphicsLayer, &layerType); + IntSize layerOffset; + RenderLayer* renderLayer = findRenderLayerForGraphicsLayer(compositor->rootRenderLayer(), graphicsLayer, &layerOffset, &layerType); Node* node = renderLayer ? renderLayer->renderer()->node() : 0; for (size_t i = 0; i < layerRects.size(); ++i) { - if (!layerRects[i].isEmpty()) - rects->append(node, layerType, ClientRect::create(layerRects[i])); + if (!layerRects[i].isEmpty()) { + rects->append(node, layerType, layerOffset.width(), layerOffset.height(), ClientRect::create(layerRects[i])); + } } } @@ -1556,45 +1566,6 @@ Vector Internals::consoleMessageArgumentCounts(Document* document) const return result; } -PassRefPtrWillBeRawPtr Internals::openDummyInspectorFrontend(const String& url) -{ - Page* page = contextDocument()->frame()->page(); - ASSERT(page); - - DOMWindow* window = page->mainFrame()->domWindow(); - ASSERT(window); - - m_frontendWindow = window->open(url, "", "", window, window); - ASSERT(m_frontendWindow); - - Page* frontendPage = m_frontendWindow->document()->page(); - ASSERT(frontendPage); - - OwnPtr frontendClient = adoptPtr(new InspectorFrontendClientLocal(page->inspectorController(), frontendPage)); - - frontendPage->inspectorController().setInspectorFrontendClient(frontendClient.release()); - - m_frontendChannel = adoptPtr(new InspectorFrontendChannelDummy(frontendPage)); - - page->inspectorController().connectFrontend(m_frontendChannel.get()); - - return m_frontendWindow; -} - -void Internals::closeDummyInspectorFrontend() -{ - Page* page = contextDocument()->frame()->page(); - ASSERT(page); - ASSERT(m_frontendWindow); - - page->inspectorController().disconnectFrontend(); - - m_frontendChannel.release(); - - m_frontendWindow->close(m_frontendWindow->executionContext()); - m_frontendWindow.release(); -} - Vector Internals::setMemoryCacheCapacities(unsigned long minDeadBytes, unsigned long maxDeadBytes, unsigned long totalBytes) { Vector result; @@ -1655,46 +1626,15 @@ String Internals::layerTreeAsText(Document* document, ExceptionState& exceptionS String Internals::elementLayerTreeAsText(Element* element, ExceptionState& exceptionState) const { - FrameView* frameView = element->document().view(); - frameView->updateLayoutAndStyleForPainting(); - - return elementLayerTreeAsText(element, 0, exceptionState); -} - -static PassRefPtr paintOrderList(Element* element, ExceptionState& exceptionState, RenderLayerStackingNode::PaintOrderListType type) -{ if (!element) { exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Element")); - return nullptr; - } - - element->document().updateLayout(); - - RenderObject* renderer = element->renderer(); - if (!renderer || !renderer->isBox()) { - exceptionState.throwDOMException(InvalidAccessError, renderer ? "The provided element's renderer is not a box." : "The provided element has no renderer."); - return nullptr; - } - - RenderLayer* layer = toRenderBox(renderer)->layer(); - if (!layer) { - exceptionState.throwDOMException(InvalidAccessError, "No render layer can be obtained from the provided element."); - return nullptr; + return String(); } - Vector > nodes; - layer->stackingNode()->computePaintOrderList(type, nodes); - return StaticNodeList::adopt(nodes); -} - -PassRefPtr Internals::paintOrderListBeforePromote(Element* element, ExceptionState& exceptionState) -{ - return paintOrderList(element, exceptionState, RenderLayerStackingNode::BeforePromote); -} + FrameView* frameView = element->document().view(); + frameView->updateLayoutAndStyleForPainting(); -PassRefPtr Internals::paintOrderListAfterPromote(Element* element, ExceptionState& exceptionState) -{ - return paintOrderList(element, exceptionState, RenderLayerStackingNode::AfterPromote); + return elementLayerTreeAsText(element, 0, exceptionState); } bool Internals::scrollsWithRespectTo(Element* element1, Element* element2, ExceptionState& exceptionState) @@ -1734,7 +1674,7 @@ bool Internals::isUnclippedDescendant(Element* element, ExceptionState& exceptio return 0; } - element->document().updateLayout(); + element->document().view()->updateLayoutAndStyleForPainting(); RenderObject* renderer = element->renderer(); if (!renderer || !renderer->isBox()) { @@ -1751,30 +1691,6 @@ bool Internals::isUnclippedDescendant(Element* element, ExceptionState& exceptio return layer->isUnclippedDescendant(); } -bool Internals::needsCompositedScrolling(Element* element, ExceptionState& exceptionState) -{ - if (!element) { - exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Element")); - return 0; - } - - element->document().updateLayout(); - - RenderObject* renderer = element->renderer(); - if (!renderer || !renderer->isBox()) { - exceptionState.throwDOMException(InvalidAccessError, renderer ? "The provided element's renderer is not a box." : "The provided element has no renderer."); - return 0; - } - - RenderLayer* layer = toRenderBox(renderer)->layer(); - if (!layer) { - exceptionState.throwDOMException(InvalidAccessError, "No render layer can be obtained from the provided element."); - return 0; - } - - return layer->needsCompositedScrolling(); -} - String Internals::layerTreeAsText(Document* document, unsigned flags, ExceptionState& exceptionState) const { if (!document || !document->frame()) { @@ -1858,13 +1774,15 @@ String Internals::repaintRectsAsText(Document* document, ExceptionState& excepti return document->frame()->trackedRepaintRectsAsText(); } -PassRefPtr Internals::repaintRects(Element* element, ExceptionState& exceptionState) const +PassRefPtrWillBeRawPtr Internals::repaintRects(Element* element, ExceptionState& exceptionState) const { if (!element) { exceptionState.throwDOMException(InvalidAccessError, ExceptionMessages::argumentNullOrIncorrectType(1, "Element")); return nullptr; } + element->document().frame()->view()->updateLayoutAndStyleForPainting(); + if (RenderLayer* layer = getRenderLayerForElement(element, exceptionState)) { if (layer->compositingState() == PaintsIntoOwnBacking) { OwnPtr > rects = layer->collectTrackedRepaintRects(); @@ -1892,11 +1810,7 @@ String Internals::mainThreadScrollingReasons(Document* document, ExceptionState& return String(); } - // Force a re-layout and a compositing update. - document->updateLayout(); - RenderView* view = document->renderView(); - if (view->compositor()) - view->compositor()->updateCompositingLayers(); + document->frame()->view()->updateLayoutAndStyleForPainting(); Page* page = document->page(); if (!page) @@ -1905,7 +1819,7 @@ String Internals::mainThreadScrollingReasons(Document* document, ExceptionState& return page->mainThreadScrollingReasonsAsText(); } -PassRefPtr Internals::nonFastScrollableRects(Document* document, ExceptionState& exceptionState) const +PassRefPtrWillBeRawPtr Internals::nonFastScrollableRects(Document* document, ExceptionState& exceptionState) const { if (!document || !document->frame()) { exceptionState.throwDOMException(InvalidAccessError, document ? "The document's frame cannot be retrieved." : "The document provided is invalid."); @@ -2082,8 +1996,7 @@ PassRefPtrWillBeRawPtr Internals::typeConversions() const Vector Internals::getReferencedFilePaths() const { - frame()->loader().saveDocumentState(); - return FormController::getReferencedFilePaths(frame()->loader().currentItem()->documentState()); + return frame()->loader().currentItem()->getReferencedFilePaths(); } void Internals::startTrackingRepaints(Document* document, ExceptionState& exceptionState) @@ -2094,6 +2007,7 @@ void Internals::startTrackingRepaints(Document* document, ExceptionState& except } FrameView* frameView = document->view(); + frameView->updateLayoutAndStyleForPainting(); frameView->setTracksRepaints(true); } @@ -2105,6 +2019,7 @@ void Internals::stopTrackingRepaints(Document* document, ExceptionState& excepti } FrameView* frameView = document->view(); + frameView->updateLayoutAndStyleForPainting(); frameView->setTracksRepaints(false); } @@ -2129,17 +2044,17 @@ void Internals::updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks(Node* document->updateLayoutIgnorePendingStylesheets(Document::RunPostLayoutTasksSynchronously); } -PassRefPtr Internals::draggableRegions(Document* document, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::draggableRegions(Document* document, ExceptionState& exceptionState) { return annotatedRegions(document, true, exceptionState); } -PassRefPtr Internals::nonDraggableRegions(Document* document, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::nonDraggableRegions(Document* document, ExceptionState& exceptionState) { return annotatedRegions(document, false, exceptionState); } -PassRefPtr Internals::annotatedRegions(Document* document, bool draggable, ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::annotatedRegions(Document* document, bool draggable, ExceptionState& exceptionState) { if (!document || !document->view()) { exceptionState.throwDOMException(InvalidAccessError, document ? "The document's view cannot be retrieved." : "The document provided is invalid."); @@ -2262,7 +2177,7 @@ void Internals::forceReload(bool endToEnd) frame()->loader().reload(endToEnd ? EndToEndReload : NormalReload); } -PassRefPtr Internals::selectionBounds(ExceptionState& exceptionState) +PassRefPtrWillBeRawPtr Internals::selectionBounds(ExceptionState& exceptionState) { Document* document = contextDocument(); if (!document || !document->frame()) { @@ -2333,16 +2248,15 @@ bool Internals::loseSharedGraphicsContext3D() void Internals::forceCompositingUpdate(Document* document, ExceptionState& exceptionState) { + // Hit when running content_shell with --expose-internals-for-testing. + DisableCompositingQueryAsserts disabler; + if (!document || !document->renderView()) { exceptionState.throwDOMException(InvalidAccessError, document ? "The document's render view cannot be retrieved." : "The document provided is invalid."); return; } - document->updateLayout(); - - RenderView* view = document->renderView(); - if (view->compositor()) - view->compositor()->updateCompositingLayers(); + document->frame()->view()->updateLayoutAndStyleForPainting(); } bool Internals::isCompositorFramePending(Document* document, ExceptionState& exceptionState) @@ -2398,22 +2312,22 @@ private: } // namespace -ScriptPromise Internals::createPromise(ExecutionContext* context) +ScriptPromise Internals::createPromise(ScriptState* scriptState) { - return ScriptPromiseResolver::create(context)->promise(); + return ScriptPromiseResolver::create(scriptState)->promise(); } -ScriptPromise Internals::createResolvedPromise(ExecutionContext* context, ScriptValue value) +ScriptPromise Internals::createResolvedPromise(ScriptState* scriptState, ScriptValue value) { - RefPtr resolver = ScriptPromiseResolver::create(context); + RefPtr resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); resolver->resolve(value); return promise; } -ScriptPromise Internals::createRejectedPromise(ExecutionContext* context, ScriptValue value) +ScriptPromise Internals::createRejectedPromise(ScriptState* scriptState, ScriptValue value) { - RefPtr resolver = ScriptPromiseResolver::create(context); + RefPtr resolver = ScriptPromiseResolver::create(scriptState); ScriptPromise promise = resolver->promise(); resolver->reject(value); return promise; @@ -2426,24 +2340,10 @@ ScriptPromise Internals::addOneToPromise(ExecutionContext* context, ScriptPromis void Internals::trace(Visitor* visitor) { - visitor->trace(m_frontendWindow); visitor->trace(m_runtimeFlags); visitor->trace(m_profilers); } -void Internals::startSpeechInput(Element* element) -{ -#if ENABLE(INPUT_SPEECH) - HTMLInputElement* input = toHTMLInputElement(element); - if (!input->isSpeechEnabled()) - return; - - InputFieldSpeechButtonElement* speechButton = toInputFieldSpeechButtonElement(input->userAgentShadowRoot()->getElementById(ShadowElementNames::speechButton())); - if (speechButton) - speechButton->startSpeechInput(); -#endif -} - void Internals::setValueForUser(Element* element, const String& value) { toHTMLInputElement(element)->setValueForUser(value);