| Index: net/proxy/mojo_proxy_resolver_impl_unittest.cc
|
| diff --git a/net/proxy/mojo_proxy_resolver_impl_unittest.cc b/net/proxy/mojo_proxy_resolver_impl_unittest.cc
|
| index a6b44294791aed1d9f7dbb7caff0bb66f742c510..8f2f4ab29538ba35bc2ee754c9b3e9d3524a6411 100644
|
| --- a/net/proxy/mojo_proxy_resolver_impl_unittest.cc
|
| +++ b/net/proxy/mojo_proxy_resolver_impl_unittest.cc
|
| @@ -14,6 +14,7 @@
|
| #include "net/proxy/mojo_proxy_type_converters.h"
|
| #include "net/proxy/proxy_info.h"
|
| #include "net/proxy/proxy_server.h"
|
| +#include "net/test/event_waiter.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
|
| @@ -24,31 +25,39 @@ namespace {
|
| class TestRequestClient : public interfaces::ProxyResolverRequestClient,
|
| public mojo::ErrorHandler {
|
| public:
|
| + enum Event {
|
| + RESULT_RECEIVED,
|
| + LOAD_STATE_CHANGED,
|
| + CONNECTION_ERROR,
|
| + };
|
| +
|
| explicit TestRequestClient(
|
| mojo::InterfaceRequest<interfaces::ProxyResolverRequestClient> request);
|
|
|
| void WaitForResult();
|
| - void WaitForConnectionError();
|
|
|
| Error error() { return error_; }
|
| const mojo::Array<interfaces::ProxyServerPtr>& results() { return results_; }
|
| + LoadState load_state() { return load_state_; }
|
| + EventWaiter<Event>& event_waiter() { return event_waiter_; }
|
|
|
| private:
|
| // interfaces::ProxyResolverRequestClient override.
|
| void ReportResult(int32_t error,
|
| mojo::Array<interfaces::ProxyServerPtr> results) override;
|
| + void LoadStateChanged(int32_t load_state) override;
|
|
|
| // mojo::ErrorHandler override.
|
| void OnConnectionError() override;
|
|
|
| bool done_ = false;
|
| - bool encountered_connection_error_ = false;
|
| Error error_ = ERR_FAILED;
|
| + LoadState load_state_ = LOAD_STATE_IDLE;
|
| mojo::Array<interfaces::ProxyServerPtr> results_;
|
| - base::Closure run_loop_quit_closure_;
|
| - base::Closure connection_error_callback_;
|
|
|
| mojo::Binding<interfaces::ProxyResolverRequestClient> binding_;
|
| +
|
| + EventWaiter<Event> event_waiter_;
|
| };
|
|
|
| TestRequestClient::TestRequestClient(
|
| @@ -61,38 +70,27 @@ void TestRequestClient::WaitForResult() {
|
| if (done_)
|
| return;
|
|
|
| - base::RunLoop run_loop;
|
| - run_loop_quit_closure_ = run_loop.QuitClosure();
|
| - run_loop.Run();
|
| + event_waiter_.WaitForEvent(RESULT_RECEIVED);
|
| ASSERT_TRUE(done_);
|
| }
|
|
|
| -void TestRequestClient::WaitForConnectionError() {
|
| - if (encountered_connection_error_)
|
| - return;
|
| -
|
| - base::RunLoop run_loop;
|
| - connection_error_callback_ = run_loop.QuitClosure();
|
| - run_loop.Run();
|
| - ASSERT_TRUE(encountered_connection_error_);
|
| -}
|
| -
|
| void TestRequestClient::ReportResult(
|
| int32_t error,
|
| mojo::Array<interfaces::ProxyServerPtr> results) {
|
| - if (!run_loop_quit_closure_.is_null()) {
|
| - run_loop_quit_closure_.Run();
|
| - }
|
| + event_waiter_.NotifyEvent(RESULT_RECEIVED);
|
| ASSERT_FALSE(done_);
|
| error_ = static_cast<Error>(error);
|
| results_ = results.Pass();
|
| done_ = true;
|
| }
|
|
|
| +void TestRequestClient::LoadStateChanged(int32_t load_state) {
|
| + event_waiter_.NotifyEvent(LOAD_STATE_CHANGED);
|
| + load_state_ = static_cast<LoadState>(load_state);
|
| +}
|
| +
|
| void TestRequestClient::OnConnectionError() {
|
| - if (!connection_error_callback_.is_null())
|
| - connection_error_callback_.Run();
|
| - encountered_connection_error_ = true;
|
| + event_waiter_.NotifyEvent(CONNECTION_ERROR);
|
| }
|
|
|
| class SetPacScriptClient {
|
| @@ -211,12 +209,14 @@ class MojoProxyResolverImplTest : public testing::Test {
|
| scoped_ptr<CallbackMockProxyResolver> mock_resolver(
|
| new CallbackMockProxyResolver);
|
| mock_proxy_resolver_ = mock_resolver.get();
|
| - resolver_.reset(new MojoProxyResolverImpl(mock_resolver.Pass()));
|
| + resolver_impl_.reset(new MojoProxyResolverImpl(mock_resolver.Pass()));
|
| + resolver_ = resolver_impl_.get();
|
| }
|
|
|
| CallbackMockProxyResolver* mock_proxy_resolver_;
|
|
|
| - scoped_ptr<interfaces::ProxyResolver> resolver_;
|
| + scoped_ptr<MojoProxyResolverImpl> resolver_impl_;
|
| + interfaces::ProxyResolver* resolver_;
|
| };
|
|
|
| TEST_F(MojoProxyResolverImplTest, GetProxyForUrl) {
|
| @@ -228,6 +228,12 @@ TEST_F(MojoProxyResolverImplTest, GetProxyForUrl) {
|
| scoped_refptr<MockAsyncProxyResolverBase::Request> request =
|
| mock_proxy_resolver_->pending_requests()[0];
|
| EXPECT_EQ(GURL("http://example.com"), request->url());
|
| +
|
| + resolver_impl_->LoadStateChanged(request.get(),
|
| + LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT);
|
| + client.event_waiter().WaitForEvent(TestRequestClient::LOAD_STATE_CHANGED);
|
| + EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, client.load_state());
|
| +
|
| request->results()->UsePacString(
|
| "PROXY proxy.example.com:1; "
|
| "SOCKS4 socks4.example.com:2; "
|
| @@ -409,8 +415,8 @@ TEST_F(MojoProxyResolverImplTest, DestroyService) {
|
| ASSERT_EQ(1u, mock_proxy_resolver_->pending_requests().size());
|
| scoped_refptr<MockAsyncProxyResolverBase::Request> request =
|
| mock_proxy_resolver_->pending_requests()[0];
|
| - resolver_.reset();
|
| - client.WaitForConnectionError();
|
| + resolver_impl_.reset();
|
| + client.event_waiter().WaitForEvent(TestRequestClient::CONNECTION_ERROR);
|
| }
|
|
|
| } // namespace net
|
|
|