15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2001 Dirk Mueller (mueller@kde.org) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DOMImplementation.h" 2753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 28197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/SVGNames.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/CSSStyleSheet.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/MediaList.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/css/StyleSheetContents.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ContextFeatures.h" 3502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch#include "core/dom/DocumentInit.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentType.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h" 39197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/dom/Text.h" 4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/dom/XMLDocument.h" 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/custom/CustomElementRegistrationContext.h" 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/UseCounter.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLDocument.h" 45197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/HTMLHeadElement.h" 465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "core/html/HTMLMediaElement.h" 47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/HTMLTitleElement.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLViewSourceDocument.h" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/ImageDocument.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/MediaDocument.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/PluginDocument.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/TextDocument.h" 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/ContentType.h" 5651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/MIMETypeRegistry.h" 57a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/Image.h" 5851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/graphics/media/MediaPlayer.h" 5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/plugins/PluginData.h" 6051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 6193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "wtf/StdLibExtras.h" 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef HashSet<String, CaseFoldingHash> FeatureSet; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static void addString(FeatureSet& set, const char* string) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) set.add(string); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochstatic bool isSupportedSVG10Feature(const String& feature, const String& version) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!version.isEmpty() && version != "1.0") 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool initialized = false; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ()); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!initialized) { 8053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#if ENABLE(SVG_FONTS) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "svg"); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "svg.static"); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "svg.animation"); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "svg.dynamic"); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "svg.dom.animation"); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "svg.dom.dynamic"); 8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#if ENABLE(SVG_FONTS) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "dom"); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "dom.svg"); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "dom.svg.static"); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "svg.all"); 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "dom.svg.all"); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) initialized = true; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return feature.startsWith("org.w3c.", false) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && svgFeatures.contains(feature.right(feature.length() - 8)); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 101fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdochstatic bool isSupportedSVG11Feature(const String& feature, const String& version) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!version.isEmpty() && version != "1.1") 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool initialized = false; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DEFINE_STATIC_LOCAL(FeatureSet, svgFeatures, ()); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!initialized) { 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Sadly, we cannot claim to implement any of the SVG 1.1 generic feature sets 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // lack of Font and Filter support. 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://bugs.webkit.org/show_bug.cgi?id=15480 11253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#if ENABLE(SVG_FONTS) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVG"); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVGDOM"); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVG-static"); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVGDOM-static"); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVG-animation"); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "SVGDOM-animation"); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "SVG-dynamic); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "SVGDOM-dynamic); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "CoreAttribute"); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Structure"); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicStructure"); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "ContainerAttribute"); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "ConditionalProcessing"); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Image"); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Style"); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "ViewportAttribute"); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Shape"); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Text"); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicText"); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "PaintAttribute"); 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicPaintAttribute"); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "OpacityAttribute"); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "GraphicsAttribute"); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BaseGraphicsAttribute"); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Marker"); 13910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// addString(svgFeatures, "ColorProfile"); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Gradient"); 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Pattern"); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Clip"); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicClip"); 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Mask"); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Filter"); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicFilter"); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "DocumentEventsAttribute"); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "GraphicalEventsAttribute"); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// addString(svgFeatures, "AnimationEventsAttribute"); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Cursor"); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Hyperlinking"); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "XlinkAttribute"); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "View"); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Script"); 15502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch addString(svgFeatures, "Animation"); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(SVG_FONTS) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Font"); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "BasicFont"); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) addString(svgFeatures, "Extensibility"); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) initialized = true; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return feature.startsWith("http://www.w3.org/tr/svg11/feature#", false) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && svgFeatures.contains(feature.right(feature.length() - 35)); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)DOMImplementation::DOMImplementation(Document& document) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_document(document) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMImplementation::hasFeature(const String& feature, const String& version) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 174fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch if (feature.startsWith("http://www.w3.org/TR/SVG", false) 175fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch || feature.startsWith("org.w3c.dom.svg", false) 176fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch || feature.startsWith("org.w3c.svg", false)) { 177fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch // FIXME: SVG 2.0 support? 178fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch return isSupportedSVG10Feature(feature, version) || isSupportedSVG11Feature(feature, version); 179fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch } 180fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch return true; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool DOMImplementation::hasFeatureForBindings(const String& feature, const String& version) 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!hasFeature(feature, version)) { 18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) UseCounter::count(m_document, UseCounter::DOMImplementationHasFeatureReturnFalse); 18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return true; 19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 192d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<DocumentType> DOMImplementation::createDocumentType(const AtomicString& qualifiedName, 19351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const String& publicId, const String& systemId, ExceptionState& exceptionState) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 195a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) AtomicString prefix, localName; 19651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!Document::parseQualifiedName(qualifiedName, prefix, localName, exceptionState)) 197d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 199323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return DocumentType::create(m_document, qualifiedName, publicId, systemId); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 202d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<XMLDocument> DOMImplementation::createDocument(const AtomicString& namespaceURI, 203a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const AtomicString& qualifiedName, DocumentType* doctype, ExceptionState& exceptionState) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 205d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<XMLDocument> doc = nullptr; 206323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) DocumentInit init = DocumentInit::fromContext(document().contextDocument()); 2078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (namespaceURI == SVGNames::svgNamespaceURI) { 208323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) doc = XMLDocument::createSVG(init); 2098abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } else if (namespaceURI == HTMLNames::xhtmlNamespaceURI) { 210323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) doc = XMLDocument::createXHTML(init.withRegistrationContext(document().registrationContext())); 2118abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } else { 21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) doc = XMLDocument::create(init); 2138abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) doc->setSecurityOrigin(document().securityOrigin()->isolatedCopy()); 216323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) doc->setContextFeatures(document().contextFeatures()); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 218d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<Node> documentElement = nullptr; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!qualifiedName.isEmpty()) { 22051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) documentElement = doc->createElementNS(namespaceURI, qualifiedName, exceptionState); 22151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (exceptionState.hadException()) 222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (doctype) 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) doc->appendChild(doctype); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (documentElement) 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) doc->appendChild(documentElement.release()); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return doc.release(); 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DOMImplementation::isXMLMIMEType(const String& mimeType) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 23509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (equalIgnoringCase(mimeType, "text/xml") 23609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) || equalIgnoringCase(mimeType, "application/xml") 23709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) || equalIgnoringCase(mimeType, "text/xsl")) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 23953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 24009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Per RFCs 3023 and 2045, an XML MIME type is of the form: 24153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // ^[0-9a-zA-Z_\\-+~!$\\^{}|.%'`#&*]+/[0-9a-zA-Z_\\-+~!$\\^{}|.%'`#&*]+\+xml$ 24253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 24353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int length = mimeType.length(); 24453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (length < 7) 24553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 24653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 24709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (mimeType[0] == '/' || mimeType[length - 5] == '/' || !mimeType.endsWith("+xml", false)) 24853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 24953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 25053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool hasSlash = false; 25153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) for (int i = 0; i < length - 4; ++i) { 25253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) UChar ch = mimeType[i]; 25353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (ch >= '0' && ch <= '9') 25453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 25553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (ch >= 'a' && ch <= 'z') 25653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 25753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (ch >= 'A' && ch <= 'Z') 25853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 25953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) switch (ch) { 26053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '_': 26153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '-': 26253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '+': 26353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '~': 26453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '!': 26553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '$': 26653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '^': 26753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '{': 26853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '}': 26953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '|': 27053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '.': 27153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '%': 27253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '\'': 27353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '`': 27453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '#': 27553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '&': 27653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '*': 27753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 27853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) case '/': 27953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (hasSlash) 28053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 28153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) hasSlash = true; 28253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) continue; 28353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) default: 28453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return false; 28553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 28653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) } 28753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 28853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool DOMImplementation::isJSONMIMEType(const String& mimeType) 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 29309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (mimeType.startsWith("application/json", false)) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 29509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (mimeType.startsWith("application/", false)) { 29609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) size_t subtype = mimeType.find("+json", 12, false); 29709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (subtype != kNotFound) { 29809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Just check that a parameter wasn't matched. 29909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) size_t parameterMarker = mimeType.find(";"); 30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (parameterMarker == kNotFound) { 30109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) unsigned endSubtype = static_cast<unsigned>(subtype) + 5; 30209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return endSubtype == mimeType.length() || isASCIISpace(mimeType[endSubtype]); 30309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 30409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return parameterMarker > subtype; 30509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 30609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)static bool isTextPlainType(const String& mimeType) 31109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 31209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return mimeType.startsWith("text/", false) 31309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) && !(equalIgnoringCase(mimeType, "text/html") 31409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) || equalIgnoringCase(mimeType, "text/xml") 31509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) || equalIgnoringCase(mimeType, "text/xsl")); 31609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 31709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 31809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool DOMImplementation::isTextMIMEType(const String& mimeType) 31909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 32009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType) || isJSONMIMEType(mimeType) || isTextPlainType(mimeType); 32109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 32209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 323d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<HTMLDocument> DOMImplementation::createHTMLDocument(const String& title) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 325323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) DocumentInit init = DocumentInit::fromContext(document().contextDocument()) 326323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) .withRegistrationContext(document().registrationContext()); 327d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLDocument> d = HTMLDocument::create(init); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) d->open(); 329197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch d->write("<!doctype html><html><head></head><body></body></html>"); 330197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!title.isNull()) { 331197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch HTMLHeadElement* headElement = d->head(); 332197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(headElement); 333197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch RefPtrWillBeRawPtr<HTMLTitleElement> titleElement = HTMLTitleElement::create(*d); 334197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch headElement->appendChild(titleElement); 335197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch titleElement->appendChild(d->createTextNode(title), ASSERT_NO_EXCEPTION); 336197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 337323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) d->setSecurityOrigin(document().securityOrigin()->isolatedCopy()); 338323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) d->setContextFeatures(document().contextFeatures()); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return d.release(); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 342d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<Document> DOMImplementation::createDocument(const String& type, LocalFrame* frame, const KURL& url, bool inViewSourceMode) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 344f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return createDocument(type, DocumentInit(url, frame), inViewSourceMode); 345f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)} 346f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 347d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<Document> DOMImplementation::createDocument(const String& type, const DocumentInit& init, bool inViewSourceMode) 348f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles){ 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inViewSourceMode) 350f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return HTMLViewSourceDocument::create(init, type); 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Plugins cannot take HTML and XHTML from us, and we don't even need to initialize the plugin database for those. 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (type == "text/html") 354f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return HTMLDocument::create(init); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (type == "application/xhtml+xml") 35609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return XMLDocument::createXHTML(init); 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PluginData* pluginData = 0; 359f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (init.frame() && init.frame()->page() && init.frame()->loader().allowPlugins(NotAboutToInstantiatePlugin)) 360f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) pluginData = init.frame()->page()->pluginData(); 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // PDF is one image type for which a plugin can override built-in support. 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We do not want QuickTime to take over all image types, obviously. 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((type == "application/pdf" || type == "text/pdf") && pluginData && pluginData->supportsMimeType(type)) 365f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return PluginDocument::create(init); 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (Image::supportsType(type)) 367f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return ImageDocument::create(init); 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 36981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) // Check to see if the type can be played by our MediaPlayer, if so create a MediaDocument 3705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (HTMLMediaElement::supportsType(ContentType(type))) 371f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return MediaDocument::create(init); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Everything else except text/plain can be overridden by plugins. In particular, Adobe SVG Viewer should be used for SVG, if installed. 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Disallowing plug-ins to use text/plain prevents plug-ins from hijacking a fundamental type that the browser is expected to handle, 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // and also serves as an optimization to prevent loading the plug-in database in the common case. 37602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch if (type != "text/plain" && pluginData && pluginData->supportsMimeType(type)) 377f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return PluginDocument::create(init); 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isTextMIMEType(type)) 379f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return TextDocument::create(init); 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (type == "image/svg+xml") 381323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return XMLDocument::createSVG(init); 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isXMLMIMEType(type)) 38309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return XMLDocument::create(init); 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 385f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return HTMLDocument::create(init); 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 388323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void DOMImplementation::trace(Visitor* visitor) 389323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 390323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) visitor->trace(m_document); 391323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 392323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 394