| OLD | NEW |
| 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/test/embedded_test_server/embedded_test_server.h" | 5 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/memory/ptr_util.h" |
| 10 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
| 11 #include "base/path_service.h" | 12 #include "base/path_service.h" |
| 12 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 13 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
| 14 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 15 #include "base/synchronization/lock.h" | 16 #include "base/synchronization/lock.h" |
| 16 #include "base/threading/thread.h" | 17 #include "base/threading/thread.h" |
| 17 #include "crypto/nss_util.h" | 18 #include "crypto/nss_util.h" |
| 18 #include "net/base/test_completion_callback.h" | 19 #include "net/base/test_completion_callback.h" |
| 19 #include "net/http/http_response_headers.h" | 20 #include "net/http/http_response_headers.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 // Waits until the specified number of responses are received. | 161 // Waits until the specified number of responses are received. |
| 161 void WaitForResponses(int num_responses) { | 162 void WaitForResponses(int num_responses) { |
| 162 num_responses_received_ = 0; | 163 num_responses_received_ = 0; |
| 163 num_responses_expected_ = num_responses; | 164 num_responses_expected_ = num_responses; |
| 164 // Will be terminated in OnURLFetchComplete(). | 165 // Will be terminated in OnURLFetchComplete(). |
| 165 base::MessageLoop::current()->Run(); | 166 base::MessageLoop::current()->Run(); |
| 166 } | 167 } |
| 167 | 168 |
| 168 // Handles |request| sent to |path| and returns the response per |content|, | 169 // Handles |request| sent to |path| and returns the response per |content|, |
| 169 // |content type|, and |code|. Saves the request URL for verification. | 170 // |content type|, and |code|. Saves the request URL for verification. |
| 170 scoped_ptr<HttpResponse> HandleRequest(const std::string& path, | 171 std::unique_ptr<HttpResponse> HandleRequest(const std::string& path, |
| 171 const std::string& content, | 172 const std::string& content, |
| 172 const std::string& content_type, | 173 const std::string& content_type, |
| 173 HttpStatusCode code, | 174 HttpStatusCode code, |
| 174 const HttpRequest& request) { | 175 const HttpRequest& request) { |
| 175 request_relative_url_ = request.relative_url; | 176 request_relative_url_ = request.relative_url; |
| 176 | 177 |
| 177 GURL absolute_url = server_->GetURL(request.relative_url); | 178 GURL absolute_url = server_->GetURL(request.relative_url); |
| 178 if (absolute_url.path() == path) { | 179 if (absolute_url.path() == path) { |
| 179 scoped_ptr<BasicHttpResponse> http_response(new BasicHttpResponse); | 180 std::unique_ptr<BasicHttpResponse> http_response(new BasicHttpResponse); |
| 180 http_response->set_code(code); | 181 http_response->set_code(code); |
| 181 http_response->set_content(content); | 182 http_response->set_content(content); |
| 182 http_response->set_content_type(content_type); | 183 http_response->set_content_type(content_type); |
| 183 return std::move(http_response); | 184 return std::move(http_response); |
| 184 } | 185 } |
| 185 | 186 |
| 186 return nullptr; | 187 return nullptr; |
| 187 } | 188 } |
| 188 | 189 |
| 189 protected: | 190 protected: |
| 190 int num_responses_received_; | 191 int num_responses_received_; |
| 191 int num_responses_expected_; | 192 int num_responses_expected_; |
| 192 std::string request_relative_url_; | 193 std::string request_relative_url_; |
| 193 base::Thread io_thread_; | 194 base::Thread io_thread_; |
| 194 scoped_refptr<TestURLRequestContextGetter> request_context_getter_; | 195 scoped_refptr<TestURLRequestContextGetter> request_context_getter_; |
| 195 TestConnectionListener connection_listener_; | 196 TestConnectionListener connection_listener_; |
| 196 scoped_ptr<EmbeddedTestServer> server_; | 197 std::unique_ptr<EmbeddedTestServer> server_; |
| 197 }; | 198 }; |
| 198 | 199 |
| 199 TEST_P(EmbeddedTestServerTest, GetBaseURL) { | 200 TEST_P(EmbeddedTestServerTest, GetBaseURL) { |
| 200 ASSERT_TRUE(server_->Start()); | 201 ASSERT_TRUE(server_->Start()); |
| 201 if (GetParam() == EmbeddedTestServer::TYPE_HTTPS) { | 202 if (GetParam() == EmbeddedTestServer::TYPE_HTTPS) { |
| 202 EXPECT_EQ(base::StringPrintf("https://127.0.0.1:%u/", server_->port()), | 203 EXPECT_EQ(base::StringPrintf("https://127.0.0.1:%u/", server_->port()), |
| 203 server_->base_url().spec()); | 204 server_->base_url().spec()); |
| 204 } else { | 205 } else { |
| 205 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%u/", server_->port()), | 206 EXPECT_EQ(base::StringPrintf("http://127.0.0.1:%u/", server_->port()), |
| 206 server_->base_url().spec()); | 207 server_->base_url().spec()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 236 TEST_P(EmbeddedTestServerTest, RegisterRequestHandler) { | 237 TEST_P(EmbeddedTestServerTest, RegisterRequestHandler) { |
| 237 server_->RegisterRequestHandler( | 238 server_->RegisterRequestHandler( |
| 238 base::Bind(&EmbeddedTestServerTest::HandleRequest, | 239 base::Bind(&EmbeddedTestServerTest::HandleRequest, |
| 239 base::Unretained(this), | 240 base::Unretained(this), |
| 240 "/test", | 241 "/test", |
| 241 "<b>Worked!</b>", | 242 "<b>Worked!</b>", |
| 242 "text/html", | 243 "text/html", |
| 243 HTTP_OK)); | 244 HTTP_OK)); |
| 244 ASSERT_TRUE(server_->Start()); | 245 ASSERT_TRUE(server_->Start()); |
| 245 | 246 |
| 246 scoped_ptr<URLFetcher> fetcher = | 247 std::unique_ptr<URLFetcher> fetcher = |
| 247 URLFetcher::Create(server_->GetURL("/test?q=foo"), URLFetcher::GET, this); | 248 URLFetcher::Create(server_->GetURL("/test?q=foo"), URLFetcher::GET, this); |
| 248 fetcher->SetRequestContext(request_context_getter_.get()); | 249 fetcher->SetRequestContext(request_context_getter_.get()); |
| 249 fetcher->Start(); | 250 fetcher->Start(); |
| 250 WaitForResponses(1); | 251 WaitForResponses(1); |
| 251 | 252 |
| 252 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 253 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
| 253 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); | 254 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); |
| 254 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher)); | 255 EXPECT_EQ("<b>Worked!</b>", GetContentFromFetcher(*fetcher)); |
| 255 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); | 256 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); |
| 256 | 257 |
| 257 EXPECT_EQ("/test?q=foo", request_relative_url_); | 258 EXPECT_EQ("/test?q=foo", request_relative_url_); |
| 258 } | 259 } |
| 259 | 260 |
| 260 TEST_P(EmbeddedTestServerTest, ServeFilesFromDirectory) { | 261 TEST_P(EmbeddedTestServerTest, ServeFilesFromDirectory) { |
| 261 base::FilePath src_dir; | 262 base::FilePath src_dir; |
| 262 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); | 263 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); |
| 263 server_->ServeFilesFromDirectory( | 264 server_->ServeFilesFromDirectory( |
| 264 src_dir.AppendASCII("net").AppendASCII("data")); | 265 src_dir.AppendASCII("net").AppendASCII("data")); |
| 265 ASSERT_TRUE(server_->Start()); | 266 ASSERT_TRUE(server_->Start()); |
| 266 | 267 |
| 267 scoped_ptr<URLFetcher> fetcher = | 268 std::unique_ptr<URLFetcher> fetcher = |
| 268 URLFetcher::Create(server_->GetURL("/test.html"), URLFetcher::GET, this); | 269 URLFetcher::Create(server_->GetURL("/test.html"), URLFetcher::GET, this); |
| 269 fetcher->SetRequestContext(request_context_getter_.get()); | 270 fetcher->SetRequestContext(request_context_getter_.get()); |
| 270 fetcher->Start(); | 271 fetcher->Start(); |
| 271 WaitForResponses(1); | 272 WaitForResponses(1); |
| 272 | 273 |
| 273 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 274 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
| 274 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); | 275 EXPECT_EQ(HTTP_OK, fetcher->GetResponseCode()); |
| 275 EXPECT_EQ("<p>Hello World!</p>", GetContentFromFetcher(*fetcher)); | 276 EXPECT_EQ("<p>Hello World!</p>", GetContentFromFetcher(*fetcher)); |
| 276 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); | 277 EXPECT_EQ("text/html", GetContentTypeFromFetcher(*fetcher)); |
| 277 } | 278 } |
| 278 | 279 |
| 279 TEST_P(EmbeddedTestServerTest, DefaultNotFoundResponse) { | 280 TEST_P(EmbeddedTestServerTest, DefaultNotFoundResponse) { |
| 280 ASSERT_TRUE(server_->Start()); | 281 ASSERT_TRUE(server_->Start()); |
| 281 | 282 |
| 282 scoped_ptr<URLFetcher> fetcher = URLFetcher::Create( | 283 std::unique_ptr<URLFetcher> fetcher = URLFetcher::Create( |
| 283 server_->GetURL("/non-existent"), URLFetcher::GET, this); | 284 server_->GetURL("/non-existent"), URLFetcher::GET, this); |
| 284 fetcher->SetRequestContext(request_context_getter_.get()); | 285 fetcher->SetRequestContext(request_context_getter_.get()); |
| 285 | 286 |
| 286 fetcher->Start(); | 287 fetcher->Start(); |
| 287 WaitForResponses(1); | 288 WaitForResponses(1); |
| 288 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); | 289 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher->GetStatus().status()); |
| 289 EXPECT_EQ(HTTP_NOT_FOUND, fetcher->GetResponseCode()); | 290 EXPECT_EQ(HTTP_NOT_FOUND, fetcher->GetResponseCode()); |
| 290 } | 291 } |
| 291 | 292 |
| 292 TEST_P(EmbeddedTestServerTest, ConnectionListenerAccept) { | 293 TEST_P(EmbeddedTestServerTest, ConnectionListenerAccept) { |
| 293 ASSERT_TRUE(server_->Start()); | 294 ASSERT_TRUE(server_->Start()); |
| 294 | 295 |
| 295 TestNetLog net_log; | 296 TestNetLog net_log; |
| 296 net::AddressList address_list; | 297 net::AddressList address_list; |
| 297 EXPECT_TRUE(server_->GetAddressList(&address_list)); | 298 EXPECT_TRUE(server_->GetAddressList(&address_list)); |
| 298 | 299 |
| 299 scoped_ptr<StreamSocket> socket = | 300 std::unique_ptr<StreamSocket> socket = |
| 300 ClientSocketFactory::GetDefaultFactory()->CreateTransportClientSocket( | 301 ClientSocketFactory::GetDefaultFactory()->CreateTransportClientSocket( |
| 301 address_list, NULL, &net_log, NetLog::Source()); | 302 address_list, NULL, &net_log, NetLog::Source()); |
| 302 TestCompletionCallback callback; | 303 TestCompletionCallback callback; |
| 303 ASSERT_EQ(OK, callback.GetResult(socket->Connect(callback.callback()))); | 304 ASSERT_EQ(OK, callback.GetResult(socket->Connect(callback.callback()))); |
| 304 | 305 |
| 305 connection_listener_.WaitUntilFirstConnectionAccepted(); | 306 connection_listener_.WaitUntilFirstConnectionAccepted(); |
| 306 | 307 |
| 307 EXPECT_EQ(1u, connection_listener_.SocketAcceptedCount()); | 308 EXPECT_EQ(1u, connection_listener_.SocketAcceptedCount()); |
| 308 EXPECT_FALSE(connection_listener_.DidReadFromSocket()); | 309 EXPECT_FALSE(connection_listener_.DidReadFromSocket()); |
| 309 } | 310 } |
| 310 | 311 |
| 311 TEST_P(EmbeddedTestServerTest, ConnectionListenerRead) { | 312 TEST_P(EmbeddedTestServerTest, ConnectionListenerRead) { |
| 312 ASSERT_TRUE(server_->Start()); | 313 ASSERT_TRUE(server_->Start()); |
| 313 | 314 |
| 314 scoped_ptr<URLFetcher> fetcher = URLFetcher::Create( | 315 std::unique_ptr<URLFetcher> fetcher = URLFetcher::Create( |
| 315 server_->GetURL("/non-existent"), URLFetcher::GET, this); | 316 server_->GetURL("/non-existent"), URLFetcher::GET, this); |
| 316 fetcher->SetRequestContext(request_context_getter_.get()); | 317 fetcher->SetRequestContext(request_context_getter_.get()); |
| 317 | 318 |
| 318 fetcher->Start(); | 319 fetcher->Start(); |
| 319 WaitForResponses(1); | 320 WaitForResponses(1); |
| 320 EXPECT_EQ(1u, connection_listener_.SocketAcceptedCount()); | 321 EXPECT_EQ(1u, connection_listener_.SocketAcceptedCount()); |
| 321 EXPECT_TRUE(connection_listener_.DidReadFromSocket()); | 322 EXPECT_TRUE(connection_listener_.DidReadFromSocket()); |
| 322 } | 323 } |
| 323 | 324 |
| 324 TEST_P(EmbeddedTestServerTest, ConcurrentFetches) { | 325 TEST_P(EmbeddedTestServerTest, ConcurrentFetches) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 338 HTTP_OK)); | 339 HTTP_OK)); |
| 339 server_->RegisterRequestHandler( | 340 server_->RegisterRequestHandler( |
| 340 base::Bind(&EmbeddedTestServerTest::HandleRequest, | 341 base::Bind(&EmbeddedTestServerTest::HandleRequest, |
| 341 base::Unretained(this), | 342 base::Unretained(this), |
| 342 "/test3", | 343 "/test3", |
| 343 "No chocolates", | 344 "No chocolates", |
| 344 "text/plain", | 345 "text/plain", |
| 345 HTTP_NOT_FOUND)); | 346 HTTP_NOT_FOUND)); |
| 346 ASSERT_TRUE(server_->Start()); | 347 ASSERT_TRUE(server_->Start()); |
| 347 | 348 |
| 348 scoped_ptr<URLFetcher> fetcher1 = | 349 std::unique_ptr<URLFetcher> fetcher1 = |
| 349 URLFetcher::Create(server_->GetURL("/test1"), URLFetcher::GET, this); | 350 URLFetcher::Create(server_->GetURL("/test1"), URLFetcher::GET, this); |
| 350 fetcher1->SetRequestContext(request_context_getter_.get()); | 351 fetcher1->SetRequestContext(request_context_getter_.get()); |
| 351 scoped_ptr<URLFetcher> fetcher2 = | 352 std::unique_ptr<URLFetcher> fetcher2 = |
| 352 URLFetcher::Create(server_->GetURL("/test2"), URLFetcher::GET, this); | 353 URLFetcher::Create(server_->GetURL("/test2"), URLFetcher::GET, this); |
| 353 fetcher2->SetRequestContext(request_context_getter_.get()); | 354 fetcher2->SetRequestContext(request_context_getter_.get()); |
| 354 scoped_ptr<URLFetcher> fetcher3 = | 355 std::unique_ptr<URLFetcher> fetcher3 = |
| 355 URLFetcher::Create(server_->GetURL("/test3"), URLFetcher::GET, this); | 356 URLFetcher::Create(server_->GetURL("/test3"), URLFetcher::GET, this); |
| 356 fetcher3->SetRequestContext(request_context_getter_.get()); | 357 fetcher3->SetRequestContext(request_context_getter_.get()); |
| 357 | 358 |
| 358 // Fetch the three URLs concurrently. | 359 // Fetch the three URLs concurrently. |
| 359 fetcher1->Start(); | 360 fetcher1->Start(); |
| 360 fetcher2->Start(); | 361 fetcher2->Start(); |
| 361 fetcher3->Start(); | 362 fetcher3->Start(); |
| 362 WaitForResponses(3); | 363 WaitForResponses(3); |
| 363 | 364 |
| 364 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher1->GetStatus().status()); | 365 EXPECT_EQ(URLRequestStatus::SUCCESS, fetcher1->GetStatus().status()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 base::Bind(send, "echo", | 417 base::Bind(send, "echo", |
| 417 base::Bind(&InfiniteResponse::SendInfinite, | 418 base::Bind(&InfiniteResponse::SendInfinite, |
| 418 weak_ptr_factory_.GetWeakPtr(), send))); | 419 weak_ptr_factory_.GetWeakPtr(), send))); |
| 419 } | 420 } |
| 420 | 421 |
| 421 base::WeakPtrFactory<InfiniteResponse> weak_ptr_factory_; | 422 base::WeakPtrFactory<InfiniteResponse> weak_ptr_factory_; |
| 422 | 423 |
| 423 DISALLOW_COPY_AND_ASSIGN(InfiniteResponse); | 424 DISALLOW_COPY_AND_ASSIGN(InfiniteResponse); |
| 424 }; | 425 }; |
| 425 | 426 |
| 426 scoped_ptr<HttpResponse> HandleInfiniteRequest(const HttpRequest& request) { | 427 std::unique_ptr<HttpResponse> HandleInfiniteRequest( |
| 427 return make_scoped_ptr(new InfiniteResponse); | 428 const HttpRequest& request) { |
| 429 return base::WrapUnique(new InfiniteResponse); |
| 428 } | 430 } |
| 429 } | 431 } |
| 430 | 432 |
| 431 // Tests the case the connection is closed while the server is sending a | 433 // Tests the case the connection is closed while the server is sending a |
| 432 // response. May non-deterministically end up at one of three paths | 434 // response. May non-deterministically end up at one of three paths |
| 433 // (Discover the close event synchronously, asynchronously, or server | 435 // (Discover the close event synchronously, asynchronously, or server |
| 434 // shutting down before it is discovered). | 436 // shutting down before it is discovered). |
| 435 TEST_P(EmbeddedTestServerTest, CloseDuringWrite) { | 437 TEST_P(EmbeddedTestServerTest, CloseDuringWrite) { |
| 436 CancelRequestDelegate cancel_delegate; | 438 CancelRequestDelegate cancel_delegate; |
| 437 TestURLRequestContext context; | 439 TestURLRequestContext context; |
| 438 cancel_delegate.set_cancel_in_response_started(true); | 440 cancel_delegate.set_cancel_in_response_started(true); |
| 439 server_->RegisterRequestHandler(base::Bind( | 441 server_->RegisterRequestHandler(base::Bind( |
| 440 &HandlePrefixedRequest, "/infinite", base::Bind(&HandleInfiniteRequest))); | 442 &HandlePrefixedRequest, "/infinite", base::Bind(&HandleInfiniteRequest))); |
| 441 ASSERT_TRUE(server_->Start()); | 443 ASSERT_TRUE(server_->Start()); |
| 442 | 444 |
| 443 scoped_ptr<URLRequest> request = context.CreateRequest( | 445 std::unique_ptr<URLRequest> request = context.CreateRequest( |
| 444 server_->GetURL("/infinite"), DEFAULT_PRIORITY, &cancel_delegate); | 446 server_->GetURL("/infinite"), DEFAULT_PRIORITY, &cancel_delegate); |
| 445 request->Start(); | 447 request->Start(); |
| 446 cancel_delegate.WaitUntilDone(); | 448 cancel_delegate.WaitUntilDone(); |
| 447 } | 449 } |
| 448 | 450 |
| 449 struct CertificateValuesEntry { | 451 struct CertificateValuesEntry { |
| 450 const EmbeddedTestServer::ServerCertificate server_cert; | 452 const EmbeddedTestServer::ServerCertificate server_cert; |
| 451 const bool is_expired; | 453 const bool is_expired; |
| 452 const char* common_name; | 454 const char* common_name; |
| 453 const char* root; | 455 const char* root; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 | 529 |
| 528 // base::PlatformThread::Delegate: | 530 // base::PlatformThread::Delegate: |
| 529 void ThreadMain() override { | 531 void ThreadMain() override { |
| 530 scoped_refptr<base::SingleThreadTaskRunner> io_thread_runner; | 532 scoped_refptr<base::SingleThreadTaskRunner> io_thread_runner; |
| 531 base::Thread io_thread("io_thread"); | 533 base::Thread io_thread("io_thread"); |
| 532 base::Thread::Options thread_options; | 534 base::Thread::Options thread_options; |
| 533 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; | 535 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; |
| 534 ASSERT_TRUE(io_thread.StartWithOptions(thread_options)); | 536 ASSERT_TRUE(io_thread.StartWithOptions(thread_options)); |
| 535 io_thread_runner = io_thread.task_runner(); | 537 io_thread_runner = io_thread.task_runner(); |
| 536 | 538 |
| 537 scoped_ptr<base::MessageLoop> loop; | 539 std::unique_ptr<base::MessageLoop> loop; |
| 538 if (message_loop_present_on_initialize_) | 540 if (message_loop_present_on_initialize_) |
| 539 loop.reset(new base::MessageLoopForIO); | 541 loop.reset(new base::MessageLoopForIO); |
| 540 | 542 |
| 541 // Create the test server instance. | 543 // Create the test server instance. |
| 542 EmbeddedTestServer server(type_); | 544 EmbeddedTestServer server(type_); |
| 543 base::FilePath src_dir; | 545 base::FilePath src_dir; |
| 544 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); | 546 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); |
| 545 ASSERT_TRUE(server.Start()); | 547 ASSERT_TRUE(server.Start()); |
| 546 | 548 |
| 547 // Make a request and wait for the reply. | 549 // Make a request and wait for the reply. |
| 548 if (!loop) | 550 if (!loop) |
| 549 loop.reset(new base::MessageLoopForIO); | 551 loop.reset(new base::MessageLoopForIO); |
| 550 | 552 |
| 551 scoped_ptr<URLFetcher> fetcher = | 553 std::unique_ptr<URLFetcher> fetcher = |
| 552 URLFetcher::Create(server.GetURL("/test?q=foo"), URLFetcher::GET, this); | 554 URLFetcher::Create(server.GetURL("/test?q=foo"), URLFetcher::GET, this); |
| 553 fetcher->SetRequestContext( | 555 fetcher->SetRequestContext( |
| 554 new TestURLRequestContextGetter(loop->task_runner())); | 556 new TestURLRequestContextGetter(loop->task_runner())); |
| 555 fetcher->Start(); | 557 fetcher->Start(); |
| 556 loop->Run(); | 558 loop->Run(); |
| 557 fetcher.reset(); | 559 fetcher.reset(); |
| 558 | 560 |
| 559 // Shut down. | 561 // Shut down. |
| 560 if (message_loop_present_on_shutdown_) | 562 if (message_loop_present_on_shutdown_) |
| 561 loop.reset(); | 563 loop.reset(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 591 INSTANTIATE_TEST_CASE_P( | 593 INSTANTIATE_TEST_CASE_P( |
| 592 EmbeddedTestServerThreadingTestInstantiation, | 594 EmbeddedTestServerThreadingTestInstantiation, |
| 593 EmbeddedTestServerThreadingTest, | 595 EmbeddedTestServerThreadingTest, |
| 594 testing::Combine(testing::Bool(), | 596 testing::Combine(testing::Bool(), |
| 595 testing::Bool(), | 597 testing::Bool(), |
| 596 testing::Values(EmbeddedTestServer::TYPE_HTTP, | 598 testing::Values(EmbeddedTestServer::TYPE_HTTP, |
| 597 EmbeddedTestServer::TYPE_HTTPS))); | 599 EmbeddedTestServer::TYPE_HTTPS))); |
| 598 | 600 |
| 599 } // namespace test_server | 601 } // namespace test_server |
| 600 } // namespace net | 602 } // namespace net |
| OLD | NEW |