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) * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Portions are Copyright (C) 2002 Netscape Communications Corporation. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Other contributors: David Baron <dbaron@fas.harvard.edu> 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Lesser General Public 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2.1 of the License, or (at your option) any later version. 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Lesser General Public License for more details. 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Lesser General Public 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License along with this library; if not, write to the Free Software 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Alternatively, the document type parsing portions of this file may be used 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * under the terms of either the Mozilla Public License Version 1.1, found at 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (the "GPL"), in which case the provisions of the MPL or the GPL are 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * applicable instead of those above. If you wish to allow use of your 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file only under the terms of one of those two 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * licenses (the MPL or the GPL) and not to allow others to use your 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file under the LGPL, indicate your decision by 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * deleting the provisions above and replace them with the notice and 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * other provisions required by the MPL or the GPL, as the case may be. 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * If you do not delete the provisions above, a recipient may use your 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file under any of the LGPL, the MPL or the GPL. 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLDocument.h" 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 56197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h" 575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 5876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/LocalDOMWindow.h" 5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/frame/FrameView.h" 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLBodyElement.h" 6253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h" 6353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameTree.h" 6453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 6551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "wtf/text/StringBuilder.h" 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochHTMLDocument::HTMLDocument(const DocumentInit& initializer, DocumentClassFlags extendedDocumentClasses) 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch : Document(initializer, HTMLDocumentClass | extendedDocumentClasses) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) clearXMLVersion(); 7510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (isSrcdocDocument() || initializer.importsController()) { 7610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT(inNoQuirksMode()); 7710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch lockCompatibilityMode(); 7810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLDocument::~HTMLDocument() 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)HTMLBodyElement* HTMLDocument::htmlBodyElement() const 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 871e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) HTMLElement* body = this->body(); 88d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return isHTMLBodyElement(body) ? toHTMLBodyElement(body) : 0; 89591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 911e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::bodyAttributeValue(const QualifiedName& name) const 92591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{ 931e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (HTMLBodyElement* body = htmlBodyElement()) 941e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return body->fastGetAttribute(name); 951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return nullAtom; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 981e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setBodyAttribute(const QualifiedName& name, const AtomicString& value) 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (HTMLBodyElement* body = htmlBodyElement()) { 1011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // FIXME: This check is apparently for benchmarks that set the same value repeatedly. 1021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // It's not clear what benchmarks though, it's also not clear why we don't avoid 1031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // causing a style recalc when setting the same value to a presentational attribute 1041e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) // in the common case. 1051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (body->fastGetAttribute(name) != value) 1061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) body->setAttribute(name, value); 1071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) } 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1101e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::bgColor() const 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return bodyAttributeValue(bgcolorAttr); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1151e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setBgColor(const AtomicString& value) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setBodyAttribute(bgcolorAttr, value); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1201e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::fgColor() const 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return bodyAttributeValue(textAttr); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setFgColor(const AtomicString& value) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1271e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setBodyAttribute(textAttr, value); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::alinkColor() const 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return bodyAttributeValue(alinkAttr); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setAlinkColor(const AtomicString& value) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setBodyAttribute(alinkAttr, value); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::linkColor() const 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return bodyAttributeValue(linkAttr); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1451e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setLinkColor(const AtomicString& value) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setBodyAttribute(linkAttr, value); 1481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1491e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)const AtomicString& HTMLDocument::vlinkColor() const 1511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 1521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return bodyAttributeValue(vlinkAttr); 1531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1541e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void HTMLDocument::setVlinkColor(const AtomicString& value) 1561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 1571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) setBodyAttribute(vlinkAttr, value); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 160d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)PassRefPtrWillBeRawPtr<Document> HTMLDocument::cloneDocumentWithoutChildren() 161bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 162bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return create(DocumentInit(url()).withRegistrationContext(registrationContext())); 163bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 164bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// -------------------------------------------------------------------------- 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// not part of the DOM 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// -------------------------------------------------------------------------- 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 169f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)void HTMLDocument::addItemToMap(HashCountedSet<AtomicString>& map, const AtomicString& name) 170df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 171df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (name.isEmpty()) 172df95704c49daea886ddad70775bda23618d6274dBen Murdoch return; 173f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) map.add(name); 174d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (LocalFrame* f = frame()) 175f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) f->script().namedItemAdded(this, name); 176df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 177df95704c49daea886ddad70775bda23618d6274dBen Murdoch 178f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)void HTMLDocument::removeItemFromMap(HashCountedSet<AtomicString>& map, const AtomicString& name) 179df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 180df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (name.isEmpty()) 181df95704c49daea886ddad70775bda23618d6274dBen Murdoch return; 182f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) map.remove(name); 183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (LocalFrame* f = frame()) 184f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) f->script().namedItemRemoved(this, name); 185df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 186df95704c49daea886ddad70775bda23618d6274dBen Murdoch 187df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLDocument::addNamedItem(const AtomicString& name) 188df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 189df95704c49daea886ddad70775bda23618d6274dBen Murdoch addItemToMap(m_namedItemCounts, name); 190df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 191df95704c49daea886ddad70775bda23618d6274dBen Murdoch 192df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLDocument::removeNamedItem(const AtomicString& name) 193df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 194df95704c49daea886ddad70775bda23618d6274dBen Murdoch removeItemFromMap(m_namedItemCounts, name); 195df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 196df95704c49daea886ddad70775bda23618d6274dBen Murdoch 197df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLDocument::addExtraNamedItem(const AtomicString& name) 198df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 199df95704c49daea886ddad70775bda23618d6274dBen Murdoch addItemToMap(m_extraNamedItemCounts, name); 200df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 201df95704c49daea886ddad70775bda23618d6274dBen Murdoch 202df95704c49daea886ddad70775bda23618d6274dBen Murdochvoid HTMLDocument::removeExtraNamedItem(const AtomicString& name) 203df95704c49daea886ddad70775bda23618d6274dBen Murdoch{ 204df95704c49daea886ddad70775bda23618d6274dBen Murdoch removeItemFromMap(m_extraNamedItemCounts, name); 205df95704c49daea886ddad70775bda23618d6274dBen Murdoch} 206df95704c49daea886ddad70775bda23618d6274dBen Murdoch 20783750176c3ee2cea66c8a9751271026a5901be3aBen Murdochstatic void addLocalNameToSet(HashSet<StringImpl*>* set, const QualifiedName& qName) 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) set->add(qName.localName().impl()); 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21283750176c3ee2cea66c8a9751271026a5901be3aBen Murdochstatic HashSet<StringImpl*>* createHtmlCaseInsensitiveAttributesSet() 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // This is the list of attributes in HTML 4.01 with values marked as "[CI]" or case-insensitive 215926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Mozilla treats all other values as case-sensitive, thus so do we. 21683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch HashSet<StringImpl*>* attrSet = new HashSet<StringImpl*>; 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, accept_charsetAttr); 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, acceptAttr); 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, alignAttr); 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, alinkAttr); 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, axisAttr); 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, bgcolorAttr); 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, charsetAttr); 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, checkedAttr); 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, clearAttr); 227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, codetypeAttr); 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, colorAttr); 229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, compactAttr); 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, declareAttr); 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, deferAttr); 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, dirAttr); 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, disabledAttr); 234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, enctypeAttr); 235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, faceAttr); 236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, frameAttr); 237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, hreflangAttr); 238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, http_equivAttr); 239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, langAttr); 240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, languageAttr); 241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, linkAttr); 242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, mediaAttr); 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, methodAttr); 244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, multipleAttr); 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, nohrefAttr); 246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, noresizeAttr); 247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, noshadeAttr); 248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, nowrapAttr); 249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, readonlyAttr); 250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, relAttr); 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, revAttr); 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, rulesAttr); 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, scopeAttr); 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, scrollingAttr); 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, selectedAttr); 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, shapeAttr); 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, targetAttr); 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, textAttr); 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, typeAttr); 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, valignAttr); 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, valuetypeAttr); 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) addLocalNameToSet(attrSet, vlinkAttr); 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return attrSet; 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool HTMLDocument::isCaseSensitiveAttribute(const QualifiedName& attributeName) 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 26983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch static HashSet<StringImpl*>* htmlCaseInsensitiveAttributesSet = createHtmlCaseInsensitiveAttributesSet(); 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isPossibleHTMLAttr = !attributeName.hasPrefix() && (attributeName.namespaceURI() == nullAtom); 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return !isPossibleHTMLAttr || !htmlCaseInsensitiveAttributesSet->contains(attributeName.localName().impl()); 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 27476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void HTMLDocument::write(LocalDOMWindow* callingWindow, const Vector<String>& text, ExceptionState& exceptionState) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(callingWindow); 27751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) StringBuilder builder; 27851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (size_t i = 0; i < text.size(); ++i) 27951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) builder.append(text[i]); 28010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch write(builder.toString(), callingWindow->document(), exceptionState); 28151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 28251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 28376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void HTMLDocument::writeln(LocalDOMWindow* callingWindow, const Vector<String>& text, ExceptionState& exceptionState) 28451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(callingWindow); 28651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) StringBuilder builder; 28751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) for (size_t i = 0; i < text.size(); ++i) 28851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) builder.append(text[i]); 28910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch writeln(builder.toString(), callingWindow->document(), exceptionState); 29051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 29151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 293