Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Side by Side Diff: third_party/WebKit/Source/core/svg/SVGUseElement.cpp

Issue 1706243002: Don't use SVG resource documents with an unrecognized MIME-type (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use testharness; add unit test for extractMIMETypeFromMediaType Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 139
140 TreeScope* SVGUseElement::referencedScope() const 140 TreeScope* SVGUseElement::referencedScope() const
141 { 141 {
142 if (isStructurallyExternal()) 142 if (isStructurallyExternal())
143 return externalDocument(); 143 return externalDocument();
144 return &treeScope(); 144 return &treeScope();
145 } 145 }
146 146
147 Document* SVGUseElement::externalDocument() const 147 Document* SVGUseElement::externalDocument() const
148 { 148 {
149 if (m_resource && m_resource->isLoaded()) { 149 // Gracefully handle error condition.
150 // Gracefully handle error condition. 150 if (!resourceIsValid())
151 if (m_resource->errorOccurred()) 151 return nullptr;
152 return nullptr; 152 ASSERT(m_resource->document());
153 ASSERT(m_resource->document()); 153 return m_resource->document();
154 return m_resource->document();
155 }
156 return nullptr;
157 } 154 }
158 155
159 void transferUseWidthAndHeightIfNeeded(const SVGUseElement& use, SVGElement* sha dowElement, const SVGElement& originalElement) 156 void transferUseWidthAndHeightIfNeeded(const SVGUseElement& use, SVGElement* sha dowElement, const SVGElement& originalElement)
160 { 157 {
161 DEFINE_STATIC_LOCAL(const AtomicString, hundredPercentString, ("100%", Atomi cString::ConstructFromLiteral)); 158 DEFINE_STATIC_LOCAL(const AtomicString, hundredPercentString, ("100%", Atomi cString::ConstructFromLiteral));
162 ASSERT(shadowElement); 159 ASSERT(shadowElement);
163 if (isSVGSymbolElement(*shadowElement)) { 160 if (isSVGSymbolElement(*shadowElement)) {
164 // Spec (<use> on <symbol>): This generated 'svg' will always have expli cit values for attributes width and height. 161 // Spec (<use> on <symbol>): This generated 'svg' will always have expli cit values for attributes width and height.
165 // If attributes width and/or height are provided on the 'use' element, then these attributes 162 // If attributes width and/or height are provided on the 'use' element, then these attributes
166 // will be transferred to the generated 'svg'. If attributes width and/o r height are not specified, 163 // will be transferred to the generated 'svg'. If attributes width and/o r height are not specified,
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 779
783 void SVGUseElement::dispatchPendingEvent(SVGUseEventSender* eventSender) 780 void SVGUseElement::dispatchPendingEvent(SVGUseEventSender* eventSender)
784 { 781 {
785 ASSERT_UNUSED(eventSender, eventSender == &svgUseLoadEventSender()); 782 ASSERT_UNUSED(eventSender, eventSender == &svgUseLoadEventSender());
786 ASSERT(isStructurallyExternal() && m_haveFiredLoadEvent); 783 ASSERT(isStructurallyExternal() && m_haveFiredLoadEvent);
787 dispatchEvent(Event::create(EventTypeNames::load)); 784 dispatchEvent(Event::create(EventTypeNames::load));
788 } 785 }
789 786
790 void SVGUseElement::notifyFinished(Resource* resource) 787 void SVGUseElement::notifyFinished(Resource* resource)
791 { 788 {
789 ASSERT(m_resource == resource);
792 if (!inDocument()) 790 if (!inDocument())
793 return; 791 return;
794 792
795 invalidateShadowTree(); 793 invalidateShadowTree();
796 if (resource->errorOccurred()) { 794 if (!resourceIsValid()) {
797 dispatchEvent(Event::create(EventTypeNames::error)); 795 dispatchEvent(Event::create(EventTypeNames::error));
798 } else if (!resource->wasCanceled()) { 796 } else if (!resource->wasCanceled()) {
799 if (m_haveFiredLoadEvent) 797 if (m_haveFiredLoadEvent)
800 return; 798 return;
801 if (!isStructurallyExternal()) 799 if (!isStructurallyExternal())
802 return; 800 return;
803 ASSERT(!m_haveFiredLoadEvent); 801 ASSERT(!m_haveFiredLoadEvent);
804 m_haveFiredLoadEvent = true; 802 m_haveFiredLoadEvent = true;
805 svgUseLoadEventSender().dispatchEventSoon(this); 803 svgUseLoadEventSender().dispatchEventSoon(this);
806 } 804 }
807 } 805 }
808 806
809 bool SVGUseElement::resourceIsStillLoading() const 807 bool SVGUseElement::resourceIsStillLoading() const
810 { 808 {
811 return m_resource && m_resource->isLoading(); 809 return m_resource && m_resource->isLoading();
812 } 810 }
813 811
812 bool SVGUseElement::resourceIsValid() const
813 {
814 return m_resource
815 && m_resource->isLoaded()
816 && !m_resource->errorOccurred()
817 && m_resource->document();
818 }
819
814 bool SVGUseElement::instanceTreeIsLoading(const SVGElement* targetInstance) 820 bool SVGUseElement::instanceTreeIsLoading(const SVGElement* targetInstance)
815 { 821 {
816 for (const SVGElement* element = targetInstance; element; element = Traversa l<SVGElement>::next(*element, targetInstance)) { 822 for (const SVGElement* element = targetInstance; element; element = Traversa l<SVGElement>::next(*element, targetInstance)) {
817 if (isSVGUseElement(*element) && toSVGUseElement(*element).resourceIsSti llLoading()) 823 if (isSVGUseElement(*element) && toSVGUseElement(*element).resourceIsSti llLoading())
818 return true; 824 return true;
819 } 825 }
820 return false; 826 return false;
821 } 827 }
822 828
823 void SVGUseElement::setDocumentResource(PassRefPtrWillBeRawPtr<DocumentResource> resource) 829 void SVGUseElement::setDocumentResource(PassRefPtrWillBeRawPtr<DocumentResource> resource)
824 { 830 {
825 if (m_resource == resource) 831 if (m_resource == resource)
826 return; 832 return;
827 833
828 if (m_resource) 834 if (m_resource)
829 m_resource->removeClient(this); 835 m_resource->removeClient(this);
830 836
831 m_resource = resource; 837 m_resource = resource;
832 if (m_resource) 838 if (m_resource)
833 m_resource->addClient(this); 839 m_resource->addClient(this);
834 } 840 }
835 841
836 } // namespace blink 842 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGUseElement.h ('k') | third_party/WebKit/Source/platform/network/HTTPParsers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698