Title: [121584] trunk/Source/WebKit2
Revision
121584
Author
[email protected]
Date
2012-06-29 13:26:25 -0700 (Fri, 29 Jun 2012)

Log Message

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): 

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (121583 => 121584)


--- trunk/Source/WebKit2/ChangeLog	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/ChangeLog	2012-06-29 20:26:25 UTC (rev 121584)
@@ -1,3 +1,57 @@
+2012-06-29  Dan Bernstein  <[email protected]>
+
+        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  <[email protected]>
 
         Unreviewed, rolling out r121572.

Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp (121583 => 121584)


--- trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp	2012-06-29 20:26:25 UTC (rev 121584)
@@ -37,16 +37,21 @@
     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 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)

Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h (121583 => 121584)


--- trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h	2012-06-29 20:26:25 UTC (rev 121584)
@@ -36,8 +36,12 @@
 
 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);

Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderObject.cpp (121583 => 121584)


--- trunk/Source/WebKit2/Shared/API/c/WKRenderObject.cpp	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderObject.cpp	2012-06-29 20:26:25 UTC (rev 121584)
@@ -42,6 +42,29 @@
     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();

Modified: trunk/Source/WebKit2/Shared/API/c/WKRenderObject.h (121583 => 121584)


--- trunk/Source/WebKit2/Shared/API/c/WKRenderObject.h	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/API/c/WKRenderObject.h	2012-06-29 20:26:25 UTC (rev 121584)
@@ -36,6 +36,11 @@
 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);

Modified: trunk/Source/WebKit2/Shared/UserMessageCoders.h (121583 => 121584)


--- trunk/Source/WebKit2/Shared/UserMessageCoders.h	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/UserMessageCoders.h	2012-06-29 20:26:25 UTC (rev 121584)
@@ -145,10 +145,7 @@
         }
         case APIObject::TypeRenderLayer: {
             WebRenderLayer* renderLayer = static_cast<WebRenderLayer*>(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 @@
         case APIObject::TypeRenderObject: {
             WebRenderObject* renderObject = static_cast<WebRenderObject*>(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 @@
             break;
         }
         case APIObject::TypeRenderLayer: {
-            String renderObjectName;
-            String elementTagName;
-            String elementID;
-            RefPtr<APIObject> elementClassNames;
+            RefPtr<APIObject> renderer;
             bool isReflection;
             bool isClipping;
             bool isClipped;
@@ -380,15 +377,11 @@
             RefPtr<APIObject> normalFlowList;
             RefPtr<APIObject> positiveZOrderList;
 
-            if (!decoder->decode(renderObjectName))
+            Owner rendererCoder(coder, renderer);
+            if (!decoder->decode(rendererCoder))
                 return false;
-            if (!decoder->decode(elementTagName))
+            if (renderer->type() != APIObject::TypeRenderObject)
                 return false;
-            if (!decoder->decode(elementID))
-                return false;
-            Owner classNamesCoder(coder, elementClassNames);
-            if (!decoder->decode(classNamesCoder))
-                return false;
             if (!decoder->decodeBool(isReflection))
                 return false;
             if (!decoder->decodeBool(isClipping))
@@ -408,20 +401,29 @@
             Owner positiveZOrderListCoder(coder, positiveZOrderList);
             if (!decoder->decode(positiveZOrderListCoder))
                 return false;
-            coder.m_root = WebRenderLayer::create(renderObjectName, elementTagName, elementID, static_pointer_cast<MutableArray>(elementClassNames),
-                isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32),
+            coder.m_root = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32),
                 absoluteBoundingBox, static_pointer_cast<MutableArray>(negativeZOrderList), static_pointer_cast<MutableArray>(normalFlowList),
                 static_pointer_cast<MutableArray>(positiveZOrderList));
             break;
         }
         case APIObject::TypeRenderObject: {
             String name;
+            String elementTagName;
+            String elementID;
+            RefPtr<APIObject> elementClassNames;
             WebCore::IntPoint absolutePosition;
             WebCore::IntRect frameRect;
             RefPtr<APIObject> 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 @@
             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<MutableArray>(children));
+            coder.m_root = WebRenderObject::create(name, elementTagName, elementID, WTF::static_pointer_cast<MutableArray>(elementClassNames), absolutePosition, frameRect, WTF::static_pointer_cast<MutableArray>(children));
             break;
         }
         case APIObject::TypeURL: {

Modified: trunk/Source/WebKit2/Shared/WebRenderLayer.cpp (121583 => 121584)


--- trunk/Source/WebKit2/Shared/WebRenderLayer.cpp	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/WebRenderLayer.cpp	2012-06-29 20:26:25 UTC (rev 121584)
@@ -75,27 +75,7 @@
 
 WebRenderLayer::WebRenderLayer(RenderLayer* layer)
 {
-    RenderBoxModelObject* renderer = layer->renderer();
-
-    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<StyledElement*>(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)

Modified: trunk/Source/WebKit2/Shared/WebRenderLayer.h (121583 => 121584)


--- trunk/Source/WebKit2/Shared/WebRenderLayer.h	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/WebRenderLayer.h	2012-06-29 20:26:25 UTC (rev 121584)
@@ -26,12 +26,7 @@
 #ifndef WebRenderLayer_h
 #define WebRenderLayer_h
 
-#include "APIObject.h"
-#include "MutableArray.h"
-#include <WebCore/IntRect.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/Vector.h>
-#include <wtf/text/WTFString.h>
+#include "WebRenderObject.h"
 
 namespace WebCore {
     class RenderLayer;
@@ -48,22 +43,17 @@
     enum CompositingLayerType { None, Normal, Tiled, Media, Container };
 
     static PassRefPtr<WebRenderLayer> create(WebPage*);
-    static PassRefPtr<WebRenderLayer> create(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames,
-        bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox,
-        PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> positiveZOrderList)
+    static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type,
+        WebCore::IntRect absoluteBoundingBox, PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> 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 @@
 
 private:
     WebRenderLayer(WebCore::RenderLayer*);
-    WebRenderLayer(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames,
-        bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox,
+    WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox,
         PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> 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 @@
 
     static PassRefPtr<MutableArray> createArrayFromLayerList(Vector<WebCore::RenderLayer*>*);
 
-    String m_renderObjectName;
-    String m_elementTagName;
-    String m_elementID;
-    RefPtr<MutableArray> m_elementClassNames;
+    RefPtr<WebRenderObject> m_renderer;
     bool m_isReflection;
     bool m_isClipping;
     bool m_isClipped;

Modified: trunk/Source/WebKit2/Shared/WebRenderObject.cpp (121583 => 121584)


--- trunk/Source/WebKit2/Shared/WebRenderObject.cpp	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/WebRenderObject.cpp	2012-06-29 20:26:25 UTC (rev 121584)
@@ -27,6 +27,7 @@
 #include "WebRenderObject.h"
 
 #include "WebPage.h"
+#include "WebString.h"
 #include <WebCore/Frame.h>
 #include <WebCore/FrameLoaderClient.h>
 #include <WebCore/RenderText.h>
@@ -50,13 +51,29 @@
     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<StyledElement*>(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 @@
     } 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<WebRenderObject> child = adoptRef(new WebRenderObject(coreChild));
+        RefPtr<WebRenderObject> child = adoptRef(new WebRenderObject(coreChild, shouldIncludeDescendants));
         m_children->append(child.get());
     }
 
@@ -84,7 +104,7 @@
 
     FrameView* frameView = static_cast<FrameView*>(widget);
     if (RenderView* coreContentRenderer = frameView->frame()->contentRenderer()) {
-        RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer));
+        RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer, shouldIncludeDescendants));
         m_children->append(contentRenderer.get());
     }
 }

Modified: trunk/Source/WebKit2/Shared/WebRenderObject.h (121583 => 121584)


--- trunk/Source/WebKit2/Shared/WebRenderObject.h	2012-06-29 19:57:29 UTC (rev 121583)
+++ trunk/Source/WebKit2/Shared/WebRenderObject.h	2012-06-29 20:26:25 UTC (rev 121584)
@@ -30,7 +30,6 @@
 #include "MutableArray.h"
 #include <WebCore/IntRect.h>
 #include <wtf/PassRefPtr.h>
-#include <wtf/Vector.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
@@ -46,22 +45,35 @@
     static const Type APIType = TypeRenderObject;
 
     static PassRefPtr<WebRenderObject> create(WebPage*);
-    static PassRefPtr<WebRenderObject> create(const String& name, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children)
+    static PassRefPtr<WebRenderObject> create(WebCore::RenderObject* renderer)
     {
-        return adoptRef(new WebRenderObject(name, absolutePosition, frameRect, children));
+        return adoptRef(new WebRenderObject(renderer, false));
     }
 
+    static PassRefPtr<WebRenderObject> create(const String& name, const String& elementTagName, const String& elementID,
+        PassRefPtr<MutableArray> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children)
+    {
+        return adoptRef(new WebRenderObject(name, elementTagName, elementID, elementClassNames, absolutePosition, frameRect, children));
+    }
+
     RefPtr<ImmutableArray> 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<MutableArray> children)
+    WebRenderObject(WebCore::RenderObject*, bool shouldIncludeDescendants);
+    WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames,
+        WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> 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 @@
     RefPtr<MutableArray> m_children;
 
     String m_name;
+    String m_elementTagName;
+    String m_elementID;
+    RefPtr<MutableArray> m_elementClassNames;
     WebCore::IntPoint m_absolutePosition;
     WebCore::IntRect m_frameRect;
 };
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to