1/*
2    Copyright (C) 2010 Rob Buis <rwlbuis@gmail.com>
3    Copyright (C) 2011 Cosmin Truta <ctruta@gmail.com>
4    Copyright (C) 2012 University of Szeged
5    Copyright (C) 2012 Renata Hodovan <reni@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#if ENABLE(SVG)
26#include "CachedSVGDocument.h"
27
28#include "CachedResourceClient.h"
29#include "CachedResourceHandle.h"
30#include "ResourceBuffer.h"
31#include <wtf/text/StringBuilder.h>
32
33namespace WebCore {
34
35CachedSVGDocument::CachedSVGDocument(const ResourceRequest& request)
36    : CachedResource(request, SVGDocumentResource)
37    , m_decoder(TextResourceDecoder::create("application/xml"))
38{
39    setAccept("image/svg+xml");
40}
41
42CachedSVGDocument::~CachedSVGDocument()
43{
44}
45
46void CachedSVGDocument::setEncoding(const String& chs)
47{
48    m_decoder->setEncoding(chs, TextResourceDecoder::EncodingFromHTTPHeader);
49}
50
51String CachedSVGDocument::encoding() const
52{
53    return m_decoder->encoding().name();
54}
55
56void CachedSVGDocument::finishLoading(ResourceBuffer* data)
57{
58    if (data) {
59        StringBuilder decodedText;
60        decodedText.append(m_decoder->decode(data->data(), data->size()));
61        decodedText.append(m_decoder->flush());
62        // We don't need to create a new frame because the new document belongs to the parent UseElement.
63        m_document = SVGDocument::create(0, response().url());
64        m_document->setContent(decodedText.toString());
65    }
66    CachedResource::finishLoading(data);
67}
68
69}
70
71#endif
72
73