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 <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
| 10 #include "base/bind.h" |
10 #include "base/json/json_reader.h" | 11 #include "base/json/json_reader.h" |
11 #include "base/json/json_writer.h" | 12 #include "base/json/json_writer.h" |
12 #include "base/macros.h" | 13 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
14 #include "base/message_loop/message_loop.h" | 15 #include "base/memory/ref_counted.h" |
15 #include "base/run_loop.h" | |
16 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
17 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
18 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
| 19 #include "base/test/scoped_mock_time_message_loop_task_runner.h" |
19 #include "base/test/test_mock_time_task_runner.h" | 20 #include "base/test/test_mock_time_task_runner.h" |
20 #include "base/test/test_simple_task_runner.h" | 21 #include "base/test/test_simple_task_runner.h" |
21 #include "base/threading/thread_task_runner_handle.h" | 22 #include "base/threading/thread_task_runner_handle.h" |
22 #include "base/values.h" | 23 #include "base/values.h" |
23 #include "net/base/ip_address.h" | 24 #include "net/base/ip_address.h" |
24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
26 #include "url/gurl.h" | 27 #include "url/gurl.h" |
27 | 28 |
28 namespace net { | 29 namespace net { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 base::DictionaryValue prefs_; | 75 base::DictionaryValue prefs_; |
75 base::Closure prefs_changed_callback_; | 76 base::Closure prefs_changed_callback_; |
76 | 77 |
77 DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); | 78 DISALLOW_COPY_AND_ASSIGN(MockPrefDelegate); |
78 }; | 79 }; |
79 | 80 |
80 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { | 81 class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { |
81 public: | 82 public: |
82 TestingHttpServerPropertiesManager( | 83 TestingHttpServerPropertiesManager( |
83 HttpServerPropertiesManager::PrefDelegate* pref_delegate, | 84 HttpServerPropertiesManager::PrefDelegate* pref_delegate, |
84 scoped_refptr<base::SingleThreadTaskRunner> pref_task_runner, | 85 scoped_refptr<TestMockTimeTaskRunner> pref_task_runner, |
85 scoped_refptr<base::SingleThreadTaskRunner> net_task_runner) | 86 scoped_refptr<TestMockTimeTaskRunner> net_task_runner) |
86 : HttpServerPropertiesManager(pref_delegate, | 87 : HttpServerPropertiesManager(pref_delegate, |
87 pref_task_runner, | 88 pref_task_runner, |
88 net_task_runner) { | 89 net_task_runner), |
89 InitializeOnNetworkThread(); | 90 pref_task_runner_(std::move(pref_task_runner)), |
| 91 net_task_runner_(std::move(net_task_runner)) { |
| 92 // This call must run in the context of |net_task_runner_|. |
| 93 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_); |
| 94 HttpServerPropertiesManager::InitializeOnNetworkThread(); |
90 } | 95 } |
91 | 96 |
92 ~TestingHttpServerPropertiesManager() override {} | 97 ~TestingHttpServerPropertiesManager() override {} |
93 | 98 |
94 // Make these methods public for testing. | 99 // Make these methods public for testing. |
95 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; | 100 using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; |
96 | 101 |
97 void UpdateCacheFromPrefsOnUIConcrete() { | 102 void UpdateCacheFromPrefsOnUIConcrete() { |
| 103 TestMockTimeTaskRunner::ScopedContext scoped_context(pref_task_runner_); |
98 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); | 104 HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); |
99 } | 105 } |
100 | 106 |
101 void UpdatePrefsFromCacheOnNetworkThreadConcrete( | 107 void UpdatePrefsFromCacheOnNetworkThreadConcrete( |
102 const base::Closure& callback) { | 108 const base::Closure& callback) { |
| 109 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_); |
103 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); | 110 HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); |
104 } | 111 } |
105 | 112 |
106 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { | 113 void ScheduleUpdatePrefsOnNetworkThreadConcrete(Location location) { |
| 114 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_); |
107 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); | 115 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread(location); |
108 } | 116 } |
109 | 117 |
110 void ScheduleUpdatePrefsOnNetworkThread() { | 118 void ScheduleUpdatePrefsOnNetworkThreadDefault() { |
| 119 TestMockTimeTaskRunner::ScopedContext scoped_context(net_task_runner_); |
111 // Picked a random Location as caller. | 120 // Picked a random Location as caller. |
112 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( | 121 HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread( |
113 DETECTED_CORRUPTED_PREFS); | 122 DETECTED_CORRUPTED_PREFS); |
114 } | 123 } |
115 | 124 |
116 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); | 125 MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); |
117 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); | 126 MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); |
118 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); | 127 MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location)); |
119 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, | 128 MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, |
120 void(std::vector<std::string>* spdy_servers, | 129 void(std::vector<std::string>* spdy_servers, |
121 AlternativeServiceMap* alternative_service_map, | 130 AlternativeServiceMap* alternative_service_map, |
122 IPAddress* last_quic_address, | 131 IPAddress* last_quic_address, |
123 ServerNetworkStatsMap* server_network_stats_map, | 132 ServerNetworkStatsMap* server_network_stats_map, |
124 QuicServerInfoMap* quic_server_info_map, | 133 QuicServerInfoMap* quic_server_info_map, |
125 bool detected_corrupted_prefs)); | 134 bool detected_corrupted_prefs)); |
126 MOCK_METHOD6(UpdatePrefsOnPrefThread, | 135 MOCK_METHOD6(UpdatePrefsOnPrefThread, |
127 void(base::ListValue* spdy_server_list, | 136 void(base::ListValue* spdy_server_list, |
128 AlternativeServiceMap* alternative_service_map, | 137 AlternativeServiceMap* alternative_service_map, |
129 IPAddress* last_quic_address, | 138 IPAddress* last_quic_address, |
130 ServerNetworkStatsMap* server_network_stats_map, | 139 ServerNetworkStatsMap* server_network_stats_map, |
131 QuicServerInfoMap* quic_server_info_map, | 140 QuicServerInfoMap* quic_server_info_map, |
132 const base::Closure& completion)); | 141 const base::Closure& completion)); |
133 | 142 |
134 private: | 143 private: |
| 144 // References to the underlying task runners, used to simulate running in |
| 145 // their contexts where required. |
| 146 scoped_refptr<TestMockTimeTaskRunner> pref_task_runner_; |
| 147 scoped_refptr<TestMockTimeTaskRunner> net_task_runner_; |
| 148 |
135 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); | 149 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); |
136 }; | 150 }; |
137 | 151 |
138 } // namespace | 152 } // namespace |
139 | 153 |
140 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated | 154 // TODO(rtenneti): After we stop supporting version 3 and everyone has migrated |
141 // to version 4, delete the following code. | 155 // to version 4, delete the following code. |
142 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; | 156 static const int kHttpServerPropertiesVersions[] = {3, 4, 5}; |
143 | 157 |
144 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { | 158 class HttpServerPropertiesManagerTest : public testing::TestWithParam<int> { |
145 protected: | 159 protected: |
146 HttpServerPropertiesManagerTest() | 160 HttpServerPropertiesManagerTest() = default; |
147 : pref_test_task_runner_(new TestMockTimeTaskRunner()), | |
148 net_test_task_runner_(new TestMockTimeTaskRunner()) {} | |
149 | 161 |
150 void SetUp() override { | 162 void SetUp() override { |
151 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); | 163 one_day_from_now_ = base::Time::Now() + base::TimeDelta::FromDays(1); |
152 pref_delegate_ = new MockPrefDelegate; | 164 pref_delegate_ = new MockPrefDelegate; |
153 http_server_props_manager_.reset( | 165 http_server_props_manager_.reset( |
154 new StrictMock<TestingHttpServerPropertiesManager>( | 166 new StrictMock<TestingHttpServerPropertiesManager>( |
155 pref_delegate_, pref_test_task_runner_, net_test_task_runner_)); | 167 pref_delegate_, pref_test_task_runner_.task_runner(), |
| 168 net_test_task_runner_)); |
156 | 169 |
157 EXPECT_FALSE(http_server_props_manager_->IsInitialized()); | 170 EXPECT_FALSE(http_server_props_manager_->IsInitialized()); |
158 ExpectCacheUpdate(); | 171 ExpectCacheUpdate(); |
159 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 172 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
160 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 173 pref_test_task_runner_->RunUntilIdle(); |
161 // InitializeOnNetworkThread() is called from the test thread, so | 174 net_test_task_runner_->RunUntilIdle(); |
162 // PostTaskAndReply() will post back to the test thread. | |
163 // TODO(xunjieli): Fix this in a follow-up so we can use | |
164 // |net_test_task_runner_|->RunUntilIdle(). | |
165 base::RunLoop().RunUntilIdle(); | |
166 EXPECT_TRUE(http_server_props_manager_->IsInitialized()); | 175 EXPECT_TRUE(http_server_props_manager_->IsInitialized()); |
167 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 176 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
168 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 177 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
169 } | 178 } |
170 | 179 |
171 void SetUpWithNonTaskRunner() { | |
172 pref_delegate_ = new MockPrefDelegate; | |
173 http_server_props_manager_.reset( | |
174 new StrictMock<TestingHttpServerPropertiesManager>( | |
175 pref_delegate_, base::ThreadTaskRunnerHandle::Get(), | |
176 net_test_task_runner_)); | |
177 | |
178 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | |
179 ExpectCacheUpdate(); | |
180 base::RunLoop().RunUntilIdle(); | |
181 EXPECT_TRUE(http_server_props_manager_->IsInitialized()); | |
182 } | |
183 | |
184 void TearDown() override { | 180 void TearDown() override { |
185 if (http_server_props_manager_.get()) | 181 if (http_server_props_manager_.get()) |
186 http_server_props_manager_->ShutdownOnPrefThread(); | 182 http_server_props_manager_->ShutdownOnPrefThread(); |
187 base::RunLoop().RunUntilIdle(); | 183 // Run pending non-delayed tasks but don't FastForwardUntilNoTasksRemain() |
188 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 184 // as some delayed tasks may forever repost (e.g. because impl doesn't use a |
189 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 185 // mock clock and doesn't see timings as having expired, ref. |
| 186 // HttpServerPropertiesImpl:: |
| 187 // ScheduleBrokenAlternateProtocolMappingsExpiration()). |
| 188 pref_test_task_runner_->RunUntilIdle(); |
| 189 net_test_task_runner_->RunUntilIdle(); |
190 http_server_props_manager_.reset(); | 190 http_server_props_manager_.reset(); |
191 } | 191 } |
192 | 192 |
193 void ExpectCacheUpdate() { | 193 void ExpectCacheUpdate() { |
194 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) | 194 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) |
195 .WillOnce(Invoke(http_server_props_manager_.get(), | 195 .WillOnce(Invoke(http_server_props_manager_.get(), |
196 &TestingHttpServerPropertiesManager:: | 196 &TestingHttpServerPropertiesManager:: |
197 UpdateCacheFromPrefsOnUIConcrete)); | 197 UpdateCacheFromPrefsOnUIConcrete)); |
198 } | 198 } |
199 | 199 |
(...skipping 27 matching lines...) Expand all Loading... |
227 bool HasAlternativeService(const url::SchemeHostPort& server) { | 227 bool HasAlternativeService(const url::SchemeHostPort& server) { |
228 const AlternativeServiceVector alternative_service_vector = | 228 const AlternativeServiceVector alternative_service_vector = |
229 http_server_props_manager_->GetAlternativeServices(server); | 229 http_server_props_manager_->GetAlternativeServices(server); |
230 return !alternative_service_vector.empty(); | 230 return !alternative_service_vector.empty(); |
231 } | 231 } |
232 | 232 |
233 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. | 233 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. |
234 std::unique_ptr<TestingHttpServerPropertiesManager> | 234 std::unique_ptr<TestingHttpServerPropertiesManager> |
235 http_server_props_manager_; | 235 http_server_props_manager_; |
236 base::Time one_day_from_now_; | 236 base::Time one_day_from_now_; |
237 scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_; | 237 |
238 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_; | 238 // Overrides the main thread's message loop with a mock tick clock. Making the |
| 239 // main thread the |pref_test_task_runner_| matches expectations better than |
| 240 // having an independent TestMockTimeTaskRunner and makes tests easier to |
| 241 // write. |
| 242 base::ScopedMockTimeMessageLoopTaskRunner pref_test_task_runner_; |
| 243 |
| 244 // Mock the net task runner as well. |
| 245 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_ = |
| 246 new TestMockTimeTaskRunner; |
239 | 247 |
240 private: | 248 private: |
241 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); | 249 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); |
242 }; | 250 }; |
243 | 251 |
244 INSTANTIATE_TEST_CASE_P(/* no prefix */, | 252 INSTANTIATE_TEST_CASE_P(/* no prefix */, |
245 HttpServerPropertiesManagerTest, | 253 HttpServerPropertiesManagerTest, |
246 ::testing::ValuesIn(kHttpServerPropertiesVersions)); | 254 ::testing::ValuesIn(kHttpServerPropertiesVersions)); |
247 | 255 |
248 TEST_P(HttpServerPropertiesManagerTest, | 256 TEST_P(HttpServerPropertiesManagerTest, |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 656 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
649 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 657 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
650 } | 658 } |
651 | 659 |
652 // Regression test for crbug.com/670519. Test that there is only one pref update | 660 // Regression test for crbug.com/670519. Test that there is only one pref update |
653 // scheduled if multiple updates happen in a given time period. Subsequent pref | 661 // scheduled if multiple updates happen in a given time period. Subsequent pref |
654 // update could also be scheduled once the previous scheduled update is | 662 // update could also be scheduled once the previous scheduled update is |
655 // completed. | 663 // completed. |
656 TEST_P(HttpServerPropertiesManagerTest, | 664 TEST_P(HttpServerPropertiesManagerTest, |
657 SinglePrefUpdateForTwoSpdyServerCacheChanges) { | 665 SinglePrefUpdateForTwoSpdyServerCacheChanges) { |
658 // Keep this in sync with http_server_properties_manager.cc | |
659 const int64_t kUpdatePrefsDelayMs = 60000; | |
660 ExpectPrefsUpdate(2); | 666 ExpectPrefsUpdate(2); |
661 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); | 667 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); |
662 | 668 |
663 // Post an update task to the network thread. SetSupportsSpdy calls | 669 // Post an update task to the network thread. SetSupportsSpdy calls |
664 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. | 670 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. |
665 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); | 671 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); |
666 EXPECT_FALSE( | 672 EXPECT_FALSE( |
667 http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 673 http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
668 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); | 674 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); |
669 // The pref update task should be scheduled to network thread. | 675 // The pref update task should be scheduled to network thread. |
670 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); | 676 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); |
671 | 677 |
672 // Move forward the task runner with kUpdatePrefsDelayMs/2. | 678 // Move forward the task runner short by 20ms. |
673 net_test_task_runner_->FastForwardBy( | 679 net_test_task_runner_->FastForwardBy( |
674 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2)); | 680 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() - |
| 681 base::TimeDelta::FromMilliseconds(20)); |
675 | 682 |
676 // Set another spdy server to trigger another call to | 683 // Set another spdy server to trigger another call to |
677 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to | 684 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to |
678 // the network thread. | 685 // the network thread. |
679 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); | 686 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); |
680 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); | 687 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); |
681 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); | 688 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); |
682 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 689 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
683 | 690 |
684 // Forward another kUpdatePrefsDelayMs/2. The pref update should be executed. | 691 // Move forward the extra 20ms. The pref update should be executed. |
685 net_test_task_runner_->FastForwardBy( | 692 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); |
686 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2)); | |
687 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 693 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
688 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 694 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
689 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 695 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
690 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 696 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
691 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 697 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
692 | 698 |
693 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 699 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
694 EXPECT_TRUE( | 700 EXPECT_TRUE( |
695 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); | 701 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); |
696 // Set the third spdy server to trigger one more call to | 702 // Set the third spdy server to trigger one more call to |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 801 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
796 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 802 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
797 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 803 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
798 | 804 |
799 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); | 805 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
800 } | 806 } |
801 | 807 |
802 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { | 808 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { |
803 ExpectPrefsUpdate(1); | 809 ExpectPrefsUpdate(1); |
804 | 810 |
805 url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); | 811 url::SchemeHostPort spdy_server_mail; |
806 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); | 812 AlternativeService alternative_service; |
807 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443); | |
808 | 813 |
809 ExpectScheduleUpdatePrefsOnNetworkThread(); | 814 { |
810 http_server_props_manager_->SetAlternativeService( | 815 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
811 spdy_server_mail, alternative_service, one_day_from_now_); | |
812 | 816 |
813 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 817 spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); |
814 alternative_service)); | 818 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
815 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 819 alternative_service = |
816 alternative_service)); | 820 AlternativeService(kProtoHTTP2, "mail.google.com", 443); |
817 | 821 |
818 ExpectScheduleUpdatePrefsOnNetworkThread(); | 822 ExpectScheduleUpdatePrefsOnNetworkThread(); |
819 http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service); | 823 http_server_props_manager_->SetAlternativeService( |
820 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( | 824 spdy_server_mail, alternative_service, one_day_from_now_); |
821 alternative_service)); | |
822 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | |
823 alternative_service)); | |
824 | 825 |
825 ExpectScheduleUpdatePrefsOnNetworkThread(); | 826 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
826 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | 827 alternative_service)); |
827 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 828 EXPECT_FALSE( |
828 alternative_service)); | 829 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
829 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 830 alternative_service)); |
830 alternative_service)); | 831 |
831 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. | 832 ExpectScheduleUpdatePrefsOnNetworkThread(); |
832 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | 833 http_server_props_manager_->MarkAlternativeServiceBroken( |
833 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 834 alternative_service); |
834 alternative_service)); | 835 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( |
835 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 836 alternative_service)); |
836 alternative_service)); | 837 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 838 alternative_service)); |
| 839 |
| 840 ExpectScheduleUpdatePrefsOnNetworkThread(); |
| 841 http_server_props_manager_->ConfirmAlternativeService(alternative_service); |
| 842 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
| 843 alternative_service)); |
| 844 EXPECT_FALSE( |
| 845 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 846 alternative_service)); |
| 847 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. |
| 848 http_server_props_manager_->ConfirmAlternativeService(alternative_service); |
| 849 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
| 850 alternative_service)); |
| 851 EXPECT_FALSE( |
| 852 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 853 alternative_service)); |
| 854 } |
837 | 855 |
838 // Run the task. | 856 // Run the task. |
839 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 857 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
840 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 858 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
841 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 859 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
842 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 860 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
843 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 861 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
844 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 862 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
845 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 863 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
846 | 864 |
847 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 865 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
848 | 866 |
849 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 867 { |
850 alternative_service)); | 868 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
851 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 869 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
852 alternative_service)); | 870 alternative_service)); |
| 871 EXPECT_FALSE( |
| 872 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 873 alternative_service)); |
| 874 } |
853 } | 875 } |
854 | 876 |
855 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) { | 877 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) { |
856 ExpectPrefsUpdate(1); | 878 ExpectPrefsUpdate(1); |
857 ExpectScheduleUpdatePrefsOnNetworkThread(); | 879 ExpectScheduleUpdatePrefsOnNetworkThread(); |
858 | 880 |
859 IPAddress address; | 881 IPAddress address; |
860 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); | 882 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); |
861 | 883 |
862 IPAddress actual_address(127, 0, 0, 1); | 884 IPAddress actual_address(127, 0, 0, 1); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
932 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 954 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
933 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 955 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
934 | 956 |
935 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 957 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
936 | 958 |
937 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( | 959 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( |
938 mail_quic_server_id)); | 960 mail_quic_server_id)); |
939 } | 961 } |
940 | 962 |
941 TEST_P(HttpServerPropertiesManagerTest, Clear) { | 963 TEST_P(HttpServerPropertiesManagerTest, Clear) { |
942 // This task expect to run the QuitWhenIdleClosure in the current thread, | |
943 // thus can not mock the pref task runner. | |
944 SetUpWithNonTaskRunner(); | |
945 | |
946 ExpectPrefsUpdate(1); | 964 ExpectPrefsUpdate(1); |
947 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); | 965 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); |
948 | 966 |
949 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); | 967 const url::SchemeHostPort spdy_server("https", "mail.google.com", 443); |
950 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); | 968 const IPAddress actual_address(127, 0, 0, 1); |
951 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 1234); | 969 const QuicServerId mail_quic_server_id("mail.google.com", 80); |
952 http_server_props_manager_->SetAlternativeService( | 970 const std::string quic_server_info1("quic_server_info1"); |
953 spdy_server, alternative_service, one_day_from_now_); | |
954 IPAddress actual_address(127, 0, 0, 1); | |
955 http_server_props_manager_->SetSupportsQuic(true, actual_address); | |
956 ServerNetworkStats stats; | |
957 stats.srtt = base::TimeDelta::FromMicroseconds(10); | |
958 http_server_props_manager_->SetServerNetworkStats(spdy_server, stats); | |
959 | 971 |
960 QuicServerId mail_quic_server_id("mail.google.com", 80); | 972 { |
961 std::string quic_server_info1("quic_server_info1"); | 973 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
962 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, | 974 |
963 quic_server_info1); | 975 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); |
| 976 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", |
| 977 1234); |
| 978 http_server_props_manager_->SetAlternativeService( |
| 979 spdy_server, alternative_service, one_day_from_now_); |
| 980 http_server_props_manager_->SetSupportsQuic(true, actual_address); |
| 981 ServerNetworkStats stats; |
| 982 stats.srtt = base::TimeDelta::FromMicroseconds(10); |
| 983 http_server_props_manager_->SetServerNetworkStats(spdy_server, stats); |
| 984 |
| 985 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, |
| 986 quic_server_info1); |
| 987 } |
964 | 988 |
965 // Run the task. | 989 // Run the task. |
966 base::RunLoop().RunUntilIdle(); | 990 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
967 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 991 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
968 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 992 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
969 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 993 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
970 | 994 |
971 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 995 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
972 EXPECT_TRUE(HasAlternativeService(spdy_server)); | 996 EXPECT_TRUE(HasAlternativeService(spdy_server)); |
973 IPAddress address; | 997 IPAddress address; |
974 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); | 998 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); |
975 EXPECT_EQ(actual_address, address); | 999 EXPECT_EQ(actual_address, address); |
976 const ServerNetworkStats* stats1 = | 1000 const ServerNetworkStats* stats1 = |
977 http_server_props_manager_->GetServerNetworkStats(spdy_server); | 1001 http_server_props_manager_->GetServerNetworkStats(spdy_server); |
978 EXPECT_EQ(10, stats1->srtt.ToInternalValue()); | 1002 EXPECT_EQ(10, stats1->srtt.ToInternalValue()); |
979 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( | 1003 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( |
980 mail_quic_server_id)); | 1004 mail_quic_server_id)); |
981 | 1005 |
982 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1006 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
983 | 1007 |
984 ExpectPrefsUpdate(1); | 1008 ExpectPrefsUpdate(1); |
985 | 1009 |
986 // Clear http server data, time out if we do not get a completion callback. | 1010 // Clear http server data and run the ensuing non-delayed prefs update. |
987 http_server_props_manager_->Clear(base::MessageLoop::QuitWhenIdleClosure()); | 1011 { |
988 | 1012 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
989 base::RunLoop().Run(); | 1013 http_server_props_manager_->Clear(); |
| 1014 } |
| 1015 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
| 1016 pref_test_task_runner_->RunUntilIdle(); |
| 1017 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
990 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1018 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
991 | 1019 |
992 EXPECT_FALSE( | 1020 EXPECT_FALSE( |
993 http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 1021 http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
994 EXPECT_FALSE(HasAlternativeService(spdy_server)); | 1022 EXPECT_FALSE(HasAlternativeService(spdy_server)); |
995 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); | 1023 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); |
996 const ServerNetworkStats* stats2 = | 1024 const ServerNetworkStats* stats2 = |
997 http_server_props_manager_->GetServerNetworkStats(spdy_server); | 1025 http_server_props_manager_->GetServerNetworkStats(spdy_server); |
998 EXPECT_EQ(nullptr, stats2); | 1026 EXPECT_EQ(nullptr, stats2); |
999 EXPECT_EQ(nullptr, | 1027 EXPECT_EQ(nullptr, |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1179 const base::Value* http_server_properties = | 1207 const base::Value* http_server_properties = |
1180 &pref_delegate_->GetServerProperties(); | 1208 &pref_delegate_->GetServerProperties(); |
1181 std::string preferences_json; | 1209 std::string preferences_json; |
1182 EXPECT_TRUE( | 1210 EXPECT_TRUE( |
1183 base::JSONWriter::Write(*http_server_properties, &preferences_json)); | 1211 base::JSONWriter::Write(*http_server_properties, &preferences_json)); |
1184 EXPECT_EQ(expected_json, preferences_json); | 1212 EXPECT_EQ(expected_json, preferences_json); |
1185 } | 1213 } |
1186 | 1214 |
1187 TEST_P(HttpServerPropertiesManagerTest, | 1215 TEST_P(HttpServerPropertiesManagerTest, |
1188 SingleCacheUpdateForMultipleUpdatesScheduled) { | 1216 SingleCacheUpdateForMultipleUpdatesScheduled) { |
1189 // Keep this in sync with http_server_properties_manager.cc | |
1190 const int64_t kUpdateCacheDelayMs = 1000; | |
1191 // Update cache. | 1217 // Update cache. |
1192 ExpectCacheUpdate(); | 1218 ExpectCacheUpdate(); |
1193 | 1219 |
1194 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); | 1220 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); |
1195 // Update cache. | 1221 // Update cache. |
1196 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1222 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
1197 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1223 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
1198 | 1224 |
1199 // Move forward the task runner kUpdateCacheDelayMs/2. | 1225 // Move forward the task runner short by 20ms. |
1200 pref_test_task_runner_->FastForwardBy( | 1226 pref_test_task_runner_->FastForwardBy( |
1201 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2)); | 1227 HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() - |
| 1228 base::TimeDelta::FromMilliseconds(20)); |
1202 // Schedule a new cache update within the time window should be a no-op. | 1229 // Schedule a new cache update within the time window should be a no-op. |
1203 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1230 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
1204 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1231 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
1205 | 1232 |
1206 // Move forward the task runner kUpdateCaceDelayMs/2, now the cache update | 1233 // Move forward the task runner the extra 20ms, now the cache update should be |
1207 // should be exectured. | 1234 // executed. |
1208 pref_test_task_runner_->FastForwardBy( | 1235 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); |
1209 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2)); | |
1210 | 1236 |
1211 // Since this test has no pref corruption, there shouldn't be any pref update. | 1237 // Since this test has no pref corruption, there shouldn't be any pref update. |
1212 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1238 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1213 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1239 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1214 | 1240 |
1215 // Schedule one more cache update. The task should be successfully scheduled | 1241 // Schedule one more cache update. The task should be successfully scheduled |
1216 // on pref task runner. | 1242 // on pref task runner. |
1217 ExpectCacheUpdate(); | 1243 ExpectCacheUpdate(); |
1218 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1244 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
1219 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1245 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 | 1314 |
1289 AlternativeServiceMap::iterator it = alternative_service_map.Get(server); | 1315 AlternativeServiceMap::iterator it = alternative_service_map.Get(server); |
1290 EXPECT_EQ(alternative_service_map.end(), it); | 1316 EXPECT_EQ(alternative_service_map.end(), it); |
1291 } | 1317 } |
1292 | 1318 |
1293 // Do not persist expired or broken alternative service entries to disk. | 1319 // Do not persist expired or broken alternative service entries to disk. |
1294 TEST_P(HttpServerPropertiesManagerTest, | 1320 TEST_P(HttpServerPropertiesManagerTest, |
1295 DoNotPersistExpiredOrBrokenAlternativeService) { | 1321 DoNotPersistExpiredOrBrokenAlternativeService) { |
1296 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); | 1322 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); |
1297 | 1323 |
1298 AlternativeServiceInfoVector alternative_service_info_vector; | 1324 { |
| 1325 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
1299 | 1326 |
1300 const AlternativeService broken_alternative_service( | 1327 AlternativeServiceInfoVector alternative_service_info_vector; |
1301 kProtoHTTP2, "broken.example.com", 443); | |
1302 const base::Time time_one_day_later = | |
1303 base::Time::Now() + base::TimeDelta::FromDays(1); | |
1304 alternative_service_info_vector.push_back( | |
1305 AlternativeServiceInfo(broken_alternative_service, time_one_day_later)); | |
1306 // #1: MarkAlternativeServiceBroken(). | |
1307 http_server_props_manager_->MarkAlternativeServiceBroken( | |
1308 broken_alternative_service); | |
1309 | 1328 |
1310 const AlternativeService expired_alternative_service( | 1329 const AlternativeService broken_alternative_service( |
1311 kProtoHTTP2, "expired.example.com", 443); | 1330 kProtoHTTP2, "broken.example.com", 443); |
1312 const base::Time time_one_day_ago = | 1331 const base::Time time_one_day_later = |
1313 base::Time::Now() - base::TimeDelta::FromDays(1); | 1332 base::Time::Now() + base::TimeDelta::FromDays(1); |
1314 alternative_service_info_vector.push_back( | 1333 alternative_service_info_vector.push_back( |
1315 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); | 1334 AlternativeServiceInfo(broken_alternative_service, time_one_day_later)); |
| 1335 // #1: MarkAlternativeServiceBroken(). |
| 1336 http_server_props_manager_->MarkAlternativeServiceBroken( |
| 1337 broken_alternative_service); |
1316 | 1338 |
1317 const AlternativeService valid_alternative_service(kProtoHTTP2, | 1339 const AlternativeService expired_alternative_service( |
1318 "valid.example.com", 443); | 1340 kProtoHTTP2, "expired.example.com", 443); |
1319 alternative_service_info_vector.push_back( | 1341 const base::Time time_one_day_ago = |
1320 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); | 1342 base::Time::Now() - base::TimeDelta::FromDays(1); |
| 1343 alternative_service_info_vector.push_back( |
| 1344 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); |
1321 | 1345 |
1322 const url::SchemeHostPort server("https", "www.example.com", 443); | 1346 const AlternativeService valid_alternative_service( |
1323 // #2: SetAlternativeService(). | 1347 kProtoHTTP2, "valid.example.com", 443); |
1324 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( | 1348 alternative_service_info_vector.push_back( |
1325 server, alternative_service_info_vector)); | 1349 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); |
| 1350 |
| 1351 const url::SchemeHostPort server("https", "www.example.com", 443); |
| 1352 // #2: SetAlternativeService(). |
| 1353 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( |
| 1354 server, alternative_service_info_vector)); |
| 1355 } |
1326 | 1356 |
1327 // Update cache. | 1357 // Update cache. |
1328 ExpectPrefsUpdate(1); | 1358 ExpectPrefsUpdate(1); |
1329 | 1359 |
1330 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1360 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
1331 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1361 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1332 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1362 |
| 1363 // |net_test_task_runner_| has a remaining pending task to expire |
| 1364 // |broken_alternative_service| |time_one_day_later| (and the impl uses |
| 1365 // TimeTicks::Now() without a mock clock so FastForwardUntilNoTasksRemain() |
| 1366 // would result in an infinite loop). |
| 1367 net_test_task_runner_->FastForwardBy( |
| 1368 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); |
| 1369 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount()); |
| 1370 |
1333 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 1371 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
1334 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1372 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
1335 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1373 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount()); |
1336 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1374 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1337 | 1375 |
1338 const base::DictionaryValue& pref_dict = | 1376 const base::DictionaryValue& pref_dict = |
1339 pref_delegate_->GetServerProperties(); | 1377 pref_delegate_->GetServerProperties(); |
1340 | 1378 |
1341 const base::ListValue* servers_list = nullptr; | 1379 const base::ListValue* servers_list = nullptr; |
1342 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); | 1380 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); |
1343 base::ListValue::const_iterator it = servers_list->begin(); | 1381 base::ListValue::const_iterator it = servers_list->begin(); |
1344 const base::DictionaryValue* server_pref_dict; | 1382 const base::DictionaryValue* server_pref_dict; |
1345 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); | 1383 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1450 http_server_props_manager_.reset(); | 1488 http_server_props_manager_.reset(); |
1451 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1489 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1452 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1490 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1453 } | 1491 } |
1454 | 1492 |
1455 // | 1493 // |
1456 // Tests for shutdown when updating prefs. | 1494 // Tests for shutdown when updating prefs. |
1457 // | 1495 // |
1458 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { | 1496 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { |
1459 // Post an update task to the IO thread. | 1497 // Post an update task to the IO thread. |
1460 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); | 1498 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault(); |
1461 // Shutdown comes before the task is executed. | 1499 // Shutdown comes before the task is executed. |
1462 http_server_props_manager_->ShutdownOnPrefThread(); | 1500 http_server_props_manager_->ShutdownOnPrefThread(); |
1463 http_server_props_manager_.reset(); | 1501 http_server_props_manager_.reset(); |
1464 // Run the task after shutdown and deletion. | 1502 // Run the task after shutdown and deletion. |
1465 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1503 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
1466 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1504 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1467 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1505 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
1468 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1506 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1469 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1507 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1470 } | 1508 } |
1471 | 1509 |
1472 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { | 1510 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { |
1473 ExpectPrefsUpdate(1); | 1511 ExpectPrefsUpdate(1); |
1474 // Post an update task. | 1512 // Post an update task. |
1475 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); | 1513 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault(); |
1476 // Shutdown comes before the task is executed. | 1514 // Shutdown comes before the task is executed. |
1477 http_server_props_manager_->ShutdownOnPrefThread(); | 1515 http_server_props_manager_->ShutdownOnPrefThread(); |
1478 // Run the task after shutdown, but before deletion. | 1516 // Run the task after shutdown, but before deletion. |
1479 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1517 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
1480 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1518 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1481 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1519 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
1482 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 1520 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
1483 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1521 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
1484 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1522 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1485 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1523 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
(...skipping 16 matching lines...) Expand all Loading... |
1502 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1540 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
1503 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1541 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1504 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1542 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1505 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1543 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
1506 http_server_props_manager_.reset(); | 1544 http_server_props_manager_.reset(); |
1507 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1545 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
1508 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1546 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
1509 } | 1547 } |
1510 | 1548 |
1511 } // namespace net | 1549 } // namespace net |
OLD | NEW |