OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/http/http_server_properties_manager.h" | 5 #include "net/http/http_server_properties_manager.h" |
6 | 6 |
7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
8 #include "base/json/json_writer.h" | 8 #include "base/json/json_writer.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
11 #include "base/prefs/pref_registry_simple.h" | |
12 #include "base/prefs/testing_pref_service.h" | |
13 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
14 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
15 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
16 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
17 #include "base/test/test_simple_task_runner.h" | 15 #include "base/test/test_simple_task_runner.h" |
18 #include "base/thread_task_runner_handle.h" | 16 #include "base/thread_task_runner_handle.h" |
19 #include "base/values.h" | 17 #include "base/values.h" |
20 #include "net/base/ip_address_number.h" | 18 #include "net/base/ip_address_number.h" |
21 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
23 #include "url/gurl.h" | 21 #include "url/gurl.h" |
24 | 22 |
25 namespace net { | 23 namespace net { |
26 | 24 |
27 namespace { | 25 namespace { |
28 | 26 |
29 using base::StringPrintf; | 27 using base::StringPrintf; |
30 using ::testing::_; | 28 using ::testing::_; |
31 using ::testing::Invoke; | 29 using ::testing::Invoke; |
32 using ::testing::Mock; | 30 using ::testing::Mock; |
33 using ::testing::StrictMock; | 31 using ::testing::StrictMock; |
34 | 32 |
35 const char kTestHttpServerProperties[] = "TestHttpServerProperties"; | 33 class MockPrefDelegate : public net::HttpServerPropertiesManager::PrefDelegate { |
| 34 public: |
| 35 MockPrefDelegate() {} |
| 36 ~MockPrefDelegate() override {} |
| 37 |
| 38 // HttpServerPropertiesManager::PrefDelegate implementation. |
| 39 bool HasServerProperties() override { return true; } |
| 40 const base::DictionaryValue& GetServerProperties() const override { |
| 41 return prefs_; |
| 42 } |
| 43 void SetServerProperties(const base::DictionaryValue& value) override { |
| 44 prefs_.Clear(); |
| 45 prefs_.MergeDictionary(&value); |
| 46 if (!prefs_changed_callback_.is_null()) |
| 47 prefs_changed_callback_.Run(); |
| 48 } |
| 49 void StartListeningForUpdates(const base::Closure& callback) override { |
| 50 CHECK(prefs_changed_callback_.is_null()); |
| 51 prefs_changed_callback_ = callback; |
| 52 } |
| 53 void StopListeningForUpdates() override { |
| 54 CHECK(!prefs_changed_callback_.is_null()); |
| 55 prefs_changed_callback_ = base::Closure(); |
| 56 } |
| 57 |
| 58 void SetPrefs(const base::DictionaryValue& value) { |
| 59 // prefs_ = value; |
| 60 prefs_.Clear(); |
| 61 prefs_.MergeDictionary(&value); |
| 62 if (!prefs_changed_callback_.is_null()) |
| 63 prefs_changed_callback_.Run(); |
| 64 } |
| 65 |
| 66 private: |
| 67 base::DictionaryValue prefs_; |
| 68 base::Closure prefs_changed_callback_; |
| 69 |
| 70 DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); |
| 71 }; |
36 | 72 |
37 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { | 73 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { |
38 public: | 74 public: |
39 TestingHttpServerPropertiesManager( | 75 TestingHttpServerPropertiesManager( |
40 PrefService* pref_service, | 76 HttpServerPropertiesManager::PrefDelegate* pref_delegate, |
41 const char* pref_path, | |
42 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) | 77 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) |
43 : HttpServerPropertiesManager(pref_service, pref_path, io_task_runner) { | 78 : HttpServerPropertiesManager(pref_delegate, io_task_runner) { |
44 InitializeOnNetworkThread(); | 79 InitializeOnNetworkThread(); |
45 } | 80 } |
46 | 81 |
47 ~TestingHttpServerPropertiesManager() override {} | 82 ~TestingHttpServerPropertiesManager() override {} |
48 | 83 |
49 // Make these methods public for testing. | 84 // Make these methods public for testing. |
50 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; | 85 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; |
51 | 86 |
52 // Post tasks without a delay during tests. | 87 // Post tasks without a delay during tests. |
53 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override { | 88 void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated | 144 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated |
110 // to version 4, delete the following code. | 145 // to version 4, delete the following code. |
111 static const int kHttpServerPropertiesVersions[] = {3, 4}; | 146 static const int kHttpServerPropertiesVersions[] = {3, 4}; |
112 | 147 |
113 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { | 148 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { |
114 protected: | 149 protected: |
115 HttpServerPropertiesManagerTest() {} | 150 HttpServerPropertiesManagerTest() {} |
116 | 151 |
117 void SetUp() override { | 152 void SetUp() override { |
118 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); | 153 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); |
119 pref_service_.registry()->RegisterDictionaryPref(kTestHttpServerProperties); | 154 pref_delegate_ = new MockPrefDelegate; |
120 http_server_props_manager_.reset( | 155 http_server_props_manager_.reset( |
121 new StrictMock<TestingHttpServerPropertiesManager>( | 156 new StrictMock<TestingHttpServerPropertiesManager>( |
122 &pref_service_, kTestHttpServerProperties, | 157 pref_delegate_, base::ThreadTaskRunnerHandle::Get())); |
123 base::ThreadTaskRunnerHandle::Get())); | |
124 ExpectCacheUpdate(); | 158 ExpectCacheUpdate(); |
125 base::RunLoop().RunUntilIdle(); | 159 base::RunLoop().RunUntilIdle(); |
126 } | 160 } |
127 | 161 |
128 void TearDown() override { | 162 void TearDown() override { |
129 if (http_server_props_manager_.get()) | 163 if (http_server_props_manager_.get()) |
130 http_server_props_manager_->ShutdownOnPrefThread(); | 164 http_server_props_manager_->ShutdownOnPrefThread(); |
131 base::RunLoop().RunUntilIdle(); | 165 base::RunLoop().RunUntilIdle(); |
132 http_server_props_manager_.reset(); | 166 http_server_props_manager_.reset(); |
133 } | 167 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 &TestingHttpServerPropertiesManager:: | 205 &TestingHttpServerPropertiesManager:: |
172 UpdatePrefsFromCacheOnNetworkThreadConcrete)); | 206 UpdatePrefsFromCacheOnNetworkThreadConcrete)); |
173 } | 207 } |
174 | 208 |
175 bool HasAlternativeService(const HostPortPair& server) { | 209 bool HasAlternativeService(const HostPortPair& server) { |
176 const AlternativeServiceVector alternative_service_vector = | 210 const AlternativeServiceVector alternative_service_vector = |
177 http_server_props_manager_->GetAlternativeServices(server); | 211 http_server_props_manager_->GetAlternativeServices(server); |
178 return !alternative_service_vector.empty(); | 212 return !alternative_service_vector.empty(); |
179 } | 213 } |
180 | 214 |
181 //base::RunLoop loop_; | 215 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. |
182 TestingPrefServiceSimple pref_service_; | |
183 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; | 216 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; |
184 base::Time one_day_from_now_; | 217 base::Time one_day_from_now_; |
185 | 218 |
186 private: | 219 private: |
187 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); | 220 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); |
188 }; | 221 }; |
189 | 222 |
190 INSTANTIATE_TEST_CASE_P(Tests, | 223 INSTANTIATE_TEST_CASE_P(Tests, |
191 HttpServerPropertiesManagerTest, | 224 HttpServerPropertiesManagerTest, |
192 ::testing::ValuesIn(kHttpServerPropertiesVersions)); | 225 ::testing::ValuesIn(kHttpServerPropertiesVersions)); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 server_pref_dict1->SetWithoutPathExpansion("alternative_service", | 282 server_pref_dict1->SetWithoutPathExpansion("alternative_service", |
250 alternative_service_list1); | 283 alternative_service_list1); |
251 | 284 |
252 // Set up ServerNetworkStats for mail.google.com:80 and it is the MRU server. | 285 // Set up ServerNetworkStats for mail.google.com:80 and it is the MRU server. |
253 base::DictionaryValue* stats1 = new base::DictionaryValue; | 286 base::DictionaryValue* stats1 = new base::DictionaryValue; |
254 stats1->SetInteger("srtt", 20); | 287 stats1->SetInteger("srtt", 20); |
255 server_pref_dict1->SetWithoutPathExpansion("network_stats", stats1); | 288 server_pref_dict1->SetWithoutPathExpansion("network_stats", stats1); |
256 // Set the server preference for mail.google.com:80. | 289 // Set the server preference for mail.google.com:80. |
257 servers_dict->SetWithoutPathExpansion("mail.google.com:80", | 290 servers_dict->SetWithoutPathExpansion("mail.google.com:80", |
258 server_pref_dict1); | 291 server_pref_dict1); |
259 base::DictionaryValue* http_server_properties_dict = | 292 base::DictionaryValue http_server_properties_dict; |
260 new base::DictionaryValue; | |
261 if (GetParam() == 4) { | 293 if (GetParam() == 4) { |
262 // |servers_list| takes ownership of |servers_dict|. | 294 // |servers_list| takes ownership of |servers_dict|. |
263 servers_list->AppendIfNotPresent(servers_dict); | 295 servers_list->AppendIfNotPresent(servers_dict); |
264 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1); | 296 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, -1); |
265 http_server_properties_dict->SetWithoutPathExpansion("servers", | 297 http_server_properties_dict.SetWithoutPathExpansion("servers", |
266 servers_list); | 298 servers_list); |
267 } else { | 299 } else { |
268 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, | 300 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, |
269 GetParam()); | 301 GetParam()); |
270 http_server_properties_dict->SetWithoutPathExpansion("servers", | 302 http_server_properties_dict.SetWithoutPathExpansion("servers", |
271 servers_dict); | 303 servers_dict); |
272 } | 304 } |
273 base::DictionaryValue* supports_quic = new base::DictionaryValue; | 305 base::DictionaryValue* supports_quic = new base::DictionaryValue; |
274 supports_quic->SetBoolean("used_quic", true); | 306 supports_quic->SetBoolean("used_quic", true); |
275 supports_quic->SetString("address", "127.0.0.1"); | 307 supports_quic->SetString("address", "127.0.0.1"); |
276 http_server_properties_dict->SetWithoutPathExpansion("supports_quic", | 308 http_server_properties_dict.SetWithoutPathExpansion("supports_quic", |
277 supports_quic); | 309 supports_quic); |
278 | 310 |
279 // Set quic_server_info for www.google.com:80, mail.google.com:80 and | 311 // Set quic_server_info for www.google.com:80, mail.google.com:80 and |
280 // play.google.com:80 and verify the MRU. | 312 // play.google.com:80 and verify the MRU. |
281 http_server_props_manager_->SetMaxServerConfigsStoredInProperties(3); | 313 http_server_props_manager_->SetMaxServerConfigsStoredInProperties(3); |
282 base::DictionaryValue* quic_servers_dict = new base::DictionaryValue; | 314 base::DictionaryValue* quic_servers_dict = new base::DictionaryValue; |
283 base::DictionaryValue* quic_server_pref_dict1 = new base::DictionaryValue; | 315 base::DictionaryValue* quic_server_pref_dict1 = new base::DictionaryValue; |
284 std::string quic_server_info1("quic_server_info1"); | 316 std::string quic_server_info1("quic_server_info1"); |
285 quic_server_pref_dict1->SetStringWithoutPathExpansion("server_info", | 317 quic_server_pref_dict1->SetStringWithoutPathExpansion("server_info", |
286 quic_server_info1); | 318 quic_server_info1); |
287 base::DictionaryValue* quic_server_pref_dict2 = new base::DictionaryValue; | 319 base::DictionaryValue* quic_server_pref_dict2 = new base::DictionaryValue; |
288 std::string quic_server_info2("quic_server_info2"); | 320 std::string quic_server_info2("quic_server_info2"); |
289 quic_server_pref_dict2->SetStringWithoutPathExpansion("server_info", | 321 quic_server_pref_dict2->SetStringWithoutPathExpansion("server_info", |
290 quic_server_info2); | 322 quic_server_info2); |
291 base::DictionaryValue* quic_server_pref_dict3 = new base::DictionaryValue; | 323 base::DictionaryValue* quic_server_pref_dict3 = new base::DictionaryValue; |
292 std::string quic_server_info3("quic_server_info3"); | 324 std::string quic_server_info3("quic_server_info3"); |
293 quic_server_pref_dict3->SetStringWithoutPathExpansion("server_info", | 325 quic_server_pref_dict3->SetStringWithoutPathExpansion("server_info", |
294 quic_server_info3); | 326 quic_server_info3); |
295 // Set the quic_server_info1 for www.google.com server. | 327 // Set the quic_server_info1 for www.google.com server. |
296 QuicServerId google_quic_server_id("www.google.com", 80); | 328 QuicServerId google_quic_server_id("www.google.com", 80); |
297 quic_servers_dict->SetWithoutPathExpansion(google_quic_server_id.ToString(), | 329 quic_servers_dict->SetWithoutPathExpansion(google_quic_server_id.ToString(), |
298 quic_server_pref_dict1); | 330 quic_server_pref_dict1); |
299 // Set the quic_server_info2 for mail.google.com server. | 331 // Set the quic_server_info2 for mail.google.com server. |
300 QuicServerId mail_quic_server_id("mail.google.com", 80); | 332 QuicServerId mail_quic_server_id("mail.google.com", 80); |
301 quic_servers_dict->SetWithoutPathExpansion(mail_quic_server_id.ToString(), | 333 quic_servers_dict->SetWithoutPathExpansion(mail_quic_server_id.ToString(), |
302 quic_server_pref_dict2); | 334 quic_server_pref_dict2); |
303 // Set the quic_server_info3 for play.google.com server. | 335 // Set the quic_server_info3 for play.google.com server. |
304 QuicServerId play_quic_server_id("play.google.com", 80); | 336 QuicServerId play_quic_server_id("play.google.com", 80); |
305 quic_servers_dict->SetWithoutPathExpansion(play_quic_server_id.ToString(), | 337 quic_servers_dict->SetWithoutPathExpansion(play_quic_server_id.ToString(), |
306 quic_server_pref_dict3); | 338 quic_server_pref_dict3); |
307 http_server_properties_dict->SetWithoutPathExpansion("quic_servers", | 339 http_server_properties_dict.SetWithoutPathExpansion("quic_servers", |
308 quic_servers_dict); | 340 quic_servers_dict); |
309 | 341 |
310 // Set the same value for kHttpServerProperties multiple times. | 342 // Set the same value for kHttpServerProperties multiple times. |
311 pref_service_.SetManagedPref(kTestHttpServerProperties, | 343 pref_delegate_->SetPrefs(http_server_properties_dict); |
312 http_server_properties_dict); | 344 pref_delegate_->SetPrefs(http_server_properties_dict); |
313 base::DictionaryValue* http_server_properties_dict2 = | |
314 http_server_properties_dict->DeepCopy(); | |
315 pref_service_.SetManagedPref(kTestHttpServerProperties, | |
316 http_server_properties_dict2); | |
317 | 345 |
318 base::RunLoop().RunUntilIdle(); | 346 base::RunLoop().RunUntilIdle(); |
319 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 347 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
320 | 348 |
321 // Verify SupportsSpdy. | 349 // Verify SupportsSpdy. |
322 EXPECT_TRUE( | 350 EXPECT_TRUE( |
323 http_server_props_manager_->SupportsRequestPriority(google_server)); | 351 http_server_props_manager_->SupportsRequestPriority(google_server)); |
324 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server)); | 352 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(mail_server)); |
325 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority( | 353 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority( |
326 HostPortPair::FromString("foo.google.com:1337"))); | 354 HostPortPair::FromString("foo.google.com:1337"))); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 | 448 |
421 // Set up ServerNetworkStats for www.google.com:65536. | 449 // Set up ServerNetworkStats for www.google.com:65536. |
422 base::DictionaryValue* stats = new base::DictionaryValue; | 450 base::DictionaryValue* stats = new base::DictionaryValue; |
423 stats->SetInteger("srtt", 10); | 451 stats->SetInteger("srtt", 10); |
424 server_pref_dict->SetWithoutPathExpansion("network_stats", stats); | 452 server_pref_dict->SetWithoutPathExpansion("network_stats", stats); |
425 | 453 |
426 // Set the server preference for www.google.com:65536. | 454 // Set the server preference for www.google.com:65536. |
427 base::DictionaryValue* servers_dict = new base::DictionaryValue; | 455 base::DictionaryValue* servers_dict = new base::DictionaryValue; |
428 servers_dict->SetWithoutPathExpansion("www.google.com:65536", | 456 servers_dict->SetWithoutPathExpansion("www.google.com:65536", |
429 server_pref_dict); | 457 server_pref_dict); |
430 base::DictionaryValue* http_server_properties_dict = | 458 base::DictionaryValue http_server_properties_dict; |
431 new base::DictionaryValue; | |
432 if (GetParam() == 4) { | 459 if (GetParam() == 4) { |
433 base::ListValue* servers_list = new base::ListValue; | 460 base::ListValue* servers_list = new base::ListValue; |
434 // |servers_list| takes ownership of |servers_dict|. | 461 // |servers_list| takes ownership of |servers_dict|. |
435 servers_list->AppendIfNotPresent(servers_dict); | 462 servers_list->AppendIfNotPresent(servers_dict); |
436 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1); | 463 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, -1); |
437 http_server_properties_dict->SetWithoutPathExpansion("servers", | 464 http_server_properties_dict.SetWithoutPathExpansion("servers", |
438 servers_list); | 465 servers_list); |
439 } else { | 466 } else { |
440 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, | 467 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, |
441 GetParam()); | 468 GetParam()); |
442 http_server_properties_dict->SetWithoutPathExpansion("servers", | 469 http_server_properties_dict.SetWithoutPathExpansion("servers", |
443 servers_dict); | 470 servers_dict); |
444 } | 471 } |
445 | 472 |
446 // Set quic_server_info for www.google.com:65536. | 473 // Set quic_server_info for www.google.com:65536. |
447 base::DictionaryValue* quic_servers_dict = new base::DictionaryValue; | 474 base::DictionaryValue* quic_servers_dict = new base::DictionaryValue; |
448 base::DictionaryValue* quic_server_pref_dict1 = new base::DictionaryValue; | 475 base::DictionaryValue* quic_server_pref_dict1 = new base::DictionaryValue; |
449 quic_server_pref_dict1->SetStringWithoutPathExpansion("server_info", | 476 quic_server_pref_dict1->SetStringWithoutPathExpansion("server_info", |
450 "quic_server_info1"); | 477 "quic_server_info1"); |
451 quic_servers_dict->SetWithoutPathExpansion("http://mail.google.com:65536", | 478 quic_servers_dict->SetWithoutPathExpansion("http://mail.google.com:65536", |
452 quic_server_pref_dict1); | 479 quic_server_pref_dict1); |
453 | 480 |
454 http_server_properties_dict->SetWithoutPathExpansion("quic_servers", | 481 http_server_properties_dict.SetWithoutPathExpansion("quic_servers", |
455 quic_servers_dict); | 482 quic_servers_dict); |
456 | 483 |
457 // Set up the pref. | 484 // Set up the pref. |
458 pref_service_.SetManagedPref(kTestHttpServerProperties, | 485 pref_delegate_->SetPrefs(http_server_properties_dict); |
459 http_server_properties_dict); | |
460 | 486 |
461 base::RunLoop().RunUntilIdle(); | 487 base::RunLoop().RunUntilIdle(); |
462 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 488 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
463 | 489 |
464 // Verify that nothing is set. | 490 // Verify that nothing is set. |
465 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority( | 491 EXPECT_FALSE(http_server_props_manager_->SupportsRequestPriority( |
466 HostPortPair::FromString("www.google.com:65536"))); | 492 HostPortPair::FromString("www.google.com:65536"))); |
467 EXPECT_FALSE( | 493 EXPECT_FALSE( |
468 HasAlternativeService(HostPortPair::FromString("www.google.com:65536"))); | 494 HasAlternativeService(HostPortPair::FromString("www.google.com:65536"))); |
469 const ServerNetworkStats* stats1 = | 495 const ServerNetworkStats* stats1 = |
(...skipping 19 matching lines...) Expand all Loading... |
489 alternative_service_dict->SetString("protocol_str", "npn-h2"); | 515 alternative_service_dict->SetString("protocol_str", "npn-h2"); |
490 alternative_service_dict->SetInteger("port", 65536); | 516 alternative_service_dict->SetInteger("port", 65536); |
491 base::ListValue* alternative_service_list = new base::ListValue; | 517 base::ListValue* alternative_service_list = new base::ListValue; |
492 alternative_service_list->Append(alternative_service_dict); | 518 alternative_service_list->Append(alternative_service_dict); |
493 server_pref_dict->SetWithoutPathExpansion("alternative_service", | 519 server_pref_dict->SetWithoutPathExpansion("alternative_service", |
494 alternative_service_list); | 520 alternative_service_list); |
495 | 521 |
496 // Set the server preference for www.google.com:80. | 522 // Set the server preference for www.google.com:80. |
497 base::DictionaryValue* servers_dict = new base::DictionaryValue; | 523 base::DictionaryValue* servers_dict = new base::DictionaryValue; |
498 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); | 524 servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); |
499 base::DictionaryValue* http_server_properties_dict = | 525 base::DictionaryValue http_server_properties_dict; |
500 new base::DictionaryValue; | |
501 if (GetParam() == 4) { | 526 if (GetParam() == 4) { |
502 base::ListValue* servers_list = new base::ListValue; | 527 base::ListValue* servers_list = new base::ListValue; |
503 // |servers_list| takes ownership of |servers_dict|. | 528 // |servers_list| takes ownership of |servers_dict|. |
504 servers_list->AppendIfNotPresent(servers_dict); | 529 servers_list->AppendIfNotPresent(servers_dict); |
505 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1); | 530 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, -1); |
506 http_server_properties_dict->SetWithoutPathExpansion("servers", | 531 http_server_properties_dict.SetWithoutPathExpansion("servers", |
507 servers_list); | 532 servers_list); |
508 } else { | 533 } else { |
509 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, | 534 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, |
510 GetParam()); | 535 GetParam()); |
511 http_server_properties_dict->SetWithoutPathExpansion("servers", | 536 http_server_properties_dict.SetWithoutPathExpansion("servers", |
512 servers_dict); | 537 servers_dict); |
513 } | 538 } |
514 | 539 |
515 // Set up the pref. | 540 // Set up the pref. |
516 pref_service_.SetManagedPref(kTestHttpServerProperties, | 541 pref_delegate_->SetPrefs(http_server_properties_dict); |
517 http_server_properties_dict); | |
518 | 542 |
519 base::RunLoop().RunUntilIdle(); | 543 base::RunLoop().RunUntilIdle(); |
520 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 544 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
521 | 545 |
522 // Verify alternative service is not set. | 546 // Verify alternative service is not set. |
523 EXPECT_FALSE( | 547 EXPECT_FALSE( |
524 HasAlternativeService(HostPortPair::FromString("www.google.com:80"))); | 548 HasAlternativeService(HostPortPair::FromString("www.google.com:80"))); |
525 } | 549 } |
526 | 550 |
527 TEST_P(HttpServerPropertiesManagerTest, SupportsSpdy) { | 551 TEST_P(HttpServerPropertiesManagerTest, SupportsSpdy) { |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 StringPrintf("www.google.com:%d", i), server_pref_dict); | 987 StringPrintf("www.google.com:%d", i), server_pref_dict); |
964 } | 988 } |
965 } | 989 } |
966 | 990 |
967 // Set the preference for mail.google.com server. | 991 // Set the preference for mail.google.com server. |
968 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue; | 992 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue; |
969 | 993 |
970 // Set the server preference for mail.google.com:80. | 994 // Set the server preference for mail.google.com:80. |
971 servers_dict->SetWithoutPathExpansion("mail.google.com:80", | 995 servers_dict->SetWithoutPathExpansion("mail.google.com:80", |
972 server_pref_dict1); | 996 server_pref_dict1); |
973 base::DictionaryValue* http_server_properties_dict = | 997 base::DictionaryValue http_server_properties_dict; |
974 new base::DictionaryValue; | |
975 if (GetParam() == 4) { | 998 if (GetParam() == 4) { |
976 // |servers_list| takes ownership of |servers_dict|. | 999 // |servers_list| takes ownership of |servers_dict|. |
977 servers_list->AppendIfNotPresent(servers_dict); | 1000 servers_list->AppendIfNotPresent(servers_dict); |
978 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1); | 1001 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, -1); |
979 http_server_properties_dict->SetWithoutPathExpansion("servers", | 1002 http_server_properties_dict.SetWithoutPathExpansion("servers", |
980 servers_list); | 1003 servers_list); |
981 } else { | 1004 } else { |
982 HttpServerPropertiesManager::SetVersion(http_server_properties_dict, | 1005 HttpServerPropertiesManager::SetVersion(&http_server_properties_dict, |
983 GetParam()); | 1006 GetParam()); |
984 http_server_properties_dict->SetWithoutPathExpansion("servers", | 1007 http_server_properties_dict.SetWithoutPathExpansion("servers", |
985 servers_dict); | 1008 servers_dict); |
986 } | 1009 } |
987 | 1010 |
988 // Set up SupportsQuic for 127.0.0.1 | 1011 // Set up SupportsQuic for 127.0.0.1 |
989 base::DictionaryValue* supports_quic = new base::DictionaryValue; | 1012 base::DictionaryValue* supports_quic = new base::DictionaryValue; |
990 supports_quic->SetBoolean("used_quic", true); | 1013 supports_quic->SetBoolean("used_quic", true); |
991 supports_quic->SetString("address", "127.0.0.1"); | 1014 supports_quic->SetString("address", "127.0.0.1"); |
992 http_server_properties_dict->SetWithoutPathExpansion("supports_quic", | 1015 http_server_properties_dict.SetWithoutPathExpansion("supports_quic", |
993 supports_quic); | 1016 supports_quic); |
994 | 1017 |
995 // Set up the pref. | 1018 // Set up the pref. |
996 pref_service_.SetManagedPref(kTestHttpServerProperties, | 1019 pref_delegate_->SetPrefs(http_server_properties_dict); |
997 http_server_properties_dict); | |
998 | 1020 |
999 base::RunLoop().RunUntilIdle(); | 1021 base::RunLoop().RunUntilIdle(); |
1000 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1022 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
1001 | 1023 |
1002 // Verify alternative service. | 1024 // Verify alternative service. |
1003 for (int i = 0; i < 200; ++i) { | 1025 for (int i = 0; i < 200; ++i) { |
1004 std::string server = StringPrintf("www.google.com:%d", i); | 1026 std::string server = StringPrintf("www.google.com:%d", i); |
1005 AlternativeServiceVector alternative_service_vector = | 1027 AlternativeServiceVector alternative_service_vector = |
1006 http_server_props_manager_->GetAlternativeServices( | 1028 http_server_props_manager_->GetAlternativeServices( |
1007 HostPortPair::FromString(server)); | 1029 HostPortPair::FromString(server)); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1078 "\"port\":1234,\"probability\":0.7,\"protocol_str\":\"npn-h2\"}]}}," | 1100 "\"port\":1234,\"probability\":0.7,\"protocol_str\":\"npn-h2\"}]}}," |
1079 "{\"mail.google.com:80\":{\"alternative_service\":[{" | 1101 "{\"mail.google.com:80\":{\"alternative_service\":[{" |
1080 "\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\"," | 1102 "\"expiration\":\"9223372036854775807\",\"host\":\"foo.google.com\"," |
1081 "\"port\":444,\"probability\":0.2,\"protocol_str\":\"npn-spdy/3.1\"}]," | 1103 "\"port\":444,\"probability\":0.2,\"protocol_str\":\"npn-spdy/3.1\"}]," |
1082 "\"network_stats\":{\"srtt\":42}}}" | 1104 "\"network_stats\":{\"srtt\":42}}}" |
1083 "]," | 1105 "]," |
1084 "\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true}," | 1106 "\"supports_quic\":{\"address\":\"127.0.0.1\",\"used_quic\":true}," |
1085 "\"version\":4}"; | 1107 "\"version\":4}"; |
1086 | 1108 |
1087 const base::Value* http_server_properties = | 1109 const base::Value* http_server_properties = |
1088 pref_service_.GetUserPref(kTestHttpServerProperties); | 1110 &pref_delegate_->GetServerProperties(); |
1089 ASSERT_NE(nullptr, http_server_properties); | |
1090 std::string preferences_json; | 1111 std::string preferences_json; |
1091 EXPECT_TRUE( | 1112 EXPECT_TRUE( |
1092 base::JSONWriter::Write(*http_server_properties, &preferences_json)); | 1113 base::JSONWriter::Write(*http_server_properties, &preferences_json)); |
1093 EXPECT_EQ(expected_json, preferences_json); | 1114 EXPECT_EQ(expected_json, preferences_json); |
1094 } | 1115 } |
1095 | 1116 |
1096 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { | 1117 TEST_P(HttpServerPropertiesManagerTest, AddToAlternativeServiceMap) { |
1097 scoped_ptr<base::Value> server_value = base::JSONReader::Read( | 1118 scoped_ptr<base::Value> server_value = base::JSONReader::Read( |
1098 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"npn-h2\"}," | 1119 "{\"alternative_service\":[{\"port\":443,\"protocol_str\":\"npn-h2\"}," |
1099 "{\"port\":123,\"protocol_str\":\"quic\",\"probability\":0.7," | 1120 "{\"port\":123,\"protocol_str\":\"quic\",\"probability\":0.7," |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1178 const HostPortPair host_port_pair("www.example.com", 443); | 1199 const HostPortPair host_port_pair("www.example.com", 443); |
1179 http_server_props_manager_->SetAlternativeServices( | 1200 http_server_props_manager_->SetAlternativeServices( |
1180 host_port_pair, alternative_service_info_vector); | 1201 host_port_pair, alternative_service_info_vector); |
1181 | 1202 |
1182 // Update cache. | 1203 // Update cache. |
1183 ExpectPrefsUpdate(); | 1204 ExpectPrefsUpdate(); |
1184 ExpectCacheUpdate(); | 1205 ExpectCacheUpdate(); |
1185 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1206 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
1186 base::RunLoop().RunUntilIdle(); | 1207 base::RunLoop().RunUntilIdle(); |
1187 | 1208 |
1188 const base::Value* pref_value = | 1209 const base::DictionaryValue& pref_dict = |
1189 pref_service_.GetUserPref(kTestHttpServerProperties); | 1210 pref_delegate_->GetServerProperties(); |
1190 ASSERT_NE(nullptr, pref_value); | |
1191 | |
1192 const base::DictionaryValue* pref_dict; | |
1193 ASSERT_TRUE(pref_value->GetAsDictionary(&pref_dict)); | |
1194 | 1211 |
1195 const base::ListValue* servers_list = nullptr; | 1212 const base::ListValue* servers_list = nullptr; |
1196 ASSERT_TRUE(pref_dict->GetListWithoutPathExpansion("servers", &servers_list)); | 1213 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); |
1197 base::ListValue::const_iterator it = servers_list->begin(); | 1214 base::ListValue::const_iterator it = servers_list->begin(); |
1198 const base::DictionaryValue* server_pref_dict; | 1215 const base::DictionaryValue* server_pref_dict; |
1199 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); | 1216 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); |
1200 | 1217 |
1201 const base::DictionaryValue* example_pref_dict; | 1218 const base::DictionaryValue* example_pref_dict; |
1202 ASSERT_TRUE(server_pref_dict->GetDictionaryWithoutPathExpansion( | 1219 ASSERT_TRUE(server_pref_dict->GetDictionaryWithoutPathExpansion( |
1203 "www.example.com:443", &example_pref_dict)); | 1220 "www.example.com:443", &example_pref_dict)); |
1204 | 1221 |
1205 const base::ListValue* altsvc_list; | 1222 const base::ListValue* altsvc_list; |
1206 ASSERT_TRUE(example_pref_dict->GetList("alternative_service", &altsvc_list)); | 1223 ASSERT_TRUE(example_pref_dict->GetList("alternative_service", &altsvc_list)); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 // Shutdown comes before the task is executed. | 1345 // Shutdown comes before the task is executed. |
1329 http_server_props_manager_->ShutdownOnPrefThread(); | 1346 http_server_props_manager_->ShutdownOnPrefThread(); |
1330 // Run the task after shutdown, but before deletion. | 1347 // Run the task after shutdown, but before deletion. |
1331 base::RunLoop().RunUntilIdle(); | 1348 base::RunLoop().RunUntilIdle(); |
1332 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1349 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
1333 http_server_props_manager_.reset(); | 1350 http_server_props_manager_.reset(); |
1334 base::RunLoop().RunUntilIdle(); | 1351 base::RunLoop().RunUntilIdle(); |
1335 } | 1352 } |
1336 | 1353 |
1337 } // namespace net | 1354 } // namespace net |
OLD | NEW |