Changeset 121584 in webkit
- Timestamp:
- Jun 29, 2012 1:26:25 PM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r121578 r121584 1 2012-06-29 Dan Bernstein <mitz@apple.com> 2 3 Can’t get basic element info from a WKRenderObject 4 https://bugs.webkit.org/show_bug.cgi?id=90301 5 6 Reviewed by Anders Carlsson. 7 8 Moved the element info (tag name, id and class names) from WebRenderLayer to WebRenderObject, 9 and gave WebRenderLayer a reference to a (shallow) WebRenderObject. Added WKRenderObject API 10 for getting element info, while leaving the WKRenderLayer API in place for now for Safari. 11 12 * Shared/API/c/WKRenderLayer.cpp: 13 (WKRenderLayerGetRenderer): Added this wrapper. 14 (WKRenderLayerCopyRendererName): Changed to get the name from the renderer. 15 (WKRenderLayerCopyElementTagName): Changed to go through the renderer. 16 (WKRenderLayerCopyElementID): Ditto. 17 (WKRenderLayerGetElementClassNames): Ditto. 18 * Shared/API/c/WKRenderLayer.h: Added declaration of WKRenderLayerGetRenderer() and comments 19 about removing older API. 20 * Shared/API/c/WKRenderObject.cpp: 21 (WKRenderObjectCopyElementTagName): Added this wrapper. 22 (WKRenderObjectCopyElementID): Ditto. 23 (WKRenderObjectGetElementClassNames): Ditto. 24 * Shared/API/c/WKRenderObject.h: 25 * Shared/UserMessageCoders.h: 26 (WebKit::UserMessageEncoder::baseEncode): Removed the element info from the encoding of 27 WebRenderLayer, and added the renderer. Added the element info to the encoding of 28 WebRenderObject. 29 (WebKit::UserMessageDecoder::baseDecode): Updated to match the encoding changes. 30 * Shared/WebRenderLayer.cpp: 31 (WebKit::WebRenderLayer::WebRenderLayer): Changed to initialize the m_renderer member 32 variable with a WebRenderObject for the layer’s renderer, and removed the initialization of 33 the element-related member variables that were removed. 34 * Shared/WebRenderLayer.h: 35 (WebKit::WebRenderLayer::create): Changed to take a renderer instead of renderer and element 36 info. 37 (WebKit::WebRenderLayer::renderer): Added this getter. 38 (WebKit::WebRenderLayer::WebRenderLayer): Changed to take a renderer instead of renderer and 39 element info. 40 * Shared/WebRenderObject.cpp: 41 (WebKit::WebRenderObject::create): Changed to pass true for the shouldIncludeDescendants 42 parameter. 43 (WebKit::WebRenderObject::WebRenderObject): Added a shouldIncludeDescdendants boolean 44 parameter. When it is false, the m_children array remains null. Added initialization of 45 member variables with the element’s tag name, id and class list. 46 * Shared/WebRenderObject.h: 47 (WebKit::WebRenderObject::create): Added an overload that takes a RenderObject and creates 48 a shallow WebRenderObject. 49 (WebRenderObject): Changed to take element tag name, id and class list. 50 (WebKit::WebRenderObject::elementTagName): Added this getter. 51 (WebKit::WebRenderObject::elementID): Ditto. 52 (WebKit::WebRenderObject::elementClassNames): Ditto. 53 (WebKit::WebRenderObject::WebRenderObject): 54 1 55 2012-06-29 Tony Chang <tony@chromium.org> 2 56 -
trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.cpp
r110397 r121584 38 38 } 39 39 40 WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayerRef) 41 { 42 return toAPI(toImpl(renderLayerRef)->renderer()); 43 } 44 40 45 WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayerRef) 41 46 { 42 return toCopiedAPI(toImpl(renderLayerRef)->render ObjectName());47 return toCopiedAPI(toImpl(renderLayerRef)->renderer()->name()); 43 48 } 44 49 … … 46 51 { 47 52 WebRenderLayer* renderLayer = toImpl(renderLayerRef); 48 if (!renderLayer-> elementTagName().isNull())49 return toCopiedAPI( toImpl(renderLayerRef)->elementTagName());53 if (!renderLayer->renderer()->elementTagName().isNull()) 54 return toCopiedAPI(renderLayer->renderer()->elementTagName()); 50 55 51 56 return 0; … … 55 60 { 56 61 WebRenderLayer* renderLayer = toImpl(renderLayerRef); 57 if (!renderLayer-> elementID().isNull())58 return toCopiedAPI( toImpl(renderLayerRef)->elementID());62 if (!renderLayer->renderer()->elementID().isNull()) 63 return toCopiedAPI(renderLayer->renderer()->elementID()); 59 64 60 65 return 0; … … 63 68 WKArrayRef WKRenderLayerGetElementClassNames(WKRenderLayerRef renderLayerRef) 64 69 { 65 return toAPI(toImpl(renderLayerRef)-> elementClassNames());70 return toAPI(toImpl(renderLayerRef)->renderer()->elementClassNames()); 66 71 } 67 72 -
trunk/Source/WebKit2/Shared/API/c/WKRenderLayer.h
r110397 r121584 37 37 WK_EXPORT WKTypeID WKRenderLayerGetTypeID(); 38 38 39 WK_EXPORT WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayer); 40 41 // FIXME: Remove this function once Safari does not require it. 39 42 WK_EXPORT WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayer); 40 43 44 // FIXME: Remove these three functions once Safari does not require them. 41 45 WK_EXPORT WKStringRef WKRenderLayerCopyElementTagName(WKRenderLayerRef renderLayer); 42 46 WK_EXPORT WKStringRef WKRenderLayerCopyElementID(WKRenderLayerRef renderLayer); -
trunk/Source/WebKit2/Shared/API/c/WKRenderObject.cpp
r110085 r121584 43 43 } 44 44 45 WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObjectRef) 46 { 47 WebRenderObject* renderObject = toImpl(renderObjectRef); 48 if (!renderObject->elementTagName().isNull()) 49 return toCopiedAPI(renderObject->elementTagName()); 50 51 return 0; 52 } 53 54 WKStringRef WKRenderObjectCopyElementID(WKRenderObjectRef renderObjectRef) 55 { 56 WebRenderObject* renderObject = toImpl(renderObjectRef); 57 if (!renderObject->elementID().isNull()) 58 return toCopiedAPI(renderObject->elementID()); 59 60 return 0; 61 } 62 63 WKArrayRef WKRenderObjectGetElementClassNames(WKRenderObjectRef renderObjectRef) 64 { 65 return toAPI(toImpl(renderObjectRef)->elementClassNames()); 66 } 67 45 68 WKPoint WKRenderObjectGetAbsolutePosition(WKRenderObjectRef renderObjectRef) 46 69 { -
trunk/Source/WebKit2/Shared/API/c/WKRenderObject.h
r110085 r121584 37 37 38 38 WK_EXPORT WKStringRef WKRenderObjectCopyName(WKRenderObjectRef renderObject); 39 40 WK_EXPORT WKStringRef WKRenderObjectCopyElementTagName(WKRenderObjectRef renderObject); 41 WK_EXPORT WKStringRef WKRenderObjectCopyElementID(WKRenderObjectRef renderObject); 42 WK_EXPORT WKArrayRef WKRenderObjectGetElementClassNames(WKRenderObjectRef renderObject); 43 39 44 WK_EXPORT WKPoint WKRenderObjectGetAbsolutePosition(WKRenderObjectRef renderObject); 40 45 WK_EXPORT WKRect WKRenderObjectGetFrameRect(WKRenderObjectRef renderObject); -
trunk/Source/WebKit2/Shared/UserMessageCoders.h
r112555 r121584 146 146 case APIObject::TypeRenderLayer: { 147 147 WebRenderLayer* renderLayer = static_cast<WebRenderLayer*>(m_root); 148 encoder->encode(renderLayer->renderObjectName()); 149 encoder->encode(renderLayer->elementTagName()); 150 encoder->encode(renderLayer->elementID()); 151 encoder->encode(Owner(renderLayer->elementClassNames())); 148 encoder->encode(Owner(renderLayer->renderer())); 152 149 encoder->encode(renderLayer->isReflection()); 153 150 encoder->encode(renderLayer->isClipping()); … … 163 160 WebRenderObject* renderObject = static_cast<WebRenderObject*>(m_root); 164 161 encoder->encode(renderObject->name()); 162 encoder->encode(renderObject->elementTagName()); 163 encoder->encode(renderObject->elementID()); 164 encoder->encode(Owner(renderObject->elementClassNames())); 165 165 encoder->encode(renderObject->absolutePosition()); 166 166 encoder->encode(renderObject->frameRect()); … … 368 368 } 369 369 case APIObject::TypeRenderLayer: { 370 String renderObjectName; 371 String elementTagName; 372 String elementID; 373 RefPtr<APIObject> elementClassNames; 370 RefPtr<APIObject> renderer; 374 371 bool isReflection; 375 372 bool isClipping; … … 381 378 RefPtr<APIObject> positiveZOrderList; 382 379 383 if (!decoder->decode(renderObjectName)) 384 return false; 385 if (!decoder->decode(elementTagName)) 386 return false; 387 if (!decoder->decode(elementID)) 388 return false; 389 Owner classNamesCoder(coder, elementClassNames); 390 if (!decoder->decode(classNamesCoder)) 380 Owner rendererCoder(coder, renderer); 381 if (!decoder->decode(rendererCoder)) 382 return false; 383 if (renderer->type() != APIObject::TypeRenderObject) 391 384 return false; 392 385 if (!decoder->decodeBool(isReflection)) … … 409 402 if (!decoder->decode(positiveZOrderListCoder)) 410 403 return false; 411 coder.m_root = WebRenderLayer::create(renderObjectName, elementTagName, elementID, static_pointer_cast<MutableArray>(elementClassNames), 412 isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32), 404 coder.m_root = WebRenderLayer::create(static_pointer_cast<WebRenderObject>(renderer), isReflection, isClipping, isClipped, static_cast<WebRenderLayer::CompositingLayerType>(compositingLayerTypeAsUInt32), 413 405 absoluteBoundingBox, static_pointer_cast<MutableArray>(negativeZOrderList), static_pointer_cast<MutableArray>(normalFlowList), 414 406 static_pointer_cast<MutableArray>(positiveZOrderList)); … … 417 409 case APIObject::TypeRenderObject: { 418 410 String name; 411 String elementTagName; 412 String elementID; 413 RefPtr<APIObject> elementClassNames; 419 414 WebCore::IntPoint absolutePosition; 420 415 WebCore::IntRect frameRect; … … 423 418 if (!decoder->decode(name)) 424 419 return false; 420 if (!decoder->decode(elementTagName)) 421 return false; 422 if (!decoder->decode(elementID)) 423 return false; 424 Owner classNamesCoder(coder, elementClassNames); 425 if (!decoder->decode(classNamesCoder)) 426 return false; 425 427 if (!decoder->decode(absolutePosition)) 426 428 return false; … … 430 432 if (!decoder->decode(messageCoder)) 431 433 return false; 432 if (children ->type() != APIObject::TypeArray)433 return false; 434 coder.m_root = WebRenderObject::create(name, absolutePosition, frameRect, WTF::static_pointer_cast<MutableArray>(children));434 if (children && children->type() != APIObject::TypeArray) 435 return false; 436 coder.m_root = WebRenderObject::create(name, elementTagName, elementID, WTF::static_pointer_cast<MutableArray>(elementClassNames), absolutePosition, frameRect, WTF::static_pointer_cast<MutableArray>(children)); 435 437 break; 436 438 } -
trunk/Source/WebKit2/Shared/WebRenderLayer.cpp
r110397 r121584 76 76 WebRenderLayer::WebRenderLayer(RenderLayer* layer) 77 77 { 78 RenderBoxModelObject* renderer = layer->renderer(); 79 80 m_renderObjectName = renderer->renderName(); 81 82 if (Node* node = renderer->node()) { 83 if (node->isElementNode()) { 84 Element* element = toElement(node); 85 m_elementTagName = element->tagName(); 86 m_elementID = element->getIdAttribute(); 87 if (element->isStyledElement() && element->hasClass()) { 88 StyledElement* styledElement = static_cast<StyledElement*>(element); 89 if (size_t classNameCount = styledElement->classNames().size()) { 90 m_elementClassNames = MutableArray::create(); 91 for (size_t i = 0; i < classNameCount; ++i) 92 m_elementClassNames->append(WebString::create(styledElement->classNames()[i]).get()); 93 } 94 } 95 96 } 97 } 98 78 m_renderer = WebRenderObject::create(layer->renderer()); 99 79 m_isReflection = layer->isReflection(); 100 80 -
trunk/Source/WebKit2/Shared/WebRenderLayer.h
r110397 r121584 27 27 #define WebRenderLayer_h 28 28 29 #include "APIObject.h" 30 #include "MutableArray.h" 31 #include <WebCore/IntRect.h> 32 #include <wtf/PassRefPtr.h> 33 #include <wtf/Vector.h> 34 #include <wtf/text/WTFString.h> 29 #include "WebRenderObject.h" 35 30 36 31 namespace WebCore { … … 49 44 50 45 static PassRefPtr<WebRenderLayer> create(WebPage*); 51 static PassRefPtr<WebRenderLayer> create(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames, 52 bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, 53 PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> positiveZOrderList) 46 static PassRefPtr<WebRenderLayer> create(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, 47 WebCore::IntRect absoluteBoundingBox, PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> positiveZOrderList) 54 48 { 55 return adoptRef(new WebRenderLayer(renderObjectName, elementTagName, elementID, elementClassNames, isReflection, isClipping, isClipped, 56 type, absoluteBoundingBox, negativeZOrderList, normalFlowList, positiveZOrderList)); 49 return adoptRef(new WebRenderLayer(renderer, isReflection, isClipping, isClipped, type, absoluteBoundingBox, negativeZOrderList, normalFlowList, positiveZOrderList)); 57 50 } 58 51 … … 61 54 ImmutableArray* positiveZOrderList() const { return m_positiveZOrderList.get(); } 62 55 63 const String& renderObjectName() const { return m_renderObjectName; } 64 const String& elementTagName() const { return m_elementTagName; } 65 const String& elementID() const { return m_elementID; } 66 ImmutableArray* elementClassNames() const { return m_elementClassNames.get(); } 56 WebRenderObject* renderer() const { return m_renderer.get(); } 67 57 bool isReflection() const { return m_isReflection; } 68 58 bool isClipping() const { return m_isClipping; } … … 73 63 private: 74 64 WebRenderLayer(WebCore::RenderLayer*); 75 WebRenderLayer(const String& renderObjectName, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames, 76 bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, 65 WebRenderLayer(PassRefPtr<WebRenderObject> renderer, bool isReflection, bool isClipping, bool isClipped, CompositingLayerType type, WebCore::IntRect absoluteBoundingBox, 77 66 PassRefPtr<MutableArray> negativeZOrderList, PassRefPtr<MutableArray> normalFlowList, PassRefPtr<MutableArray> positiveZOrderList) 78 : m_renderObjectName(renderObjectName) 79 , m_elementTagName(elementTagName) 80 , m_elementID(elementID) 81 , m_elementClassNames(elementClassNames) 67 : m_renderer(renderer) 82 68 , m_isReflection(isReflection) 83 69 , m_isClipping(isClipping) … … 95 81 static PassRefPtr<MutableArray> createArrayFromLayerList(Vector<WebCore::RenderLayer*>*); 96 82 97 String m_renderObjectName; 98 String m_elementTagName; 99 String m_elementID; 100 RefPtr<MutableArray> m_elementClassNames; 83 RefPtr<WebRenderObject> m_renderer; 101 84 bool m_isReflection; 102 85 bool m_isClipping; -
trunk/Source/WebKit2/Shared/WebRenderObject.cpp
r112758 r121584 28 28 29 29 #include "WebPage.h" 30 #include "WebString.h" 30 31 #include <WebCore/Frame.h> 31 32 #include <WebCore/FrameLoaderClient.h> … … 51 52 return 0; 52 53 53 return adoptRef(new WebRenderObject(contentRenderer ));54 return adoptRef(new WebRenderObject(contentRenderer, true)); 54 55 } 55 56 56 WebRenderObject::WebRenderObject(RenderObject* renderer )57 WebRenderObject::WebRenderObject(RenderObject* renderer, bool shouldIncludeDescendants) 57 58 { 58 59 m_name = renderer->renderName(); 60 61 if (Node* node = renderer->node()) { 62 if (node->isElementNode()) { 63 Element* element = toElement(node); 64 m_elementTagName = element->tagName(); 65 m_elementID = element->getIdAttribute(); 66 if (element->isStyledElement() && element->hasClass()) { 67 StyledElement* styledElement = static_cast<StyledElement*>(element); 68 if (size_t classNameCount = styledElement->classNames().size()) { 69 m_elementClassNames = MutableArray::create(); 70 for (size_t i = 0; i < classNameCount; ++i) 71 m_elementClassNames->append(WebString::create(styledElement->classNames()[i]).get()); 72 } 73 } 74 } 75 } 59 76 60 77 // FIXME: broken with transforms … … 70 87 m_frameRect = toRenderBoxModelObject(renderer)->borderBoundingBox(); 71 88 89 if (!shouldIncludeDescendants) 90 return; 91 72 92 m_children = MutableArray::create(); 73 93 for (RenderObject* coreChild = renderer->firstChild(); coreChild; coreChild = coreChild->nextSibling()) { 74 RefPtr<WebRenderObject> child = adoptRef(new WebRenderObject(coreChild ));94 RefPtr<WebRenderObject> child = adoptRef(new WebRenderObject(coreChild, shouldIncludeDescendants)); 75 95 m_children->append(child.get()); 76 96 } … … 85 105 FrameView* frameView = static_cast<FrameView*>(widget); 86 106 if (RenderView* coreContentRenderer = frameView->frame()->contentRenderer()) { 87 RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer ));107 RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer, shouldIncludeDescendants)); 88 108 m_children->append(contentRenderer.get()); 89 109 } -
trunk/Source/WebKit2/Shared/WebRenderObject.h
r110085 r121584 31 31 #include <WebCore/IntRect.h> 32 32 #include <wtf/PassRefPtr.h> 33 #include <wtf/Vector.h>34 33 #include <wtf/text/WTFString.h> 35 34 … … 47 46 48 47 static PassRefPtr<WebRenderObject> create(WebPage*); 49 static PassRefPtr<WebRenderObject> create( const String& name, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children)48 static PassRefPtr<WebRenderObject> create(WebCore::RenderObject* renderer) 50 49 { 51 return adoptRef(new WebRenderObject(name, absolutePosition, frameRect, children)); 50 return adoptRef(new WebRenderObject(renderer, false)); 51 } 52 53 static PassRefPtr<WebRenderObject> create(const String& name, const String& elementTagName, const String& elementID, 54 PassRefPtr<MutableArray> elementClassNames, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children) 55 { 56 return adoptRef(new WebRenderObject(name, elementTagName, elementID, elementClassNames, absolutePosition, frameRect, children)); 52 57 } 53 58 … … 55 60 56 61 const String& name() const { return m_name; } 62 const String& elementTagName() const { return m_elementTagName; } 63 const String& elementID() const { return m_elementID; } 64 ImmutableArray* elementClassNames() const { return m_elementClassNames.get(); } 57 65 WebCore::IntPoint absolutePosition() const { return m_absolutePosition; } 58 66 WebCore::IntRect frameRect() const { return m_frameRect; } 59 67 60 68 private: 61 WebRenderObject(WebCore::RenderObject*); 62 WebRenderObject(const String& name, WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children) 69 WebRenderObject(WebCore::RenderObject*, bool shouldIncludeDescendants); 70 WebRenderObject(const String& name, const String& elementTagName, const String& elementID, PassRefPtr<MutableArray> elementClassNames, 71 WebCore::IntPoint absolutePosition, WebCore::IntRect frameRect, PassRefPtr<MutableArray> children) 63 72 : m_children(children) 64 73 , m_name(name) 74 , m_elementTagName(elementTagName) 75 , m_elementID(elementID) 76 , m_elementClassNames(elementClassNames) 65 77 , m_absolutePosition(absolutePosition) 66 78 , m_frameRect(frameRect) … … 73 85 74 86 String m_name; 87 String m_elementTagName; 88 String m_elementID; 89 RefPtr<MutableArray> m_elementClassNames; 75 90 WebCore::IntPoint m_absolutePosition; 76 91 WebCore::IntRect m_frameRect;
Note: See TracChangeset
for help on using the changeset viewer.