OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/test/test_url_fetcher_factory.h" | 5 #include "content/test/test_url_fetcher_factory.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 11 #include "content/public/common/url_fetcher_delegate.h" |
11 #include "net/http/http_response_headers.h" | 12 #include "net/http/http_response_headers.h" |
12 #include "net/url_request/url_request_status.h" | 13 #include "net/url_request/url_request_status.h" |
13 | 14 |
14 ScopedURLFetcherFactory::ScopedURLFetcherFactory(URLFetcher::Factory* factory) { | 15 ScopedURLFetcherFactory::ScopedURLFetcherFactory(URLFetcher::Factory* factory) { |
15 DCHECK(!URLFetcher::factory()); | 16 DCHECK(!URLFetcher::factory()); |
16 URLFetcher::set_factory(factory); | 17 URLFetcher::set_factory(factory); |
17 } | 18 } |
18 | 19 |
19 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { | 20 ScopedURLFetcherFactory::~ScopedURLFetcherFactory() { |
20 DCHECK(URLFetcher::factory()); | 21 DCHECK(URLFetcher::factory()); |
21 URLFetcher::set_factory(NULL); | 22 URLFetcher::set_factory(NULL); |
22 } | 23 } |
23 | 24 |
24 TestURLFetcher::TestURLFetcher(int id, | 25 TestURLFetcher::TestURLFetcher(int id, |
25 const GURL& url, | 26 const GURL& url, |
26 URLFetcher::RequestType request_type, | 27 URLFetcher::RequestType request_type, |
27 URLFetcher::Delegate* d) | 28 content::URLFetcherDelegate* d) |
28 : URLFetcher(url, request_type, d), | 29 : URLFetcher(url, request_type, d), |
29 id_(id), | 30 id_(id), |
30 original_url_(url), | 31 original_url_(url), |
31 did_receive_last_chunk_(false) { | 32 did_receive_last_chunk_(false) { |
32 } | 33 } |
33 | 34 |
34 TestURLFetcher::~TestURLFetcher() { | 35 TestURLFetcher::~TestURLFetcher() { |
35 } | 36 } |
36 | 37 |
37 void TestURLFetcher::AppendChunkToUpload(const std::string& data, | 38 void TestURLFetcher::AppendChunkToUpload(const std::string& data, |
(...skipping 23 matching lines...) Expand all Loading... |
61 void TestURLFetcher::SetResponseString(const std::string& response) { | 62 void TestURLFetcher::SetResponseString(const std::string& response) { |
62 SetResponseDestinationForTesting(STRING); | 63 SetResponseDestinationForTesting(STRING); |
63 fake_response_string_ = response; | 64 fake_response_string_ = response; |
64 } | 65 } |
65 | 66 |
66 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { | 67 void TestURLFetcher::SetResponseFilePath(const FilePath& path) { |
67 SetResponseDestinationForTesting(TEMP_FILE); | 68 SetResponseDestinationForTesting(TEMP_FILE); |
68 fake_response_file_path_ = path; | 69 fake_response_file_path_ = path; |
69 } | 70 } |
70 | 71 |
71 const std::string& TestURLFetcher::GetResponseStringRef() const { | |
72 return fake_response_string_; | |
73 } | |
74 | |
75 bool TestURLFetcher::GetResponseAsString( | 72 bool TestURLFetcher::GetResponseAsString( |
76 std::string* out_response_string) const { | 73 std::string* out_response_string) const { |
77 if (GetResponseDestinationForTesting() != STRING) | 74 if (GetResponseDestinationForTesting() != STRING) |
78 return false; | 75 return false; |
79 | 76 |
80 *out_response_string = fake_response_string_; | 77 *out_response_string = fake_response_string_; |
81 return true; | 78 return true; |
82 } | 79 } |
83 | 80 |
84 bool TestURLFetcher::GetResponseAsFilePath( | 81 bool TestURLFetcher::GetResponseAsFilePath( |
85 bool take_ownership, FilePath* out_response_path) const { | 82 bool take_ownership, FilePath* out_response_path) const { |
86 if (GetResponseDestinationForTesting() != TEMP_FILE) | 83 if (GetResponseDestinationForTesting() != TEMP_FILE) |
87 return false; | 84 return false; |
88 | 85 |
89 *out_response_path = fake_response_file_path_; | 86 *out_response_path = fake_response_file_path_; |
90 return true; | 87 return true; |
91 } | 88 } |
92 | 89 |
93 TestURLFetcherFactory::TestURLFetcherFactory() | 90 TestURLFetcherFactory::TestURLFetcherFactory() |
94 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 91 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
95 } | 92 } |
96 | 93 |
97 TestURLFetcherFactory::~TestURLFetcherFactory() {} | 94 TestURLFetcherFactory::~TestURLFetcherFactory() {} |
98 | 95 |
99 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( | 96 URLFetcher* TestURLFetcherFactory::CreateURLFetcher( |
100 int id, | 97 int id, |
101 const GURL& url, | 98 const GURL& url, |
102 URLFetcher::RequestType request_type, | 99 URLFetcher::RequestType request_type, |
103 URLFetcher::Delegate* d) { | 100 content::URLFetcherDelegate* d) { |
104 TestURLFetcher* fetcher = new TestURLFetcher(id, url, request_type, d); | 101 TestURLFetcher* fetcher = new TestURLFetcher(id, url, request_type, d); |
105 fetchers_[id] = fetcher; | 102 fetchers_[id] = fetcher; |
106 return fetcher; | 103 return fetcher; |
107 } | 104 } |
108 | 105 |
109 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { | 106 TestURLFetcher* TestURLFetcherFactory::GetFetcherByID(int id) const { |
110 Fetchers::const_iterator i = fetchers_.find(id); | 107 Fetchers::const_iterator i = fetchers_.find(id); |
111 return i == fetchers_.end() ? NULL : i->second; | 108 return i == fetchers_.end() ? NULL : i->second; |
112 } | 109 } |
113 | 110 |
114 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { | 111 void TestURLFetcherFactory::RemoveFetcherFromMap(int id) { |
115 Fetchers::iterator i = fetchers_.find(id); | 112 Fetchers::iterator i = fetchers_.find(id); |
116 DCHECK(i != fetchers_.end()); | 113 DCHECK(i != fetchers_.end()); |
117 fetchers_.erase(i); | 114 fetchers_.erase(i); |
118 } | 115 } |
119 | 116 |
120 const GURL& TestURLFetcher::url() const { | 117 const GURL& TestURLFetcher::url() const { |
121 return fake_url_; | 118 return fake_url_; |
122 } | 119 } |
123 | 120 |
124 const net::URLRequestStatus& TestURLFetcher::status() const { | 121 const net::URLRequestStatus& TestURLFetcher::status() const { |
125 return fake_status_; | 122 return fake_status_; |
126 } | 123 } |
127 | 124 |
128 int TestURLFetcher::response_code() const { | 125 int TestURLFetcher::response_code() const { |
129 return fake_response_code_; | 126 return fake_response_code_; |
130 } | 127 } |
131 | 128 |
| 129 const net::ResponseCookies& TestURLFetcher::cookies() const { |
| 130 return fake_cookies_; |
| 131 } |
| 132 |
132 // This class is used by the FakeURLFetcherFactory below. | 133 // This class is used by the FakeURLFetcherFactory below. |
133 class FakeURLFetcher : public URLFetcher { | 134 class FakeURLFetcher : public URLFetcher { |
134 public: | 135 public: |
135 // Normal URL fetcher constructor but also takes in a pre-baked response. | 136 // Normal URL fetcher constructor but also takes in a pre-baked response. |
136 FakeURLFetcher(const GURL& url, RequestType request_type, Delegate* d, | 137 FakeURLFetcher(const GURL& url, RequestType request_type, |
| 138 content::URLFetcherDelegate* d, |
137 const std::string& response_data, bool success) | 139 const std::string& response_data, bool success) |
138 : URLFetcher(url, request_type, d), | 140 : URLFetcher(url, request_type, d), |
139 url_(url), | 141 url_(url), |
140 response_data_(response_data), | 142 response_data_(response_data), |
141 success_(success), | 143 success_(success), |
142 status_(success ? net::URLRequestStatus::SUCCESS : | 144 status_(success ? net::URLRequestStatus::SUCCESS : |
143 net::URLRequestStatus::FAILED, 0), | 145 net::URLRequestStatus::FAILED, 0), |
144 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { | 146 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { |
145 } | 147 } |
146 | 148 |
147 // Start the request. This will call the given delegate asynchronously | 149 // Start the request. This will call the given delegate asynchronously |
148 // with the pre-baked response as parameter. | 150 // with the pre-baked response as parameter. |
149 virtual void Start() OVERRIDE { | 151 virtual void Start() OVERRIDE { |
150 MessageLoop::current()->PostTask( | 152 MessageLoop::current()->PostTask( |
151 FROM_HERE, | 153 FROM_HERE, |
152 method_factory_.NewRunnableMethod(&FakeURLFetcher::RunDelegate)); | 154 method_factory_.NewRunnableMethod(&FakeURLFetcher::RunDelegate)); |
153 } | 155 } |
154 | 156 |
155 // These methods are overriden so we can use the version of | 157 // These methods are overriden so we can use the version of |
156 // OnURLFetchComplete that only has a single URLFetcher argument. | 158 // OnURLFetchComplete that only has a single URLFetcher argument. |
157 virtual const net::ResponseCookies& cookies() const OVERRIDE { | 159 virtual const net::ResponseCookies& cookies() const OVERRIDE { |
158 return cookies_; | 160 return cookies_; |
159 } | 161 } |
160 | 162 |
161 virtual const std::string& GetResponseStringRef() const OVERRIDE { | |
162 return response_data_; | |
163 } | |
164 | |
165 virtual bool GetResponseAsString( | 163 virtual bool GetResponseAsString( |
166 std::string* out_response_string) const OVERRIDE { | 164 std::string* out_response_string) const OVERRIDE { |
167 *out_response_string = response_data_; | 165 *out_response_string = response_data_; |
168 return true; | 166 return true; |
169 } | 167 } |
170 | 168 |
171 virtual int response_code() const OVERRIDE { | 169 virtual int response_code() const OVERRIDE { |
172 return success_ ? 200 : 500; | 170 return success_ ? 200 : 500; |
173 } | 171 } |
174 | 172 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 211 : ScopedURLFetcherFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
214 default_factory_(default_factory) { | 212 default_factory_(default_factory) { |
215 } | 213 } |
216 | 214 |
217 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} | 215 FakeURLFetcherFactory::~FakeURLFetcherFactory() {} |
218 | 216 |
219 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( | 217 URLFetcher* FakeURLFetcherFactory::CreateURLFetcher( |
220 int id, | 218 int id, |
221 const GURL& url, | 219 const GURL& url, |
222 URLFetcher::RequestType request_type, | 220 URLFetcher::RequestType request_type, |
223 URLFetcher::Delegate* d) { | 221 content::URLFetcherDelegate* d) { |
224 FakeResponseMap::const_iterator it = fake_responses_.find(url); | 222 FakeResponseMap::const_iterator it = fake_responses_.find(url); |
225 if (it == fake_responses_.end()) { | 223 if (it == fake_responses_.end()) { |
226 if (default_factory_ == NULL) { | 224 if (default_factory_ == NULL) { |
227 // If we don't have a baked response for that URL we return NULL. | 225 // If we don't have a baked response for that URL we return NULL. |
228 DLOG(ERROR) << "No baked response for URL: " << url.spec(); | 226 DLOG(ERROR) << "No baked response for URL: " << url.spec(); |
229 return NULL; | 227 return NULL; |
230 } else { | 228 } else { |
231 return default_factory_->CreateURLFetcher(id, url, request_type, d); | 229 return default_factory_->CreateURLFetcher(id, url, request_type, d); |
232 } | 230 } |
233 } | 231 } |
(...skipping 13 matching lines...) Expand all Loading... |
247 } | 245 } |
248 | 246 |
249 URLFetcherFactory::URLFetcherFactory() {} | 247 URLFetcherFactory::URLFetcherFactory() {} |
250 | 248 |
251 URLFetcherFactory::~URLFetcherFactory() {} | 249 URLFetcherFactory::~URLFetcherFactory() {} |
252 | 250 |
253 URLFetcher* URLFetcherFactory::CreateURLFetcher( | 251 URLFetcher* URLFetcherFactory::CreateURLFetcher( |
254 int id, | 252 int id, |
255 const GURL& url, | 253 const GURL& url, |
256 URLFetcher::RequestType request_type, | 254 URLFetcher::RequestType request_type, |
257 URLFetcher::Delegate* d) { | 255 content::URLFetcherDelegate* d) { |
258 return new URLFetcher(url, request_type, d); | 256 return new URLFetcher(url, request_type, d); |
259 } | 257 } |
OLD | NEW |