REGRESSION(r171526): [GTK] Massive crashes.
[WebKit-https.git] / Source / WebCore / platform / soup / SharedBufferSoup.cpp
1 /*
2  * Copyright (C) 2013 Company 100 Inc.
3  *
4  *  This library is free software; you can redistribute it and/or
5  *  modify it under the terms of the GNU Lesser General Public
6  *  License as published by the Free Software Foundation; either
7  *  version 2 of the License, or (at your option) any later version.
8  *
9  *  This library is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  *  Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public
15  *  License along with this library; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #include "config.h"
20
21 #if USE(SOUP)
22
23 #include "SharedBuffer.h"
24
25 #include "PurgeableBuffer.h"
26 #include <libsoup/soup.h>
27
28 namespace WebCore {
29
30 SharedBuffer::SharedBuffer(SoupBuffer* soupBuffer)
31     : m_size(0)
32     , m_buffer(adoptRef(new DataBuffer))
33     , m_soupBuffer(soupBuffer)
34 {
35     ASSERT(soupBuffer);
36 }
37
38 PassRefPtr<SharedBuffer> SharedBuffer::wrapSoupBuffer(SoupBuffer* soupBuffer)
39 {
40     return adoptRef(new SharedBuffer(soupBuffer));
41 }
42
43 void SharedBuffer::clearPlatformData()
44 {
45     m_soupBuffer.reset();
46 }
47
48 void SharedBuffer::tryReplaceContentsWithPlatformBuffer(SharedBuffer*)
49 {
50     ASSERT_NOT_REACHED();
51 }
52
53 void SharedBuffer::maybeTransferPlatformData()
54 {
55     if (!m_soupBuffer)
56         return;
57
58     ASSERT(!m_size);
59
60     // Hang on to the m_soupBuffer pointer in a local pointer as append() will re-enter maybeTransferPlatformData()
61     // and we need to make sure to early return when it does.
62     GUniquePtr<SoupBuffer> soupBuffer;
63     soupBuffer.swap(m_soupBuffer);
64
65     append(soupBuffer->data, soupBuffer->length);
66 }
67
68 bool SharedBuffer::hasPlatformData() const
69 {
70     return m_soupBuffer.get();
71 }
72
73 const char* SharedBuffer::platformData() const
74 {
75     return m_soupBuffer->data;
76 }
77
78 unsigned SharedBuffer::platformDataSize() const
79 {
80     return m_soupBuffer->length;
81 }
82
83 bool SharedBuffer::maybeAppendPlatformData(SharedBuffer*)
84 {
85     return false;
86 }
87
88 } // namespace WebCore
89
90 #endif