18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2000 Peter Kelly (pmk@post.com) 3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2006, 2008, 2009 Apple Inc. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ProcessingInstruction.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSStyleSheet.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedCSSStyleSheet.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedXSLStyleSheet.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 285abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "CachedResourceLoader.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ExceptionCode.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "XSLStyleSheet.h" 33545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "XMLDocumentParser.h" // for parseAttributes() 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MediaList.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline ProcessingInstruction::ProcessingInstruction(Document* document, const String& target, const String& data) 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block : ContainerNode(document) 40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_target(target) 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_data(data) 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_cachedSheet(0) 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_loading(false) 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_alternate(false) 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_createdByParser(false) 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_isCSS(false) 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT) 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_isXSL(false) 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockPassRefPtr<ProcessingInstruction> ProcessingInstruction::create(Document* document, const String& target, const String& data) 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return adoptRef(new ProcessingInstruction(document, target, data)); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectProcessingInstruction::~ProcessingInstruction() 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (m_sheet) 616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_sheet->clearOwnerNode(); 626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_cachedSheet) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_cachedSheet->removeClient(this); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::setData(const String& data, ExceptionCode&) 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int oldLength = m_data.length(); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data = data; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->textRemoved(this, 0, oldLength); 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block checkStyleSheet(); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString ProcessingInstruction::nodeName() const 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_target; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNode::NodeType ProcessingInstruction::nodeType() const 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return PROCESSING_INSTRUCTION_NODE; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString ProcessingInstruction::nodeValue() const 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_data; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::setNodeValue(const String& nodeValue, ExceptionCode& ec) 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // NO_MODIFICATION_ALLOWED_ERR: taken care of by setData() 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setData(nodeValue, ec); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPassRefPtr<Node> ProcessingInstruction::cloneNode(bool /*deep*/) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // FIXME: Is it a problem that this does not copy m_localHref? 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // What about other data members? 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return create(document(), m_target, m_data); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// DOM Section 1.1.1 1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool ProcessingInstruction::childTypeAllowed(NodeType) const 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::checkStyleSheet() 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_target == "xml-stylesheet" && document()->frame() && parentNode() == document()) { 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // see http://www.w3.org/TR/xml-stylesheet/ 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // ### support stylesheet included in a fragment of this (or another) document 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // ### make sure this gets called when adding from javascript 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool attrsOk; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const HashMap<String, String> attrs = parseAttributes(m_data, attrsOk); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!attrsOk) 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashMap<String, String>::const_iterator i = attrs.find("type"); 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String type; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (i != attrs.end()) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project type = i->second; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_isCSS = type.isEmpty() || type == "text/css"; 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_isXSL = (type == "text/xml" || type == "text/xsl" || type == "application/xml" || 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch type == "application/xhtml+xml" || type == "application/rss+xml" || type == "application/atom+xml"); 12881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!m_isCSS && !m_isXSL) 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 13081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!m_isCSS) 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String href = attrs.get("href"); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String alternate = attrs.get("alternate"); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_alternate = alternate == "yes"; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_title = attrs.get("title"); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_media = attrs.get("media"); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (href.length() > 1 && href[0] == '#') { 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_localHref = href.substring(1); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT) 143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // We need to make a synthetic XSLStyleSheet that is embedded. It needs to be able 144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // to kick off import/include loads that can hang off some parent sheet. 145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_isXSL) { 1468a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block KURL finalURL(ParsedURLString, m_localHref); 1474576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang m_sheet = XSLStyleSheet::createEmbedded(this, finalURL); 148635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_loading = false; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else { 152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (m_cachedSheet) { 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_cachedSheet->removeClient(this); 154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_cachedSheet = 0; 155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String url = document()->completeURL(href).string(); 158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!dispatchBeforeLoadEvent(url)) 159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 160231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_loading = true; 162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project document()->addPendingSheet(); 163231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT) 165635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_isXSL) 1665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_cachedSheet = document()->cachedResourceLoader()->requestXSLStyleSheet(url); 167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project String charset = attrs.get("charset"); 171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (charset.isEmpty()) 1722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block charset = document()->charset(); 173635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1745abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick m_cachedSheet = document()->cachedResourceLoader()->requestCSSStyleSheet(url, charset); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_cachedSheet) 177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_cachedSheet->addClient(this); 178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else { 179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // The request may have been denied if (for example) the stylesheet is local and the document is remote. 180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_loading = false; 181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block document()->removePendingSheet(); 182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ProcessingInstruction::isLoading() const 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_loading) 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_sheet) 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_sheet->isLoading(); 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ProcessingInstruction::sheetLoaded() 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isLoading()) { 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->removePendingSheet(); 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 205d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid ProcessingInstruction::setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet) 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!inDocument()) { 2086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(!m_sheet); 2096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return; 2106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 2116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 21281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(m_isCSS); 213d0825bca7fe65beaee391d30da42e937db621564Steve Block RefPtr<CSSStyleSheet> newSheet = CSSStyleSheet::create(this, href, baseURL, charset); 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet = newSheet; 215d0825bca7fe65beaee391d30da42e937db621564Steve Block // We don't need the cross-origin security check here because we are 216d0825bca7fe65beaee391d30da42e937db621564Steve Block // getting the sheet text in "strict" mode. This enforces a valid CSS MIME 217d0825bca7fe65beaee391d30da42e937db621564Steve Block // type. 218d0825bca7fe65beaee391d30da42e937db621564Steve Block parseStyleSheet(sheet->sheetText(true)); 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newSheet->setTitle(m_title); 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newSheet->setMedia(MediaList::create(newSheet.get(), m_media)); 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newSheet->setDisabled(m_alternate); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(XSLT) 225d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid ProcessingInstruction::setXSLStyleSheet(const String& href, const KURL& baseURL, const String& sheet) 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_isXSL); 228d0825bca7fe65beaee391d30da42e937db621564Steve Block m_sheet = XSLStyleSheet::create(this, href, baseURL); 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parseStyleSheet(sheet); 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::parseStyleSheet(const String& sheet) 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet->parseString(sheet, true); 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_cachedSheet) 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_cachedSheet->removeClient(this); 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_cachedSheet = 0; 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_loading = false; 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet->checkLoaded(); 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::setCSSStyleSheet(PassRefPtr<CSSStyleSheet> sheet) 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_cachedSheet); 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_loading); 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet = sheet; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet->setTitle(m_title); 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_sheet->setDisabled(m_alternate); 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ProcessingInstruction::offsetInCharacters() const 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint ProcessingInstruction::maxCharacterOffset() const 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return static_cast<int>(m_data.length()); 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ProcessingInstruction::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!sheet()) 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addSubresourceURL(urls, sheet()->baseURL()); 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::insertedIntoDocument() 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ContainerNode::insertedIntoDocument(); 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->addStyleSheetCandidateNode(this, m_createdByParser); 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkStyleSheet(); 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::removedFromDocument() 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ContainerNode::removedFromDocument(); 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch document()->removeStyleSheetCandidateNode(this); 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (m_sheet) { 2856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ASSERT(m_sheet->ownerNode() == this); 2866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_sheet->clearOwnerNode(); 2876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_sheet = 0; 2886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 2896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_cachedSheet) 2915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen document()->styleSelectorChanged(DeferRecalcStyle); 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ProcessingInstruction::finishParsingChildren() 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_createdByParser = false; 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ContainerNode::finishParsingChildren(); 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace 301