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