12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CONTENT_BROWSER_STREAMS_STREAM_URL_REQUEST_JOB_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CONTENT_BROWSER_STREAMS_STREAM_URL_REQUEST_JOB_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "net/http/http_status_code.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_job.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/streams/stream_read_observer.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/content_export.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Stream; 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A request job that handles reading stream URLs. 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CONTENT_EXPORT StreamURLRequestJob 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public net::URLRequestJob, 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public StreamReadObserver { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StreamURLRequestJob(net::URLRequest* request, 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Stream> stream); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // StreamObserver methods. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDataAvailable(Stream* stream) OVERRIDE; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // net::URLRequestJob methods. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Start() OVERRIDE; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Kill() OVERRIDE; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool ReadRawData(net::IOBuffer* buf, 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int buf_size, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int* bytes_read) OVERRIDE; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual int GetResponseCode() const OVERRIDE; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetExtraRequestHeaders( 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::HttpRequestHeaders& headers) OVERRIDE; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StreamURLRequestJob(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DidStart(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NotifyFailure(int); 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void HeadersCompleted(net::HttpStatusCode status_code); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearStream(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<StreamURLRequestJob> weak_factory_; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<content::Stream> stream_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool headers_set_; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::IOBuffer> pending_buffer_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int pending_buffer_size_; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<net::HttpResponseInfo> response_info_; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int total_bytes_read_; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int max_range_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool request_failed_; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(StreamURLRequestJob); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CONTENT_BROWSER_STREAMS_STREAM_URL_REQUEST_JOB_H_ 67