[SyncFS] Use variadic template in callback_tracker_internal.h
[chromium-blink-merge.git] / net / http / http_server_properties_manager_unittest.cc
blob012a46d24dc9e52f812202420beb2fc35019bacb
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/http/http_server_properties_manager.h"
7 #include "base/basictypes.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/prefs/pref_registry_simple.h"
10 #include "base/prefs/testing_pref_service.h"
11 #include "base/run_loop.h"
12 #include "base/test/test_simple_task_runner.h"
13 #include "base/values.h"
14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h"
18 namespace net {
20 namespace {
22 using ::testing::_;
23 using ::testing::Invoke;
24 using ::testing::Mock;
25 using ::testing::StrictMock;
27 const char kTestHttpServerProperties[] = "TestHttpServerProperties";
29 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
30 public:
31 TestingHttpServerPropertiesManager(
32 PrefService* pref_service,
33 const char* pref_path,
34 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
35 : HttpServerPropertiesManager(pref_service, pref_path, io_task_runner) {
36 InitializeOnNetworkThread();
39 virtual ~TestingHttpServerPropertiesManager() {}
41 // Make these methods public for testing.
42 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread;
43 using HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread;
45 // Post tasks without a delay during tests.
46 virtual void StartPrefsUpdateTimerOnNetworkThread(
47 base::TimeDelta delay) OVERRIDE {
48 HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread(
49 base::TimeDelta());
52 void UpdateCacheFromPrefsOnUIConcrete() {
53 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread();
56 // Post tasks without a delay during tests.
57 virtual void StartCacheUpdateTimerOnPrefThread(
58 base::TimeDelta delay) OVERRIDE {
59 HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread(
60 base::TimeDelta());
63 void UpdatePrefsFromCacheOnNetworkThreadConcrete(
64 const base::Closure& callback) {
65 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback);
68 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
69 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
70 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread,
71 void(std::vector<std::string>* spdy_servers,
72 net::SpdySettingsMap* spdy_settings_map,
73 net::AlternateProtocolMap* alternate_protocol_map,
74 net::AlternateProtocolExperiment experiment,
75 net::SupportsQuicMap* supports_quic_map,
76 bool detected_corrupted_prefs));
77 MOCK_METHOD4(UpdatePrefsOnPref,
78 void(base::ListValue* spdy_server_list,
79 net::SpdySettingsMap* spdy_settings_map,
80 net::AlternateProtocolMap* alternate_protocol_map,
81 net::SupportsQuicMap* supports_quic_map));
83 private:
84 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
87 class HttpServerPropertiesManagerTest : public testing::Test {
88 protected:
89 HttpServerPropertiesManagerTest() {}
91 virtual void SetUp() OVERRIDE {
92 pref_service_.registry()->RegisterDictionaryPref(kTestHttpServerProperties);
93 http_server_props_manager_.reset(
94 new StrictMock<TestingHttpServerPropertiesManager>(
95 &pref_service_,
96 kTestHttpServerProperties,
97 base::MessageLoop::current()->message_loop_proxy()));
98 ExpectCacheUpdate();
99 base::RunLoop().RunUntilIdle();
102 virtual void TearDown() OVERRIDE {
103 if (http_server_props_manager_.get())
104 http_server_props_manager_->ShutdownOnPrefThread();
105 base::RunLoop().RunUntilIdle();
106 http_server_props_manager_.reset();
109 void ExpectCacheUpdate() {
110 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread())
111 .WillOnce(Invoke(http_server_props_manager_.get(),
112 &TestingHttpServerPropertiesManager::
113 UpdateCacheFromPrefsOnUIConcrete));
116 void ExpectPrefsUpdate() {
117 EXPECT_CALL(*http_server_props_manager_,
118 UpdatePrefsFromCacheOnNetworkThread(_))
119 .WillOnce(Invoke(http_server_props_manager_.get(),
120 &TestingHttpServerPropertiesManager::
121 UpdatePrefsFromCacheOnNetworkThreadConcrete));
124 void ExpectPrefsUpdateRepeatedly() {
125 EXPECT_CALL(*http_server_props_manager_,
126 UpdatePrefsFromCacheOnNetworkThread(_))
127 .WillRepeatedly(
128 Invoke(http_server_props_manager_.get(),
129 &TestingHttpServerPropertiesManager::
130 UpdatePrefsFromCacheOnNetworkThreadConcrete));
133 //base::RunLoop loop_;
134 TestingPrefServiceSimple pref_service_;
135 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_;
137 private:
138 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest);
141 TEST_F(HttpServerPropertiesManagerTest,
142 SingleUpdateForTwoSpdyServerPrefChanges) {
143 ExpectCacheUpdate();
145 // Set up the prefs for www.google.com:80 and mail.google.com:80 and then set
146 // it twice. Only expect a single cache update.
148 base::DictionaryValue* server_pref_dict = new base::DictionaryValue;
150 // Set supports_spdy for www.google.com:80.
151 server_pref_dict->SetBoolean("supports_spdy", true);
153 // Set up alternate_protocol for www.google.com:80.
154 base::DictionaryValue* alternate_protocol = new base::DictionaryValue;
155 alternate_protocol->SetInteger("port", 443);
156 alternate_protocol->SetString("protocol_str", "npn-spdy/3");
157 server_pref_dict->SetWithoutPathExpansion("alternate_protocol",
158 alternate_protocol);
160 // Set up SupportsQuic for www.google.com:80.
161 base::DictionaryValue* supports_quic = new base::DictionaryValue;
162 supports_quic->SetBoolean("used_quic", true);
163 supports_quic->SetString("address", "foo");
164 server_pref_dict->SetWithoutPathExpansion("supports_quic", supports_quic);
166 // Set the server preference for www.google.com:80.
167 base::DictionaryValue* servers_dict = new base::DictionaryValue;
168 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict);
170 // Set the preference for mail.google.com server.
171 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue;
173 // Set supports_spdy for mail.google.com:80
174 server_pref_dict1->SetBoolean("supports_spdy", true);
176 // Set up alternate_protocol for mail.google.com:80
177 base::DictionaryValue* alternate_protocol1 = new base::DictionaryValue;
178 alternate_protocol1->SetInteger("port", 444);
179 alternate_protocol1->SetString("protocol_str", "npn-spdy/3.1");
181 server_pref_dict1->SetWithoutPathExpansion("alternate_protocol",
182 alternate_protocol1);
184 // Set up SupportsQuic for mail.google.com:80
185 base::DictionaryValue* supports_quic1 = new base::DictionaryValue;
186 supports_quic1->SetBoolean("used_quic", false);
187 supports_quic1->SetString("address", "bar");
188 server_pref_dict1->SetWithoutPathExpansion("supports_quic", supports_quic1);
190 // Set the server preference for mail.google.com:80.
191 servers_dict->SetWithoutPathExpansion("mail.google.com:80",
192 server_pref_dict1);
194 base::DictionaryValue* http_server_properties_dict =
195 new base::DictionaryValue;
196 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1);
197 http_server_properties_dict->SetWithoutPathExpansion("servers", servers_dict);
199 // Set the same value for kHttpServerProperties multiple times.
200 pref_service_.SetManagedPref(kTestHttpServerProperties,
201 http_server_properties_dict);
202 base::DictionaryValue* http_server_properties_dict2 =
203 http_server_properties_dict->DeepCopy();
204 pref_service_.SetManagedPref(kTestHttpServerProperties,
205 http_server_properties_dict2);
207 base::RunLoop().RunUntilIdle();
208 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
210 // Verify SupportsSpdy.
211 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(
212 net::HostPortPair::FromString("www.google.com:80")));
213 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(
214 net::HostPortPair::FromString("mail.google.com:80")));
215 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(
216 net::HostPortPair::FromString("foo.google.com:1337")));
218 // Verify AlternateProtocol.
219 ASSERT_TRUE(http_server_props_manager_->HasAlternateProtocol(
220 net::HostPortPair::FromString("www.google.com:80")));
221 ASSERT_TRUE(http_server_props_manager_->HasAlternateProtocol(
222 net::HostPortPair::FromString("mail.google.com:80")));
223 net::AlternateProtocolInfo port_alternate_protocol =
224 http_server_props_manager_->GetAlternateProtocol(
225 net::HostPortPair::FromString("www.google.com:80"));
226 EXPECT_EQ(443, port_alternate_protocol.port);
227 EXPECT_EQ(net::NPN_SPDY_3, port_alternate_protocol.protocol);
228 port_alternate_protocol = http_server_props_manager_->GetAlternateProtocol(
229 net::HostPortPair::FromString("mail.google.com:80"));
230 EXPECT_EQ(444, port_alternate_protocol.port);
231 EXPECT_EQ(net::NPN_SPDY_3_1, port_alternate_protocol.protocol);
233 // Verify SupportsQuic.
234 net::SupportsQuic supports_quic2 =
235 http_server_props_manager_->GetSupportsQuic(
236 net::HostPortPair::FromString("www.google.com:80"));
237 EXPECT_TRUE(supports_quic2.used_quic);
238 EXPECT_EQ("foo", supports_quic2.address);
239 supports_quic2 = http_server_props_manager_->GetSupportsQuic(
240 net::HostPortPair::FromString("mail.google.com:80"));
241 EXPECT_FALSE(supports_quic2.used_quic);
242 EXPECT_EQ("bar", supports_quic2.address);
245 TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
246 ExpectPrefsUpdate();
248 // Post an update task to the network thread. SetSupportsSpdy calls
249 // ScheduleUpdatePrefsOnNetworkThread.
251 // Add mail.google.com:443 as a supporting spdy server.
252 net::HostPortPair spdy_server_mail("mail.google.com", 443);
253 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
254 http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true);
256 // Run the task.
257 base::RunLoop().RunUntilIdle();
259 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
260 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
263 TEST_F(HttpServerPropertiesManagerTest, SetSpdySetting) {
264 ExpectPrefsUpdate();
266 // Add SpdySetting for mail.google.com:443.
267 net::HostPortPair spdy_server_mail("mail.google.com", 443);
268 const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
269 const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
270 const uint32 value1 = 31337;
271 http_server_props_manager_->SetSpdySetting(
272 spdy_server_mail, id1, flags1, value1);
274 // Run the task.
275 base::RunLoop().RunUntilIdle();
277 const net::SettingsMap& settings_map1_ret =
278 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
279 ASSERT_EQ(1U, settings_map1_ret.size());
280 net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
281 EXPECT_TRUE(it1_ret != settings_map1_ret.end());
282 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
283 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
284 EXPECT_EQ(value1, flags_and_value1_ret.second);
286 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
289 TEST_F(HttpServerPropertiesManagerTest, ClearSpdySetting) {
290 ExpectPrefsUpdateRepeatedly();
292 // Add SpdySetting for mail.google.com:443.
293 net::HostPortPair spdy_server_mail("mail.google.com", 443);
294 const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
295 const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
296 const uint32 value1 = 31337;
297 http_server_props_manager_->SetSpdySetting(
298 spdy_server_mail, id1, flags1, value1);
300 // Run the task.
301 base::RunLoop().RunUntilIdle();
303 const net::SettingsMap& settings_map1_ret =
304 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
305 ASSERT_EQ(1U, settings_map1_ret.size());
306 net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
307 EXPECT_TRUE(it1_ret != settings_map1_ret.end());
308 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
309 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
310 EXPECT_EQ(value1, flags_and_value1_ret.second);
312 // Clear SpdySetting for mail.google.com:443.
313 http_server_props_manager_->ClearSpdySettings(spdy_server_mail);
315 // Run the task.
316 base::RunLoop().RunUntilIdle();
318 // Verify that there are no entries in the settings map for
319 // mail.google.com:443.
320 const net::SettingsMap& settings_map2_ret =
321 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
322 ASSERT_EQ(0U, settings_map2_ret.size());
324 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
327 TEST_F(HttpServerPropertiesManagerTest, ClearAllSpdySetting) {
328 ExpectPrefsUpdateRepeatedly();
330 // Add SpdySetting for mail.google.com:443.
331 net::HostPortPair spdy_server_mail("mail.google.com", 443);
332 const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
333 const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
334 const uint32 value1 = 31337;
335 http_server_props_manager_->SetSpdySetting(
336 spdy_server_mail, id1, flags1, value1);
338 // Run the task.
339 base::RunLoop().RunUntilIdle();
341 const net::SettingsMap& settings_map1_ret =
342 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
343 ASSERT_EQ(1U, settings_map1_ret.size());
344 net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
345 EXPECT_TRUE(it1_ret != settings_map1_ret.end());
346 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
347 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
348 EXPECT_EQ(value1, flags_and_value1_ret.second);
350 // Clear All SpdySettings.
351 http_server_props_manager_->ClearAllSpdySettings();
353 // Run the task.
354 base::RunLoop().RunUntilIdle();
356 // Verify that there are no entries in the settings map.
357 const net::SpdySettingsMap& spdy_settings_map2_ret =
358 http_server_props_manager_->spdy_settings_map();
359 ASSERT_EQ(0U, spdy_settings_map2_ret.size());
361 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
364 TEST_F(HttpServerPropertiesManagerTest, HasAlternateProtocol) {
365 ExpectPrefsUpdate();
367 net::HostPortPair spdy_server_mail("mail.google.com", 80);
368 EXPECT_FALSE(
369 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
370 http_server_props_manager_->SetAlternateProtocol(
371 spdy_server_mail, 443, net::NPN_SPDY_3, 1);
373 // Run the task.
374 base::RunLoop().RunUntilIdle();
375 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
377 ASSERT_TRUE(
378 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
379 net::AlternateProtocolInfo port_alternate_protocol =
380 http_server_props_manager_->GetAlternateProtocol(spdy_server_mail);
381 EXPECT_EQ(443, port_alternate_protocol.port);
382 EXPECT_EQ(net::NPN_SPDY_3, port_alternate_protocol.protocol);
385 TEST_F(HttpServerPropertiesManagerTest, SupportsQuic) {
386 ExpectPrefsUpdate();
388 net::HostPortPair quic_server_mail("mail.google.com", 80);
389 net::SupportsQuic supports_quic = http_server_props_manager_->GetSupportsQuic(
390 quic_server_mail);
391 EXPECT_FALSE(supports_quic.used_quic);
392 EXPECT_EQ("", supports_quic.address);
393 http_server_props_manager_->SetSupportsQuic(quic_server_mail, true, "foo");
395 // Run the task.
396 base::RunLoop().RunUntilIdle();
397 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
399 net::SupportsQuic supports_quic1 =
400 http_server_props_manager_->GetSupportsQuic(quic_server_mail);
401 EXPECT_TRUE(supports_quic1.used_quic);
402 EXPECT_EQ("foo", supports_quic1.address);
405 TEST_F(HttpServerPropertiesManagerTest, Clear) {
406 ExpectPrefsUpdate();
408 net::HostPortPair spdy_server_mail("mail.google.com", 443);
409 http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true);
410 http_server_props_manager_->SetAlternateProtocol(
411 spdy_server_mail, 443, net::NPN_SPDY_3, 1);
412 http_server_props_manager_->SetSupportsQuic(spdy_server_mail, true, "foo");
414 const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH;
415 const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST;
416 const uint32 value1 = 31337;
417 http_server_props_manager_->SetSpdySetting(
418 spdy_server_mail, id1, flags1, value1);
420 // Run the task.
421 base::RunLoop().RunUntilIdle();
423 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
424 EXPECT_TRUE(
425 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
426 net::SupportsQuic supports_quic = http_server_props_manager_->GetSupportsQuic(
427 spdy_server_mail);
428 EXPECT_TRUE(supports_quic.used_quic);
429 EXPECT_EQ("foo", supports_quic.address);
431 // Check SPDY settings values.
432 const net::SettingsMap& settings_map1_ret =
433 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
434 ASSERT_EQ(1U, settings_map1_ret.size());
435 net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1);
436 EXPECT_TRUE(it1_ret != settings_map1_ret.end());
437 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second;
438 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first);
439 EXPECT_EQ(value1, flags_and_value1_ret.second);
441 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
443 ExpectPrefsUpdate();
445 // Clear http server data, time out if we do not get a completion callback.
446 http_server_props_manager_->Clear(base::MessageLoop::QuitClosure());
447 base::RunLoop().Run();
449 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
450 EXPECT_FALSE(
451 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
452 net::SupportsQuic supports_quic1 =
453 http_server_props_manager_->GetSupportsQuic(spdy_server_mail);
454 EXPECT_FALSE(supports_quic1.used_quic);
455 EXPECT_EQ("", supports_quic1.address);
457 const net::SettingsMap& settings_map2_ret =
458 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
459 EXPECT_EQ(0U, settings_map2_ret.size());
461 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
464 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache0) {
465 // Post an update task to the UI thread.
466 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
467 // Shutdown comes before the task is executed.
468 http_server_props_manager_->ShutdownOnPrefThread();
469 http_server_props_manager_.reset();
470 // Run the task after shutdown and deletion.
471 base::RunLoop().RunUntilIdle();
474 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache1) {
475 // Post an update task.
476 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread();
477 // Shutdown comes before the task is executed.
478 http_server_props_manager_->ShutdownOnPrefThread();
479 // Run the task after shutdown, but before deletion.
480 base::RunLoop().RunUntilIdle();
481 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
482 http_server_props_manager_.reset();
483 base::RunLoop().RunUntilIdle();
486 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache2) {
487 http_server_props_manager_->UpdateCacheFromPrefsOnUIConcrete();
488 // Shutdown comes before the task is executed.
489 http_server_props_manager_->ShutdownOnPrefThread();
490 // Run the task after shutdown, but before deletion.
491 base::RunLoop().RunUntilIdle();
492 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
493 http_server_props_manager_.reset();
494 base::RunLoop().RunUntilIdle();
498 // Tests for shutdown when updating prefs.
500 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) {
501 // Post an update task to the IO thread.
502 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread();
503 // Shutdown comes before the task is executed.
504 http_server_props_manager_->ShutdownOnPrefThread();
505 http_server_props_manager_.reset();
506 // Run the task after shutdown and deletion.
507 base::RunLoop().RunUntilIdle();
510 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) {
511 ExpectPrefsUpdate();
512 // Post an update task.
513 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread();
514 // Shutdown comes before the task is executed.
515 http_server_props_manager_->ShutdownOnPrefThread();
516 // Run the task after shutdown, but before deletion.
517 base::RunLoop().RunUntilIdle();
518 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
519 http_server_props_manager_.reset();
520 base::RunLoop().RunUntilIdle();
523 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs2) {
524 // This posts a task to the UI thread.
525 http_server_props_manager_->UpdatePrefsFromCacheOnNetworkThreadConcrete(
526 base::Closure());
527 // Shutdown comes before the task is executed.
528 http_server_props_manager_->ShutdownOnPrefThread();
529 // Run the task after shutdown, but before deletion.
530 base::RunLoop().RunUntilIdle();
531 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
532 http_server_props_manager_.reset();
533 base::RunLoop().RunUntilIdle();
536 } // namespace
538 } // namespace net