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#include "CachedSVGDocument.h"
25
26#include "CachedResourceClient.h"
27#include "CachedResourceHandle.h"
28#include "ResourceBuffer.h"
29#include <wtf/text/StringBuilder.h>
30
31namespace WebCore {
32
33CachedSVGDocument::CachedSVGDocument(const ResourceRequest& request, SessionID sessionID)
34    : CachedResource(request, SVGDocumentResource, sessionID)
35    , m_decoder(TextResourceDecoder::create("application/xml"))
36{
37    setAccept("image/svg+xml");
38}
39
40CachedSVGDocument::~CachedSVGDocument()
41{
42}
43
44void CachedSVGDocument::setEncoding(const String& chs)
45{
46    m_decoder->setEncoding(chs, TextResourceDecoder::EncodingFromHTTPHeader);
47}
48
49String CachedSVGDocument::encoding() const
50{
51    return m_decoder->encoding().name();
52}
53
54void CachedSVGDocument::finishLoading(ResourceBuffer* data)
55{
56    if (data) {
57        // We don't need to create a new frame because the new document belongs to the parent UseElement.
58        m_document = SVGDocument::create(nullptr, response().url());
59        m_document->setContent(m_decoder->decodeAndFlush(data->data(), data->size()));
60    }
61    CachedResource::finishLoading(data);
62}
63
64}
65