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

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

Issue 1076083002: Shut down proxy resolver utility processes when no longer needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-service-with-factory-restart
Patch Set: Created 5 years, 8 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
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698