1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef CONTENT_PUBLIC_CHILD_REQUEST_PEER_H_ 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define CONTENT_PUBLIC_CHILD_REQUEST_PEER_H_ 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <string> 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/basictypes.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/common/content_export.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass GURL; 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace base { 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass TimeTicks; 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace net { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct RedirectInfo; 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content { 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)struct ResourceResponseInfo; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// This is implemented by our custom resource loader within content. The Peer 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// and it's bridge should have identical lifetimes as they represent each end of 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// a communication channel. 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// These callbacks mirror net::URLRequest::Delegate and the order and 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// conditions in which they will be called are identical. See url_request.h 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// for more information. 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass CONTENT_EXPORT RequestPeer { 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called as upload progress is made. 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // note: only for requests with LOAD_ENABLE_UPLOAD_PROGRESS set 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnUploadProgress(uint64 position, uint64 size) = 0; 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when a redirect occurs. The implementation may return false to 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // suppress the redirect. The ResourceResponseInfo provides information about 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the redirect response and the RedirectInfo includes information about the 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // request to be made if the method returns true. 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual bool OnReceivedRedirect(const net::RedirectInfo& redirect_info, 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const ResourceResponseInfo& info) = 0; 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when response headers are available (after all redirects have 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // been followed). 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnReceivedResponse(const ResourceResponseInfo& info) = 0; 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when a chunk of response data is downloaded. This method may be 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // called multiple times or not at all if an error occurs. This method is 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // only called if RequestInfo::download_to_file was set to true, and in 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // that case, OnReceivedData will not be called. 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The encoded_data_length is the length of the encoded data transferred 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // over the network, which could be different from data length (e.g. for 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // gzipped content). 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnDownloadedData(int len, int encoded_data_length) = 0; 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when a chunk of response data is available. This method may 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // be called multiple times or not at all if an error occurs. 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The encoded_data_length is the length of the encoded data transferred 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // over the network, which could be different from data length (e.g. for 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // gzipped content). 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnReceivedData(const char* data, 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int data_length, 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int encoded_data_length) = 0; 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when metadata generated by the renderer is retrieved from the 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // cache. This method may be called zero or one times. 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnReceivedCachedMetadata(const char* data, int len) {} 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Called when the response is complete. This method signals completion of 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the resource load. 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnCompletedRequest(int error_code, 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool was_ignored_by_handler, 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool stale_copy_in_cache, 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const std::string& security_info, 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::TimeTicks& completion_time, 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int64 total_transfer_size) = 0; 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~RequestPeer() {} 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace content 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // CONTENT_PUBLIC_CHILD_REQUEST_PEER_H_ 89