Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Side by Side Diff: content/renderer/resource_fetcher_browsertest.cc

Issue 140823010: ResourceFetcher: Add POST support and the ability to set headers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Gack Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/fetchers/resource_fetcher_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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/public/renderer/resource_fetcher.h" 5 #include "content/public/renderer/resource_fetcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 RenderView* GetRenderView() { 142 RenderView* GetRenderView() {
143 // We could have the test on the UI thread get the WebContent's routing ID, 143 // We could have the test on the UI thread get the WebContent's routing ID,
144 // but we know this will be the first RV so skip that and just hardcode it. 144 // but we know this will be the first RV so skip that and just hardcode it.
145 return RenderView::FromRoutingID(kRenderViewRoutingId); 145 return RenderView::FromRoutingID(kRenderViewRoutingId);
146 } 146 }
147 147
148 void ResourceFetcherDownloadOnRenderer(const GURL& url) { 148 void ResourceFetcherDownloadOnRenderer(const GURL& url) {
149 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame(); 149 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
150 150
151 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); 151 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
152 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create( 152 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
153 url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); 153 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
154 delegate->NewCallback());
154 155
155 delegate->WaitForResponse(); 156 delegate->WaitForResponse();
156 157
157 ASSERT_TRUE(delegate->completed()); 158 ASSERT_TRUE(delegate->completed());
158 EXPECT_EQ(delegate->response().httpStatusCode(), 200); 159 EXPECT_EQ(delegate->response().httpStatusCode(), 200);
159 std::string text = delegate->data(); 160 std::string text = delegate->data();
160 EXPECT_TRUE(text.find("Basic html test.") != std::string::npos); 161 EXPECT_TRUE(text.find("Basic html test.") != std::string::npos);
161 } 162 }
162 163
163 void ResourceFetcher404OnRenderer(const GURL& url) { 164 void ResourceFetcher404OnRenderer(const GURL& url) {
164 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame(); 165 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
165 166
166 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); 167 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
167 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create( 168 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
168 url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); 169 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
170 delegate->NewCallback());
169 171
170 delegate->WaitForResponse(); 172 delegate->WaitForResponse();
171 173
172 ASSERT_TRUE(delegate->completed()); 174 ASSERT_TRUE(delegate->completed());
173 EXPECT_EQ(delegate->response().httpStatusCode(), 404); 175 EXPECT_EQ(delegate->response().httpStatusCode(), 404);
174 EXPECT_TRUE(delegate->data().find("Not Found.") != std::string::npos); 176 EXPECT_TRUE(delegate->data().find("Not Found.") != std::string::npos);
175 } 177 }
176 178
177 void ResourceFetcherDidFailOnRenderer() { 179 void ResourceFetcherDidFailOnRenderer() {
178 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame(); 180 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
179 181
180 // Try to fetch a page on a site that doesn't exist. 182 // Try to fetch a page on a site that doesn't exist.
181 GURL url("http://localhost:1339/doesnotexist"); 183 GURL url("http://localhost:1339/doesnotexist");
182 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); 184 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
183 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create( 185 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
184 url, frame, WebURLRequest::TargetIsMainFrame, delegate->NewCallback())); 186 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
187 delegate->NewCallback());
185 188
186 delegate->WaitForResponse(); 189 delegate->WaitForResponse();
187 190
188 // When we fail, we still call the Delegate callback but we pass in empty 191 // When we fail, we still call the Delegate callback but we pass in empty
189 // values. 192 // values.
190 EXPECT_TRUE(delegate->completed()); 193 EXPECT_TRUE(delegate->completed());
191 EXPECT_TRUE(delegate->response().isNull()); 194 EXPECT_TRUE(delegate->response().isNull());
192 EXPECT_EQ(delegate->data(), std::string()); 195 EXPECT_EQ(delegate->data(), std::string());
193 EXPECT_FALSE(delegate->timed_out()); 196 EXPECT_FALSE(delegate->timed_out());
194 } 197 }
195 198
196 void ResourceFetcherTimeoutOnRenderer(const GURL& url) { 199 void ResourceFetcherTimeoutOnRenderer(const GURL& url) {
197 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame(); 200 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
198 201
199 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate); 202 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
200 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create( 203 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
201 url, frame, WebURLRequest::TargetIsMainFrame, 204 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
202 delegate->NewCallback())); 205 delegate->NewCallback());
203 fetcher->SetTimeout(base::TimeDelta()); 206 fetcher->SetTimeout(base::TimeDelta());
204 207
205 delegate->WaitForResponse(); 208 delegate->WaitForResponse();
206 209
207 // When we timeout, we still call the Delegate callback but we pass in empty 210 // When we timeout, we still call the Delegate callback but we pass in empty
208 // values. 211 // values.
209 EXPECT_TRUE(delegate->completed()); 212 EXPECT_TRUE(delegate->completed());
210 EXPECT_TRUE(delegate->response().isNull()); 213 EXPECT_TRUE(delegate->response().isNull());
211 EXPECT_EQ(delegate->data(), std::string()); 214 EXPECT_EQ(delegate->data(), std::string());
212 EXPECT_FALSE(delegate->timed_out()); 215 EXPECT_FALSE(delegate->timed_out());
213 } 216 }
214 217
215 void ResourceFetcherDeletedInCallbackOnRenderer(const GURL& url) { 218 void ResourceFetcherDeletedInCallbackOnRenderer(const GURL& url) {
216 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame(); 219 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
217 220
218 scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate); 221 scoped_ptr<EvilFetcherDelegate> delegate(new EvilFetcherDelegate);
219 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create( 222 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
220 url, frame, WebURLRequest::TargetIsMainFrame, 223 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
221 delegate->NewCallback())); 224 delegate->NewCallback());
222 fetcher->SetTimeout(base::TimeDelta()); 225 fetcher->SetTimeout(base::TimeDelta());
223 delegate->SetFetcher(fetcher.release()); 226 delegate->SetFetcher(fetcher.release());
224 227
225 delegate->WaitForResponse(); 228 delegate->WaitForResponse();
226 EXPECT_FALSE(delegate->timed_out()); 229 EXPECT_FALSE(delegate->timed_out());
227 } 230 }
231
232 void ResourceFetcherPost(const GURL& url) {
233 const char* kBody = "Really nifty POST body!";
234
235 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
236
237 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
238 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
239 fetcher->SetMethod("POST");
240 fetcher->SetBody(kBody);
241 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
242 delegate->NewCallback());
243
244 delegate->WaitForResponse();
245 ASSERT_TRUE(delegate->completed());
246 EXPECT_EQ(delegate->response().httpStatusCode(), 200);
247 EXPECT_EQ(kBody, delegate->data());
248 }
249
250 void ResourceFetcherSetHeader(const GURL& url) {
251 const char* kHeader = "Rather boring header.";
252
253 WebFrame* frame = GetRenderView()->GetWebView()->mainFrame();
254
255 scoped_ptr<FetcherDelegate> delegate(new FetcherDelegate);
256 scoped_ptr<ResourceFetcher> fetcher(ResourceFetcher::Create(url));
257 fetcher->SetHeader("header", kHeader);
258 fetcher->Start(frame, WebURLRequest::TargetIsMainFrame,
259 delegate->NewCallback());
260
261 delegate->WaitForResponse();
262 ASSERT_TRUE(delegate->completed());
263 EXPECT_EQ(delegate->response().httpStatusCode(), 200);
264 EXPECT_EQ(kHeader, delegate->data());
265 }
228 }; 266 };
229 267
230 // Test a fetch from the test server. 268 // Test a fetch from the test server.
231 // If this flakes, use http://crbug.com/51622. 269 // If this flakes, use http://crbug.com/51622.
232 IN_PROC_BROWSER_TEST_F(ResourceFetcherTests, ResourceFetcherDownload) { 270 IN_PROC_BROWSER_TEST_F(ResourceFetcherTests, ResourceFetcherDownload) {
233 // Need to spin up the renderer. 271 // Need to spin up the renderer.
234 NavigateToURL(shell(), GURL(kAboutBlankURL)); 272 NavigateToURL(shell(), GURL(kAboutBlankURL));
235 273
236 ASSERT_TRUE(test_server()->Start()); 274 ASSERT_TRUE(test_server()->Start());
237 GURL url(test_server()->GetURL("files/simple_page.html")); 275 GURL url(test_server()->GetURL("files/simple_page.html"));
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 // timeout in 0 sec. 324 // timeout in 0 sec.
287 ASSERT_TRUE(test_server()->Start()); 325 ASSERT_TRUE(test_server()->Start());
288 GURL url(test_server()->GetURL("slow?1")); 326 GURL url(test_server()->GetURL("slow?1"));
289 327
290 PostTaskToInProcessRendererAndWait( 328 PostTaskToInProcessRendererAndWait(
291 base::Bind( 329 base::Bind(
292 &ResourceFetcherTests::ResourceFetcherDeletedInCallbackOnRenderer, 330 &ResourceFetcherTests::ResourceFetcherDeletedInCallbackOnRenderer,
293 base::Unretained(this), url)); 331 base::Unretained(this), url));
294 } 332 }
295 333
334 // Test that ResourceFetchers can handle POSTs.
335 IN_PROC_BROWSER_TEST_F(ResourceFetcherTests, ResourceFetcherPost) {
336 // Need to spin up the renderer.
337 NavigateToURL(shell(), GURL(kAboutBlankURL));
338
339 // Grab a page that echos the POST body.
340 ASSERT_TRUE(test_server()->Start());
341 GURL url(test_server()->GetURL("echo"));
342
343 PostTaskToInProcessRendererAndWait(
344 base::Bind(
345 &ResourceFetcherTests::ResourceFetcherPost,
346 base::Unretained(this), url));
347 }
348
349 // Test that ResourceFetchers can set headers.
350 IN_PROC_BROWSER_TEST_F(ResourceFetcherTests, ResourceFetcherSetHeader) {
351 // Need to spin up the renderer.
352 NavigateToURL(shell(), GURL(kAboutBlankURL));
353
354 // Grab a page that echos the POST body.
355 ASSERT_TRUE(test_server()->Start());
356 GURL url(test_server()->GetURL("echoheader?header"));
357
358 PostTaskToInProcessRendererAndWait(
359 base::Bind(
360 &ResourceFetcherTests::ResourceFetcherSetHeader,
361 base::Unretained(this), url));
362 }
363
296 } // namespace content 364 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/fetchers/resource_fetcher_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698