download_url_parameters.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 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_PUBLIC_BROWSER_DOWNLOAD_URL_PARAMETERS_H_ 6#define CONTENT_PUBLIC_BROWSER_DOWNLOAD_URL_PARAMETERS_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/basictypes.h" 12#include "base/callback.h" 13#include "content/public/browser/download_save_info.h" 14#include "content/public/common/referrer.h" 15#include "googleurl/src/gurl.h" 16#include "net/base/net_errors.h" 17 18namespace content { 19 20class DownloadItem; 21class ResourceContext; 22class ResourceDispatcherHost; 23class WebContents; 24 25// Pass an instance of DownloadUrlParameters to DownloadManager::DownloadUrl() 26// to download the content at |url|. All parameters with setters are optional. 27// |referrer| and |referrer_encoding| are the referrer for the download. If 28// |prefer_cache| is true, then if the response to |url| is in the HTTP cache it 29// will be used without revalidation. If |post_id| is non-negative, then it 30// identifies the post transaction used to originally retrieve the |url| 31// resource - it also requires |prefer_cache| to be |true| since re-post'ing is 32// not done. |save_info| specifies where the downloaded file should be saved, 33// and whether the user should be prompted about the download. If not null, 34// |callback| will be called when the download starts, or if an error occurs 35// that prevents a download item from being created. We send a pointer to 36// content::ResourceContext instead of the usual reference so that a copy of the 37// object isn't made. 38 39class CONTENT_EXPORT DownloadUrlParameters { 40 public: 41 // If there is an error, then |item| will be NULL. 42 typedef base::Callback<void(DownloadItem*, net::Error)> OnStartedCallback; 43 44 typedef std::pair<std::string, std::string> RequestHeadersNameValuePair; 45 typedef std::vector<RequestHeadersNameValuePair> RequestHeadersType; 46 47 static DownloadUrlParameters* FromWebContents( 48 WebContents* web_contents, 49 const GURL& url); 50 51 DownloadUrlParameters( 52 const GURL& url, 53 int render_process_host_id, 54 int render_view_host_routing_id, 55 content::ResourceContext* resource_context); 56 57 ~DownloadUrlParameters(); 58 59 void set_content_initiated(bool content_initiated) { 60 content_initiated_ = content_initiated; 61 } 62 void add_request_header(const std::string& name, const std::string& value) { 63 request_headers_.push_back(make_pair(name, value)); 64 } 65 void set_referrer(const Referrer& referrer) { referrer_ = referrer; } 66 void set_referrer_encoding(const std::string& referrer_encoding) { 67 referrer_encoding_ = referrer_encoding; 68 } 69 void set_load_flags(int load_flags) { load_flags_ |= load_flags; } 70 void set_method(const std::string& method) { 71 method_ = method; 72 } 73 void set_post_body(const std::string& post_body) { 74 post_body_ = post_body; 75 } 76 void set_prefer_cache(bool prefer_cache) { 77 prefer_cache_ = prefer_cache; 78 } 79 void set_post_id(int64 post_id) { post_id_ = post_id; } 80 void set_callback(const OnStartedCallback& callback) { 81 callback_ = callback; 82 } 83 void set_file_path(const FilePath& file_path) { 84 save_info_.file_path = file_path; 85 } 86 void set_suggested_name(const string16& suggested_name) { 87 save_info_.suggested_name = suggested_name; 88 } 89 void set_offset(int64 offset) { save_info_.offset = offset; } 90 void set_hash_state(std::string hash_state) { 91 save_info_.hash_state = hash_state; 92 } 93 void set_prompt(bool prompt) { save_info_.prompt_for_save_location = prompt; } 94 void set_file_stream(scoped_ptr<net::FileStream> file_stream) { 95 save_info_.file_stream = file_stream.Pass(); 96 } 97 98 const OnStartedCallback& callback() const { return callback_; } 99 bool content_initiated() const { return content_initiated_; } 100 int load_flags() const { return load_flags_; } 101 const std::string& method() const { return method_; } 102 const std::string& post_body() const { return post_body_; } 103 int64 post_id() const { return post_id_; } 104 bool prefer_cache() const { return prefer_cache_; } 105 const Referrer& referrer() const { return referrer_; } 106 const std::string& referrer_encoding() const { return referrer_encoding_; } 107 int render_process_host_id() const { return render_process_host_id_; } 108 int render_view_host_routing_id() const { 109 return render_view_host_routing_id_; 110 } 111 RequestHeadersType::const_iterator request_headers_begin() const { 112 return request_headers_.begin(); 113 } 114 RequestHeadersType::const_iterator request_headers_end() const { 115 return request_headers_.end(); 116 } 117 content::ResourceContext* resource_context() const { 118 return resource_context_; 119 } 120 ResourceDispatcherHost* resource_dispatcher_host() const { 121 return resource_dispatcher_host_; 122 } 123 const FilePath& file_path() const { return save_info_.file_path; } 124 const string16& suggested_name() const { return save_info_.suggested_name; } 125 int64 offset() const { return save_info_.offset; } 126 const std::string& hash_state() const { return save_info_.hash_state; } 127 bool prompt() const { return save_info_.prompt_for_save_location; } 128 const GURL& url() const { return url_; } 129 130 // Note that this is state changing--the DownloadUrlParameters object 131 // will not have a file_stream attached to it after this call. 132 scoped_ptr<net::FileStream> GetFileStream() { 133 return save_info_.file_stream.Pass(); 134 } 135 136 private: 137 OnStartedCallback callback_; 138 bool content_initiated_; 139 RequestHeadersType request_headers_; 140 int load_flags_; 141 std::string method_; 142 std::string post_body_; 143 int64 post_id_; 144 bool prefer_cache_; 145 Referrer referrer_; 146 std::string referrer_encoding_; 147 int render_process_host_id_; 148 int render_view_host_routing_id_; 149 ResourceContext* resource_context_; 150 ResourceDispatcherHost* resource_dispatcher_host_; 151 DownloadSaveInfo save_info_; 152 GURL url_; 153 154 DISALLOW_COPY_AND_ASSIGN(DownloadUrlParameters); 155}; 156 157} // namespace content 158 159#endif // CONTENT_PUBLIC_BROWSER_DOWNLOAD_URL_PARAMETERS_H_ 160