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 "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "net/base/test_completion_callback.h" | 8 #include "net/base/test_completion_callback.h" |
9 #include "net/proxy/mock_proxy_resolver.h" | 9 #include "net/proxy/mock_proxy_resolver.h" |
| 10 #include "net/proxy/proxy_resolver_error_observer.h" |
10 #include "net/test/event_waiter.h" | 11 #include "net/test/event_waiter.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
12 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" | 13 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" |
13 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" | 14 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" |
14 | 15 |
15 namespace net { | 16 namespace net { |
16 namespace { | 17 namespace { |
17 | 18 |
18 const char kScriptData[] = "FooBarBaz"; | 19 const char kScriptData[] = "FooBarBaz"; |
19 | 20 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 base::Unretained(this)), | 69 base::Unretained(this)), |
69 mojo::GetProxy(&factory_)); | 70 mojo::GetProxy(&factory_)); |
70 mock_factory_owner_.reset(new TestProxyResolverFactory(&waiter_)); | 71 mock_factory_owner_.reset(new TestProxyResolverFactory(&waiter_)); |
71 mock_factory_ = mock_factory_owner_.get(); | 72 mock_factory_ = mock_factory_owner_.get(); |
72 } | 73 } |
73 | 74 |
74 void OnConnectionError() override { waiter_.NotifyEvent(CONNECTION_ERROR); } | 75 void OnConnectionError() override { waiter_.NotifyEvent(CONNECTION_ERROR); } |
75 | 76 |
76 scoped_ptr<ProxyResolverFactory> CreateFakeProxyResolverFactory( | 77 scoped_ptr<ProxyResolverFactory> CreateFakeProxyResolverFactory( |
77 HostResolver* host_resolver, | 78 HostResolver* host_resolver, |
| 79 scoped_ptr<ProxyResolverErrorObserver> error_observer, |
78 const ProxyResolver::LoadStateChangedCallback& callback) { | 80 const ProxyResolver::LoadStateChangedCallback& callback) { |
79 EXPECT_TRUE(host_resolver); | 81 EXPECT_TRUE(host_resolver); |
80 EXPECT_FALSE(callback.is_null()); | 82 EXPECT_FALSE(callback.is_null()); |
81 DCHECK(mock_factory_owner_); | 83 DCHECK(mock_factory_owner_); |
82 return mock_factory_owner_.Pass(); | 84 return mock_factory_owner_.Pass(); |
83 } | 85 } |
84 | 86 |
85 void OnFakeProxyInstanceDestroyed() { | 87 void OnFakeProxyInstanceDestroyed() { |
86 instances_destroyed_++; | 88 instances_destroyed_++; |
87 waiter_.NotifyEvent(RESOLVER_DESTROYED); | 89 waiter_.NotifyEvent(RESOLVER_DESTROYED); |
(...skipping 10 matching lines...) Expand all Loading... |
98 CompletionCallback create_callback_; | 100 CompletionCallback create_callback_; |
99 | 101 |
100 EventWaiter<Event> waiter_; | 102 EventWaiter<Event> waiter_; |
101 }; | 103 }; |
102 | 104 |
103 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectHostResolver) { | 105 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectHostResolver) { |
104 interfaces::ProxyResolverPtr proxy_resolver; | 106 interfaces::ProxyResolverPtr proxy_resolver; |
105 interfaces::HostResolverPtr host_resolver; | 107 interfaces::HostResolverPtr host_resolver; |
106 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 108 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
107 mojo::GetProxy(&host_resolver); | 109 mojo::GetProxy(&host_resolver); |
| 110 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 111 mojo::GetProxy(&error_observer); |
108 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 112 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
109 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 113 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
110 this, mojo::GetProxy(&client_ptr)); | 114 this, mojo::GetProxy(&client_ptr)); |
111 factory_->CreateResolver(mojo::String::From(kScriptData), | 115 factory_->CreateResolver( |
112 mojo::GetProxy(&proxy_resolver), | 116 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
113 host_resolver.Pass(), client_ptr.Pass()); | 117 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
114 proxy_resolver.set_error_handler(this); | 118 proxy_resolver.set_error_handler(this); |
115 waiter_.WaitForEvent(RESOLVER_CREATED); | 119 waiter_.WaitForEvent(RESOLVER_CREATED); |
116 EXPECT_EQ(0, instances_destroyed_); | 120 EXPECT_EQ(0, instances_destroyed_); |
117 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 121 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
118 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 122 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
119 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 123 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
120 TestCompletionCallback create_callback; | 124 TestCompletionCallback create_callback; |
121 create_callback_ = create_callback.callback(); | 125 create_callback_ = create_callback.callback(); |
122 mock_factory_->pending_requests()[0]->CompleteNow( | 126 mock_factory_->pending_requests()[0]->CompleteNow( |
123 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( | 127 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( |
124 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, | 128 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, |
125 base::Unretained(this))))); | 129 base::Unretained(this))))); |
126 EXPECT_EQ(OK, create_callback.WaitForResult()); | 130 EXPECT_EQ(OK, create_callback.WaitForResult()); |
127 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); | 131 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); |
128 waiter_.WaitForEvent(CONNECTION_ERROR); | 132 waiter_.WaitForEvent(CONNECTION_ERROR); |
129 EXPECT_EQ(1, instances_destroyed_); | 133 EXPECT_EQ(1, instances_destroyed_); |
130 } | 134 } |
131 | 135 |
132 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectProxyResolverClient) { | 136 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectProxyResolverClient) { |
133 interfaces::ProxyResolverPtr proxy_resolver; | 137 interfaces::ProxyResolverPtr proxy_resolver; |
134 interfaces::HostResolverPtr host_resolver; | 138 interfaces::HostResolverPtr host_resolver; |
135 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 139 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
136 mojo::GetProxy(&host_resolver); | 140 mojo::GetProxy(&host_resolver); |
137 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); | 141 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); |
138 binding.set_error_handler(this); | 142 binding.set_error_handler(this); |
| 143 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 144 mojo::GetProxy(&error_observer); |
139 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 145 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
140 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 146 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
141 this, mojo::GetProxy(&client_ptr)); | 147 this, mojo::GetProxy(&client_ptr)); |
142 factory_->CreateResolver(mojo::String::From(kScriptData), | 148 factory_->CreateResolver( |
143 mojo::GetProxy(&proxy_resolver), | 149 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
144 host_resolver.Pass(), client_ptr.Pass()); | 150 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
145 proxy_resolver.set_error_handler(this); | 151 proxy_resolver.set_error_handler(this); |
146 waiter_.WaitForEvent(RESOLVER_CREATED); | 152 waiter_.WaitForEvent(RESOLVER_CREATED); |
147 EXPECT_EQ(0, instances_destroyed_); | 153 EXPECT_EQ(0, instances_destroyed_); |
148 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 154 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
149 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 155 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
150 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 156 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
151 TestCompletionCallback create_callback; | 157 TestCompletionCallback create_callback; |
152 create_callback_ = create_callback.callback(); | 158 create_callback_ = create_callback.callback(); |
153 mock_factory_->pending_requests()[0]->CompleteNow( | 159 mock_factory_->pending_requests()[0]->CompleteNow( |
154 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( | 160 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( |
155 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, | 161 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, |
156 base::Unretained(this))))); | 162 base::Unretained(this))))); |
157 EXPECT_EQ(OK, create_callback.WaitForResult()); | 163 EXPECT_EQ(OK, create_callback.WaitForResult()); |
158 proxy_resolver.reset(); | 164 proxy_resolver.reset(); |
159 waiter_.WaitForEvent(CONNECTION_ERROR); | 165 waiter_.WaitForEvent(CONNECTION_ERROR); |
160 EXPECT_EQ(1, instances_destroyed_); | 166 EXPECT_EQ(1, instances_destroyed_); |
161 } | 167 } |
162 | 168 |
163 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectBoth) { | 169 TEST_F(MojoProxyResolverFactoryImplTest, DisconnectBoth) { |
164 interfaces::ProxyResolverPtr proxy_resolver; | 170 interfaces::ProxyResolverPtr proxy_resolver; |
165 interfaces::HostResolverPtr host_resolver; | 171 interfaces::HostResolverPtr host_resolver; |
166 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 172 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
167 mojo::GetProxy(&host_resolver); | 173 mojo::GetProxy(&host_resolver); |
| 174 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 175 mojo::GetProxy(&error_observer); |
168 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 176 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
169 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 177 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
170 this, mojo::GetProxy(&client_ptr)); | 178 this, mojo::GetProxy(&client_ptr)); |
171 factory_->CreateResolver(mojo::String::From(kScriptData), | 179 factory_->CreateResolver( |
172 mojo::GetProxy(&proxy_resolver), | 180 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
173 host_resolver.Pass(), client_ptr.Pass()); | 181 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
174 proxy_resolver.set_error_handler(this); | 182 proxy_resolver.set_error_handler(this); |
175 waiter_.WaitForEvent(RESOLVER_CREATED); | 183 waiter_.WaitForEvent(RESOLVER_CREATED); |
176 EXPECT_EQ(0, instances_destroyed_); | 184 EXPECT_EQ(0, instances_destroyed_); |
177 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 185 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
178 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 186 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
179 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 187 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
180 TestCompletionCallback create_callback; | 188 TestCompletionCallback create_callback; |
181 create_callback_ = create_callback.callback(); | 189 create_callback_ = create_callback.callback(); |
182 mock_factory_->pending_requests()[0]->CompleteNow( | 190 mock_factory_->pending_requests()[0]->CompleteNow( |
183 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( | 191 OK, make_scoped_ptr(new FakeProxyResolver(base::Bind( |
184 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, | 192 &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed, |
185 base::Unretained(this))))); | 193 base::Unretained(this))))); |
186 EXPECT_EQ(OK, create_callback.WaitForResult()); | 194 EXPECT_EQ(OK, create_callback.WaitForResult()); |
187 proxy_resolver.reset(); | 195 proxy_resolver.reset(); |
188 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); | 196 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); |
189 waiter_.WaitForEvent(RESOLVER_DESTROYED); | 197 waiter_.WaitForEvent(RESOLVER_DESTROYED); |
190 EXPECT_EQ(1, instances_destroyed_); | 198 EXPECT_EQ(1, instances_destroyed_); |
191 } | 199 } |
192 | 200 |
193 TEST_F(MojoProxyResolverFactoryImplTest, Error) { | 201 TEST_F(MojoProxyResolverFactoryImplTest, Error) { |
194 interfaces::ProxyResolverPtr proxy_resolver; | 202 interfaces::ProxyResolverPtr proxy_resolver; |
195 interfaces::HostResolverPtr host_resolver; | 203 interfaces::HostResolverPtr host_resolver; |
196 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 204 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
197 mojo::GetProxy(&host_resolver); | 205 mojo::GetProxy(&host_resolver); |
| 206 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 207 mojo::GetProxy(&error_observer); |
198 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 208 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
199 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 209 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
200 this, mojo::GetProxy(&client_ptr)); | 210 this, mojo::GetProxy(&client_ptr)); |
201 factory_->CreateResolver(mojo::String::From(kScriptData), | 211 factory_->CreateResolver( |
202 mojo::GetProxy(&proxy_resolver), | 212 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
203 host_resolver.Pass(), client_ptr.Pass()); | 213 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
204 proxy_resolver.set_error_handler(this); | 214 proxy_resolver.set_error_handler(this); |
205 waiter_.WaitForEvent(RESOLVER_CREATED); | 215 waiter_.WaitForEvent(RESOLVER_CREATED); |
206 EXPECT_EQ(0, instances_destroyed_); | 216 EXPECT_EQ(0, instances_destroyed_); |
207 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 217 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
208 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 218 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
209 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 219 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
210 TestCompletionCallback create_callback; | 220 TestCompletionCallback create_callback; |
211 create_callback_ = create_callback.callback(); | 221 create_callback_ = create_callback.callback(); |
212 mock_factory_->pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED, | 222 mock_factory_->pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED, |
213 nullptr); | 223 nullptr); |
214 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, create_callback.WaitForResult()); | 224 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, create_callback.WaitForResult()); |
215 } | 225 } |
216 | 226 |
217 TEST_F(MojoProxyResolverFactoryImplTest, | 227 TEST_F(MojoProxyResolverFactoryImplTest, |
218 DisconnectHostResolverDuringResolveCreation) { | 228 DisconnectHostResolverDuringResolveCreation) { |
219 interfaces::ProxyResolverPtr proxy_resolver; | 229 interfaces::ProxyResolverPtr proxy_resolver; |
220 interfaces::HostResolverPtr host_resolver; | 230 interfaces::HostResolverPtr host_resolver; |
221 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 231 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
222 mojo::GetProxy(&host_resolver); | 232 mojo::GetProxy(&host_resolver); |
| 233 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 234 mojo::GetProxy(&error_observer); |
223 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 235 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
224 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 236 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
225 this, mojo::GetProxy(&client_ptr)); | 237 this, mojo::GetProxy(&client_ptr)); |
226 factory_->CreateResolver(mojo::String::From(kScriptData), | 238 factory_->CreateResolver( |
227 mojo::GetProxy(&proxy_resolver), | 239 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
228 host_resolver.Pass(), client_ptr.Pass()); | 240 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
229 proxy_resolver.set_error_handler(this); | 241 proxy_resolver.set_error_handler(this); |
230 waiter_.WaitForEvent(RESOLVER_CREATED); | 242 waiter_.WaitForEvent(RESOLVER_CREATED); |
231 EXPECT_EQ(0, instances_destroyed_); | 243 EXPECT_EQ(0, instances_destroyed_); |
232 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 244 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
233 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 245 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
234 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 246 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
235 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); | 247 host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>(); |
236 TestCompletionCallback create_callback; | 248 TestCompletionCallback create_callback; |
237 create_callback_ = create_callback.callback(); | 249 create_callback_ = create_callback.callback(); |
238 waiter_.WaitForEvent(CONNECTION_ERROR); | 250 waiter_.WaitForEvent(CONNECTION_ERROR); |
239 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, create_callback.WaitForResult()); | 251 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, create_callback.WaitForResult()); |
240 } | 252 } |
241 | 253 |
242 TEST_F(MojoProxyResolverFactoryImplTest, | 254 TEST_F(MojoProxyResolverFactoryImplTest, |
243 DisconnectClientDuringResolverCreation) { | 255 DisconnectClientDuringResolverCreation) { |
244 interfaces::ProxyResolverPtr proxy_resolver; | 256 interfaces::ProxyResolverPtr proxy_resolver; |
245 interfaces::HostResolverPtr host_resolver; | 257 interfaces::HostResolverPtr host_resolver; |
246 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 258 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
247 mojo::GetProxy(&host_resolver); | 259 mojo::GetProxy(&host_resolver); |
248 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); | 260 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); |
249 binding.set_error_handler(this); | 261 binding.set_error_handler(this); |
| 262 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 263 mojo::GetProxy(&error_observer); |
250 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 264 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
251 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 265 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
252 this, mojo::GetProxy(&client_ptr)); | 266 this, mojo::GetProxy(&client_ptr)); |
253 factory_->CreateResolver(mojo::String::From(kScriptData), | 267 factory_->CreateResolver( |
254 mojo::GetProxy(&proxy_resolver), | 268 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
255 host_resolver.Pass(), client_ptr.Pass()); | 269 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
256 proxy_resolver.set_error_handler(this); | 270 proxy_resolver.set_error_handler(this); |
257 waiter_.WaitForEvent(RESOLVER_CREATED); | 271 waiter_.WaitForEvent(RESOLVER_CREATED); |
258 EXPECT_EQ(0, instances_destroyed_); | 272 EXPECT_EQ(0, instances_destroyed_); |
259 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 273 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
260 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 274 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
261 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 275 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
262 client_binding.Close(); | 276 client_binding.Close(); |
263 waiter_.WaitForEvent(CONNECTION_ERROR); | 277 waiter_.WaitForEvent(CONNECTION_ERROR); |
264 } | 278 } |
265 | 279 |
266 TEST_F(MojoProxyResolverFactoryImplTest, | 280 TEST_F(MojoProxyResolverFactoryImplTest, |
267 DisconnectFactoryDuringResolverCreation) { | 281 DisconnectFactoryDuringResolverCreation) { |
268 interfaces::ProxyResolverPtr proxy_resolver; | 282 interfaces::ProxyResolverPtr proxy_resolver; |
269 interfaces::HostResolverPtr host_resolver; | 283 interfaces::HostResolverPtr host_resolver; |
270 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = | 284 mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request = |
271 mojo::GetProxy(&host_resolver); | 285 mojo::GetProxy(&host_resolver); |
272 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); | 286 mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver); |
273 binding.set_error_handler(this); | 287 binding.set_error_handler(this); |
| 288 interfaces::ProxyResolverErrorObserverPtr error_observer; |
| 289 mojo::GetProxy(&error_observer); |
274 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 290 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
275 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( | 291 mojo::Binding<ProxyResolverFactoryRequestClient> client_binding( |
276 this, mojo::GetProxy(&client_ptr)); | 292 this, mojo::GetProxy(&client_ptr)); |
277 factory_->CreateResolver(mojo::String::From(kScriptData), | 293 factory_->CreateResolver( |
278 mojo::GetProxy(&proxy_resolver), | 294 mojo::String::From(kScriptData), mojo::GetProxy(&proxy_resolver), |
279 host_resolver.Pass(), client_ptr.Pass()); | 295 host_resolver.Pass(), error_observer.Pass(), client_ptr.Pass()); |
280 proxy_resolver.set_error_handler(this); | 296 proxy_resolver.set_error_handler(this); |
281 client_binding.set_error_handler(this); | 297 client_binding.set_error_handler(this); |
282 waiter_.WaitForEvent(RESOLVER_CREATED); | 298 waiter_.WaitForEvent(RESOLVER_CREATED); |
283 EXPECT_EQ(0, instances_destroyed_); | 299 EXPECT_EQ(0, instances_destroyed_); |
284 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); | 300 ASSERT_EQ(1u, mock_factory_->pending_requests().size()); |
285 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), | 301 EXPECT_EQ(base::ASCIIToUTF16(kScriptData), |
286 mock_factory_->pending_requests()[0]->script_data()->utf16()); | 302 mock_factory_->pending_requests()[0]->script_data()->utf16()); |
287 factory_.reset(); | 303 factory_.reset(); |
288 waiter_.WaitForEvent(CONNECTION_ERROR); | 304 waiter_.WaitForEvent(CONNECTION_ERROR); |
289 } | 305 } |
290 | 306 |
291 } // namespace net | 307 } // namespace net |
OLD | NEW |