| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
     .org> | 2  * Copyright (C) 2004, 2005, 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde
     .org> | 
| 3  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> | 3  * Copyright (C) 2004, 2005, 2006, 2007 Rob Buis <buis@kde.org> | 
| 4  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 4  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 
| 5  * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 5  * Copyright (C) 2011 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 
| 6  * Copyright (C) 2012 University of Szeged | 6  * Copyright (C) 2012 University of Szeged | 
| 7  * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> | 7  * Copyright (C) 2012 Renata Hodovan <reni@webkit.org> | 
| 8  * | 8  * | 
| 9  * This library is free software; you can redistribute it and/or | 9  * This library is free software; you can redistribute it and/or | 
| 10  * modify it under the terms of the GNU Library General Public | 10  * modify it under the terms of the GNU Library General Public | 
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 119 | 119 | 
| 120 void SVGUseElement::removedFrom(ContainerNode* rootParent) | 120 void SVGUseElement::removedFrom(ContainerNode* rootParent) | 
| 121 { | 121 { | 
| 122     SVGGraphicsElement::removedFrom(rootParent); | 122     SVGGraphicsElement::removedFrom(rootParent); | 
| 123     if (rootParent->inDocument()) | 123     if (rootParent->inDocument()) | 
| 124         clearResourceReferences(); | 124         clearResourceReferences(); | 
| 125 } | 125 } | 
| 126 | 126 | 
| 127 TreeScope* SVGUseElement::referencedScope() const | 127 TreeScope* SVGUseElement::referencedScope() const | 
| 128 { | 128 { | 
| 129     if (!isExternalURIReference(hrefString(), document())) | 129     if (isStructurallyExternal()) | 
| 130         return &treeScope(); | 130         return externalDocument(); | 
| 131     return externalDocument(); | 131     return &treeScope(); | 
| 132 } | 132 } | 
| 133 | 133 | 
| 134 Document* SVGUseElement::externalDocument() const | 134 Document* SVGUseElement::externalDocument() const | 
| 135 { | 135 { | 
| 136     if (m_resource && m_resource->isLoaded()) { | 136     if (m_resource && m_resource->isLoaded()) { | 
| 137         // Gracefully handle error condition. | 137         // Gracefully handle error condition. | 
| 138         if (m_resource->errorOccurred()) | 138         if (m_resource->errorOccurred()) | 
| 139             return nullptr; | 139             return nullptr; | 
| 140         ASSERT(m_resource->document()); | 140         ASSERT(m_resource->document()); | 
| 141         return m_resource->document(); | 141         return m_resource->document(); | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 215         } | 215         } | 
| 216 | 216 | 
| 217         LayoutObject* object = this->layoutObject(); | 217         LayoutObject* object = this->layoutObject(); | 
| 218         if (object) | 218         if (object) | 
| 219             markForLayoutAndParentResourceInvalidation(object); | 219             markForLayoutAndParentResourceInvalidation(object); | 
| 220         return; | 220         return; | 
| 221     } | 221     } | 
| 222 | 222 | 
| 223     if (SVGURIReference::isKnownAttribute(attrName)) { | 223     if (SVGURIReference::isKnownAttribute(attrName)) { | 
| 224         SVGElement::InvalidationGuard invalidationGuard(this); | 224         SVGElement::InvalidationGuard invalidationGuard(this); | 
| 225         bool isExternalReference = isExternalURIReference(hrefString(), document
     ()); | 225         if (isStructurallyExternal()) { | 
| 226         if (isExternalReference) { |  | 
| 227             KURL url = document().completeURL(hrefString()); | 226             KURL url = document().completeURL(hrefString()); | 
| 228             if (url.hasFragmentIdentifier()) { | 227             if (url.hasFragmentIdentifier()) { | 
| 229                 FetchRequest request(ResourceRequest(url), localName()); | 228                 FetchRequest request(ResourceRequest(url), localName()); | 
| 230                 setDocumentResource(DocumentResource::fetchSVGDocument(request, 
     document().fetcher())); | 229                 setDocumentResource(DocumentResource::fetchSVGDocument(request, 
     document().fetcher())); | 
| 231             } | 230             } | 
| 232         } else { | 231         } else { | 
| 233             setDocumentResource(0); | 232             setDocumentResource(0); | 
| 234         } | 233         } | 
| 235 | 234 | 
| 236         invalidateShadowTree(); | 235         invalidateShadowTree(); | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 290     for (Node* cur = start->firstChild(); cur; cur = cur->nextSibling()) { | 289     for (Node* cur = start->firstChild(); cur; cur = cur->nextSibling()) { | 
| 291         if (subtreeContainsDisallowedElement(cur)) | 290         if (subtreeContainsDisallowedElement(cur)) | 
| 292             return true; | 291             return true; | 
| 293     } | 292     } | 
| 294 | 293 | 
| 295     return false; | 294     return false; | 
| 296 } | 295 } | 
| 297 | 296 | 
| 298 void SVGUseElement::scheduleShadowTreeRecreation() | 297 void SVGUseElement::scheduleShadowTreeRecreation() | 
| 299 { | 298 { | 
| 300     if (!referencedScope() || inUseShadowTree()) | 299     if (inUseShadowTree()) | 
| 301         return; | 300         return; | 
| 302     m_needsShadowTreeRecreation = true; | 301     m_needsShadowTreeRecreation = true; | 
| 303     document().scheduleUseShadowTreeUpdate(*this); | 302     document().scheduleUseShadowTreeUpdate(*this); | 
| 304 } | 303 } | 
| 305 | 304 | 
| 306 void SVGUseElement::clearResourceReferences() | 305 void SVGUseElement::clearResourceReferences() | 
| 307 { | 306 { | 
| 308     if (m_targetElementInstance) | 307     if (m_targetElementInstance) | 
| 309         m_targetElementInstance = nullptr; | 308         m_targetElementInstance = nullptr; | 
| 310 | 309 | 
| 311     // FIXME: We should try to optimize this, to at least allow partial reclones
     . | 310     // FIXME: We should try to optimize this, to at least allow partial reclones
     . | 
| 312     if (ShadowRoot* shadowTreeRootElement = userAgentShadowRoot()) | 311     if (ShadowRoot* shadowTreeRootElement = userAgentShadowRoot()) | 
| 313         shadowTreeRootElement->removeChildren(OmitSubtreeModifiedEvent); | 312         shadowTreeRootElement->removeChildren(OmitSubtreeModifiedEvent); | 
| 314 | 313 | 
| 315     m_needsShadowTreeRecreation = false; | 314     m_needsShadowTreeRecreation = false; | 
| 316     document().unscheduleUseShadowTreeUpdate(*this); | 315     document().unscheduleUseShadowTreeUpdate(*this); | 
| 317 | 316 | 
| 318     removeAllOutgoingReferences(); | 317     removeAllOutgoingReferences(); | 
| 319 } | 318 } | 
| 320 | 319 | 
| 321 void SVGUseElement::buildPendingResource() | 320 void SVGUseElement::buildPendingResource() | 
| 322 { | 321 { | 
| 323     if (!referencedScope() || inUseShadowTree()) | 322     if (inUseShadowTree()) | 
| 324         return; | 323         return; | 
| 325     clearResourceReferences(); | 324     clearResourceReferences(); | 
| 326     if (!inDocument()) | 325     if (!referencedScope() || !inDocument()) | 
| 327         return; | 326         return; | 
| 328 | 327 | 
| 329     AtomicString id; | 328     AtomicString id; | 
| 330     Element* target = SVGURIReference::targetElementFromIRIString(hrefString(), 
     treeScope(), &id, externalDocument()); | 329     Element* target = SVGURIReference::targetElementFromIRIString(hrefString(), 
     treeScope(), &id, externalDocument()); | 
| 331     if (!target || !target->inDocument()) { | 330     if (!target || !target->inDocument()) { | 
| 332         // If we can't find the target of an external element, just give up. | 331         // If we can't find the target of an external element, just give up. | 
| 333         // We can't observe if the target somewhen enters the external document,
      nor should we do it. | 332         // We can't observe if the target somewhen enters the external document,
      nor should we do it. | 
| 334         if (externalDocument()) | 333         if (externalDocument()) | 
| 335             return; | 334             return; | 
| 336         if (id.isEmpty()) | 335         if (id.isEmpty()) | 
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 783 | 782 | 
| 784     if (m_resource) | 783     if (m_resource) | 
| 785         m_resource->removeClient(this); | 784         m_resource->removeClient(this); | 
| 786 | 785 | 
| 787     m_resource = resource; | 786     m_resource = resource; | 
| 788     if (m_resource) | 787     if (m_resource) | 
| 789         m_resource->addClient(this); | 788         m_resource->addClient(this); | 
| 790 } | 789 } | 
| 791 | 790 | 
| 792 } | 791 } | 
| OLD | NEW | 
|---|