|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ | 
|  | #define CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ | 
|  |  | 
|  | #include <memory> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "base/memory/ref_counted.h" | 
|  | #include "content/browser/loader/resource_handler.h" | 
|  | #include "content/browser/loader/stream_writer.h" | 
|  |  | 
|  | namespace net { | 
|  | class URLRequest; | 
|  | }  // namespace net | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class StreamRegistry; | 
|  |  | 
|  | // Redirect this resource to a stream. | 
|  | class StreamResourceHandler : public ResourceHandler { | 
|  | public: | 
|  | // |origin| will be used to construct the URL for the Stream. See | 
|  | // WebCore::BlobURL and and WebCore::SecurityOrigin in Blink to understand | 
|  | // how origin check is done on resource loading. | 
|  | StreamResourceHandler(net::URLRequest* request, | 
|  | StreamRegistry* registry, | 
|  | const GURL& origin); | 
|  | ~StreamResourceHandler() override; | 
|  |  | 
|  | void SetController(ResourceController* controller) override; | 
|  |  | 
|  | // Not needed, as this event handler ought to be the final resource. | 
|  | bool OnRequestRedirected(const net::RedirectInfo& redirect_info, | 
|  | ResourceResponse* resp, | 
|  | bool* defer) override; | 
|  |  | 
|  | bool OnResponseStarted(ResourceResponse* resp, bool* defer) override; | 
|  |  | 
|  | bool OnWillStart(const GURL& url, bool* defer) override; | 
|  |  | 
|  | // Create a new buffer to store received data. | 
|  | bool OnWillRead(scoped_refptr<net::IOBuffer>* buf, | 
|  | int* buf_size, | 
|  | int min_size) override; | 
|  |  | 
|  | // A read was completed, forward the data to the Stream. | 
|  | bool OnReadCompleted(int bytes_read, bool* defer) override; | 
|  |  | 
|  | void OnResponseCompleted(const net::URLRequestStatus& status, | 
|  | bool* defer) override; | 
|  |  | 
|  | void OnDataDownloaded(int bytes_downloaded) override; | 
|  |  | 
|  | Stream* stream() { return writer_.stream(); } | 
|  |  | 
|  | private: | 
|  | StreamWriter writer_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(StreamResourceHandler); | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_LOADER_STREAM_RESOURCE_HANDLER_H_ |