| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 public: | 71 public: |
| 72 ProxyScriptFetcherImplTest() | 72 ProxyScriptFetcherImplTest() |
| 73 : test_server_(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)) { | 73 : test_server_(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)) { |
| 74 } | 74 } |
| 75 | 75 |
| 76 protected: | 76 protected: |
| 77 net::TestServer test_server_; | 77 net::TestServer test_server_; |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 TEST_F(ProxyScriptFetcherImplTest, FileUrl) { | 80 TEST_F(ProxyScriptFetcherImplTest, FileUrl) { |
| 81 scoped_refptr<URLRequestContext> context = new RequestContext; | 81 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 82 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 82 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 83 new ProxyScriptFetcherImpl(context)); | 83 new ProxyScriptFetcherImpl(context)); |
| 84 | 84 |
| 85 { // Fetch a non-existent file. | 85 { // Fetch a non-existent file. |
| 86 string16 text; | 86 string16 text; |
| 87 TestCompletionCallback callback; | 87 TestCompletionCallback callback; |
| 88 int result = pac_fetcher->Fetch(GetTestFileUrl("does-not-exist"), | 88 int result = pac_fetcher->Fetch(GetTestFileUrl("does-not-exist"), |
| 89 &text, &callback); | 89 &text, &callback); |
| 90 EXPECT_EQ(ERR_IO_PENDING, result); | 90 EXPECT_EQ(ERR_IO_PENDING, result); |
| 91 EXPECT_EQ(ERR_FILE_NOT_FOUND, callback.WaitForResult()); | 91 EXPECT_EQ(ERR_FILE_NOT_FOUND, callback.WaitForResult()); |
| 92 EXPECT_TRUE(text.empty()); | 92 EXPECT_TRUE(text.empty()); |
| 93 } | 93 } |
| 94 { // Fetch a file that exists. | 94 { // Fetch a file that exists. |
| 95 string16 text; | 95 string16 text; |
| 96 TestCompletionCallback callback; | 96 TestCompletionCallback callback; |
| 97 int result = pac_fetcher->Fetch(GetTestFileUrl("pac.txt"), | 97 int result = pac_fetcher->Fetch(GetTestFileUrl("pac.txt"), |
| 98 &text, &callback); | 98 &text, &callback); |
| 99 EXPECT_EQ(ERR_IO_PENDING, result); | 99 EXPECT_EQ(ERR_IO_PENDING, result); |
| 100 EXPECT_EQ(OK, callback.WaitForResult()); | 100 EXPECT_EQ(OK, callback.WaitForResult()); |
| 101 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text); | 101 EXPECT_EQ(ASCIIToUTF16("-pac.txt-\n"), text); |
| 102 } | 102 } |
| 103 } | 103 } |
| 104 | 104 |
| 105 // Note that all mime types are allowed for PAC file, to be consistent | 105 // Note that all mime types are allowed for PAC file, to be consistent |
| 106 // with other browsers. | 106 // with other browsers. |
| 107 TEST_F(ProxyScriptFetcherImplTest, HttpMimeType) { | 107 TEST_F(ProxyScriptFetcherImplTest, HttpMimeType) { |
| 108 ASSERT_TRUE(test_server_.Start()); | 108 ASSERT_TRUE(test_server_.Start()); |
| 109 | 109 |
| 110 scoped_refptr<URLRequestContext> context = new RequestContext; | 110 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 111 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 111 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 112 new ProxyScriptFetcherImpl(context)); | 112 new ProxyScriptFetcherImpl(context)); |
| 113 | 113 |
| 114 { // Fetch a PAC with mime type "text/plain" | 114 { // Fetch a PAC with mime type "text/plain" |
| 115 GURL url(test_server_.GetURL("files/pac.txt")); | 115 GURL url(test_server_.GetURL("files/pac.txt")); |
| 116 string16 text; | 116 string16 text; |
| 117 TestCompletionCallback callback; | 117 TestCompletionCallback callback; |
| 118 int result = pac_fetcher->Fetch(url, &text, &callback); | 118 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 119 EXPECT_EQ(ERR_IO_PENDING, result); | 119 EXPECT_EQ(ERR_IO_PENDING, result); |
| 120 EXPECT_EQ(OK, callback.WaitForResult()); | 120 EXPECT_EQ(OK, callback.WaitForResult()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 136 int result = pac_fetcher->Fetch(url, &text, &callback); | 136 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 137 EXPECT_EQ(ERR_IO_PENDING, result); | 137 EXPECT_EQ(ERR_IO_PENDING, result); |
| 138 EXPECT_EQ(OK, callback.WaitForResult()); | 138 EXPECT_EQ(OK, callback.WaitForResult()); |
| 139 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); | 139 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); |
| 140 } | 140 } |
| 141 } | 141 } |
| 142 | 142 |
| 143 TEST_F(ProxyScriptFetcherImplTest, HttpStatusCode) { | 143 TEST_F(ProxyScriptFetcherImplTest, HttpStatusCode) { |
| 144 ASSERT_TRUE(test_server_.Start()); | 144 ASSERT_TRUE(test_server_.Start()); |
| 145 | 145 |
| 146 scoped_refptr<URLRequestContext> context = new RequestContext; | 146 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 147 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 147 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 148 new ProxyScriptFetcherImpl(context)); | 148 new ProxyScriptFetcherImpl(context)); |
| 149 | 149 |
| 150 { // Fetch a PAC which gives a 500 -- FAIL | 150 { // Fetch a PAC which gives a 500 -- FAIL |
| 151 GURL url(test_server_.GetURL("files/500.pac")); | 151 GURL url(test_server_.GetURL("files/500.pac")); |
| 152 string16 text; | 152 string16 text; |
| 153 TestCompletionCallback callback; | 153 TestCompletionCallback callback; |
| 154 int result = pac_fetcher->Fetch(url, &text, &callback); | 154 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 155 EXPECT_EQ(ERR_IO_PENDING, result); | 155 EXPECT_EQ(ERR_IO_PENDING, result); |
| 156 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); | 156 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); |
| 157 EXPECT_TRUE(text.empty()); | 157 EXPECT_TRUE(text.empty()); |
| 158 } | 158 } |
| 159 { // Fetch a PAC which gives a 404 -- FAIL | 159 { // Fetch a PAC which gives a 404 -- FAIL |
| 160 GURL url(test_server_.GetURL("files/404.pac")); | 160 GURL url(test_server_.GetURL("files/404.pac")); |
| 161 string16 text; | 161 string16 text; |
| 162 TestCompletionCallback callback; | 162 TestCompletionCallback callback; |
| 163 int result = pac_fetcher->Fetch(url, &text, &callback); | 163 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 164 EXPECT_EQ(ERR_IO_PENDING, result); | 164 EXPECT_EQ(ERR_IO_PENDING, result); |
| 165 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); | 165 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, callback.WaitForResult()); |
| 166 EXPECT_TRUE(text.empty()); | 166 EXPECT_TRUE(text.empty()); |
| 167 } | 167 } |
| 168 } | 168 } |
| 169 | 169 |
| 170 TEST_F(ProxyScriptFetcherImplTest, ContentDisposition) { | 170 TEST_F(ProxyScriptFetcherImplTest, ContentDisposition) { |
| 171 ASSERT_TRUE(test_server_.Start()); | 171 ASSERT_TRUE(test_server_.Start()); |
| 172 | 172 |
| 173 scoped_refptr<URLRequestContext> context = new RequestContext; | 173 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 174 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 174 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 175 new ProxyScriptFetcherImpl(context)); | 175 new ProxyScriptFetcherImpl(context)); |
| 176 | 176 |
| 177 // Fetch PAC scripts via HTTP with a Content-Disposition header -- should | 177 // Fetch PAC scripts via HTTP with a Content-Disposition header -- should |
| 178 // have no effect. | 178 // have no effect. |
| 179 GURL url(test_server_.GetURL("files/downloadable.pac")); | 179 GURL url(test_server_.GetURL("files/downloadable.pac")); |
| 180 string16 text; | 180 string16 text; |
| 181 TestCompletionCallback callback; | 181 TestCompletionCallback callback; |
| 182 int result = pac_fetcher->Fetch(url, &text, &callback); | 182 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 183 EXPECT_EQ(ERR_IO_PENDING, result); | 183 EXPECT_EQ(ERR_IO_PENDING, result); |
| 184 EXPECT_EQ(OK, callback.WaitForResult()); | 184 EXPECT_EQ(OK, callback.WaitForResult()); |
| 185 EXPECT_EQ(ASCIIToUTF16("-downloadable.pac-\n"), text); | 185 EXPECT_EQ(ASCIIToUTF16("-downloadable.pac-\n"), text); |
| 186 } | 186 } |
| 187 | 187 |
| 188 TEST_F(ProxyScriptFetcherImplTest, NoCache) { | 188 TEST_F(ProxyScriptFetcherImplTest, NoCache) { |
| 189 ASSERT_TRUE(test_server_.Start()); | 189 ASSERT_TRUE(test_server_.Start()); |
| 190 | 190 |
| 191 scoped_refptr<URLRequestContext> context = new RequestContext; | 191 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 192 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 192 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 193 new ProxyScriptFetcherImpl(context)); | 193 new ProxyScriptFetcherImpl(context)); |
| 194 | 194 |
| 195 // Fetch a PAC script whose HTTP headers make it cacheable for 1 hour. | 195 // Fetch a PAC script whose HTTP headers make it cacheable for 1 hour. |
| 196 GURL url(test_server_.GetURL("files/cacheable_1hr.pac")); | 196 GURL url(test_server_.GetURL("files/cacheable_1hr.pac")); |
| 197 { | 197 { |
| 198 string16 text; | 198 string16 text; |
| 199 TestCompletionCallback callback; | 199 TestCompletionCallback callback; |
| 200 int result = pac_fetcher->Fetch(url, &text, &callback); | 200 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 201 EXPECT_EQ(ERR_IO_PENDING, result); | 201 EXPECT_EQ(ERR_IO_PENDING, result); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 214 TestCompletionCallback callback; | 214 TestCompletionCallback callback; |
| 215 int result = pac_fetcher->Fetch(url, &text, &callback); | 215 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 216 EXPECT_EQ(ERR_IO_PENDING, result); | 216 EXPECT_EQ(ERR_IO_PENDING, result); |
| 217 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 217 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 | 220 |
| 221 TEST_F(ProxyScriptFetcherImplTest, TooLarge) { | 221 TEST_F(ProxyScriptFetcherImplTest, TooLarge) { |
| 222 ASSERT_TRUE(test_server_.Start()); | 222 ASSERT_TRUE(test_server_.Start()); |
| 223 | 223 |
| 224 scoped_refptr<URLRequestContext> context = new RequestContext; | 224 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 225 scoped_ptr<ProxyScriptFetcherImpl> pac_fetcher( | 225 scoped_ptr<ProxyScriptFetcherImpl> pac_fetcher( |
| 226 new ProxyScriptFetcherImpl(context)); | 226 new ProxyScriptFetcherImpl(context)); |
| 227 | 227 |
| 228 // Set the maximum response size to 50 bytes. | 228 // Set the maximum response size to 50 bytes. |
| 229 int prev_size = pac_fetcher->SetSizeConstraint(50); | 229 int prev_size = pac_fetcher->SetSizeConstraint(50); |
| 230 | 230 |
| 231 // These two URLs are the same file, but are http:// vs file:// | 231 // These two URLs are the same file, but are http:// vs file:// |
| 232 GURL urls[] = { | 232 GURL urls[] = { |
| 233 test_server_.GetURL("files/large-pac.nsproxy"), | 233 test_server_.GetURL("files/large-pac.nsproxy"), |
| 234 GetTestFileUrl("large-pac.nsproxy") | 234 GetTestFileUrl("large-pac.nsproxy") |
| (...skipping 21 matching lines...) Expand all Loading... |
| 256 int result = pac_fetcher->Fetch(url, &text, &callback); | 256 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 257 EXPECT_EQ(ERR_IO_PENDING, result); | 257 EXPECT_EQ(ERR_IO_PENDING, result); |
| 258 EXPECT_EQ(OK, callback.WaitForResult()); | 258 EXPECT_EQ(OK, callback.WaitForResult()); |
| 259 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); | 259 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 TEST_F(ProxyScriptFetcherImplTest, Hang) { | 263 TEST_F(ProxyScriptFetcherImplTest, Hang) { |
| 264 ASSERT_TRUE(test_server_.Start()); | 264 ASSERT_TRUE(test_server_.Start()); |
| 265 | 265 |
| 266 scoped_refptr<URLRequestContext> context = new RequestContext; | 266 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 267 scoped_ptr<ProxyScriptFetcherImpl> pac_fetcher( | 267 scoped_ptr<ProxyScriptFetcherImpl> pac_fetcher( |
| 268 new ProxyScriptFetcherImpl(context)); | 268 new ProxyScriptFetcherImpl(context)); |
| 269 | 269 |
| 270 // Set the timeout period to 0.5 seconds. | 270 // Set the timeout period to 0.5 seconds. |
| 271 base::TimeDelta prev_timeout = pac_fetcher->SetTimeoutConstraint( | 271 base::TimeDelta prev_timeout = pac_fetcher->SetTimeoutConstraint( |
| 272 base::TimeDelta::FromMilliseconds(500)); | 272 base::TimeDelta::FromMilliseconds(500)); |
| 273 | 273 |
| 274 // Try fetching a URL which takes 1.2 seconds. We should abort the request | 274 // Try fetching a URL which takes 1.2 seconds. We should abort the request |
| 275 // after 500 ms, and fail with a timeout error. | 275 // after 500 ms, and fail with a timeout error. |
| 276 { GURL url(test_server_.GetURL("slow/proxy.pac?1.2")); | 276 { GURL url(test_server_.GetURL("slow/proxy.pac?1.2")); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 295 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); | 295 EXPECT_EQ(ASCIIToUTF16("-pac.nsproxy-\n"), text); |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 | 298 |
| 299 // The ProxyScriptFetcher should decode any content-codings | 299 // The ProxyScriptFetcher should decode any content-codings |
| 300 // (like gzip, bzip, etc.), and apply any charset conversions to yield | 300 // (like gzip, bzip, etc.), and apply any charset conversions to yield |
| 301 // UTF8. | 301 // UTF8. |
| 302 TEST_F(ProxyScriptFetcherImplTest, Encodings) { | 302 TEST_F(ProxyScriptFetcherImplTest, Encodings) { |
| 303 ASSERT_TRUE(test_server_.Start()); | 303 ASSERT_TRUE(test_server_.Start()); |
| 304 | 304 |
| 305 scoped_refptr<URLRequestContext> context = new RequestContext; | 305 scoped_refptr<URLRequestContext> context(new RequestContext); |
| 306 scoped_ptr<ProxyScriptFetcher> pac_fetcher( | 306 scoped_ptr<ProxyScriptFetcher> pac_fetcher( |
| 307 new ProxyScriptFetcherImpl(context)); | 307 new ProxyScriptFetcherImpl(context)); |
| 308 | 308 |
| 309 // Test a response that is gzip-encoded -- should get inflated. | 309 // Test a response that is gzip-encoded -- should get inflated. |
| 310 { | 310 { |
| 311 GURL url(test_server_.GetURL("files/gzipped_pac")); | 311 GURL url(test_server_.GetURL("files/gzipped_pac")); |
| 312 string16 text; | 312 string16 text; |
| 313 TestCompletionCallback callback; | 313 TestCompletionCallback callback; |
| 314 int result = pac_fetcher->Fetch(url, &text, &callback); | 314 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 315 EXPECT_EQ(ERR_IO_PENDING, result); | 315 EXPECT_EQ(ERR_IO_PENDING, result); |
| 316 EXPECT_EQ(OK, callback.WaitForResult()); | 316 EXPECT_EQ(OK, callback.WaitForResult()); |
| 317 EXPECT_EQ(ASCIIToUTF16("This data was gzipped.\n"), text); | 317 EXPECT_EQ(ASCIIToUTF16("This data was gzipped.\n"), text); |
| 318 } | 318 } |
| 319 | 319 |
| 320 // Test a response that was served as UTF-16 (BE). It should | 320 // Test a response that was served as UTF-16 (BE). It should |
| 321 // be converted to UTF8. | 321 // be converted to UTF8. |
| 322 { | 322 { |
| 323 GURL url(test_server_.GetURL("files/utf16be_pac")); | 323 GURL url(test_server_.GetURL("files/utf16be_pac")); |
| 324 string16 text; | 324 string16 text; |
| 325 TestCompletionCallback callback; | 325 TestCompletionCallback callback; |
| 326 int result = pac_fetcher->Fetch(url, &text, &callback); | 326 int result = pac_fetcher->Fetch(url, &text, &callback); |
| 327 EXPECT_EQ(ERR_IO_PENDING, result); | 327 EXPECT_EQ(ERR_IO_PENDING, result); |
| 328 EXPECT_EQ(OK, callback.WaitForResult()); | 328 EXPECT_EQ(OK, callback.WaitForResult()); |
| 329 EXPECT_EQ(ASCIIToUTF16("This was encoded as UTF-16BE.\n"), text); | 329 EXPECT_EQ(ASCIIToUTF16("This was encoded as UTF-16BE.\n"), text); |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 | 332 |
| 333 } // namespace net | 333 } // namespace net |
| OLD | NEW |