Index: Source/core/testing/Internals.cpp |
diff --git a/Source/core/testing/Internals.cpp b/Source/core/testing/Internals.cpp |
index ad961fa8d953f8c7873be042652f90b0bd0faed0..388eb19f856cb48a05ba35a1600a0d121e967f1e 100644 |
--- a/Source/core/testing/Internals.cpp |
+++ b/Source/core/testing/Internals.cpp |
@@ -1773,28 +1773,77 @@ String Internals::elementLayerTreeAsText(Element* element, unsigned flags, Excep |
return layer->backing()->graphicsLayer()->layerTreeAsText(flags); |
} |
-void Internals::setNeedsCompositedScrolling(Element* element, unsigned needsCompositedScrolling, ExceptionState& es) |
+static RenderLayer* getRenderLayerForElement(Element* element, ExceptionState& es) |
{ |
if (!element) { |
es.throwDOMException(InvalidAccessError); |
- return; |
+ return 0; |
} |
- element->document().updateLayout(); |
- |
RenderObject* renderer = element->renderer(); |
if (!renderer || !renderer->isBox()) { |
es.throwDOMException(InvalidAccessError); |
- return; |
+ return 0; |
} |
RenderLayer* layer = toRenderBox(renderer)->layer(); |
if (!layer) { |
es.throwDOMException(InvalidAccessError); |
+ return 0; |
+ } |
+ |
+ return layer; |
+} |
+ |
+void Internals::setNeedsCompositedScrolling(Element* element, unsigned needsCompositedScrolling, ExceptionState& es) |
+{ |
+ if (!element) { |
+ es.throwDOMException(InvalidAccessError); |
return; |
} |
- layer->setForceNeedsCompositedScrolling(static_cast<RenderLayer::ForceNeedsCompositedScrollingMode>(needsCompositedScrolling)); |
+ element->document().updateLayout(); |
+ |
+ if (RenderLayer* layer = getRenderLayerForElement(element, es)) |
+ layer->setForceNeedsCompositedScrolling(static_cast<RenderLayer::ForceNeedsCompositedScrollingMode>(needsCompositedScrolling)); |
+} |
+ |
+bool Internals::isScrollParent(Element* child, Element* parent, ExceptionState& es) |
+{ |
+ RenderLayer* childLayer = getRenderLayerForElement(child, es); |
+ RenderLayer* parentLayer = getRenderLayerForElement(parent, es); |
+ return childLayer && parentLayer && childLayer->scrollParent() == parentLayer; |
+} |
+ |
+bool Internals::isClipParent(Element* child, Element* parent, ExceptionState& es) |
+{ |
+ RenderLayer* childLayer = getRenderLayerForElement(child, es); |
+ RenderLayer* parentLayer = getRenderLayerForElement(parent, es); |
+ return childLayer && parentLayer && childLayer->clipParent() == parentLayer; |
+} |
+ |
+PassRefPtr<ClientRect> Internals::scrollClip(Element* element, ExceptionState& es) |
+{ |
+ RenderLayer* layer = getRenderLayerForElement(element, es); |
+ if (!layer || !layer->backing() || !layer->backing()->scrollingLayer()) |
+ return ClientRect::create(); |
+ |
+ return ClientRect::create( |
+ FloatRect( |
+ layer->backing()->scrollingLayer()->boundsOrigin(), |
+ layer->backing()->scrollingLayer()->size())); |
+} |
+ |
+PassRefPtr<ClientRect> Internals::ancestorScrollClip(Element* element, ExceptionState& es) |
+{ |
+ RenderLayer* layer = getRenderLayerForElement(element, es); |
+ if (!layer || !layer->backing() || !layer->backing()->ancestorScrollClippingLayer()) |
+ return ClientRect::create(); |
+ |
+ return ClientRect::create( |
+ FloatRect( |
+ layer->backing()->ancestorScrollClippingLayer()->boundsOrigin(), |
+ layer->backing()->ancestorScrollClippingLayer()->size())); |
} |
String Internals::repaintRectsAsText(Document* document, ExceptionState& es) const |