Changeset 137463 in webkit
- Timestamp:
- Dec 12, 2012 7:00:23 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 17 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r137462 r137463 1 2012-12-12 Stephen White <senorblanco@chromium.org> 2 3 Unreviewed, rolling out r136975. 4 http://trac.webkit.org/changeset/136975 5 https://bugs.webkit.org/show_bug.cgi?id=90405 6 7 Correctness issues. 8 9 * css3/filters/effect-reference-after-expected.txt: Removed. 10 * css3/filters/effect-reference-after.html: Removed. 11 * css3/filters/effect-reference-delete-crash-expected.txt: Removed. 12 * css3/filters/effect-reference-delete-crash.html: Removed. 13 * css3/filters/effect-reference-delete-expected.txt: Removed. 14 * css3/filters/effect-reference-delete.html: Removed. 15 * css3/filters/effect-reference-rename-expected.txt: Removed. 16 * css3/filters/effect-reference-rename.html: Removed. 17 * css3/filters/effect-reference-reset-style-delete-crash-expected.txt: Removed. 18 * css3/filters/effect-reference-reset-style-delete-crash.html: Removed. 19 * css3/filters/script-tests/effect-reference-delete-crash.js: Removed. 20 * css3/filters/script-tests/effect-reference-reset-style-delete-crash.js: Removed. 21 * platform/chromium-linux/css3/filters/effect-reference-after-expected.png: Removed. 22 * platform/chromium-linux/css3/filters/effect-reference-delete-expected.png: Removed. 23 * platform/chromium-linux/css3/filters/effect-reference-rename-expected.png: Removed. 24 * svg/filters/filter-cycle-expected.html: Removed. 25 * svg/filters/filter-cycle.html: Removed. 26 1 27 2012-12-12 Stephen White <senorblanco@chromium.org> 2 28 -
trunk/Source/WebCore/ChangeLog
r137460 r137463 1 2012-12-12 Stephen White <senorblanco@chromium.org> 2 3 Unreviewed, rolling out r136975. 4 http://trac.webkit.org/changeset/136975 5 https://bugs.webkit.org/show_bug.cgi?id=90405 6 7 Correctness issues. 8 9 * dom/Element.cpp: 10 * dom/Element.h: 11 (Element): 12 * dom/ElementRareData.h: 13 (ElementRareData): 14 (WebCore::ElementRareData::ElementRareData): 15 * platform/graphics/texmap/TextureMapperImageBuffer.cpp: 16 (WebCore::BitmapTextureImageBuffer::applyFilters): 17 * rendering/FilterEffectRenderer.cpp: 18 (WebCore::createCustomFilterEffect): 19 (WebCore::FilterEffectRenderer::buildReferenceFilter): 20 (WebCore::FilterEffectRenderer::build): 21 * rendering/FilterEffectRenderer.h: 22 (FilterEffectRenderer): 23 * rendering/RenderLayer.cpp: 24 (WebCore::RenderLayer::updateOrRemoveFilterEffectRenderer): 25 * rendering/RenderObject.cpp: 26 (WebCore::RenderObject::willBeDestroyed): 27 * rendering/svg/RenderSVGResourceContainer.cpp: 28 (WebCore::RenderSVGResourceContainer::registerResource): 29 * rendering/svg/SVGResources.cpp: 30 (WebCore::SVGResources::buildCachedResources): 31 * rendering/svg/SVGResourcesCache.cpp: 32 (WebCore::SVGResourcesCache::addResourcesFromRenderObject): 33 (WebCore::SVGResourcesCache::clientStyleChanged): 34 (WebCore::SVGResourcesCache::resourceDestroyed): 35 * svg/SVGDocumentExtensions.cpp: 36 (WebCore::SVGDocumentExtensions::addPendingResource): 37 (WebCore::SVGDocumentExtensions::isElementPendingResources): 38 (WebCore::SVGDocumentExtensions::isElementPendingResource): 39 (WebCore::SVGDocumentExtensions::removeElementFromPendingResources): 40 (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval): 41 * svg/SVGDocumentExtensions.h: 42 (WebCore): 43 (SVGDocumentExtensions): 44 * svg/SVGElement.cpp: 45 (WebCore::SVGElement::hasPendingResources): 46 (WebCore): 47 (WebCore::SVGElement::setHasPendingResources): 48 (WebCore::SVGElement::clearHasPendingResourcesIfPossible): 49 * svg/SVGElement.h: 50 (SVGElement): 51 (WebCore::SVGElement::buildPendingResource): 52 * svg/SVGElementRareData.h: 53 (WebCore::SVGElementRareData::SVGElementRareData): 54 (WebCore::SVGElementRareData::hasPendingResources): 55 (WebCore::SVGElementRareData::setHasPendingResources): 56 (SVGElementRareData): 57 * svg/SVGStyledElement.cpp: 58 (WebCore::SVGStyledElement::buildPendingResourcesIfNeeded): 59 1 60 2012-12-12 Stephen White <senorblanco@chromium.org> 2 61 -
trunk/Source/WebCore/dom/Element.cpp
r137406 r137463 2690 2690 } 2691 2691 2692 #if ENABLE(SVG)2693 bool Element::hasPendingResources() const2694 {2695 return hasRareData() && elementRareData()->hasPendingResources();2696 }2697 2698 void Element::setHasPendingResources()2699 {2700 ensureElementRareData()->setHasPendingResources(true);2701 }2702 2703 void Element::clearHasPendingResources()2704 {2705 ensureElementRareData()->setHasPendingResources(false);2706 }2707 #endif2708 2709 2692 } // namespace WebCore -
trunk/Source/WebCore/dom/Element.h
r137406 r137463 427 427 #if ENABLE(SVG) 428 428 virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const; 429 bool hasPendingResources() const;430 void setHasPendingResources();431 void clearHasPendingResources();432 virtual void buildPendingResource() { };433 429 #endif 434 430 -
trunk/Source/WebCore/dom/ElementRareData.h
r137459 r137463 107 107 void setSavedLayerScrollOffset(IntSize size) { m_savedLayerScrollOffset = size; } 108 108 109 bool hasPendingResources() const { return m_hasPendingResources; }110 void setHasPendingResources(bool has) { m_hasPendingResources = has; }111 112 109 private: 113 110 // Many fields are in NodeRareData for better packing. … … 125 122 IntSize m_savedLayerScrollOffset; 126 123 127 #if ENABLE(SVG)128 bool m_hasPendingResources : 1;129 #endif130 124 private: 131 125 void releasePseudoElement(PseudoElement*); … … 142 136 , m_generatedBefore(0) 143 137 , m_generatedAfter(0) 144 #if ENABLE(SVG)145 , m_hasPendingResources(false)146 #endif147 138 { 148 139 } -
trunk/Source/WebCore/platform/graphics/texmap/TextureMapperImageBuffer.cpp
r136975 r137463 149 149 renderer->setSourceImageRect(FloatRect(FloatPoint::zero(), contentTexture.size())); 150 150 151 // The renderer parameter is only needed for CSS shaders and reference filters.152 renderer->build(0 /* renderer*/, filters);151 // The document parameter is only needed for CSS shaders. 152 renderer->build(0 /*document */, filters); 153 153 renderer->allocateBackingStoreIfNeeded(); 154 154 GraphicsContext* context = renderer->inputContext(); -
trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp
r137055 r137463 89 89 static PassRefPtr<FECustomFilter> createCustomFilterEffect(Filter* filter, Document* document, ValidatedCustomFilterOperation* operation) 90 90 { 91 if (!document)92 return 0;93 94 91 CustomFilterGlobalContext* globalContext = document->renderView()->customFilterGlobalContext(); 95 92 globalContext->prepareContextIfNeeded(document->view()->hostWindow()); … … 126 123 } 127 124 128 PassRefPtr<FilterEffect> FilterEffectRenderer::buildReferenceFilter( RenderObject* renderer, PassRefPtr<FilterEffect> previousEffect, ReferenceFilterOperation* filterOperation)125 PassRefPtr<FilterEffect> FilterEffectRenderer::buildReferenceFilter(Document* document, PassRefPtr<FilterEffect> previousEffect, ReferenceFilterOperation* filterOperation) 129 126 { 130 127 #if ENABLE(SVG) 131 if (!renderer)132 return 0;133 134 Document* document = renderer->document();135 ASSERT(document);136 137 128 CachedSVGDocumentReference* cachedSVGDocumentReference = filterOperation->cachedSVGDocumentReference(); 138 129 CachedSVGDocument* cachedSVGDocument = cachedSVGDocumentReference ? cachedSVGDocumentReference->document() : 0; … … 147 138 148 139 Element* filter = document->getElementById(filterOperation->fragment()); 149 if (!filter) { 150 // Although we did not find the referenced filter, it might exist later 151 // in the document 152 document->accessSVGExtensions()->addPendingResource(filterOperation->fragment(), toElement(renderer->node())); 140 if (!filter) 153 141 return 0; 154 }155 142 156 143 RefPtr<FilterEffect> effect; … … 189 176 } 190 177 191 bool FilterEffectRenderer::build(RenderObject* renderer, const FilterOperations& operations) 192 { 178 bool FilterEffectRenderer::build(Document* document, const FilterOperations& operations) 179 { 180 #if !ENABLE(CSS_SHADERS) || !USE(3D_GRAPHICS) 181 UNUSED_PARAM(document); 182 #endif 183 193 184 #if ENABLE(CSS_SHADERS) 194 185 m_hasCustomShaderFilter = false; … … 210 201 case FilterOperation::REFERENCE: { 211 202 ReferenceFilterOperation* referenceOperation = static_cast<ReferenceFilterOperation*>(filterOperation); 212 effect = buildReferenceFilter( renderer, previousEffect, referenceOperation);203 effect = buildReferenceFilter(document, previousEffect, referenceOperation); 213 204 referenceOperation->setFilterEffect(effect); 214 205 break; … … 353 344 case FilterOperation::VALIDATED_CUSTOM: { 354 345 ValidatedCustomFilterOperation* customFilterOperation = static_cast<ValidatedCustomFilterOperation*>(filterOperation); 355 Document* document = renderer ? renderer->document() : 0;356 346 effect = createCustomFilterEffect(this, document, customFilterOperation); 357 347 if (effect) -
trunk/Source/WebCore/rendering/FilterEffectRenderer.h
r137055 r137463 102 102 ImageBuffer* output() const { return lastEffect()->asImageBuffer(); } 103 103 104 bool build( RenderObject* renderer, const FilterOperations&);105 PassRefPtr<FilterEffect> buildReferenceFilter( RenderObject* renderer, PassRefPtr<FilterEffect> previousEffect, ReferenceFilterOperation*);104 bool build(Document*, const FilterOperations&); 105 PassRefPtr<FilterEffect> buildReferenceFilter(Document*, PassRefPtr<FilterEffect> previousEffect, ReferenceFilterOperation*); 106 106 bool updateBackingStoreRect(const FloatRect& filterRect); 107 107 void allocateBackingStoreIfNeeded(); -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r137108 r137463 5409 5409 // If the filter fails to build, remove it from the layer. It will still attempt to 5410 5410 // go through regular processing (e.g. compositing), but never apply anything. 5411 if (!filterInfo->renderer()->build(renderer() , computeFilterOperations(renderer()->style())))5411 if (!filterInfo->renderer()->build(renderer()->document(), computeFilterOperations(renderer()->style()))) 5412 5412 filterInfo->setRenderer(0); 5413 5413 } -
trunk/Source/WebCore/rendering/RenderObject.cpp
r137336 r137463 83 83 #include "RenderSVGResourceContainer.h" 84 84 #include "SVGRenderSupport.h" 85 #include "SVGResourcesCache.h"86 85 #endif 87 86 … … 2379 2378 animation()->cancelAnimations(this); 2380 2379 2381 #if ENABLE(SVG)2382 SVGResourcesCache::clientDestroyed(this);2383 #endif2384 2385 2380 remove(); 2386 2381 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp
r136975 r137463 185 185 for (SVGDocumentExtensions::SVGPendingElements::const_iterator it = clients->begin(); it != end; ++it) { 186 186 ASSERT((*it)->hasPendingResources()); 187 extensions->clearHasPendingResourcesIfPossible(*it);187 (*it)->clearHasPendingResourcesIfPossible(); 188 188 RenderObject* renderer = (*it)->renderer(); 189 189 if (!renderer) -
trunk/Source/WebCore/rendering/svg/SVGResources.cpp
r137460 r137463 191 191 Node* node = object->node(); 192 192 ASSERT(node); 193 if (!node->isSVGElement()) {194 Document* document = object->document();195 ASSERT(document);196 197 if (!style->hasFilter())198 return false;199 200 AtomicString id(style->filterResource());201 return setFilter(getRenderSVGResourceById<RenderSVGResourceFilter>(document, id));202 }203 204 193 ASSERT(node->isSVGElement()); 205 194 -
trunk/Source/WebCore/rendering/svg/SVGResourcesCache.cpp
r136975 r137463 22 22 23 23 #if ENABLE(SVG) 24 #include "Element.h"25 24 #include "HTMLNames.h" 26 #include "Node.h"27 25 #include "RenderSVGResourceContainer.h" 28 26 #include "SVGDocumentExtensions.h" … … 61 59 m_cache.set(object, resources); 62 60 63 ASSERT(object->node());64 61 // Run cycle-detection _afterwards_, so self-references can be caught as well. 65 62 SVGResourcesCycleSolver solver(object, resources); … … 147 144 148 145 RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer, false); 149 150 ASSERT(renderer->node());151 if (!renderer->node()->isSVGElement())152 renderer->node()->setNeedsStyleRecalc(SyntheticStyleChange);153 146 } 154 147 … … 210 203 // Mark users of destroyed resources as pending resolution based on the id of the old resource. 211 204 Element* resourceElement = toElement(resource->node()); 212 Element* clientElement = toElement(it->key->node());205 SVGStyledElement* clientElement = toSVGStyledElement(it->key->node()); 213 206 SVGDocumentExtensions* extensions = clientElement->document()->accessSVGExtensions(); 214 207 -
trunk/Source/WebCore/svg/SVGDocumentExtensions.cpp
r137318 r137463 28 28 #include "DOMWindow.h" 29 29 #include "Document.h" 30 #include "Element.h"31 30 #include "EventListener.h" 32 31 #include "Frame.h" … … 150 149 } 151 150 152 void SVGDocumentExtensions::addPendingResource(const AtomicString& id, Element* element)151 void SVGDocumentExtensions::addPendingResource(const AtomicString& id, SVGElement* element) 153 152 { 154 153 ASSERT(element); … … 177 176 } 178 177 179 bool SVGDocumentExtensions::isElementPendingResources( Element* element) const178 bool SVGDocumentExtensions::isElementPendingResources(SVGElement* element) const 180 179 { 181 180 // This algorithm takes time proportional to the number of pending resources and need not. … … 195 194 } 196 195 197 bool SVGDocumentExtensions::isElementPendingResource( Element* element, const AtomicString& id) const196 bool SVGDocumentExtensions::isElementPendingResource(SVGElement* element, const AtomicString& id) const 198 197 { 199 198 ASSERT(element); … … 205 204 } 206 205 207 void SVGDocumentExtensions::clearHasPendingResourcesIfPossible(Element* element) 208 { 209 if (!isElementPendingResources(element)) 210 element->clearHasPendingResources(); 211 } 212 213 void SVGDocumentExtensions::removeElementFromPendingResources(Element* element) 206 void SVGDocumentExtensions::removeElementFromPendingResources(SVGElement* element) 214 207 { 215 208 ASSERT(element); … … 229 222 } 230 223 231 clearHasPendingResourcesIfPossible(element);224 element->clearHasPendingResourcesIfPossible(); 232 225 233 226 // We use the removePendingResource function here because it deals with set lifetime correctly. … … 282 275 } 283 276 284 Element* SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval(const AtomicString& id)277 SVGElement* SVGDocumentExtensions::removeElementFromPendingResourcesForRemoval(const AtomicString& id) 285 278 { 286 279 if (id.isEmpty()) … … 292 285 293 286 SVGPendingElements::iterator firstElement = resourceSet->begin(); 294 Element* element = *firstElement;287 SVGElement* element = *firstElement; 295 288 296 289 resourceSet->remove(firstElement); -
trunk/Source/WebCore/svg/SVGDocumentExtensions.h
r136975 r137463 41 41 class SVGSMILElement; 42 42 class SVGSVGElement; 43 class Element;44 43 45 44 class SVGDocumentExtensions { 46 45 WTF_MAKE_NONCOPYABLE(SVGDocumentExtensions); WTF_MAKE_FAST_ALLOCATED; 47 46 public: 48 typedef HashSet< Element*> SVGPendingElements;47 typedef HashSet<SVGElement*> SVGPendingElements; 49 48 SVGDocumentExtensions(Document*); 50 49 ~SVGDocumentExtensions(); … … 93 92 // This HashMap contains a list of pending resources. Pending resources, are such 94 93 // which are referenced by any object in the SVG document, but do NOT exist yet. 95 // For instance, dynamically buil dgradients / patterns / clippers...96 void addPendingResource(const AtomicString& id, Element*);94 // For instance, dynamically built gradients / patterns / clippers... 95 void addPendingResource(const AtomicString& id, SVGElement*); 97 96 bool hasPendingResource(const AtomicString& id) const; 98 bool isElementPendingResources(Element*) const; 99 bool isElementPendingResource(Element*, const AtomicString& id) const; 100 void clearHasPendingResourcesIfPossible(Element*); 101 void removeElementFromPendingResources(Element*); 97 bool isElementPendingResources(SVGElement*) const; 98 bool isElementPendingResource(SVGElement*, const AtomicString& id) const; 99 void removeElementFromPendingResources(SVGElement*); 102 100 PassOwnPtr<SVGPendingElements> removePendingResource(const AtomicString& id); 103 101 104 102 // The following two functions are used for scheduling a pending resource to be removed. 105 103 void markPendingResourcesForRemoval(const AtomicString&); 106 Element* removeElementFromPendingResourcesForRemoval(const AtomicString&);104 SVGElement* removeElementFromPendingResourcesForRemoval(const AtomicString&); 107 105 108 106 private: -
trunk/Source/WebCore/svg/SVGElement.cpp
r136975 r137463 543 543 if (name != HTMLNames::styleAttr) 544 544 svgAttributeChanged(name); 545 } 546 547 bool SVGElement::hasPendingResources() const 548 { 549 return hasSVGRareData() && svgRareData()->hasPendingResources(); 550 } 551 552 void SVGElement::setHasPendingResources() 553 { 554 ensureSVGRareData()->setHasPendingResources(true); 555 } 556 557 void SVGElement::clearHasPendingResourcesIfPossible() 558 { 559 if (!document()->accessSVGExtensions()->isElementPendingResources(this)) 560 ensureSVGRareData()->setHasPendingResources(false); 545 561 } 546 562 -
trunk/Source/WebCore/svg/SVGElement.h
r136975 r137463 70 70 71 71 virtual void svgAttributeChanged(const QualifiedName&) { } 72 73 bool hasPendingResources() const; 74 void setHasPendingResources(); 75 void clearHasPendingResourcesIfPossible(); 76 virtual void buildPendingResource() { } 72 77 73 78 virtual void animatedPropertyTypeForAttribute(const QualifiedName&, Vector<AnimatedPropertyType>&); -
trunk/Source/WebCore/svg/SVGElementRareData.h
r136975 r137463 42 42 , m_correspondingElement(0) 43 43 , m_instancesUpdatesBlocked(false) 44 , m_hasPendingResources(false) 44 45 , m_useOverrideComputedStyle(false) 45 46 , m_needsOverrideComputedStyleUpdate(false) … … 65 66 bool instanceUpdatesBlocked() const { return m_instancesUpdatesBlocked; } 66 67 void setInstanceUpdatesBlocked(bool value) { m_instancesUpdatesBlocked = value; } 68 69 bool hasPendingResources() const { return m_hasPendingResources; } 70 void setHasPendingResources(bool value) { m_hasPendingResources = value; } 67 71 68 72 SVGCursorElement* cursorElement() const { return m_cursorElement; } … … 112 116 SVGElement* m_correspondingElement; 113 117 bool m_instancesUpdatesBlocked : 1; 118 bool m_hasPendingResources : 1; 114 119 bool m_useOverrideComputedStyle : 1; 115 120 bool m_needsOverrideComputedStyleUpdate : 1; -
trunk/Source/WebCore/svg/SVGStyledElement.cpp
r137406 r137463 369 369 370 370 // Rebuild pending resources for each client of a pending resource that is being removed. 371 while ( Element* clientElement = extensions->removeElementFromPendingResourcesForRemoval(resourceId)) {371 while (SVGElement* clientElement = extensions->removeElementFromPendingResourcesForRemoval(resourceId)) { 372 372 ASSERT(clientElement->hasPendingResources()); 373 373 if (clientElement->hasPendingResources()) { 374 374 clientElement->buildPendingResource(); 375 extensions->clearHasPendingResourcesIfPossible(clientElement);375 clientElement->clearHasPendingResourcesIfPossible(); 376 376 } 377 377 }
Note: See TracChangeset
for help on using the changeset viewer.