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

Side by Side Diff: net/proxy/proxy_script_fetcher_impl_unittest.cc

Issue 10299002: Stop refcounting URLRequestContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes Created 8 years, 7 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
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 "net/proxy/proxy_script_fetcher_impl.h" 5 #include "net/proxy/proxy_script_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 new HttpNetworkSession(params)); 88 new HttpNetworkSession(params));
89 storage_.set_http_transaction_factory(new HttpCache( 89 storage_.set_http_transaction_factory(new HttpCache(
90 network_session, 90 network_session,
91 HttpCache::DefaultBackend::InMemory(0))); 91 HttpCache::DefaultBackend::InMemory(0)));
92 url_request_job_factory_.reset(new URLRequestJobFactory); 92 url_request_job_factory_.reset(new URLRequestJobFactory);
93 set_job_factory(url_request_job_factory_.get()); 93 set_job_factory(url_request_job_factory_.get());
94 url_request_job_factory_->AddInterceptor( 94 url_request_job_factory_->AddInterceptor(
95 new CheckNoRevocationFlagSetInterceptor); 95 new CheckNoRevocationFlagSetInterceptor);
96 } 96 }
97 97
98 private: 98 virtual ~RequestContext() {
99 ~RequestContext() {
100 } 99 }
101 100
101 private:
102 URLRequestContextStorage storage_; 102 URLRequestContextStorage storage_;
103 scoped_ptr<URLRequestJobFactory> url_request_job_factory_; 103 scoped_ptr<URLRequestJobFactory> url_request_job_factory_;
104 }; 104 };
105 105
106 // Get a file:// url relative to net/data/proxy/proxy_script_fetcher_unittest. 106 // Get a file:// url relative to net/data/proxy/proxy_script_fetcher_unittest.
107 GURL GetTestFileUrl(const std::string& relpath) { 107 GURL GetTestFileUrl(const std::string& relpath) {
108 FilePath path; 108 FilePath path;
109 PathService::Get(base::DIR_SOURCE_ROOT, &path); 109 PathService::Get(base::DIR_SOURCE_ROOT, &path);
110 path = path.AppendASCII("net"); 110 path = path.AppendASCII("net");
111 path = path.AppendASCII("data"); 111 path = path.AppendASCII("data");
(...skipping 14 matching lines...) Expand all
126 126
127 static void SetUpTestCase() { 127 static void SetUpTestCase() {
128 URLRequest::AllowFileAccess(); 128 URLRequest::AllowFileAccess();
129 } 129 }
130 130
131 protected: 131 protected:
132 TestServer test_server_; 132 TestServer test_server_;
133 }; 133 };
134 134
135 TEST_F(ProxyScriptFetcherImplTest, FileUrl) { 135 TEST_F(ProxyScriptFetcherImplTest, FileUrl) {
136 scoped_refptr<URLRequestContext> context(new RequestContext); 136 RequestContext context;
137 ProxyScriptFetcherImpl pac_fetcher(context); 137 ProxyScriptFetcherImpl pac_fetcher(&context);
138 138
139 { // Fetch a non-existent file. 139 { // Fetch a non-existent file.
140 string16 text; 140 string16 text;
141 TestCompletionCallback callback; 141 TestCompletionCallback callback;
142 int result = pac_fetcher.Fetch(GetTestFileUrl("does-not-exist"), 142 int result = pac_fetcher.Fetch(GetTestFileUrl("does-not-exist"),
143 &text, callback.callback()); 143 &text, callback.callback());
144 EXPECT_EQ(ERR_IO_PENDING, result); 144 EXPECT_EQ(ERR_IO_PENDING, result);
145 EXPECT_EQ(ERR_FILE_NOT_FOUND, callback.WaitForResult()); 145 EXPECT_EQ(ERR_FILE_NOT_FOUND, callback.WaitForResult());
146 EXPECT_TRUE(text.empty()); 146 EXPECT_TRUE(text.empty());
147 } 147 }
148 { // Fetch a file that exists. 148 { // Fetch a file that exists.
149 string16 text; 149 string16 text;
150 TestCompletionCallback callback; 150 TestCompletionCallback callback;
151 int result = pac_fetcher.Fetch(GetTestFileUrl("pac.txt"), 151 int result = pac_fetcher.Fetch(GetTestFileUrl("pac.txt"),
152 &text, callback.callback()); 152 &text, callback.callback());
153 EXPECT_EQ(ERR_IO_PENDING, result); 153 EXPECT_EQ(ERR_IO_PENDING, result);
154 EXPECT_EQ(OK, callback.WaitForResult()); 154 EXPECT_EQ(OK, callback.WaitForResult());
155 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text); 155 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text);
156 } 156 }
157 } 157 }
158 158
159 // Note that all mime types are allowed for PAC file, to be consistent 159 // Note that all mime types are allowed for PAC file, to be consistent
160 // with other browsers. 160 // with other browsers.
161 TEST_F(ProxyScriptFetcherImplTest, HttpMimeType) { 161 TEST_F(ProxyScriptFetcherImplTest, HttpMimeType) {
162 ASSERT_TRUE(test_server_.Start()); 162 ASSERT_TRUE(test_server_.Start());
163 163
164 scoped_refptr<URLRequestContext> context(new RequestContext); 164 RequestContext context;
165 ProxyScriptFetcherImpl pac_fetcher(context); 165 ProxyScriptFetcherImpl pac_fetcher(&context);
166 166
167 { // Fetch a PAC with mime type "text/plain" 167 { // Fetch a PAC with mime type "text/plain"
168 GURL url(test_server_.GetURL("files/pac.txt")); 168 GURL url(test_server_.GetURL("files/pac.txt"));
169 string16 text; 169 string16 text;
170 TestCompletionCallback callback; 170 TestCompletionCallback callback;
171 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 171 int result = pac_fetcher.Fetch(url, &text, callback.callback());
172 EXPECT_EQ(ERR_IO_PENDING, result); 172 EXPECT_EQ(ERR_IO_PENDING, result);
173 EXPECT_EQ(OK, callback.WaitForResult()); 173 EXPECT_EQ(OK, callback.WaitForResult());
174 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text); 174 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text);
175 } 175 }
(...skipping 13 matching lines...) Expand all
189 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 189 int result = pac_fetcher.Fetch(url, &text, callback.callback());
190 EXPECT_EQ(ERR_IO_PENDING, result); 190 EXPECT_EQ(ERR_IO_PENDING, result);
191 EXPECT_EQ(OK, callback.WaitForResult()); 191 EXPECT_EQ(OK, callback.WaitForResult());
192 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); 192 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text);
193 } 193 }
194 } 194 }
195 195
196 TEST_F(ProxyScriptFetcherImplTest, HttpStatusCode) { 196 TEST_F(ProxyScriptFetcherImplTest, HttpStatusCode) {
197 ASSERT_TRUE(test_server_.Start()); 197 ASSERT_TRUE(test_server_.Start());
198 198
199 scoped_refptr<URLRequestContext> context(new RequestContext); 199 RequestContext context;
200 ProxyScriptFetcherImpl pac_fetcher(context); 200 ProxyScriptFetcherImpl pac_fetcher(&context);
201 201
202 { // Fetch a PAC which gives a 500 -- FAIL 202 { // Fetch a PAC which gives a 500 -- FAIL
203 GURL url(test_server_.GetURL("files/500.pac")); 203 GURL url(test_server_.GetURL("files/500.pac"));
204 string16 text; 204 string16 text;
205 TestCompletionCallback callback; 205 TestCompletionCallback callback;
206 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 206 int result = pac_fetcher.Fetch(url, &text, callback.callback());
207 EXPECT_EQ(ERR_IO_PENDING, result); 207 EXPECT_EQ(ERR_IO_PENDING, result);
208 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); 208 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult());
209 EXPECT_TRUE(text.empty()); 209 EXPECT_TRUE(text.empty());
210 } 210 }
211 { // Fetch a PAC which gives a 404 -- FAIL 211 { // Fetch a PAC which gives a 404 -- FAIL
212 GURL url(test_server_.GetURL("files/404.pac")); 212 GURL url(test_server_.GetURL("files/404.pac"));
213 string16 text; 213 string16 text;
214 TestCompletionCallback callback; 214 TestCompletionCallback callback;
215 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 215 int result = pac_fetcher.Fetch(url, &text, callback.callback());
216 EXPECT_EQ(ERR_IO_PENDING, result); 216 EXPECT_EQ(ERR_IO_PENDING, result);
217 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); 217 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult());
218 EXPECT_TRUE(text.empty()); 218 EXPECT_TRUE(text.empty());
219 } 219 }
220 } 220 }
221 221
222 TEST_F(ProxyScriptFetcherImplTest, ContentDisposition) { 222 TEST_F(ProxyScriptFetcherImplTest, ContentDisposition) {
223 ASSERT_TRUE(test_server_.Start()); 223 ASSERT_TRUE(test_server_.Start());
224 224
225 scoped_refptr<URLRequestContext> context(new RequestContext); 225 RequestContext context;
226 ProxyScriptFetcherImpl pac_fetcher(context); 226 ProxyScriptFetcherImpl pac_fetcher(&context);
227 227
228 // Fetch PAC scripts via HTTP with a Content-Disposition header -- should 228 // Fetch PAC scripts via HTTP with a Content-Disposition header -- should
229 // have no effect. 229 // have no effect.
230 GURL url(test_server_.GetURL("files/downloadable.pac")); 230 GURL url(test_server_.GetURL("files/downloadable.pac"));
231 string16 text; 231 string16 text;
232 TestCompletionCallback callback; 232 TestCompletionCallback callback;
233 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 233 int result = pac_fetcher.Fetch(url, &text, callback.callback());
234 EXPECT_EQ(ERR_IO_PENDING, result); 234 EXPECT_EQ(ERR_IO_PENDING, result);
235 EXPECT_EQ(OK, callback.WaitForResult()); 235 EXPECT_EQ(OK, callback.WaitForResult());
236 EXPECT_EQ(ASCIIToUTF16("-downloadable.pac-\n"), text); 236 EXPECT_EQ(ASCIIToUTF16("-downloadable.pac-\n"), text);
237 } 237 }
238 238
239 TEST_F(ProxyScriptFetcherImplTest, NoCache) { 239 TEST_F(ProxyScriptFetcherImplTest, NoCache) {
240 ASSERT_TRUE(test_server_.Start()); 240 ASSERT_TRUE(test_server_.Start());
241 241
242 scoped_refptr<URLRequestContext> context(new RequestContext); 242 RequestContext context;
243 ProxyScriptFetcherImpl pac_fetcher(context); 243 ProxyScriptFetcherImpl pac_fetcher(&context);
244 244
245 // Fetch a PAC script whose HTTP headers make it cacheable for 1 hour. 245 // Fetch a PAC script whose HTTP headers make it cacheable for 1 hour.
246 GURL url(test_server_.GetURL("files/cacheable_1hr.pac")); 246 GURL url(test_server_.GetURL("files/cacheable_1hr.pac"));
247 { 247 {
248 string16 text; 248 string16 text;
249 TestCompletionCallback callback; 249 TestCompletionCallback callback;
250 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 250 int result = pac_fetcher.Fetch(url, &text, callback.callback());
251 EXPECT_EQ(ERR_IO_PENDING, result); 251 EXPECT_EQ(ERR_IO_PENDING, result);
252 EXPECT_EQ(OK, callback.WaitForResult()); 252 EXPECT_EQ(OK, callback.WaitForResult());
253 EXPECT_EQ(ASCIIToUTF16("-cacheable_1hr.pac-\n"), text); 253 EXPECT_EQ(ASCIIToUTF16("-cacheable_1hr.pac-\n"), text);
(...skipping 10 matching lines...) Expand all
264 TestCompletionCallback callback; 264 TestCompletionCallback callback;
265 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 265 int result = pac_fetcher.Fetch(url, &text, callback.callback());
266 EXPECT_EQ(ERR_IO_PENDING, result); 266 EXPECT_EQ(ERR_IO_PENDING, result);
267 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); 267 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult());
268 } 268 }
269 } 269 }
270 270
271 TEST_F(ProxyScriptFetcherImplTest, TooLarge) { 271 TEST_F(ProxyScriptFetcherImplTest, TooLarge) {
272 ASSERT_TRUE(test_server_.Start()); 272 ASSERT_TRUE(test_server_.Start());
273 273
274 scoped_refptr<URLRequestContext> context(new RequestContext); 274 RequestContext context;
275 ProxyScriptFetcherImpl pac_fetcher(context); 275 ProxyScriptFetcherImpl pac_fetcher(&context);
276 276
277 // Set the maximum response size to 50 bytes. 277 // Set the maximum response size to 50 bytes.
278 int prev_size = pac_fetcher.SetSizeConstraint(50); 278 int prev_size = pac_fetcher.SetSizeConstraint(50);
279 279
280 // These two URLs are the same file, but are http:// vs file:// 280 // These two URLs are the same file, but are http:// vs file://
281 GURL urls[] = { 281 GURL urls[] = {
282 test_server_.GetURL("files/large-pac.nsproxy"), 282 test_server_.GetURL("files/large-pac.nsproxy"),
283 GetTestFileUrl("large-pac.nsproxy") 283 GetTestFileUrl("large-pac.nsproxy")
284 }; 284 };
285 285
(...skipping 19 matching lines...) Expand all
305 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 305 int result = pac_fetcher.Fetch(url, &text, callback.callback());
306 EXPECT_EQ(ERR_IO_PENDING, result); 306 EXPECT_EQ(ERR_IO_PENDING, result);
307 EXPECT_EQ(OK, callback.WaitForResult()); 307 EXPECT_EQ(OK, callback.WaitForResult());
308 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); 308 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text);
309 } 309 }
310 } 310 }
311 311
312 TEST_F(ProxyScriptFetcherImplTest, Hang) { 312 TEST_F(ProxyScriptFetcherImplTest, Hang) {
313 ASSERT_TRUE(test_server_.Start()); 313 ASSERT_TRUE(test_server_.Start());
314 314
315 scoped_refptr<URLRequestContext> context(new RequestContext); 315 RequestContext context;
316 ProxyScriptFetcherImpl pac_fetcher(context); 316 ProxyScriptFetcherImpl pac_fetcher(&context);
317 317
318 // Set the timeout period to 0.5 seconds. 318 // Set the timeout period to 0.5 seconds.
319 base::TimeDelta prev_timeout = pac_fetcher.SetTimeoutConstraint( 319 base::TimeDelta prev_timeout = pac_fetcher.SetTimeoutConstraint(
320 base::TimeDelta::FromMilliseconds(500)); 320 base::TimeDelta::FromMilliseconds(500));
321 321
322 // Try fetching a URL which takes 1.2 seconds. We should abort the request 322 // Try fetching a URL which takes 1.2 seconds. We should abort the request
323 // after 500 ms, and fail with a timeout error. 323 // after 500 ms, and fail with a timeout error.
324 { GURL url(test_server_.GetURL("slow/proxy.pac?1.2")); 324 { GURL url(test_server_.GetURL("slow/proxy.pac?1.2"));
325 string16 text; 325 string16 text;
326 TestCompletionCallback callback; 326 TestCompletionCallback callback;
(...skipping 16 matching lines...) Expand all
343 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); 343 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text);
344 } 344 }
345 } 345 }
346 346
347 // The ProxyScriptFetcher should decode any content-codings 347 // The ProxyScriptFetcher should decode any content-codings
348 // (like gzip, bzip, etc.), and apply any charset conversions to yield 348 // (like gzip, bzip, etc.), and apply any charset conversions to yield
349 // UTF8. 349 // UTF8.
350 TEST_F(ProxyScriptFetcherImplTest, Encodings) { 350 TEST_F(ProxyScriptFetcherImplTest, Encodings) {
351 ASSERT_TRUE(test_server_.Start()); 351 ASSERT_TRUE(test_server_.Start());
352 352
353 scoped_refptr<URLRequestContext> context(new RequestContext); 353 RequestContext context;
354 ProxyScriptFetcherImpl pac_fetcher(context); 354 ProxyScriptFetcherImpl pac_fetcher(&context);
355 355
356 // Test a response that is gzip-encoded -- should get inflated. 356 // Test a response that is gzip-encoded -- should get inflated.
357 { 357 {
358 GURL url(test_server_.GetURL("files/gzipped_pac")); 358 GURL url(test_server_.GetURL("files/gzipped_pac"));
359 string16 text; 359 string16 text;
360 TestCompletionCallback callback; 360 TestCompletionCallback callback;
361 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 361 int result = pac_fetcher.Fetch(url, &text, callback.callback());
362 EXPECT_EQ(ERR_IO_PENDING, result); 362 EXPECT_EQ(ERR_IO_PENDING, result);
363 EXPECT_EQ(OK, callback.WaitForResult()); 363 EXPECT_EQ(OK, callback.WaitForResult());
364 EXPECT_EQ(ASCIIToUTF16("This data was gzipped.\n"), text); 364 EXPECT_EQ(ASCIIToUTF16("This data was gzipped.\n"), text);
365 } 365 }
366 366
367 // Test a response that was served as UTF-16 (BE). It should 367 // Test a response that was served as UTF-16 (BE). It should
368 // be converted to UTF8. 368 // be converted to UTF8.
369 { 369 {
370 GURL url(test_server_.GetURL("files/utf16be_pac")); 370 GURL url(test_server_.GetURL("files/utf16be_pac"));
371 string16 text; 371 string16 text;
372 TestCompletionCallback callback; 372 TestCompletionCallback callback;
373 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 373 int result = pac_fetcher.Fetch(url, &text, callback.callback());
374 EXPECT_EQ(ERR_IO_PENDING, result); 374 EXPECT_EQ(ERR_IO_PENDING, result);
375 EXPECT_EQ(OK, callback.WaitForResult()); 375 EXPECT_EQ(OK, callback.WaitForResult());
376 EXPECT_EQ(ASCIIToUTF16("This was encoded as UTF-16BE.\n"), text); 376 EXPECT_EQ(ASCIIToUTF16("This was encoded as UTF-16BE.\n"), text);
377 } 377 }
378 } 378 }
379 379
380 TEST_F(ProxyScriptFetcherImplTest, DataURLs) { 380 TEST_F(ProxyScriptFetcherImplTest, DataURLs) {
381 scoped_refptr<URLRequestContext> context(new RequestContext); 381 RequestContext context;
382 ProxyScriptFetcherImpl pac_fetcher(context); 382 ProxyScriptFetcherImpl pac_fetcher(&context);
383 383
384 const char kEncodedUrl[] = 384 const char kEncodedUrl[] =
385 "data:application/x-ns-proxy-autoconfig;base64,ZnVuY3Rpb24gRmluZFByb3h5R" 385 "data:application/x-ns-proxy-autoconfig;base64,ZnVuY3Rpb24gRmluZFByb3h5R"
386 "m9yVVJMKHVybCwgaG9zdCkgewogIGlmIChob3N0ID09ICdmb29iYXIuY29tJykKICAgIHJl" 386 "m9yVVJMKHVybCwgaG9zdCkgewogIGlmIChob3N0ID09ICdmb29iYXIuY29tJykKICAgIHJl"
387 "dHVybiAnUFJPWFkgYmxhY2tob2xlOjgwJzsKICByZXR1cm4gJ0RJUkVDVCc7Cn0="; 387 "dHVybiAnUFJPWFkgYmxhY2tob2xlOjgwJzsKICByZXR1cm4gJ0RJUkVDVCc7Cn0=";
388 const char kPacScript[] = 388 const char kPacScript[] =
389 "function FindProxyForURL(url, host) {\n" 389 "function FindProxyForURL(url, host) {\n"
390 " if (host == 'foobar.com')\n" 390 " if (host == 'foobar.com')\n"
391 " return 'PROXY blackhole:80';\n" 391 " return 'PROXY blackhole:80';\n"
392 " return 'DIRECT';\n" 392 " return 'DIRECT';\n"
(...skipping 16 matching lines...) Expand all
409 { 409 {
410 GURL url(kEncodedUrlBroken); 410 GURL url(kEncodedUrlBroken);
411 string16 text; 411 string16 text;
412 TestCompletionCallback callback; 412 TestCompletionCallback callback;
413 int result = pac_fetcher.Fetch(url, &text, callback.callback()); 413 int result = pac_fetcher.Fetch(url, &text, callback.callback());
414 EXPECT_EQ(ERR_FAILED, result); 414 EXPECT_EQ(ERR_FAILED, result);
415 } 415 }
416 } 416 }
417 417
418 } // namespace net 418 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698