15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All Rights Reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
27e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/RawResource.h"
2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
29e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ResourceClientWalker.h"
30e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ResourceFetcher.h"
31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ResourceLoader.h"
321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/SharedBuffer.h"
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore {
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
363c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben MurdochRawResource::RawResource(const ResourceRequest& resourceRequest, Type type)
37fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    : Resource(resourceRequest, type)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
413c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::appendData(const char* data, int length)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
43fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    Resource::appendData(data, length);
44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
453c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourcePtr<RawResource> protect(this);
463c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourceClientWalker<RawResourceClient> w(m_clients);
473c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    while (RawResourceClient* c = w.next())
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        c->dataReceived(this, data, length);
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
513c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::didAddClient(ResourceClient* c)
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!hasClient(c))
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The calls to the client can result in events running, potentially causing
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // this resource to be evicted from the cache and all clients to be removed,
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // so a protector is necessary.
583c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourcePtr<RawResource> protect(this);
593c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    RawResourceClient* client = static_cast<RawResourceClient*>(c);
60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    size_t redirectCount = m_redirectChain.size();
61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (size_t i = 0; i < redirectCount; i++) {
62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        RedirectPair redirect = m_redirectChain[i];
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        ResourceRequest request(redirect.m_request);
64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        client->redirectReceived(this, request, redirect.m_redirectResponse);
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (!hasClient(c))
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return;
67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    ASSERT(redirectCount == m_redirectChain.size());
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (!m_response.isNull())
71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        client->responseReceived(this, m_response);
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!hasClient(c))
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_data)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        client->dataReceived(this, m_data->data(), m_data->size());
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!hasClient(c))
773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        return;
78fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    Resource::didAddClient(client);
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
813c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::willSendRequest(ResourceRequest& request, const ResourceResponse& response)
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
833c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourcePtr<RawResource> protect(this);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!response.isNull()) {
853c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        ResourceClientWalker<RawResourceClient> w(m_clients);
863c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        while (RawResourceClient* c = w.next())
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            c->redirectReceived(this, request, response);
88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_redirectChain.append(RedirectPair(request, response));
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
90fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    Resource::willSendRequest(request, response);
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
933c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::responseReceived(const ResourceResponse& response)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
95e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)    InternalResourcePtr protect(this);
96fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    Resource::responseReceived(response);
973c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourceClientWalker<RawResourceClient> w(m_clients);
983c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    while (RawResourceClient* c = w.next())
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        c->responseReceived(this, m_response);
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1023c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1043c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourceClientWalker<RawResourceClient> w(m_clients);
1053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    while (RawResourceClient* c = w.next())
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        c->dataSent(this, bytesSent, totalBytesToBeSent);
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1093c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::didDownloadData(int dataLength)
11053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
1113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    ResourceClientWalker<RawResourceClient> w(m_clients);
1123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    while (RawResourceClient* c = w.next())
11353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        c->dataDownloaded(this, dataLength);
11453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
11553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
1163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::setDefersLoading(bool defers)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_loader)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_loader->setDefersLoading(defers);
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::setDataBufferingPolicy(DataBufferingPolicy dataBufferingPolicy)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    m_options.dataBufferingPolicy = dataBufferingPolicy;
12553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    clear();
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static bool shouldIgnoreHeaderForCacheReuse(AtomicString headerName)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: This list of headers that don't affect cache policy almost certainly isn't complete.
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_STATIC_LOCAL(HashSet<AtomicString>, m_headers, ());
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_headers.isEmpty()) {
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("Cache-Control");
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("If-Modified-Since");
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("If-None-Match");
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("Origin");
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("Pragma");
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("Purpose");
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("Referer");
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_headers.add("User-Agent");
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_headers.contains(headerName);
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1453c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochbool RawResource::canReuse(const ResourceRequest& newRequest) const
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_options.dataBufferingPolicy == DoNotBufferData)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_resourceRequest.httpMethod() != newRequest.httpMethod())
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_resourceRequest.httpBody() != newRequest.httpBody())
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_resourceRequest.allowCookies() != newRequest.allowCookies())
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Ensure most headers match the existing headers before continuing.
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Note that the list of ignored headers includes some headers explicitly related to caching.
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // A more detailed check of caching policy will be performed later, this is simply a list of
162fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch    // headers that we might permit to be different and still reuse the existing Resource.
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const HTTPHeaderMap& newHeaders = newRequest.httpHeaderFields();
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const HTTPHeaderMap& oldHeaders = m_resourceRequest.httpHeaderFields();
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HTTPHeaderMap::const_iterator end = newHeaders.end();
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (HTTPHeaderMap::const_iterator i = newHeaders.begin(); i != end; ++i) {
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AtomicString headerName = i->key;
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!shouldIgnoreHeaderForCacheReuse(headerName) && i->value != oldHeaders.get(headerName))
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return false;
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    end = oldHeaders.end();
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for (HTTPHeaderMap::const_iterator i = oldHeaders.begin(); i != end; ++i) {
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        AtomicString headerName = i->key;
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        if (!shouldIgnoreHeaderForCacheReuse(headerName) && i->value != newHeaders.get(headerName))
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            return false;
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (size_t i = 0; i < m_redirectChain.size(); i++) {
181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        if (m_redirectChain[i].m_redirectResponse.cacheControlContainsNoStore())
182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            return false;
183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return true;
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1883c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RawResource::clear()
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_data.clear();
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    setEncodedSize(0);
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore
195