Remove extraneous includes (HTMLElement, SVGElement, GlyphBuffer, Clipboard)
[WebKit-https.git] / Source / WebCore / svg / SVGExternalResourcesRequired.cpp
1 /*
2  * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include "config.h"
22
23 #if ENABLE(SVG)
24 #include "SVGExternalResourcesRequired.h"
25
26 #include "Attr.h"
27 #include "SVGElement.h"
28 #include "SVGNames.h"
29
30 namespace WebCore {
31
32 bool SVGExternalResourcesRequired::parseAttribute(const Attribute& attribute)
33 {
34     if (attribute.name() == SVGNames::externalResourcesRequiredAttr) {
35         setExternalResourcesRequiredBaseValue(attribute.value() == "true");
36         return true;
37     }
38
39     return false;
40 }
41
42 bool SVGExternalResourcesRequired::isKnownAttribute(const QualifiedName& attrName)
43 {
44     return attrName == SVGNames::externalResourcesRequiredAttr;
45 }
46
47 void SVGExternalResourcesRequired::addSupportedAttributes(HashSet<QualifiedName>& supportedAttributes)
48 {
49     supportedAttributes.add(SVGNames::externalResourcesRequiredAttr);
50 }
51
52 bool SVGExternalResourcesRequired::handleAttributeChange(SVGElement* targetElement, const QualifiedName& attrName)
53 {
54     ASSERT(targetElement);
55     if (!isKnownAttribute(attrName))
56         return false;
57     if (!targetElement->inDocument())
58         return true;
59
60     // Handle dynamic updates of the 'externalResourcesRequired' attribute. Only possible case: changing from 'true' to 'false'
61     // causes an immediate dispatch of the SVGLoad event. If the attribute value was 'false' before inserting the script element
62     // in the document, the SVGLoad event has already been dispatched.
63     if (!externalResourcesRequiredBaseValue() && !haveFiredLoadEvent() && !isParserInserted()) {
64         setHaveFiredLoadEvent(true);
65         ASSERT(targetElement->haveLoadedRequiredResources());
66
67         targetElement->sendSVGLoadEventIfPossible();
68     }
69
70     return true;
71 }
72
73 void SVGExternalResourcesRequired::dispatchLoadEvent(SVGElement* targetElement)
74 {
75     bool externalResourcesRequired = externalResourcesRequiredBaseValue();
76
77     if (isParserInserted())
78         ASSERT(externalResourcesRequired != haveFiredLoadEvent());
79     else if (haveFiredLoadEvent())
80         return;
81
82     // HTML and SVG differ completely in the 'onload' event handling of <script> elements.
83     // HTML fires the 'load' event after it sucessfully loaded a remote resource, otherwise an error event.
84     // SVG fires the SVGLoad event immediately after parsing the <script> element, if externalResourcesRequired
85     // is set to 'false', otherwise it dispatches the 'SVGLoad' event just after loading the remote resource.
86     if (!externalResourcesRequired)
87         return;
88
89     ASSERT(!haveFiredLoadEvent());
90
91     // Dispatch SVGLoad event
92     setHaveFiredLoadEvent(true);
93     ASSERT(targetElement->haveLoadedRequiredResources());
94
95     targetElement->sendSVGLoadEventIfPossible();
96 }
97
98 void SVGExternalResourcesRequired::insertedIntoDocument(SVGElement* targetElement)
99 {
100     if (isParserInserted())
101         return;
102
103     // Eventually send SVGLoad event now for the dynamically inserted script element.
104     if (externalResourcesRequiredBaseValue())
105         return;
106     setHaveFiredLoadEvent(true);
107     targetElement->sendSVGLoadEventIfPossibleAsynchronously();
108 }
109
110 void SVGExternalResourcesRequired::finishParsingChildren()
111 {
112     // A SVGLoad event has been fired by SVGElement::finishParsingChildren.
113     if (!externalResourcesRequiredBaseValue())
114         setHaveFiredLoadEvent(true);
115 }
116
117 bool SVGExternalResourcesRequired::haveLoadedRequiredResources() const
118 {
119     return !externalResourcesRequiredBaseValue() || haveFiredLoadEvent();
120 }
121
122 }
123
124 #endif // ENABLE(SVG)