| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_resolver_mojo.h" | 5 #include "net/proxy/proxy_resolver_mojo.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" | 27 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" |
| 28 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" | 28 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" |
| 29 #include "url/gurl.h" | 29 #include "url/gurl.h" |
| 30 | 30 |
| 31 namespace net { | 31 namespace net { |
| 32 | 32 |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 const char kScriptData[] = "FooBarBaz"; | 35 const char kScriptData[] = "FooBarBaz"; |
| 36 const char kScriptData2[] = "BlahBlahBlah"; | |
| 37 const char kExampleUrl[] = "http://www.example.com"; | 36 const char kExampleUrl[] = "http://www.example.com"; |
| 38 | 37 |
| 39 struct SetPacScriptAction { | 38 struct SetPacScriptAction { |
| 40 enum Action { | 39 enum Action { |
| 41 COMPLETE, | 40 COMPLETE, |
| 42 DISCONNECT, | 41 DISCONNECT, |
| 43 }; | 42 }; |
| 44 | 43 |
| 45 static SetPacScriptAction ReturnResult(Error error) { | 44 static SetPacScriptAction ReturnResult(Error error) { |
| 46 SetPacScriptAction result; | 45 SetPacScriptAction result; |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 break; | 244 break; |
| 246 case GetProxyForUrlAction::SEND_LOAD_STATE_AND_BLOCK: | 245 case GetProxyForUrlAction::SEND_LOAD_STATE_AND_BLOCK: |
| 247 client->LoadStateChanged(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT); | 246 client->LoadStateChanged(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT); |
| 248 blocked_clients_.push_back( | 247 blocked_clients_.push_back( |
| 249 new interfaces::ProxyResolverRequestClientPtr(client.Pass())); | 248 new interfaces::ProxyResolverRequestClientPtr(client.Pass())); |
| 250 break; | 249 break; |
| 251 } | 250 } |
| 252 WakeWaiter(); | 251 WakeWaiter(); |
| 253 } | 252 } |
| 254 | 253 |
| 255 class TestMojoProxyResolverFactory : public MojoProxyResolverFactory { | |
| 256 public: | |
| 257 TestMojoProxyResolverFactory(); | |
| 258 ~TestMojoProxyResolverFactory() override; | |
| 259 | |
| 260 // Overridden from MojoProxyResolverFactory: | |
| 261 void Create(mojo::InterfaceRequest<interfaces::ProxyResolver> req, | |
| 262 interfaces::HostResolverPtr host_resolver) override; | |
| 263 | |
| 264 MockMojoProxyResolver& GetMockResolver() { return *mock_proxy_resolver_; } | |
| 265 | |
| 266 void AddFuturePacScriptAction(int creation, SetPacScriptAction action); | |
| 267 void AddFutureGetProxyAction(int creation, GetProxyForUrlAction action); | |
| 268 | |
| 269 int num_create_calls() const { return num_create_calls_; } | |
| 270 void FailNextCreate() { fail_next_create_ = true; } | |
| 271 | |
| 272 private: | |
| 273 int num_create_calls_; | |
| 274 std::map<int, std::list<SetPacScriptAction>> pac_script_actions_; | |
| 275 std::map<int, std::list<GetProxyForUrlAction>> get_proxy_actions_; | |
| 276 bool fail_next_create_; | |
| 277 | |
| 278 scoped_ptr<MockMojoProxyResolver> mock_proxy_resolver_; | |
| 279 }; | |
| 280 | |
| 281 TestMojoProxyResolverFactory::TestMojoProxyResolverFactory() | |
| 282 : num_create_calls_(0), fail_next_create_(false) { | |
| 283 } | |
| 284 | |
| 285 TestMojoProxyResolverFactory::~TestMojoProxyResolverFactory() { | |
| 286 } | |
| 287 | |
| 288 void TestMojoProxyResolverFactory::Create( | |
| 289 mojo::InterfaceRequest<interfaces::ProxyResolver> req, | |
| 290 interfaces::HostResolverPtr host_resolver) { | |
| 291 if (fail_next_create_) { | |
| 292 req = nullptr; | |
| 293 fail_next_create_ = false; | |
| 294 } else { | |
| 295 mock_proxy_resolver_.reset(new MockMojoProxyResolver(req.Pass())); | |
| 296 | |
| 297 for (const auto& action : pac_script_actions_[num_create_calls_]) | |
| 298 mock_proxy_resolver_->AddPacScriptAction(action); | |
| 299 | |
| 300 for (const auto& action : get_proxy_actions_[num_create_calls_]) | |
| 301 mock_proxy_resolver_->AddGetProxyAction(action); | |
| 302 } | |
| 303 num_create_calls_++; | |
| 304 } | |
| 305 | |
| 306 void TestMojoProxyResolverFactory::AddFuturePacScriptAction( | |
| 307 int creation, | |
| 308 SetPacScriptAction action) { | |
| 309 pac_script_actions_[creation].push_back(action); | |
| 310 } | |
| 311 | |
| 312 void TestMojoProxyResolverFactory::AddFutureGetProxyAction( | |
| 313 int creation, | |
| 314 GetProxyForUrlAction action) { | |
| 315 get_proxy_actions_[creation].push_back(action); | |
| 316 } | |
| 317 | |
| 318 class Request { | 254 class Request { |
| 319 public: | 255 public: |
| 320 Request(ProxyResolverMojo* resolver, const GURL& url); | 256 Request(ProxyResolverMojo* resolver, const GURL& url); |
| 321 | 257 |
| 322 int Resolve(); | 258 int Resolve(); |
| 323 void Cancel(); | 259 void Cancel(); |
| 324 int WaitForResult(); | 260 int WaitForResult(); |
| 325 | 261 |
| 326 int error() const { return error_; } | 262 int error() const { return error_; } |
| 327 const ProxyInfo& results() const { return results_; } | 263 const ProxyInfo& results() const { return results_; } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 354 int Request::WaitForResult() { | 290 int Request::WaitForResult() { |
| 355 error_ = callback_.WaitForResult(); | 291 error_ = callback_.WaitForResult(); |
| 356 return error_; | 292 return error_; |
| 357 } | 293 } |
| 358 | 294 |
| 359 } // namespace | 295 } // namespace |
| 360 | 296 |
| 361 class ProxyResolverMojoTest : public testing::Test { | 297 class ProxyResolverMojoTest : public testing::Test { |
| 362 public: | 298 public: |
| 363 void SetUp() override { | 299 void SetUp() override { |
| 364 proxy_resolver_mojo_.reset(new ProxyResolverMojo( | 300 interfaces::ProxyResolverPtr proxy_resolver_ptr; |
| 365 &mojo_proxy_resolver_factory_, &mock_host_resolver_)); | 301 mock_proxy_resolver_.reset( |
| 302 new MockMojoProxyResolver(mojo::GetProxy(&proxy_resolver_ptr))); |
| 303 proxy_resolver_mojo_.reset( |
| 304 new ProxyResolverMojo(proxy_resolver_ptr.Pass(), |
| 305 make_scoped_ptr(new base::ScopedClosureRunner( |
| 306 resolver_destruction_closure_.closure())))); |
| 366 } | 307 } |
| 367 | 308 |
| 368 scoped_ptr<Request> MakeRequest(const GURL& url) { | 309 scoped_ptr<Request> MakeRequest(const GURL& url) { |
| 369 return make_scoped_ptr(new Request(proxy_resolver_mojo_.get(), url)); | 310 return make_scoped_ptr(new Request(proxy_resolver_mojo_.get(), url)); |
| 370 } | 311 } |
| 371 | 312 |
| 372 mojo::Array<interfaces::ProxyServerPtr> ProxyServersFromPacString( | 313 mojo::Array<interfaces::ProxyServerPtr> ProxyServersFromPacString( |
| 373 const std::string& pac_string) { | 314 const std::string& pac_string) { |
| 374 ProxyInfo proxy_info; | 315 ProxyInfo proxy_info; |
| 375 proxy_info.UsePacString(pac_string); | 316 proxy_info.UsePacString(pac_string); |
| 376 | 317 |
| 377 return mojo::Array<interfaces::ProxyServerPtr>::From( | 318 return mojo::Array<interfaces::ProxyServerPtr>::From( |
| 378 proxy_info.proxy_list().GetAll()); | 319 proxy_info.proxy_list().GetAll()); |
| 379 } | 320 } |
| 380 | 321 |
| 381 void SetPacScript(int instance) { | |
| 382 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | |
| 383 instance, SetPacScriptAction::ReturnResult(OK)); | |
| 384 TestCompletionCallback callback; | |
| 385 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 386 ProxyResolverScriptData::FromUTF8(kScriptData)); | |
| 387 EXPECT_EQ(OK, callback.GetResult(proxy_resolver_mojo_->SetPacScript( | |
| 388 pac_script, callback.callback()))); | |
| 389 } | |
| 390 | |
| 391 void RunCallbackAndSetPacScript(const net::CompletionCallback& callback, | |
| 392 const net::CompletionCallback& pac_callback, | |
| 393 int instance, | |
| 394 int result) { | |
| 395 callback.Run(result); | |
| 396 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | |
| 397 instance, SetPacScriptAction::ReturnResult(OK)); | |
| 398 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 399 ProxyResolverScriptData::FromUTF8(kScriptData)); | |
| 400 EXPECT_EQ(ERR_IO_PENDING, | |
| 401 proxy_resolver_mojo_->SetPacScript(pac_script, pac_callback)); | |
| 402 } | |
| 403 | |
| 404 void DeleteProxyResolverCallback(const CompletionCallback& callback, | 322 void DeleteProxyResolverCallback(const CompletionCallback& callback, |
| 405 int result) { | 323 int result) { |
| 406 proxy_resolver_mojo_.reset(); | 324 proxy_resolver_mojo_.reset(); |
| 407 callback.Run(result); | 325 callback.Run(result); |
| 408 } | 326 } |
| 409 | 327 |
| 410 MockHostResolver mock_host_resolver_; | 328 MockHostResolver mock_host_resolver_; |
| 411 TestMojoProxyResolverFactory mojo_proxy_resolver_factory_; | 329 TestClosure resolver_destruction_closure_; |
| 412 scoped_ptr<ProxyResolverMojo> proxy_resolver_mojo_; | 330 scoped_ptr<ProxyResolverMojo> proxy_resolver_mojo_; |
| 331 scoped_ptr<MockMojoProxyResolver> mock_proxy_resolver_; |
| 413 }; | 332 }; |
| 414 | 333 |
| 415 TEST_F(ProxyResolverMojoTest, SetPacScript) { | 334 TEST_F(ProxyResolverMojoTest, SetPacScript) { |
| 416 SetPacScript(0); | 335 mock_proxy_resolver_->AddPacScriptAction( |
| 417 EXPECT_EQ(kScriptData, | 336 SetPacScriptAction::ReturnResult(OK)); |
| 418 mojo_proxy_resolver_factory_.GetMockResolver().pac_script_data()); | 337 TestCompletionCallback callback; |
| 338 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 339 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 340 EXPECT_EQ(OK, callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 341 pac_script, callback.callback()))); |
| 342 EXPECT_EQ(kScriptData, mock_proxy_resolver_->pac_script_data()); |
| 419 } | 343 } |
| 420 | 344 |
| 421 TEST_F(ProxyResolverMojoTest, SetPacScript_Empty) { | 345 TEST_F(ProxyResolverMojoTest, SetPacScript_Empty) { |
| 422 TestCompletionCallback callback; | 346 TestCompletionCallback callback; |
| 423 scoped_refptr<ProxyResolverScriptData> pac_script( | 347 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 424 ProxyResolverScriptData::FromUTF8("")); | 348 ProxyResolverScriptData::FromUTF8("")); |
| 425 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, | 349 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, |
| 426 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | 350 callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 427 pac_script, callback.callback()))); | 351 pac_script, callback.callback()))); |
| 428 } | 352 } |
| 429 | 353 |
| 430 TEST_F(ProxyResolverMojoTest, SetPacScript_Url) { | 354 TEST_F(ProxyResolverMojoTest, SetPacScript_Url) { |
| 431 TestCompletionCallback callback; | 355 TestCompletionCallback callback; |
| 432 scoped_refptr<ProxyResolverScriptData> pac_script( | 356 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 433 ProxyResolverScriptData::FromURL(GURL(kExampleUrl))); | 357 ProxyResolverScriptData::FromURL(GURL(kExampleUrl))); |
| 434 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, | 358 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, |
| 435 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | 359 callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 436 pac_script, callback.callback()))); | 360 pac_script, callback.callback()))); |
| 437 } | 361 } |
| 438 | 362 |
| 439 TEST_F(ProxyResolverMojoTest, SetPacScript_Failed) { | 363 TEST_F(ProxyResolverMojoTest, SetPacScript_Failed) { |
| 440 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 364 mock_proxy_resolver_->AddPacScriptAction( |
| 441 0, SetPacScriptAction::ReturnResult(ERR_PAC_STATUS_NOT_OK)); | 365 SetPacScriptAction::ReturnResult(ERR_PAC_STATUS_NOT_OK)); |
| 442 | 366 |
| 443 TestCompletionCallback callback; | 367 TestCompletionCallback callback; |
| 444 scoped_refptr<ProxyResolverScriptData> pac_script( | 368 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 445 ProxyResolverScriptData::FromUTF8(kScriptData)); | 369 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 446 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, | 370 EXPECT_EQ(ERR_PAC_STATUS_NOT_OK, |
| 447 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | 371 callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 448 pac_script, callback.callback()))); | 372 pac_script, callback.callback()))); |
| 449 } | 373 } |
| 450 | 374 |
| 451 TEST_F(ProxyResolverMojoTest, SetPacScript_Disconnected) { | 375 TEST_F(ProxyResolverMojoTest, SetPacScript_Disconnected) { |
| 452 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 376 mock_proxy_resolver_->AddPacScriptAction(SetPacScriptAction::Disconnect()); |
| 453 0, SetPacScriptAction::Disconnect()); | |
| 454 | 377 |
| 455 scoped_refptr<ProxyResolverScriptData> pac_script( | 378 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 456 ProxyResolverScriptData::FromUTF8(kScriptData)); | 379 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 457 TestCompletionCallback callback; | 380 TestCompletionCallback callback; |
| 458 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | 381 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( |
| 459 pac_script, callback.callback())); | 382 pac_script, callback.callback())); |
| 460 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, callback.GetResult(ERR_IO_PENDING)); | 383 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, callback.GetResult(ERR_IO_PENDING)); |
| 461 } | 384 } |
| 462 | 385 |
| 463 TEST_F(ProxyResolverMojoTest, SetPacScript_SuccessThenDisconnect) { | |
| 464 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | |
| 465 0, SetPacScriptAction::ReturnResult(OK)); | |
| 466 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | |
| 467 0, SetPacScriptAction::Disconnect()); | |
| 468 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | |
| 469 1, SetPacScriptAction::ReturnResult(ERR_FAILED)); | |
| 470 { | |
| 471 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 472 ProxyResolverScriptData::FromUTF8(kScriptData)); | |
| 473 TestCompletionCallback callback; | |
| 474 EXPECT_EQ(OK, callback.GetResult(proxy_resolver_mojo_->SetPacScript( | |
| 475 pac_script, callback.callback()))); | |
| 476 EXPECT_EQ(kScriptData, | |
| 477 mojo_proxy_resolver_factory_.GetMockResolver().pac_script_data()); | |
| 478 } | |
| 479 | |
| 480 { | |
| 481 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 482 ProxyResolverScriptData::FromUTF8(kScriptData2)); | |
| 483 TestCompletionCallback callback; | |
| 484 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | |
| 485 pac_script, callback.callback())); | |
| 486 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, callback.GetResult(ERR_IO_PENDING)); | |
| 487 } | |
| 488 | |
| 489 { | |
| 490 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 491 ProxyResolverScriptData::FromUTF8(kScriptData2)); | |
| 492 TestCompletionCallback callback; | |
| 493 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | |
| 494 pac_script, callback.callback())); | |
| 495 EXPECT_EQ(ERR_FAILED, callback.GetResult(ERR_IO_PENDING)); | |
| 496 } | |
| 497 | |
| 498 // The service should have been recreated on the last SetPacScript call. | |
| 499 EXPECT_EQ(2, mojo_proxy_resolver_factory_.num_create_calls()); | |
| 500 } | |
| 501 | |
| 502 TEST_F(ProxyResolverMojoTest, SetPacScript_Cancel) { | 386 TEST_F(ProxyResolverMojoTest, SetPacScript_Cancel) { |
| 503 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 387 mock_proxy_resolver_->AddPacScriptAction( |
| 504 0, SetPacScriptAction::ReturnResult(OK)); | 388 SetPacScriptAction::ReturnResult(OK)); |
| 505 | 389 |
| 506 scoped_refptr<ProxyResolverScriptData> pac_script( | 390 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 507 ProxyResolverScriptData::FromUTF8(kScriptData)); | 391 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 508 TestCompletionCallback callback; | 392 TestCompletionCallback callback; |
| 509 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | 393 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( |
| 510 pac_script, callback.callback())); | 394 pac_script, callback.callback())); |
| 511 proxy_resolver_mojo_->CancelSetPacScript(); | 395 proxy_resolver_mojo_->CancelSetPacScript(); |
| 512 | 396 |
| 513 // The Mojo request is still made. | 397 // The Mojo request is still made. |
| 514 mojo_proxy_resolver_factory_.GetMockResolver().WaitForNextRequest(); | 398 mock_proxy_resolver_->WaitForNextRequest(); |
| 515 } | 399 } |
| 516 | 400 |
| 517 TEST_F(ProxyResolverMojoTest, SetPacScript_CancelAndSetAgain) { | 401 TEST_F(ProxyResolverMojoTest, SetPacScript_CancelAndSetAgain) { |
| 518 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 402 mock_proxy_resolver_->AddPacScriptAction( |
| 519 0, SetPacScriptAction::ReturnResult(ERR_FAILED)); | 403 SetPacScriptAction::ReturnResult(ERR_FAILED)); |
| 520 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 404 mock_proxy_resolver_->AddPacScriptAction( |
| 521 0, SetPacScriptAction::ReturnResult(ERR_UNEXPECTED)); | 405 SetPacScriptAction::ReturnResult(ERR_UNEXPECTED)); |
| 522 | 406 |
| 523 scoped_refptr<ProxyResolverScriptData> pac_script( | 407 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 524 ProxyResolverScriptData::FromUTF8(kScriptData)); | 408 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 525 TestCompletionCallback callback1; | 409 TestCompletionCallback callback1; |
| 526 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | 410 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( |
| 527 pac_script, callback1.callback())); | 411 pac_script, callback1.callback())); |
| 528 proxy_resolver_mojo_->CancelSetPacScript(); | 412 proxy_resolver_mojo_->CancelSetPacScript(); |
| 529 | 413 |
| 530 TestCompletionCallback callback2; | 414 TestCompletionCallback callback2; |
| 531 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( | 415 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_mojo_->SetPacScript( |
| 532 pac_script, callback2.callback())); | 416 pac_script, callback2.callback())); |
| 533 EXPECT_EQ(ERR_UNEXPECTED, callback2.GetResult(ERR_IO_PENDING)); | 417 EXPECT_EQ(ERR_UNEXPECTED, callback2.GetResult(ERR_IO_PENDING)); |
| 534 } | 418 } |
| 535 | 419 |
| 536 TEST_F(ProxyResolverMojoTest, SetPacScript_DeleteInCallback) { | 420 TEST_F(ProxyResolverMojoTest, SetPacScript_DeleteInCallback) { |
| 537 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 421 mock_proxy_resolver_->AddPacScriptAction( |
| 538 0, SetPacScriptAction::ReturnResult(OK)); | 422 SetPacScriptAction::ReturnResult(OK)); |
| 539 scoped_refptr<ProxyResolverScriptData> pac_script( | 423 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 540 ProxyResolverScriptData::FromUTF8(kScriptData)); | 424 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 541 TestCompletionCallback callback; | 425 TestCompletionCallback callback; |
| 542 EXPECT_EQ(OK, | 426 EXPECT_EQ(OK, |
| 543 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | 427 callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 544 pac_script, | 428 pac_script, |
| 545 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, | 429 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, |
| 546 base::Unretained(this), callback.callback())))); | 430 base::Unretained(this), callback.callback())))); |
| 547 EXPECT_EQ(1, mojo_proxy_resolver_factory_.num_create_calls()); | 431 resolver_destruction_closure_.WaitForResult(); |
| 548 } | 432 } |
| 549 | 433 |
| 550 TEST_F(ProxyResolverMojoTest, SetPacScript_DeleteInCallbackFromDisconnect) { | 434 TEST_F(ProxyResolverMojoTest, SetPacScript_DeleteInCallbackFromDisconnect) { |
| 551 mojo_proxy_resolver_factory_.AddFuturePacScriptAction( | 435 mock_proxy_resolver_->AddPacScriptAction(SetPacScriptAction::Disconnect()); |
| 552 0, SetPacScriptAction::Disconnect()); | |
| 553 scoped_refptr<ProxyResolverScriptData> pac_script( | 436 scoped_refptr<ProxyResolverScriptData> pac_script( |
| 554 ProxyResolverScriptData::FromUTF8(kScriptData)); | 437 ProxyResolverScriptData::FromUTF8(kScriptData)); |
| 555 TestCompletionCallback callback; | 438 TestCompletionCallback callback; |
| 556 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, | 439 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, |
| 557 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | 440 callback.GetResult(proxy_resolver_mojo_->SetPacScript( |
| 558 pac_script, | 441 pac_script, |
| 559 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, | 442 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, |
| 560 base::Unretained(this), callback.callback())))); | 443 base::Unretained(this), callback.callback())))); |
| 561 EXPECT_EQ(1, mojo_proxy_resolver_factory_.num_create_calls()); | 444 resolver_destruction_closure_.WaitForResult(); |
| 562 } | 445 } |
| 563 | 446 |
| 564 TEST_F(ProxyResolverMojoTest, GetProxyForURL) { | 447 TEST_F(ProxyResolverMojoTest, GetProxyForURL) { |
| 565 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 448 mock_proxy_resolver_->AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 566 0, GetProxyForUrlAction::ReturnServers( | 449 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
| 567 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | |
| 568 SetPacScript(0); | |
| 569 | 450 |
| 570 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 451 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 571 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 452 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 572 EXPECT_EQ(OK, request->WaitForResult()); | 453 EXPECT_EQ(OK, request->WaitForResult()); |
| 573 | 454 |
| 574 EXPECT_EQ("DIRECT", request->results().ToPacString()); | 455 EXPECT_EQ("DIRECT", request->results().ToPacString()); |
| 575 } | 456 } |
| 576 | 457 |
| 577 TEST_F(ProxyResolverMojoTest, GetProxyForURL_WithoutSetPacScript) { | |
| 578 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | |
| 579 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve()); | |
| 580 } | |
| 581 | |
| 582 TEST_F(ProxyResolverMojoTest, GetProxyForURL_LoadState) { | 458 TEST_F(ProxyResolverMojoTest, GetProxyForURL_LoadState) { |
| 583 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 459 mock_proxy_resolver_->AddGetProxyAction( |
| 584 0, GetProxyForUrlAction::SendLoadStateChanged(GURL(kExampleUrl))); | 460 GetProxyForUrlAction::SendLoadStateChanged(GURL(kExampleUrl))); |
| 585 SetPacScript(0); | |
| 586 | 461 |
| 587 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 462 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 588 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 463 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 589 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); | 464 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); |
| 590 while (request->load_state() == LOAD_STATE_RESOLVING_PROXY_FOR_URL) | 465 while (request->load_state() == LOAD_STATE_RESOLVING_PROXY_FOR_URL) |
| 591 base::RunLoop().RunUntilIdle(); | 466 base::RunLoop().RunUntilIdle(); |
| 592 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); | 467 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); |
| 593 mojo_proxy_resolver_factory_.GetMockResolver().ClearBlockedClients(); | 468 mock_proxy_resolver_->ClearBlockedClients(); |
| 594 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); | 469 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); |
| 595 } | 470 } |
| 596 | 471 |
| 597 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleResults) { | 472 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleResults) { |
| 598 static const char kPacString[] = | 473 static const char kPacString[] = |
| 599 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" | 474 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" |
| 600 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; | 475 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; |
| 601 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 476 mock_proxy_resolver_->AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 602 0, GetProxyForUrlAction::ReturnServers( | 477 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); |
| 603 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); | |
| 604 SetPacScript(0); | |
| 605 | 478 |
| 606 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 479 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 607 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 480 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 608 EXPECT_EQ(OK, request->WaitForResult()); | 481 EXPECT_EQ(OK, request->WaitForResult()); |
| 609 | 482 |
| 610 EXPECT_EQ(kPacString, request->results().ToPacString()); | 483 EXPECT_EQ(kPacString, request->results().ToPacString()); |
| 611 } | 484 } |
| 612 | 485 |
| 613 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Error) { | 486 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Error) { |
| 614 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 487 mock_proxy_resolver_->AddGetProxyAction( |
| 615 0, GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); | 488 GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); |
| 616 SetPacScript(0); | |
| 617 | 489 |
| 618 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 490 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 619 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 491 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 620 EXPECT_EQ(ERR_UNEXPECTED, request->WaitForResult()); | 492 EXPECT_EQ(ERR_UNEXPECTED, request->WaitForResult()); |
| 621 | 493 |
| 622 EXPECT_TRUE(request->results().is_empty()); | 494 EXPECT_TRUE(request->results().is_empty()); |
| 623 } | 495 } |
| 624 | 496 |
| 625 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Cancel) { | 497 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Cancel) { |
| 626 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 498 mock_proxy_resolver_->AddGetProxyAction( |
| 627 0, GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); | 499 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); |
| 628 SetPacScript(0); | |
| 629 | 500 |
| 630 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 501 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 631 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 502 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 632 request->Cancel(); | 503 request->Cancel(); |
| 633 | 504 |
| 634 // The Mojo request is still made. | 505 // The Mojo request is still made. |
| 635 mojo_proxy_resolver_factory_.GetMockResolver().WaitForNextRequest(); | 506 mock_proxy_resolver_->WaitForNextRequest(); |
| 636 } | 507 } |
| 637 | 508 |
| 638 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleRequests) { | 509 TEST_F(ProxyResolverMojoTest, GetProxyForURL_MultipleRequests) { |
| 639 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 510 mock_proxy_resolver_->AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 640 0, GetProxyForUrlAction::ReturnServers( | 511 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
| 641 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 512 mock_proxy_resolver_->AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 642 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 513 GURL("https://www.chromium.org"), |
| 643 0, GetProxyForUrlAction::ReturnServers( | 514 ProxyServersFromPacString("HTTPS foo:443"))); |
| 644 GURL("https://www.chromium.org"), | |
| 645 ProxyServersFromPacString("HTTPS foo:443"))); | |
| 646 SetPacScript(0); | |
| 647 | 515 |
| 648 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 516 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
| 649 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 517 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); |
| 650 scoped_ptr<Request> request2(MakeRequest(GURL("https://www.chromium.org"))); | 518 scoped_ptr<Request> request2(MakeRequest(GURL("https://www.chromium.org"))); |
| 651 EXPECT_EQ(ERR_IO_PENDING, request2->Resolve()); | 519 EXPECT_EQ(ERR_IO_PENDING, request2->Resolve()); |
| 652 | 520 |
| 653 EXPECT_EQ(OK, request1->WaitForResult()); | 521 EXPECT_EQ(OK, request1->WaitForResult()); |
| 654 EXPECT_EQ(OK, request2->WaitForResult()); | 522 EXPECT_EQ(OK, request2->WaitForResult()); |
| 655 | 523 |
| 656 EXPECT_EQ("DIRECT", request1->results().ToPacString()); | 524 EXPECT_EQ("DIRECT", request1->results().ToPacString()); |
| 657 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); | 525 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); |
| 658 } | 526 } |
| 659 | 527 |
| 660 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Disconnect) { | 528 TEST_F(ProxyResolverMojoTest, GetProxyForURL_Disconnect) { |
| 661 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 529 mock_proxy_resolver_->AddGetProxyAction( |
| 662 0, GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | 530 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); |
| 663 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | |
| 664 1, GetProxyForUrlAction::ReturnServers( | |
| 665 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | |
| 666 { | 531 { |
| 667 SetPacScript(0); | |
| 668 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 532 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
| 669 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 533 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); |
| 670 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); | 534 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); |
| 671 EXPECT_TRUE(request->results().is_empty()); | 535 EXPECT_TRUE(request->results().is_empty()); |
| 672 } | 536 } |
| 673 | |
| 674 { | |
| 675 // Calling GetProxyForURL without first setting the pac script should fail. | |
| 676 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | |
| 677 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve()); | |
| 678 } | |
| 679 | |
| 680 { | |
| 681 SetPacScript(1); | |
| 682 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | |
| 683 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | |
| 684 EXPECT_EQ(OK, request->WaitForResult()); | |
| 685 EXPECT_EQ("DIRECT", request->results().ToPacString()); | |
| 686 } | |
| 687 | |
| 688 EXPECT_EQ(2, mojo_proxy_resolver_factory_.num_create_calls()); | |
| 689 } | 537 } |
| 690 | 538 |
| 691 TEST_F(ProxyResolverMojoTest, GetProxyForURL_ClientClosed) { | 539 TEST_F(ProxyResolverMojoTest, GetProxyForURL_ClientClosed) { |
| 692 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 540 mock_proxy_resolver_->AddGetProxyAction( |
| 693 0, GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); | 541 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); |
| 694 SetPacScript(0); | |
| 695 | 542 |
| 696 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 543 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
| 697 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 544 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); |
| 698 | 545 |
| 699 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult()); | 546 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult()); |
| 700 EXPECT_EQ(1, mojo_proxy_resolver_factory_.num_create_calls()); | |
| 701 } | |
| 702 | |
| 703 TEST_F(ProxyResolverMojoTest, DisconnectAndFailCreate) { | |
| 704 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | |
| 705 0, GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | |
| 706 | |
| 707 { | |
| 708 SetPacScript(0); | |
| 709 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | |
| 710 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | |
| 711 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); | |
| 712 EXPECT_TRUE(request->results().is_empty()); | |
| 713 } | |
| 714 | |
| 715 // The service should attempt to create a new connection, but that should | |
| 716 // fail. | |
| 717 { | |
| 718 scoped_refptr<ProxyResolverScriptData> pac_script( | |
| 719 ProxyResolverScriptData::FromUTF8(kScriptData)); | |
| 720 TestCompletionCallback callback; | |
| 721 mojo_proxy_resolver_factory_.FailNextCreate(); | |
| 722 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, | |
| 723 callback.GetResult(proxy_resolver_mojo_->SetPacScript( | |
| 724 pac_script, callback.callback()))); | |
| 725 } | |
| 726 | |
| 727 // A third attempt should succeed. | |
| 728 SetPacScript(2); | |
| 729 | |
| 730 EXPECT_EQ(3, mojo_proxy_resolver_factory_.num_create_calls()); | |
| 731 } | |
| 732 | |
| 733 TEST_F(ProxyResolverMojoTest, DisconnectAndReconnectInCallback) { | |
| 734 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | |
| 735 0, GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | |
| 736 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | |
| 737 1, GetProxyForUrlAction::ReturnServers( | |
| 738 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | |
| 739 | |
| 740 // In this first resolve request, the Mojo service is disconnected causing the | |
| 741 // request to return ERR_PAC_SCRIPT_TERMINATED. In the request callback, form | |
| 742 // a new connection to a Mojo resolver service by calling SetPacScript(). | |
| 743 SetPacScript(0); | |
| 744 ProxyInfo results; | |
| 745 TestCompletionCallback resolve_callback; | |
| 746 TestCompletionCallback pac_callback; | |
| 747 ProxyResolver::RequestHandle handle; | |
| 748 BoundNetLog net_log; | |
| 749 int error = proxy_resolver_mojo_->GetProxyForURL( | |
| 750 GURL(kExampleUrl), &results, | |
| 751 base::Bind(&ProxyResolverMojoTest::RunCallbackAndSetPacScript, | |
| 752 base::Unretained(this), resolve_callback.callback(), | |
| 753 pac_callback.callback(), 1), | |
| 754 &handle, net_log); | |
| 755 EXPECT_EQ(ERR_IO_PENDING, error); | |
| 756 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, resolve_callback.WaitForResult()); | |
| 757 EXPECT_EQ(OK, pac_callback.WaitForResult()); | |
| 758 | |
| 759 // Setting the PAC script above should have been successful and let us send a | |
| 760 // resolve request. | |
| 761 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | |
| 762 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | |
| 763 EXPECT_EQ(OK, request->WaitForResult()); | |
| 764 EXPECT_EQ("DIRECT", request->results().ToPacString()); | |
| 765 | |
| 766 EXPECT_EQ(2, mojo_proxy_resolver_factory_.num_create_calls()); | |
| 767 } | 547 } |
| 768 | 548 |
| 769 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallback) { | 549 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallback) { |
| 770 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 550 mock_proxy_resolver_->AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
| 771 0, GetProxyForUrlAction::ReturnServers( | 551 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
| 772 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | |
| 773 SetPacScript(0); | |
| 774 ProxyInfo results; | 552 ProxyInfo results; |
| 775 TestCompletionCallback callback; | 553 TestCompletionCallback callback; |
| 776 ProxyResolver::RequestHandle handle; | 554 ProxyResolver::RequestHandle handle; |
| 777 BoundNetLog net_log; | 555 BoundNetLog net_log; |
| 778 EXPECT_EQ(OK, | 556 EXPECT_EQ(OK, |
| 779 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( | 557 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( |
| 780 GURL(kExampleUrl), &results, | 558 GURL(kExampleUrl), &results, |
| 781 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, | 559 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, |
| 782 base::Unretained(this), callback.callback()), | 560 base::Unretained(this), callback.callback()), |
| 783 &handle, net_log))); | 561 &handle, net_log))); |
| 562 resolver_destruction_closure_.WaitForResult(); |
| 784 } | 563 } |
| 785 | 564 |
| 786 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallbackFromDisconnect) { | 565 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallbackFromDisconnect) { |
| 787 mojo_proxy_resolver_factory_.AddFutureGetProxyAction( | 566 mock_proxy_resolver_->AddGetProxyAction( |
| 788 0, GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | 567 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); |
| 789 SetPacScript(0); | |
| 790 ProxyInfo results; | 568 ProxyInfo results; |
| 791 TestCompletionCallback callback; | 569 TestCompletionCallback callback; |
| 792 ProxyResolver::RequestHandle handle; | 570 ProxyResolver::RequestHandle handle; |
| 793 BoundNetLog net_log; | 571 BoundNetLog net_log; |
| 794 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, | 572 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, |
| 795 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( | 573 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL( |
| 796 GURL(kExampleUrl), &results, | 574 GURL(kExampleUrl), &results, |
| 797 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, | 575 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback, |
| 798 base::Unretained(this), callback.callback()), | 576 base::Unretained(this), callback.callback()), |
| 799 &handle, net_log))); | 577 &handle, net_log))); |
| 578 resolver_destruction_closure_.WaitForResult(); |
| 800 } | 579 } |
| 801 | 580 |
| 581 TEST_F(ProxyResolverMojoTest, DeleteResolver) { |
| 582 proxy_resolver_mojo_.reset(); |
| 583 resolver_destruction_closure_.WaitForResult(); |
| 584 } |
| 802 } // namespace net | 585 } // namespace net |
| OLD | NEW |