From 8c7a05d205259f6804ebe0ad778e121ddc0708c8 Mon Sep 17 00:00:00 2001 From: "mitz@apple.com" Date: Fri, 29 Jun 2012 20:26:25 +0000 Subject: [PATCH] =?utf8?q?Can=E2=80=99t=20get=20basic=20element=20info=20f?= =?utf8?q?rom=20a=20WKRenderObject=20https://bugs.webkit.org/show=5Fbug.cg?= =?utf8?q?i=3Fid=3D90301?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed by Anders Carlsson. Moved the element info (tag name, id and class names) from WebRenderLayer to WebRenderObject, and gave WebRenderLayer a reference to a (shallow) WebRenderObject. Added WKRenderObject API for getting element info, while leaving the WKRenderLayer API in place for now for Safari. * Shared/API/c/WKRenderLayer.cpp: (WKRenderLayerGetRenderer): Added this wrapper. (WKRenderLayerCopyRendererName): Changed to get the name from the renderer. (WKRenderLayerCopyElementTagName): Changed to go through the renderer. (WKRenderLayerCopyElementID): Ditto. (WKRenderLayerGetElementClassNames): Ditto. * Shared/API/c/WKRenderLayer.h: Added declaration of WKRenderLayerGetRenderer() and comments about removing older API. * Shared/API/c/WKRenderObject.cpp: (WKRenderObjectCopyElementTagName): Added this wrapper. (WKRenderObjectCopyElementID): Ditto. (WKRenderObjectGetElementClassNames): Ditto. * Shared/API/c/WKRenderObject.h: * Shared/UserMessageCoders.h: (WebKit::UserMessageEncoder::baseEncode): Removed the element info from the encoding of WebRenderLayer, and added the renderer. Added the element info to the encoding of WebRenderObject. (WebKit::UserMessageDecoder::baseDecode): Updated to match the encoding changes. * Shared/WebRenderLayer.cpp: (WebKit::WebRenderLayer::WebRenderLayer): Changed to initialize the m_renderer member variable with a WebRenderObject for the layer’s renderer, and removed the initialization of the element-related member variables that were removed. * Shared/WebRenderLayer.h: (WebKit::WebRenderLayer::create): Changed to take a renderer instead of renderer and element info. (WebKit::WebRenderLayer::renderer): Added this getter. (WebKit::WebRenderLayer::WebRenderLayer): Changed to take a renderer instead of renderer and element info. * Shared/WebRenderObject.cpp: (WebKit::WebRenderObject::create): Changed to pass true for the shouldIncludeDescendants parameter. (WebKit::WebRenderObject::WebRenderObject): Added a shouldIncludeDescdendants boolean parameter. When it is false, the m_children array remains null. Added initialization of member variables with the element’s tag name, id and class list. * Shared/WebRenderObject.h: (WebKit::WebRenderObject::create): Added an overload that takes a RenderObject and creates a shallow WebRenderObject. (WebRenderObject): Changed to take element tag name, id and class list. (WebKit::WebRenderObject::elementTagName): Added this getter. (WebKit::WebRenderObject::elementID): Ditto. (WebKit::WebRenderObject::elementClassNames): Ditto. (WebKit::WebRenderObject::WebRenderObject): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121584 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 54 ++++++++++++++++++++++++++ Source/WebKit2/Shared/API/c/WKRenderLayer.cpp | 17 +++++--- Source/WebKit2/Shared/API/c/WKRenderLayer.h | 4 ++ Source/WebKit2/Shared/API/c/WKRenderObject.cpp | 23 +++++++++++ Source/WebKit2/Shared/API/c/WKRenderObject.h | 5 +++ Source/WebKit2/Shared/UserMessageCoders.h | 40 ++++++++++--------- Source/WebKit2/Shared/WebRenderLayer.cpp | 22 +---------- Source/WebKit2/Shared/WebRenderLayer.h | 33 ++++------------ Source/WebKit2/Shared/WebRenderObject.cpp | 28 +++++++++++-- Source/WebKit2/Shared/WebRenderObject.h | 25 +++++++++--- 10 files changed, 171 insertions(+), 80 deletions(-) diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index e890479..c2d88d4 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,57 @@ +2012-06-29 Dan Bernstein + + Can’t get basic element info from a WKRenderObject + https://bugs.webkit.org/show_bug.cgi?id=90301 + + Reviewed by Anders Carlsson. + + Moved the element info (tag name, id and class names) from WebRenderLayer to WebRenderObject, + and gave WebRenderLayer a reference to a (shallow) WebRenderObject. Added WKRenderObject API + for getting element info, while leaving the WKRenderLayer API in place for now for Safari. + + * Shared/API/c/WKRenderLayer.cpp: + (WKRenderLayerGetRenderer): Added this wrapper. + (WKRenderLayerCopyRendererName): Changed to get the name from the renderer. + (WKRenderLayerCopyElementTagName): Changed to go through the renderer. + (WKRenderLayerCopyElementID): Ditto. + (WKRenderLayerGetElementClassNames): Ditto. + * Shared/API/c/WKRenderLayer.h: Added declaration of WKRenderLayerGetRenderer() and comments + about removing older API. + * Shared/API/c/WKRenderObject.cpp: + (WKRenderObjectCopyElementTagName): Added this wrapper. + (WKRenderObjectCopyElementID): Ditto. + (WKRenderObjectGetElementClassNames): Ditto. + * Shared/API/c/WKRenderObject.h: + * Shared/UserMessageCoders.h: + (WebKit::UserMessageEncoder::baseEncode): Removed the element info from the encoding of + WebRenderLayer, and added the renderer. Added the element info to the encoding of + WebRenderObject. + (WebKit::UserMessageDecoder::baseDecode): Updated to match the encoding changes. + * Shared/WebRenderLayer.cpp: + (WebKit::WebRenderLayer::WebRenderLayer): Changed to initialize the m_renderer member + variable with a WebRenderObject for the layer’s renderer, and removed the initialization of + the element-related member variables that were removed. + * Shared/WebRenderLayer.h: + (WebKit::WebRenderLayer::create): Changed to take a renderer instead of renderer and element + info. + (WebKit::WebRenderLayer::renderer): Added this getter. + (WebKit::WebRenderLayer::WebRenderLayer): Changed to take a renderer instead of renderer and + element info. + * Shared/WebRenderObject.cpp: + (WebKit::WebRenderObject::create): Changed to pass true for the shouldIncludeDescendants + parameter. + (WebKit::WebRenderObject::WebRenderObject): Added a shouldIncludeDescdendants boolean + parameter. When it is false, the m_children array remains null. Added initialization of + member variables with the element’s tag name, id and class list. + * Shared/WebRenderObject.h: + (WebKit::WebRenderObject::create): Added an overload that takes a RenderObject and creates + a shallow WebRenderObject. + (WebRenderObject): Changed to take element tag name, id and class list. + (WebKit::WebRenderObject::elementTagName): Added this getter. + (WebKit::WebRenderObject::elementID): Ditto. + (WebKit::WebRenderObject::elementClassNames): Ditto. + (WebKit::WebRenderObject::WebRenderObject): + 2012-06-29 Tony Chang Unreviewed, rolling out r121572. diff --git a/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp b/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp index 7c27651..82cf959 100644 --- a/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp +++ b/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp @@ -37,16 +37,21 @@ WKTypeID WKRenderLayerGetTypeID() return toAPI(WebRenderLayer::APIType); } +WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayerRef) +{ + return toAPI(toImpl(renderLayerRef)->renderer()); +} + WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayerRef) { - return toCopiedAPI(toImpl(renderLayerRef)->renderObjectName()); + return toCopiedAPI(toImpl(renderLayerRef)->renderer()->name()); } WKStringRef WKRenderLayerCopyElementTagName(WKRenderLayerRef renderLayerRef) { WebRenderLayer* renderLayer = toImpl(renderLayerRef); - if (!renderLayer->elementTagName().isNull()) - return toCopiedAPI(toImpl(renderLayerRef)->elementTagName()); + if (!renderLayer->renderer()->elementTagName().isNull()) + return toCopiedAPI(renderLayer->renderer()->elementTagName()); return 0; } @@ -54,15 +59,15 @@ WKStringRef WKRenderLayerCopyElementTagName(WKRenderLayerRef renderLayerRef) WKStringRef WKRenderLayerCopyElementID(WKRenderLayerRef renderLayerRef) { WebRenderLayer* renderLayer = toImpl(renderLayerRef); - if (!renderLayer->elementID().isNull()) - return toCopiedAPI(toImpl(renderLayerRef)->elementID()); + if (!renderLayer->renderer()->elementID().isNull()) + return toCopiedAPI(renderLayer->renderer()->elementID()); return 0; } WKArrayRef WKRenderLayerGetElementClassNames(WKRenderLayerRef renderLayerRef) { - return toAPI(toImpl(renderLayerRef)->elementClassNames()); + return toAPI(toImpl(renderLayerRef)->renderer()->elementClassNames()); } WKRect WKRenderLayerGetAbsoluteBounds(WKRenderLayerRef renderLayerRef) diff --git a/Source/WebKit2/Shared/API/c/WKRenderLayer.h b/Source/WebKit2/Shared/API/c/WKRenderLayer.h index 6683d87..72f28e0 100644 --- a/Source/WebKit2/Shared/API/c/WKRenderLayer.h +++ b/Source/WebKit2/Shared/API/c/WKRenderLayer.h @@ -36,8 +36,12 @@ extern "C" { WK_EXPORT WKTypeID WKRenderLayerGetTypeID(); +WK_EXPORT WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayer); + +// FIXME: Remove this function once Safari does not require it. WK_EXPORT WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayer); +// FIXME: Remove these three functions once Safari does not require them. WK_EXPORT WKStringRef WKRenderLayerCopyElementTagName(WKRenderLayerRef renderLayer); WK_EXPORT WKStringRef WKRenderLayerCopyElementID(WKRenderLayerRef renderLayer); WK_EXPORT WKArrayRef WKRenderLayerGetElementClassNames(WKRenderLayerRef renderLayer); diff --git a/Source/WebKit2/Shared/API/c/WKRenderObject.cpp b/Source/WebKit2/Shared/API/c/WKRenderObject.cpp index 1c72749..2bc9728 100644 --- a/Source/WebKit2/Shared/API/c/WKRenderObject.cpp +++ b/Source/WebKit2/Shared/API/c/WKRenderObject.cpp @@ -42,6 +42,29 @@ WKStringRef WKRenderObjectCopyName(WKRenderObjectRef renderObjectRef) return toCopiedAPI(toImpl(renderObjectRef)->name()); } +WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObjectRef) +{ + WebRenderObject* renderObject = toImpl(renderObjectRef); + if (!renderObject->elementTagName().isNull()) + return toCopiedAPI(renderObject->elementTagName()); + + return 0; +} + +WKStringRef WKRenderObjectCopyElementID(WKRenderObjectRef renderObjectRef) +{ + WebRenderObject* renderObject = toImpl(renderObjectRef); + if (!renderObject->elementID().isNull()) + return toCopiedAPI(renderObject->elementID()); + + return 0; +} + +WKArrayRef WKRenderObjectGetElementClassNames(WKRenderObjectRef renderObjectRef) +{ + return toAPI(toImpl(renderObjectRef)->elementClassNames()); +} + WKPoint WKRenderObjectGetAbsolutePosition(WKRenderObjectRef renderObjectRef) { IntPoint absolutePosition = toImpl(renderObjectRef)->absolutePosition(); diff --git a/Source/WebKit2/Shared/API/c/WKRenderObject.h b/Source/WebKit2/Shared/API/c/WKRenderObject.h index 51d1e22..965cf2a 100644 --- a/Source/WebKit2/Shared/API/c/WKRenderObject.h +++ b/Source/WebKit2/Shared/API/c/WKRenderObject.h @@ -36,6 +36,11 @@ extern "C" { WK_EXPORT WKTypeID WKRenderObjectGetTypeID(); WK_EXPORT WKStringRef WKRenderObjectCopyName(WKRenderObjectRef renderObject); + +WK_EXPORT WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObject); +WK_EXPORT WKStringRef WKRenderObjectCopyElementID(WKRenderObjectRef renderObject); +WK_EXPORT WKArrayRef WKRenderObjectGetElementClassNames(WKRenderObjectRef renderObject); + WK_EXPORT WKPoint WKRenderObjectGetAbsolutePosition(WKRenderObjectRef renderObject); WK_EXPORT WKRect WKRenderObjectGetFrameRect(WKRenderObjectRef renderObject); WK_EXPORT WKArrayRef WKRenderObjectGetChildren(WKRenderObjectRef renderObject); diff --git a/Source/WebKit2/Shared/UserMessageCoders.h b/Source/WebKit2/Shared/UserMessageCoders.h index ace72fd..85ed57b 100644 --- a/Source/WebKit2/Shared/UserMessageCoders.h +++ b/Source/WebKit2/Shared/UserMessageCoders.h @@ -145,10 +145,7 @@ public: } case APIObject::TypeRenderLayer: { WebRenderLayer* renderLayer = static_cast(m_root); - encoder->encode(renderLayer->renderObjectName()); - encoder->encode(renderLayer->elementTagName()); - encoder->encode(renderLayer->elementID()); - encoder->encode(Owner(renderLayer->elementClassNames())); + encoder->encode(Owner(renderLayer->renderer())); encoder->encode(renderLayer->isReflection()); encoder->encode(renderLayer->isClipping()); encoder->encode(renderLayer->isClipped()); @@ -162,6 +159,9 @@ public: case APIObject::TypeRenderObject: { WebRenderObject* renderObject = static_cast(m_root); encoder->encode(renderObject->name()); + encoder->encode(renderObject->elementTagName()); + encoder->encode(renderObject->elementID()); + encoder->encode(Owner(renderObject->elementClassNames())); encoder->encode(renderObject->absolutePosition()); encoder->encode(renderObject->frameRect()); encoder->encode(Owner(renderObject->children().get())); @@ -367,10 +367,7 @@ public: break; } case APIObject::TypeRenderLayer: { - String renderObjectName; - String elementTagName; - String elementID; - RefPtr elementClassNames; + RefPtr renderer; bool isReflection; bool isClipping; bool isClipped; @@ -380,14 +377,10 @@ public: RefPtr normalFlowList; RefPtr positiveZOrderList; - if (!decoder->decode(renderObjectName)) - return false; - if (!decoder->decode(elementTagName)) + Owner rendererCoder(coder, renderer); + if (!decoder->decode(rendererCoder)) return false; - if (!decoder->decode(elementID)) - return false; - Owner classNamesCoder(coder, elementClassNames); - if (!decoder->decode(classNamesCoder)) + if (renderer->type() != APIObject::TypeRenderObject) return false; if (!decoder->decodeBool(isReflection)) return false; @@ -408,20 +401,29 @@ public: Owner positiveZOrderListCoder(coder, positiveZOrderList); if (!decoder->decode(positiveZOrderListCoder)) return false; - coder.m_root = WebRenderLayer::create(renderObjectName, elementTagName, elementID, static_pointer_cast(elementClassNames), - isReflection, isClipping, isClipped, static_cast(compositingLayerTypeAsUInt32), + coder.m_root = WebRenderLayer::create(static_pointer_cast(renderer), isReflection, isClipping, isClipped, static_cast(compositingLayerTypeAsUInt32), absoluteBoundingBox, static_pointer_cast(negativeZOrderList), static_pointer_cast(normalFlowList), static_pointer_cast(positiveZOrderList)); break; } case APIObject::TypeRenderObject: { String name; + String elementTagName; + String elementID; + RefPtr elementClassNames; WebCore::IntPoint absolutePosition; WebCore::IntRect frameRect; RefPtr children; if (!decoder->decode(name)) return false; + if (!decoder->decode(elementTagName)) + return false; + if (!decoder->decode(elementID)) + return false; + Owner classNamesCoder(coder, elementClassNames); + if (!decoder->decode(classNamesCoder)) + return false; if (!decoder->decode(absolutePosition)) return false; if (!decoder->decode(frameRect)) @@ -429,9 +431,9 @@ public: Owner messageCoder(coder, children); if (!decoder->decode(messageCoder)) return false; - if (children->type() != APIObject::TypeArray) + if (children && children->type() != APIObject::TypeArray) return false; - coder.m_root = WebRenderObject::create(name, absolutePosition, frameRect, WTF::static_pointer_cast(children)); + coder.m_root = WebRenderObject::create(name, elementTagName, elementID, WTF::static_pointer_cast(elementClassNames), absolutePosition, frameRect, WTF::static_pointer_cast(children)); break; } case APIObject::TypeURL: { diff --git a/Source/WebKit2/Shared/WebRenderLayer.cpp b/Source/WebKit2/Shared/WebRenderLayer.cpp index 586f136..9b138fc 100644 --- a/Source/WebKit2/Shared/WebRenderLayer.cpp +++ b/Source/WebKit2/Shared/WebRenderLayer.cpp @@ -75,27 +75,7 @@ PassRefPtr WebRenderLayer::createArrayFromLayerList(Vectorrenderer(); - - m_renderObjectName = renderer->renderName(); - - if (Node* node = renderer->node()) { - if (node->isElementNode()) { - Element* element = toElement(node); - m_elementTagName = element->tagName(); - m_elementID = element->getIdAttribute(); - if (element->isStyledElement() && element->hasClass()) { - StyledElement* styledElement = static_cast(element); - if (size_t classNameCount = styledElement->classNames().size()) { - m_elementClassNames = MutableArray::create(); - for (size_t i = 0; i < classNameCount; ++i) - m_elementClassNames->append(WebString::create(styledElement->classNames()[i]).get()); - } - } - - } - } - + m_renderer = WebRenderObject::create(layer->renderer()); m_isReflection = layer->isReflection(); #if USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebKit2/Shared/WebRenderLayer.h b/Source/WebKit2/Shared/WebRenderLayer.h index f3323bc..5ebd050 100644 --- a/Source/WebKit2/Shared/WebRenderLayer.h +++ b/Source/WebKit2/Shared/WebRenderLayer.h @@ -26,12 +26,7 @@ #ifndef WebRenderLayer_h #define WebRenderLayer_h -#include "APIObject.h" -#include "MutableArray.h" -#include -#include -#include -#include +#include "WebRenderObject.h" namespace WebCore { class RenderLayer; @@ -48,22 +43,17 @@ public: enum CompositingLayerType { None, Normal, Tiled, Media, Container }; static PassRefPtr create(WebPage*); - static PassRefPtr create(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr elementClassNames, - bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, - PassRefPtr negativeZOrderList, PassRefPtr normalFlowList, PassRefPtr positiveZOrderList) + static PassRefPtr create(PassRefPtr renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, + WebCore::IntRect absoluteBoundingBox, PassRefPtr negativeZOrderList, PassRefPtr normalFlowList, PassRefPtr positiveZOrderList) { - return adoptRef(new WebRenderLayer(renderObjectName, elementTagName, elementID, elementClassNames, isReflection, isClipping, isClipped, - type, absoluteBoundingBox, negativeZOrderList, normalFlowList, positiveZOrderList)); + return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, negativeZOrderList, normalFlowList, positiveZOrderList)); } ImmutableArray* negativeZOrderList() const { return m_negativeZOrderList.get(); } ImmutableArray* normalFlowList() const { return m_normalFlowList.get(); } ImmutableArray* positiveZOrderList() const { return m_positiveZOrderList.get(); } - const String& renderObjectName() const { return m_renderObjectName; } - const String& elementTagName() const { return m_elementTagName; } - const String& elementID() const { return m_elementID; } - ImmutableArray* elementClassNames() const { return m_elementClassNames.get(); } + WebRenderObject* renderer() const { return m_renderer.get(); } bool isReflection() const { return m_isReflection; } bool isClipping() const { return m_isClipping; } bool isClipped() const { return m_isClipped; } @@ -72,13 +62,9 @@ public: private: WebRenderLayer(WebCore::RenderLayer*); - WebRenderLayer(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr elementClassNames, - bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, + WebRenderLayer(PassRefPtr renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, PassRefPtr negativeZOrderList, PassRefPtr normalFlowList, PassRefPtr positiveZOrderList) - : m_renderObjectName(renderObjectName) - , m_elementTagName(elementTagName) - , m_elementID(elementID) - , m_elementClassNames(elementClassNames) + : m_renderer(renderer) , m_isReflection(isReflection) , m_isClipping(isClipping) , m_isClipped(isClipped) @@ -94,10 +80,7 @@ private: static PassRefPtr createArrayFromLayerList(Vector*); - String m_renderObjectName; - String m_elementTagName; - String m_elementID; - RefPtr m_elementClassNames; + RefPtr m_renderer; bool m_isReflection; bool m_isClipping; bool m_isClipped; diff --git a/Source/WebKit2/Shared/WebRenderObject.cpp b/Source/WebKit2/Shared/WebRenderObject.cpp index 2520d3d..146230e 100644 --- a/Source/WebKit2/Shared/WebRenderObject.cpp +++ b/Source/WebKit2/Shared/WebRenderObject.cpp @@ -27,6 +27,7 @@ #include "WebRenderObject.h" #include "WebPage.h" +#include "WebString.h" #include #include #include @@ -50,13 +51,29 @@ PassRefPtr WebRenderObject::create(WebPage* page) if (!contentRenderer) return 0; - return adoptRef(new WebRenderObject(contentRenderer)); + return adoptRef(new WebRenderObject(contentRenderer, true)); } -WebRenderObject::WebRenderObject(RenderObject* renderer) +WebRenderObject::WebRenderObject(RenderObject* renderer, bool shouldIncludeDescendants) { m_name = renderer->renderName(); + if (Node* node = renderer->node()) { + if (node->isElementNode()) { + Element* element = toElement(node); + m_elementTagName = element->tagName(); + m_elementID = element->getIdAttribute(); + if (element->isStyledElement() && element->hasClass()) { + StyledElement* styledElement = static_cast(element); + if (size_t classNameCount = styledElement->classNames().size()) { + m_elementClassNames = MutableArray::create(); + for (size_t i = 0; i < classNameCount; ++i) + m_elementClassNames->append(WebString::create(styledElement->classNames()[i]).get()); + } + } + } + } + // FIXME: broken with transforms m_absolutePosition = flooredIntPoint(renderer->localToAbsolute(FloatPoint())); @@ -69,9 +86,12 @@ WebRenderObject::WebRenderObject(RenderObject* renderer) } else if (renderer->isRenderInline()) m_frameRect = toRenderBoxModelObject(renderer)->borderBoundingBox(); + if (!shouldIncludeDescendants) + return; + m_children = MutableArray::create(); for (RenderObject* coreChild = renderer->firstChild(); coreChild; coreChild = coreChild->nextSibling()) { - RefPtr child = adoptRef(new WebRenderObject(coreChild)); + RefPtr child = adoptRef(new WebRenderObject(coreChild, shouldIncludeDescendants)); m_children->append(child.get()); } @@ -84,7 +104,7 @@ WebRenderObject::WebRenderObject(RenderObject* renderer) FrameView* frameView = static_cast(widget); if (RenderView* coreContentRenderer = frameView->frame()->contentRenderer()) { - RefPtr contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer)); + RefPtr contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer, shouldIncludeDescendants)); m_children->append(contentRenderer.get()); } } diff --git a/Source/WebKit2/Shared/WebRenderObject.h b/Source/WebKit2/Shared/WebRenderObject.h index 1fcb03c..3e05622 100644 --- a/Source/WebKit2/Shared/WebRenderObject.h +++ b/Source/WebKit2/Shared/WebRenderObject.h @@ -30,7 +30,6 @@ #include "MutableArray.h" #include #include -#include #include namespace WebCore { @@ -46,22 +45,35 @@ public: static const Type APIType = TypeRenderObject; static PassRefPtr create(WebPage*); - static PassRefPtr create(const String& name, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr children) + static PassRefPtr create(WebCore::RenderObject* renderer) { - return adoptRef(new WebRenderObject(name, absolutePosition, frameRect, children)); + return adoptRef(new WebRenderObject(renderer, false)); + } + + static PassRefPtr create(const String& name, const String& elementTagName, const String& elementID, + PassRefPtr elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr children) + { + return adoptRef(new WebRenderObject(name, elementTagName, elementID, elementClassNames, absolutePosition, frameRect, children)); } RefPtr children() const { return m_children; } const String& name() const { return m_name; } + const String& elementTagName() const { return m_elementTagName; } + const String& elementID() const { return m_elementID; } + ImmutableArray* elementClassNames() const { return m_elementClassNames.get(); } WebCore::IntPoint absolutePosition() const { return m_absolutePosition; } WebCore::IntRect frameRect() const { return m_frameRect; } private: - WebRenderObject(WebCore::RenderObject*); - WebRenderObject(const String& name, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr children) + WebRenderObject(WebCore::RenderObject*, bool shouldIncludeDescendants); + WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr elementClassNames, + WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr children) : m_children(children) , m_name(name) + , m_elementTagName(elementTagName) + , m_elementID(elementID) + , m_elementClassNames(elementClassNames) , m_absolutePosition(absolutePosition) , m_frameRect(frameRect) { @@ -72,6 +84,9 @@ private: RefPtr m_children; String m_name; + String m_elementTagName; + String m_elementID; + RefPtr m_elementClassNames; WebCore::IntPoint m_absolutePosition; WebCore::IntRect m_frameRect; }; -- 2.7.4