| 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/mojo_proxy_resolver_factory_impl.h" | 5 #include "net/proxy/mojo_proxy_resolver_factory_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 112 |
| 113 void OnConnectionError() { waiter_.NotifyEvent(CONNECTION_ERROR); } | 113 void OnConnectionError() { waiter_.NotifyEvent(CONNECTION_ERROR); } |
| 114 | 114 |
| 115 void OnFakeProxyInstanceDestroyed() { | 115 void OnFakeProxyInstanceDestroyed() { |
| 116 instances_destroyed_++; | 116 instances_destroyed_++; |
| 117 waiter_.NotifyEvent(RESOLVER_DESTROYED); | 117 waiter_.NotifyEvent(RESOLVER_DESTROYED); |
| 118 } | 118 } |
| 119 | 119 |
| 120 void ReportResult(int32_t error) override { create_callback_.Run(error); } | 120 void ReportResult(int32_t error) override { create_callback_.Run(error); } |
| 121 | 121 |
| 122 void Alert(const mojo::String& message) override {} | 122 void Alert(const std::string& message) override {} |
| 123 | 123 |
| 124 void OnError(int32_t line_number, const mojo::String& message) override {} | 124 void OnError(int32_t line_number, const std::string& message) override {} |
| 125 | 125 |
| 126 void ResolveDns(std::unique_ptr<HostResolver::RequestInfo> request_info, | 126 void ResolveDns(std::unique_ptr<HostResolver::RequestInfo> request_info, |
| 127 interfaces::HostResolverRequestClientPtr client) override {} | 127 interfaces::HostResolverRequestClientPtr client) override {} |
| 128 | 128 |
| 129 protected: | 129 protected: |
| 130 std::unique_ptr<TestProxyResolverFactory> mock_factory_owner_; | 130 std::unique_ptr<TestProxyResolverFactory> mock_factory_owner_; |
| 131 TestProxyResolverFactory* mock_factory_; | 131 TestProxyResolverFactory* mock_factory_; |
| 132 interfaces::ProxyResolverFactoryPtr factory_; | 132 interfaces::ProxyResolverFactoryPtr factory_; |
| 133 | 133 |
| 134 int instances_destroyed_ = 0; | 134 int instances_destroyed_ = 0; |
| 135 CompletionCallback create_callback_; | 135 CompletionCallback create_callback_; |
| 136 | 136 |
| 137 EventWaiter<Event> waiter_; | 137 EventWaiter<Event> waiter_; |
| 138 }; | 138 }; |
| 139 | 139 |
| 140 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectProxyResolverClient) { | 140 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectProxyResolverClient) { |
| 141 interfaces::ProxyResolverPtr proxy_resolver; | 141 interfaces::ProxyResolverPtr proxy_resolver; |
| 142 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 142 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
| 143 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 143 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
| 144 this, mojo::GetProxy(&client_ptr)); | 144 this, mojo::GetProxy(&client_ptr)); |
| 145 factory_->CreateResolver(mojo::String::From(kScriptData), | 145 factory_->CreateResolver(kScriptData, mojo::GetProxy(&proxy_resolver), |
| 146 mojo::GetProxy(&proxy_resolver), | |
| 147 std::move(client_ptr)); | 146 std::move(client_ptr)); |
| 148 proxy_resolver.set_connection_error_handler( | 147 proxy_resolver.set_connection_error_handler( |
| 149 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, | 148 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, |
| 150 base::Unretained(this))); | 149 base::Unretained(this))); |
| 151 waiter_.WaitForEvent(RESOLVER_CREATED); | 150 waiter_.WaitForEvent(RESOLVER_CREATED); |
| 152 EXPECT_EQ(0, instances_destroyed_); | 151 EXPECT_EQ(0, instances_destroyed_); |
| 153 ASSERT_EQ(1u, mock_factory_->requests_handled()); | 152 ASSERT_EQ(1u, mock_factory_->requests_handled()); |
| 154 TestCompletionCallback create_callback; | 153 TestCompletionCallback create_callback; |
| 155 create_callback_ = create_callback.callback(); | 154 create_callback_ = create_callback.callback(); |
| 156 ASSERT_TRUE(mock_factory_->pending_request()); | 155 ASSERT_TRUE(mock_factory_->pending_request()); |
| 157 mock_factory_->pending_request()->resolver->reset( | 156 mock_factory_->pending_request()->resolver->reset( |
| 158 new FakeProxyResolver(base::Bind( | 157 new FakeProxyResolver(base::Bind( |
| 159 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, | 158 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, |
| 160 base::Unretained(this)))); | 159 base::Unretained(this)))); |
| 161 mock_factory_->pending_request()->callback.Run(OK); | 160 mock_factory_->pending_request()->callback.Run(OK); |
| 162 EXPECT_THAT(create_callback.WaitForResult(), IsOk()); | 161 EXPECT_THAT(create_callback.WaitForResult(), IsOk()); |
| 163 proxy_resolver.reset(); | 162 proxy_resolver.reset(); |
| 164 waiter_.WaitForEvent(RESOLVER_DESTROYED); | 163 waiter_.WaitForEvent(RESOLVER_DESTROYED); |
| 165 EXPECT_EQ(1, instances_destroyed_); | 164 EXPECT_EQ(1, instances_destroyed_); |
| 166 } | 165 } |
| 167 | 166 |
| 168 TEST_F(MojoProxyResolverFactoryImplTest, Error) { | 167 TEST_F(MojoProxyResolverFactoryImplTest, Error) { |
| 169 interfaces::ProxyResolverPtr proxy_resolver; | 168 interfaces::ProxyResolverPtr proxy_resolver; |
| 170 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 169 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
| 171 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 170 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
| 172 this, mojo::GetProxy(&client_ptr)); | 171 this, mojo::GetProxy(&client_ptr)); |
| 173 factory_->CreateResolver(mojo::String::From(kScriptData), | 172 factory_->CreateResolver(kScriptData, mojo::GetProxy(&proxy_resolver), |
| 174 mojo::GetProxy(&proxy_resolver), | |
| 175 std::move(client_ptr)); | 173 std::move(client_ptr)); |
| 176 proxy_resolver.set_connection_error_handler( | 174 proxy_resolver.set_connection_error_handler( |
| 177 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, | 175 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, |
| 178 base::Unretained(this))); | 176 base::Unretained(this))); |
| 179 waiter_.WaitForEvent(RESOLVER_CREATED); | 177 waiter_.WaitForEvent(RESOLVER_CREATED); |
| 180 EXPECT_EQ(0, instances_destroyed_); | 178 EXPECT_EQ(0, instances_destroyed_); |
| 181 ASSERT_EQ(1u, mock_factory_->requests_handled()); | 179 ASSERT_EQ(1u, mock_factory_->requests_handled()); |
| 182 TestCompletionCallback create_callback; | 180 TestCompletionCallback create_callback; |
| 183 create_callback_ = create_callback.callback(); | 181 create_callback_ = create_callback.callback(); |
| 184 ASSERT_TRUE(mock_factory_->pending_request()); | 182 ASSERT_TRUE(mock_factory_->pending_request()); |
| 185 mock_factory_->pending_request()->callback.Run(ERR_PAC_SCRIPT_FAILED); | 183 mock_factory_->pending_request()->callback.Run(ERR_PAC_SCRIPT_FAILED); |
| 186 EXPECT_THAT(create_callback.WaitForResult(), IsError(ERR_PAC_SCRIPT_FAILED)); | 184 EXPECT_THAT(create_callback.WaitForResult(), IsError(ERR_PAC_SCRIPT_FAILED)); |
| 187 } | 185 } |
| 188 | 186 |
| 189 TEST_F(MojoProxyResolverFactoryImplTest, | 187 TEST_F(MojoProxyResolverFactoryImplTest, |
| 190 DisconnectClientDuringResolverCreation) { | 188 DisconnectClientDuringResolverCreation) { |
| 191 interfaces::ProxyResolverPtr proxy_resolver; | 189 interfaces::ProxyResolverPtr proxy_resolver; |
| 192 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 190 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
| 193 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 191 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
| 194 this, mojo::GetProxy(&client_ptr)); | 192 this, mojo::GetProxy(&client_ptr)); |
| 195 factory_->CreateResolver(mojo::String::From(kScriptData), | 193 factory_->CreateResolver(kScriptData, mojo::GetProxy(&proxy_resolver), |
| 196 mojo::GetProxy(&proxy_resolver), | |
| 197 std::move(client_ptr)); | 194 std::move(client_ptr)); |
| 198 proxy_resolver.set_connection_error_handler( | 195 proxy_resolver.set_connection_error_handler( |
| 199 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, | 196 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, |
| 200 base::Unretained(this))); | 197 base::Unretained(this))); |
| 201 waiter_.WaitForEvent(RESOLVER_CREATED); | 198 waiter_.WaitForEvent(RESOLVER_CREATED); |
| 202 EXPECT_EQ(0, instances_destroyed_); | 199 EXPECT_EQ(0, instances_destroyed_); |
| 203 ASSERT_EQ(1u, mock_factory_->requests_handled()); | 200 ASSERT_EQ(1u, mock_factory_->requests_handled()); |
| 204 client_binding.Close(); | 201 client_binding.Close(); |
| 205 waiter_.WaitForEvent(CONNECTION_ERROR); | 202 waiter_.WaitForEvent(CONNECTION_ERROR); |
| 206 } | 203 } |
| 207 | 204 |
| 208 TEST_F(MojoProxyResolverFactoryImplTest, | 205 TEST_F(MojoProxyResolverFactoryImplTest, |
| 209 DisconnectFactoryDuringResolverCreation) { | 206 DisconnectFactoryDuringResolverCreation) { |
| 210 interfaces::ProxyResolverPtr proxy_resolver; | 207 interfaces::ProxyResolverPtr proxy_resolver; |
| 211 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 208 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
| 212 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 209 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
| 213 this, mojo::GetProxy(&client_ptr)); | 210 this, mojo::GetProxy(&client_ptr)); |
| 214 factory_->CreateResolver(mojo::String::From(kScriptData), | 211 factory_->CreateResolver(kScriptData, mojo::GetProxy(&proxy_resolver), |
| 215 mojo::GetProxy(&proxy_resolver), | |
| 216 std::move(client_ptr)); | 212 std::move(client_ptr)); |
| 217 proxy_resolver.set_connection_error_handler( | 213 proxy_resolver.set_connection_error_handler( |
| 218 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, | 214 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, |
| 219 base::Unretained(this))); | 215 base::Unretained(this))); |
| 220 client_binding.set_connection_error_handler( | 216 client_binding.set_connection_error_handler( |
| 221 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, | 217 base::Bind(&MojoProxyResolverFactoryImplTest::OnConnectionError, |
| 222 base::Unretained(this))); | 218 base::Unretained(this))); |
| 223 waiter_.WaitForEvent(RESOLVER_CREATED); | 219 waiter_.WaitForEvent(RESOLVER_CREATED); |
| 224 EXPECT_EQ(0, instances_destroyed_); | 220 EXPECT_EQ(0, instances_destroyed_); |
| 225 ASSERT_EQ(1u, mock_factory_->requests_handled()); | 221 ASSERT_EQ(1u, mock_factory_->requests_handled()); |
| 226 factory_.reset(); | 222 factory_.reset(); |
| 227 waiter_.WaitForEvent(CONNECTION_ERROR); | 223 waiter_.WaitForEvent(CONNECTION_ERROR); |
| 228 } | 224 } |
| 229 | 225 |
| 230 } // namespace net | 226 } // namespace net |
| OLD | NEW |