DocumentFragment.cpp revision 06ea8e899e48f1f2f396b70e63fae369f2f23232
1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           (C) 1999 Antti Koivisto (koivisto@kde.org)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           (C) 2001 Dirk Mueller (mueller@kde.org)
5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DocumentFragment.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2621939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "Document.h"
2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "HTMLDocumentParser.h"
2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "LegacyHTMLDocumentParser.h"
2906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "Page.h"
3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "Settings.h"
3106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "XMLDocumentParser.h"
3221939df44de1705786c545cd1bf519d47250322dBen Murdoch
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline DocumentFragment::DocumentFragment(Document* document)
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    : ContainerNode(document)
37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
3806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    ASSERT(document);
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockPassRefPtr<DocumentFragment> DocumentFragment::create(Document* document)
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return adoptRef(new DocumentFragment(document));
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString DocumentFragment::nodeName() const
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return "#document-fragment";
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNode::NodeType DocumentFragment::nodeType() const
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return DOCUMENT_FRAGMENT_NODE;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool DocumentFragment::childTypeAllowed(NodeType type)
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (type) {
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case ELEMENT_NODE:
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case PROCESSING_INSTRUCTION_NODE:
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case COMMENT_NODE:
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case TEXT_NODE:
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case CDATA_SECTION_NODE:
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case ENTITY_REFERENCE_NODE:
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return true;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default:
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return false;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<Node> DocumentFragment::cloneNode(bool deep)
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    RefPtr<DocumentFragment> clone = create(document());
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (deep)
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        cloneChildNodes(clone.get());
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return clone.release();
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool DocumentFragment::shouldUseLegacyHTMLParser() const
8006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
8106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return document()->page() && document()->page()->settings()
8206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        && !document()->page()->settings()->html5ParserEnabled();
8306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
8406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
8506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid DocumentFragment::parseHTML(const String& source, FragmentScriptingPermission scriptingPermission)
8606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
8706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    if (shouldUseLegacyHTMLParser())
8806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        return LegacyHTMLDocumentParser::parseDocumentFragment(source, this, scriptingPermission);
8906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    HTMLDocumentParser::parseDocumentFragment(source, this, scriptingPermission);
9006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
9106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
9206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool DocumentFragment::parseXML(const String& source, Element* parent, FragmentScriptingPermission scriptingPermission)
9306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
9406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return parseXMLDocumentFragment(source, this, parent, scriptingPermission);
9506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
9606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
98