Chromium Code Reviews| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 { | 160 { |
| 161 // This functions exists to assure assumptions made in the code regarding SV GElementInstance creation/destruction are satisfied. | 161 // This functions exists to assure assumptions made in the code regarding SV GElementInstance creation/destruction are satisfied. |
| 162 SVGGraphicsElement::insertedInto(rootParent); | 162 SVGGraphicsElement::insertedInto(rootParent); |
| 163 if (!rootParent->inDocument()) | 163 if (!rootParent->inDocument()) |
| 164 return InsertionDone; | 164 return InsertionDone; |
| 165 ASSERT(!m_targetElementInstance || !isWellFormedDocument(&document())); | 165 ASSERT(!m_targetElementInstance || !isWellFormedDocument(&document())); |
| 166 ASSERT(!hasPendingResources() || !isWellFormedDocument(&document())); | 166 ASSERT(!hasPendingResources() || !isWellFormedDocument(&document())); |
| 167 if (!m_wasInsertedByParser) { | 167 if (!m_wasInsertedByParser) { |
| 168 buildPendingResource(); | 168 buildPendingResource(); |
| 169 | 169 |
| 170 m_haveFiredLoadEvent = true; | 170 if (!isStructurallyExternal()) { |
| 171 sendSVGLoadEventIfPossibleAsynchronously(); | 171 sendSVGLoadEventIfPossibleAsynchronously(); |
| 172 } | |
| 172 } | 173 } |
| 173 | |
| 174 return InsertionDone; | 174 return InsertionDone; |
| 175 } | 175 } |
| 176 | 176 |
| 177 void SVGUseElement::removedFrom(ContainerNode* rootParent) | 177 void SVGUseElement::removedFrom(ContainerNode* rootParent) |
| 178 { | 178 { |
| 179 SVGGraphicsElement::removedFrom(rootParent); | 179 SVGGraphicsElement::removedFrom(rootParent); |
| 180 if (rootParent->inDocument()) | 180 if (rootParent->inDocument()) |
| 181 clearResourceReferences(); | 181 clearResourceReferences(); |
| 182 } | 182 } |
| 183 | 183 |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 936 return; | 936 return; |
| 937 | 937 |
| 938 invalidateShadowTree(); | 938 invalidateShadowTree(); |
| 939 if (resource->errorOccurred()) | 939 if (resource->errorOccurred()) |
| 940 dispatchEvent(Event::create(EventTypeNames::error)); | 940 dispatchEvent(Event::create(EventTypeNames::error)); |
| 941 else if (!resource->wasCanceled()) { | 941 else if (!resource->wasCanceled()) { |
| 942 if (!m_wasInsertedByParser) | 942 if (!m_wasInsertedByParser) |
| 943 ASSERT(m_haveFiredLoadEvent); | 943 ASSERT(m_haveFiredLoadEvent); |
| 944 else if (m_haveFiredLoadEvent) | 944 else if (m_haveFiredLoadEvent) |
| 945 return; | 945 return; |
| 946 if (!isStructurallyExternal()) | |
| 947 return; | |
| 948 | |
| 949 ASSERT(!m_haveFiredLoadEvent); | |
| 950 m_haveFiredLoadEvent = true; | |
| 951 sendSVGLoadEventIfPossible(); | |
| 946 } | 952 } |
| 947 } | 953 } |
| 948 | 954 |
| 949 bool SVGUseElement::resourceIsStillLoading() | 955 bool SVGUseElement::resourceIsStillLoading() |
| 950 { | 956 { |
| 951 if (m_resource && m_resource->isLoading()) | 957 if (m_resource && m_resource->isLoading()) |
| 952 return true; | 958 return true; |
| 953 return false; | 959 return false; |
| 954 } | 960 } |
| 955 | 961 |
| 956 bool SVGUseElement::instanceTreeIsLoading(SVGElementInstance* targetElementInsta nce) | 962 bool SVGUseElement::instanceTreeIsLoading(SVGElementInstance* targetElementInsta nce) |
| 957 { | 963 { |
| 958 for (SVGElementInstance* instance = targetElementInstance->firstChild(); ins tance; instance = instance->nextSibling()) { | 964 for (SVGElementInstance* instance = targetElementInstance->firstChild(); ins tance; instance = instance->nextSibling()) { |
| 959 if (SVGUseElement* use = instance->correspondingUseElement()) { | 965 if (SVGUseElement* use = instance->correspondingUseElement()) { |
| 960 if (use->resourceIsStillLoading()) | 966 if (use->resourceIsStillLoading()) |
| 961 return true; | 967 return true; |
| 962 } | 968 } |
| 963 if (instance->hasChildNodes()) | 969 if (instance->hasChildNodes()) |
| 964 instanceTreeIsLoading(instance); | 970 instanceTreeIsLoading(instance); |
|
pdr.
2014/01/13 19:56:37
Wow. Spot the bug :)
(I'll fix this in a separate
| |
| 965 } | 971 } |
| 966 return false; | 972 return false; |
| 967 } | 973 } |
| 968 | 974 |
| 969 void SVGUseElement::finishParsingChildren() | 975 void SVGUseElement::finishParsingChildren() |
| 970 { | 976 { |
| 971 SVGGraphicsElement::finishParsingChildren(); | 977 SVGGraphicsElement::finishParsingChildren(); |
| 972 m_haveFiredLoadEvent = true; | |
| 973 if (m_wasInsertedByParser) { | 978 if (m_wasInsertedByParser) { |
| 974 buildPendingResource(); | 979 buildPendingResource(); |
| 975 m_wasInsertedByParser = false; | 980 m_wasInsertedByParser = false; |
| 976 } | 981 } |
| 977 } | 982 } |
| 978 | 983 |
| 979 void SVGUseElement::setDocumentResource(ResourcePtr<DocumentResource> resource) | 984 void SVGUseElement::setDocumentResource(ResourcePtr<DocumentResource> resource) |
| 980 { | 985 { |
| 981 if (m_resource == resource) | 986 if (m_resource == resource) |
| 982 return; | 987 return; |
| 983 | 988 |
| 984 if (m_resource) | 989 if (m_resource) |
| 985 m_resource->removeClient(this); | 990 m_resource->removeClient(this); |
| 986 | 991 |
| 987 m_resource = resource; | 992 m_resource = resource; |
| 988 if (m_resource) | 993 if (m_resource) |
| 989 m_resource->addClient(this); | 994 m_resource->addClient(this); |
| 990 } | 995 } |
| 991 | 996 |
| 992 } | 997 } |
| OLD | NEW |