text: /*
      Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
      Copyright (C) 2001 Dirk Mueller <mueller@kde.org>
      Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
      Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
  
      This library is free software; you can redistribute it and/or
      modify it under the terms of the GNU Library General Public
      License as published by the Free Software Foundation; either
      version 2 of the License, or (at your option) any later version.
  
      This library is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Library General Public License for more details.
  
      You should have received a copy of the GNU Library General Public License
      along with this library; see the file COPYING.LIB.  If not, write to
      the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
      Boston, MA 02110-1301, USA.
  */
  
  #ifndef RawResource_h
  #define RawResource_h
  
  #include "core/fetch/ResourceClient.h"
  #include "core/fetch/ResourcePtr.h"
  
  namespace blink {
  class RawResourceCallback;
  class RawResourceClient;
  
  class RawResource final : public Resource {
  public:
      typedef RawResourceClient ClientType;
  
      RawResource(const ResourceRequest&, Type);
  
      virtual bool canReuse(const ResourceRequest&) const override;
  
  private:
      virtual void didAddClient(ResourceClient*) override;
      virtual void appendData(const char*, int) override;
  
      virtual bool shouldIgnoreHTTPStatusCodeErrors() const override { return true; }
  
      virtual void willSendRequest(ResourceRequest&, const ResourceResponse&) override;
      virtual void updateRequest(const ResourceRequest&) override;
      virtual void responseReceived(const ResourceResponse&) override;
      virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
      virtual void didDownloadData(int) override;
  };
  
  #if ENABLE(SECURITY_ASSERT)
  inline bool isRawResource(const Resource& resource)
  {
      Resource::Type type = resource.type();
      return type == Resource::MainResource || type == Resource::Raw || type == Resource::Media || type == Resource::ImportResource;
  }
  #endif
  inline RawResource* toRawResource(const ResourcePtr<Resource>& resource)
  {
      ASSERT_WITH_SECURITY_IMPLICATION(!resource || isRawResource(*resource.get()));
      return static_cast<RawResource*>(resource.get());
  }
  
  class RawResourceClient : public ResourceClient {
  public:
      virtual ~RawResourceClient() { }
      static ResourceClientType expectedType() { return RawResourceType; }
      virtual ResourceClientType resourceClientType() const override final { return expectedType(); }
  
      virtual void dataSent(Resource*, unsigned long long /* bytesSent */, unsigned long long /* totalBytesToBeSent */) { }
      virtual void responseReceived(Resource*, const ResourceResponse&) { }
      virtual void dataReceived(Resource*, const char* /* data */, int /* length */) { }
      virtual void updateRequest(Resource*, const ResourceRequest&) { }
      virtual void dataDownloaded(Resource*, int) { }
  };
  
  }
  
  #endif // RawResource_h
  