| 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/proxy/multi_threaded_proxy_resolver.h" | 5 #include "net/proxy/multi_threaded_proxy_resolver.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 | 548 |
| 549 base::MessageLoop::current()->RunUntilIdle(); | 549 base::MessageLoop::current()->RunUntilIdle(); |
| 550 | 550 |
| 551 // We now block the first resolver to ensure a request is sent to the second | 551 // We now block the first resolver to ensure a request is sent to the second |
| 552 // thread. | 552 // thread. |
| 553 factory().resolvers()[0]->Block(); | 553 factory().resolvers()[0]->Block(); |
| 554 rv = resolver().GetProxyForURL(GURL("http://request1"), &results[1], | 554 rv = resolver().GetProxyForURL(GURL("http://request1"), &results[1], |
| 555 callback[1].callback(), &request[1], | 555 callback[1].callback(), &request[1], |
| 556 BoundNetLog()); | 556 BoundNetLog()); |
| 557 EXPECT_EQ(ERR_IO_PENDING, rv); | 557 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 558 factory().resolvers()[0]->WaitUntilBlocked(); |
| 558 rv = resolver().GetProxyForURL(GURL("http://request2"), &results[2], | 559 rv = resolver().GetProxyForURL(GURL("http://request2"), &results[2], |
| 559 callback[2].callback(), &request[2], | 560 callback[2].callback(), &request[2], |
| 560 BoundNetLog()); | 561 BoundNetLog()); |
| 561 EXPECT_EQ(ERR_IO_PENDING, rv); | 562 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 562 EXPECT_EQ(0, callback[2].WaitForResult()); | 563 EXPECT_EQ(0, callback[2].WaitForResult()); |
| 563 ASSERT_EQ(2u, factory().resolvers().size()); | 564 ASSERT_EQ(2u, factory().resolvers().size()); |
| 564 | 565 |
| 565 // We now block the second resolver as well to ensure a request is sent to the | 566 // We now block the second resolver as well to ensure a request is sent to the |
| 566 // third thread. | 567 // third thread. |
| 567 factory().resolvers()[1]->Block(); | 568 factory().resolvers()[1]->Block(); |
| 568 rv = resolver().GetProxyForURL(GURL("http://request3"), &results[3], | 569 rv = resolver().GetProxyForURL(GURL("http://request3"), &results[3], |
| 569 callback[3].callback(), &request[3], | 570 callback[3].callback(), &request[3], |
| 570 BoundNetLog()); | 571 BoundNetLog()); |
| 571 EXPECT_EQ(ERR_IO_PENDING, rv); | 572 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 573 factory().resolvers()[1]->WaitUntilBlocked(); |
| 572 rv = resolver().GetProxyForURL(GURL("http://request4"), &results[4], | 574 rv = resolver().GetProxyForURL(GURL("http://request4"), &results[4], |
| 573 callback[4].callback(), &request[4], | 575 callback[4].callback(), &request[4], |
| 574 BoundNetLog()); | 576 BoundNetLog()); |
| 575 EXPECT_EQ(ERR_IO_PENDING, rv); | 577 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 576 EXPECT_EQ(0, callback[4].WaitForResult()); | 578 EXPECT_EQ(0, callback[4].WaitForResult()); |
| 577 | 579 |
| 578 // We should now have a total of 3 threads, each with its own ProxyResolver | 580 // We should now have a total of 3 threads, each with its own ProxyResolver |
| 579 // that will get initialized with the same data. | 581 // that will get initialized with the same data. |
| 580 ASSERT_EQ(3u, factory().resolvers().size()); | 582 ASSERT_EQ(3u, factory().resolvers().size()); |
| 581 | 583 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 } | 780 } |
| 779 // The factory destructor will block until the worker thread stops, but it may | 781 // The factory destructor will block until the worker thread stops, but it may |
| 780 // post tasks to the origin message loop which are still pending. Run them | 782 // post tasks to the origin message loop which are still pending. Run them |
| 781 // now to ensure it works as expected. | 783 // now to ensure it works as expected. |
| 782 base::RunLoop().RunUntilIdle(); | 784 base::RunLoop().RunUntilIdle(); |
| 783 } | 785 } |
| 784 | 786 |
| 785 } // namespace | 787 } // namespace |
| 786 | 788 |
| 787 } // namespace net | 789 } // namespace net |
| OLD | NEW |