1 /* 2 Copyright (C) 2010 Rob Buis <rwlbuis (at) gmail.com> 3 Copyright (C) 2011 Cosmin Truta <ctruta (at) gmail.com> 4 Copyright (C) 2012 University of Szeged 5 Copyright (C) 2012 Renata Hodovan <reni (at) webkit.org> 6 7 This library is free software; you can redistribute it and/or 8 modify it under the terms of the GNU Library General Public 9 License as published by the Free Software Foundation; either 10 version 2 of the License, or (at your option) any later version. 11 12 This library is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 Library General Public License for more details. 16 17 You should have received a copy of the GNU Library General Public License 18 along with this library; see the file COPYING.LIB. If not, write to 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 Boston, MA 02110-1301, USA. 21 */ 22 23 #include "config.h" 24 25 #include "core/fetch/DocumentResource.h" 26 27 #include "core/dom/XMLDocument.h" 28 #include "platform/SharedBuffer.h" 29 #include "wtf/text/StringBuilder.h" 30 31 namespace WebCore { 32 33 DocumentResource::DocumentResource(const ResourceRequest& request, Type type) 34 : Resource(request, type) 35 , m_decoder(TextResourceDecoder::create("application/xml")) 36 { 37 // FIXME: We'll support more types to support HTMLImports. 38 ASSERT(type == SVGDocument); 39 } 40 41 DocumentResource::~DocumentResource() 42 { 43 } 44 45 void DocumentResource::setEncoding(const String& chs) 46 { 47 m_decoder->setEncoding(chs, TextResourceDecoder::EncodingFromHTTPHeader); 48 } 49 50 String DocumentResource::encoding() const 51 { 52 return m_decoder->encoding().name(); 53 } 54 55 void DocumentResource::checkNotify() 56 { 57 if (m_data) { 58 StringBuilder decodedText; 59 decodedText.append(m_decoder->decode(m_data->data(), m_data->size())); 60 decodedText.append(m_decoder->flush()); 61 // We don't need to create a new frame because the new document belongs to the parent UseElement. 62 m_document = createDocument(response().url()); 63 m_document->setContent(decodedText.toString()); 64 } 65 Resource::checkNotify(); 66 } 67 68 PassRefPtrWillBeRawPtr<Document> DocumentResource::createDocument(const KURL& url) 69 { 70 switch (type()) { 71 case SVGDocument: 72 return XMLDocument::createSVG(DocumentInit(url)); 73 default: 74 // FIXME: We'll add more types to support HTMLImports. 75 ASSERT_NOT_REACHED(); 76 return nullptr; 77 } 78 } 79 80 } 81