1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ 6#define CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/memory/scoped_ptr.h" 10#include "content/browser/loader/resource_handler.h" 11#include "content/browser/streams/stream_write_observer.h" 12#include "url/gurl.h" 13 14namespace net { 15class URLRequest; 16} // namespace net 17 18namespace content { 19 20class StreamRegistry; 21 22// Redirect this resource to a stream. 23class StreamResourceHandler : public StreamWriteObserver, 24 public ResourceHandler { 25 public: 26 // |origin| will be used to construct the URL for the Stream. See 27 // WebCore::BlobURL and and WebCore::SecurityOrigin in Blink to understand 28 // how origin check is done on resource loading. 29 StreamResourceHandler(net::URLRequest* request, 30 StreamRegistry* registry, 31 const GURL& origin); 32 virtual ~StreamResourceHandler(); 33 34 virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE; 35 36 // Not needed, as this event handler ought to be the final resource. 37 virtual bool OnRequestRedirected(const GURL& url, 38 ResourceResponse* resp, 39 bool* defer) OVERRIDE; 40 41 virtual bool OnResponseStarted(ResourceResponse* resp, 42 bool* defer) OVERRIDE; 43 44 virtual bool OnWillStart(const GURL& url, bool* defer) OVERRIDE; 45 46 virtual bool OnBeforeNetworkStart(const GURL& url, bool* defer) OVERRIDE; 47 48 // Create a new buffer to store received data. 49 virtual bool OnWillRead(scoped_refptr<net::IOBuffer>* buf, 50 int* buf_size, 51 int min_size) OVERRIDE; 52 53 // A read was completed, forward the data to the Stream. 54 virtual bool OnReadCompleted(int bytes_read, bool* defer) OVERRIDE; 55 56 virtual void OnResponseCompleted(const net::URLRequestStatus& status, 57 const std::string& sec_info, 58 bool* defer) OVERRIDE; 59 60 virtual void OnDataDownloaded(int bytes_downloaded) OVERRIDE; 61 62 Stream* stream() { return stream_.get(); } 63 64 private: 65 virtual void OnSpaceAvailable(Stream* stream) OVERRIDE; 66 virtual void OnClose(Stream* stream) OVERRIDE; 67 68 scoped_refptr<Stream> stream_; 69 scoped_refptr<net::IOBuffer> read_buffer_; 70 DISALLOW_COPY_AND_ASSIGN(StreamResourceHandler); 71}; 72 73} // namespace content 74 75#endif // CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ 76