1/*
2 * Copyright (C) 2004, 2005, 2008 Nikolas Zimmermann <zimmermann@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2010 Rob Buis <buis@kde.org>
4 * Copyright (C) 2018-2019 Apple Inc. All rights reserved.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21
22#pragma once
23
24#include "QualifiedName.h"
25#include "SVGStringList.h"
26
27namespace WebCore {
28
29class SVGElement;
30class SVGStringList;
31
32template<typename OwnerType, typename... BaseTypes>
33class SVGPropertyOwnerRegistry;
34
35class SVGTests {
36 WTF_MAKE_NONCOPYABLE(SVGTests);
37public:
38 static bool hasExtension(const String&);
39 bool isValid() const;
40
41 using PropertyRegistry = SVGPropertyOwnerRegistry<SVGTests>;
42
43 void parseAttribute(const QualifiedName&, const AtomicString&);
44 void svgAttributeChanged(const QualifiedName&);
45
46 static void addSupportedAttributes(HashSet<QualifiedName>&);
47
48 WEBCORE_EXPORT static bool hasFeatureForLegacyBindings(const String& feature, const String& version);
49
50 // These methods are called from DOM through the super classes.
51 SVGStringList& requiredFeatures() { return m_requiredFeatures; }
52 SVGStringList& requiredExtensions() { return m_requiredExtensions; }
53 SVGStringList& systemLanguage() { return m_systemLanguage; }
54
55protected:
56 SVGTests(SVGElement* contextElement);
57
58private:
59 SVGElement& m_contextElement;
60 Ref<SVGStringList> m_requiredFeatures;
61 Ref<SVGStringList> m_requiredExtensions;
62 Ref<SVGStringList> m_systemLanguage;
63};
64
65} // namespace WebCore
66