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

Side by Side Diff: Source/core/dom/DOMImplementation.cpp

Issue 20738002: Make DOMImplementation::hasFeature() behave according to specification (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Without the binaries so that the try bots are happy Created 7 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
6 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) 6 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org)
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 namespace WebCore { 57 namespace WebCore {
58 58
59 typedef HashSet<String, CaseFoldingHash> FeatureSet; 59 typedef HashSet<String, CaseFoldingHash> FeatureSet;
60 60
61 static void addString(FeatureSet& set, const char* string) 61 static void addString(FeatureSet& set, const char* string)
62 { 62 {
63 set.add(string); 63 set.add(string);
64 } 64 }
65 65
66 static bool isSVG10Feature(const String &feature, const String &version) 66 static bool isSupportedSVG10Feature(const String& feature, const String& version )
67 { 67 {
68 if (!version.isEmpty() && version != "1.0") 68 if (!version.isEmpty() && version != "1.0")
69 return false; 69 return false;
70 70
71 static bool initialized = false; 71 static bool initialized = false;
72 DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ()); 72 DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ());
73 if (!initialized) { 73 if (!initialized) {
74 #if ENABLE(SVG_FONTS) 74 #if ENABLE(SVG_FONTS)
75 addString(svgFeatures, "svg"); 75 addString(svgFeatures, "svg");
76 addString(svgFeatures, "svg.static"); 76 addString(svgFeatures, "svg.static");
77 #endif 77 #endif
78 // addString(svgFeatures, "svg.animation"); 78 // addString(svgFeatures, "svg.animation");
79 // addString(svgFeatures, "svg.dynamic"); 79 // addString(svgFeatures, "svg.dynamic");
80 // addString(svgFeatures, "svg.dom.animation"); 80 // addString(svgFeatures, "svg.dom.animation");
81 // addString(svgFeatures, "svg.dom.dynamic"); 81 // addString(svgFeatures, "svg.dom.dynamic");
82 #if ENABLE(SVG_FONTS) 82 #if ENABLE(SVG_FONTS)
83 addString(svgFeatures, "dom"); 83 addString(svgFeatures, "dom");
84 addString(svgFeatures, "dom.svg"); 84 addString(svgFeatures, "dom.svg");
85 addString(svgFeatures, "dom.svg.static"); 85 addString(svgFeatures, "dom.svg.static");
86 #endif 86 #endif
87 // addString(svgFeatures, "svg.all"); 87 // addString(svgFeatures, "svg.all");
88 // addString(svgFeatures, "dom.svg.all"); 88 // addString(svgFeatures, "dom.svg.all");
89 initialized = true; 89 initialized = true;
90 } 90 }
91 return feature.startsWith("org.w3c.", false) 91 return feature.startsWith("org.w3c.", false)
92 && svgFeatures.contains(feature.right(feature.length() - 8)); 92 && svgFeatures.contains(feature.right(feature.length() - 8));
93 } 93 }
94 94
95 static bool isSVG11Feature(const String &feature, const String &version) 95 static bool isSupportedSVG11Feature(const String& feature, const String& version )
96 { 96 {
97 if (!version.isEmpty() && version != "1.1") 97 if (!version.isEmpty() && version != "1.1")
98 return false; 98 return false;
99 99
100 static bool initialized = false; 100 static bool initialized = false;
101 DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ()); 101 DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ());
102 if (!initialized) { 102 if (!initialized) {
103 // Sadly, we cannot claim to implement any of the SVG 1.1 generic featur e sets 103 // Sadly, we cannot claim to implement any of the SVG 1.1 generic featur e sets
104 // lack of Font and Filter support. 104 // lack of Font and Filter support.
105 // http://bugs.webkit.org/show_bug.cgi?id=15480 105 // http://bugs.webkit.org/show_bug.cgi?id=15480
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 addString(svgFeatures, "Font"); 152 addString(svgFeatures, "Font");
153 addString(svgFeatures, "BasicFont"); 153 addString(svgFeatures, "BasicFont");
154 #endif 154 #endif
155 addString(svgFeatures, "Extensibility"); 155 addString(svgFeatures, "Extensibility");
156 initialized = true; 156 initialized = true;
157 } 157 }
158 return feature.startsWith("http://www.w3.org/tr/svg11/feature#", false) 158 return feature.startsWith("http://www.w3.org/tr/svg11/feature#", false)
159 && svgFeatures.contains(feature.right(feature.length() - 35)); 159 && svgFeatures.contains(feature.right(feature.length() - 35));
160 } 160 }
161 161
162 static bool isEvents2Feature(const String &feature, const String &version)
163 {
164 if (!version.isEmpty() && version != "2.0")
165 return false;
166
167 static bool initialized = false;
168 DEFINE_STATIC_LOCAL(FeatureSet, events2Features, ());
169 if (!initialized) {
170 addString(events2Features, "Events");
171 addString(events2Features, "HTMLEvents");
172 addString(events2Features, "MouseEvents");
173 addString(events2Features, "MutationEvents");
174 addString(events2Features, "UIEvents");
175 initialized = true;
176 }
177 return events2Features.contains(feature);
178 }
179
180 static bool isEvents3Feature(const String &feature, const String &version)
181 {
182 if (!version.isEmpty() && version != "3.0")
183 return false;
184
185 static bool initialized = false;
186 DEFINE_STATIC_LOCAL(FeatureSet, events3Features, ());
187 if (!initialized) {
188 // FIXME: We probably support many of these features.
189 // addString(events3Features, "CompositionEvents");
190 // addString(events3Features, "Events");
191 // addString(events3Features, "FocusEvents");
192 // addString(events3Features, "HTMLEvents");
193 // addString(events3Features, "KeyboardEvents");
194 // addString(events3Features, "MouseEvents");
195 // addString(events3Features, "MutationEvents");
196 // addString(events3Features, "MutationNameEvents");
197 addString(events3Features, "TextEvents");
198 // addString(events3Features, "UIEvents");
199 // addString(events3Features, "WheelEvents");
200 initialized = true;
201 }
202 // FIXME: We do not yet support Events 3 "extended feature strings".
203 return events3Features.contains(feature);
204 }
205
206 DOMImplementation::DOMImplementation(Document* document) 162 DOMImplementation::DOMImplementation(Document* document)
207 : m_document(document) 163 : m_document(document)
208 { 164 {
209 ScriptWrappable::init(this); 165 ScriptWrappable::init(this);
210 } 166 }
211 167
212 bool DOMImplementation::hasFeature(const String& feature, const String& version) 168 bool DOMImplementation::hasFeature(const String& feature, const String& version)
213 { 169 {
214 String lower = feature.lower(); 170 if (feature.startsWith("http://www.w3.org/TR/SVG", false)
215 if (lower == "core" || lower == "html" || lower == "xml" || lower == "xhtml" ) 171 || feature.startsWith("org.w3c.dom.svg", false)
216 return version.isEmpty() || version == "1.0" || version == "2.0"; 172 || feature.startsWith("org.w3c.svg", false)) {
217 if (lower == "css" 173 // FIXME: SVG 2.0 support?
218 || lower == "css2" 174 return isSupportedSVG10Feature(feature, version) || isSupportedSVG11Feat ure(feature, version);
219 || lower == "range" 175 }
220 || lower == "stylesheets" 176 return true;
221 || lower == "traversal"
222 || lower == "views")
223 return version.isEmpty() || version == "2.0";
224 if (isEvents2Feature(feature, version))
225 return true;
226 if (lower == "xpath")
227 return version.isEmpty() || version == "3.0";
228 if (isEvents3Feature(feature, version))
229 return true;
230
231 if (isSVG11Feature(feature, version))
232 return true;
233 if (isSVG10Feature(feature, version))
234 return true;
235
236 return false;
237 } 177 }
238 178
239 PassRefPtr<DocumentType> DOMImplementation::createDocumentType(const String& qua lifiedName, 179 PassRefPtr<DocumentType> DOMImplementation::createDocumentType(const String& qua lifiedName,
240 const String& publicId, const String& systemId, ExceptionCode& ec) 180 const String& publicId, const String& systemId, ExceptionCode& ec)
241 { 181 {
242 String prefix, localName; 182 String prefix, localName;
243 if (!Document::parseQualifiedName(qualifiedName, prefix, localName, ec)) 183 if (!Document::parseQualifiedName(qualifiedName, prefix, localName, ec))
244 return 0; 184 return 0;
245 185
246 return DocumentType::create(0, qualifiedName, publicId, systemId); 186 return DocumentType::create(0, qualifiedName, publicId, systemId);
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 return TextDocument::create(DocumentInit(url, frame)); 358 return TextDocument::create(DocumentInit(url, frame));
419 if (type == "image/svg+xml") 359 if (type == "image/svg+xml")
420 return SVGDocument::create(DocumentInit(url, frame)); 360 return SVGDocument::create(DocumentInit(url, frame));
421 if (isXMLMIMEType(type)) 361 if (isXMLMIMEType(type))
422 return Document::create(DocumentInit(url, frame)); 362 return Document::create(DocumentInit(url, frame));
423 363
424 return HTMLDocument::create(DocumentInit(url, frame)); 364 return HTMLDocument::create(DocumentInit(url, frame));
425 } 365 }
426 366
427 } 367 }
OLDNEW
« no previous file with comments | « LayoutTests/svg/dynamic-updates/script-tests/SVGUseElement-svgdom-requiredFeatures.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698