Chromium Code Reviews| 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_|. | |
|
xunjieli
2017/02/16 02:49:18
Just so I understand the api, if we remove the |sc
gab
2017/02/16 16:50:15
It doesn't yet but it should (see TODO(gab) I adde
xunjieli
2017/02/16 17:08:29
Acknowledged. Thanks for the context.
| |
| 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::ScheduleBrokenAlternateProtocolMappingsExpirati on()). | |
| 187 pref_test_task_runner_->RunUntilIdle(); | |
| 188 net_test_task_runner_->RunUntilIdle(); | |
| 190 http_server_props_manager_.reset(); | 189 http_server_props_manager_.reset(); |
| 191 } | 190 } |
| 192 | 191 |
| 193 void ExpectCacheUpdate() { | 192 void ExpectCacheUpdate() { |
| 194 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) | 193 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) |
| 195 .WillOnce(Invoke(http_server_props_manager_.get(), | 194 .WillOnce(Invoke(http_server_props_manager_.get(), |
| 196 &TestingHttpServerPropertiesManager:: | 195 &TestingHttpServerPropertiesManager:: |
| 197 UpdateCacheFromPrefsOnUIConcrete)); | 196 UpdateCacheFromPrefsOnUIConcrete)); |
| 198 } | 197 } |
| 199 | 198 |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 227 bool HasAlternativeService(const url::SchemeHostPort& server) { | 226 bool HasAlternativeService(const url::SchemeHostPort& server) { |
| 228 const AlternativeServiceVector alternative_service_vector = | 227 const AlternativeServiceVector alternative_service_vector = |
| 229 http_server_props_manager_->GetAlternativeServices(server); | 228 http_server_props_manager_->GetAlternativeServices(server); |
| 230 return !alternative_service_vector.empty(); | 229 return !alternative_service_vector.empty(); |
| 231 } | 230 } |
| 232 | 231 |
| 233 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. | 232 MockPrefDelegate* pref_delegate_; // Owned by HttpServerPropertiesManager. |
| 234 std::unique_ptr<TestingHttpServerPropertiesManager> | 233 std::unique_ptr<TestingHttpServerPropertiesManager> |
| 235 http_server_props_manager_; | 234 http_server_props_manager_; |
| 236 base::Time one_day_from_now_; | 235 base::Time one_day_from_now_; |
| 237 scoped_refptr<TestMockTimeTaskRunner> pref_test_task_runner_; | 236 |
| 238 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_; | 237 // Overrides the main thread's message loop with a mock tick clock. Making the |
| 238 // main thread the |pref_test_task_runner_| matches expectations better than | |
| 239 // having an independent TestMockTimeTaskRunner and makes tests easier to | |
| 240 // write. | |
| 241 base::ScopedMockTimeMessageLoopTaskRunner pref_test_task_runner_; | |
| 242 | |
| 243 // Mock the net task runner as well. | |
| 244 scoped_refptr<TestMockTimeTaskRunner> net_test_task_runner_ = | |
| 245 new TestMockTimeTaskRunner; | |
|
xunjieli
2017/02/16 02:49:18
Can we initialize this one in the constructor?
gab
2017/02/16 16:50:15
I prefer C++11 member initialization when at all p
xunjieli
2017/02/16 17:08:29
Acknowledged.
| |
| 239 | 246 |
| 240 private: | 247 private: |
| 241 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); | 248 DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); |
| 242 }; | 249 }; |
| 243 | 250 |
| 244 INSTANTIATE_TEST_CASE_P(/* no prefix */, | 251 INSTANTIATE_TEST_CASE_P(/* no prefix */, |
| 245 HttpServerPropertiesManagerTest, | 252 HttpServerPropertiesManagerTest, |
| 246 ::testing::ValuesIn(kHttpServerPropertiesVersions)); | 253 ::testing::ValuesIn(kHttpServerPropertiesVersions)); |
| 247 | 254 |
| 248 TEST_P(HttpServerPropertiesManagerTest, | 255 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)); | 655 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
| 649 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 656 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 650 } | 657 } |
| 651 | 658 |
| 652 // Regression test for crbug.com/670519. Test that there is only one pref update | 659 // 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 | 660 // scheduled if multiple updates happen in a given time period. Subsequent pref |
| 654 // update could also be scheduled once the previous scheduled update is | 661 // update could also be scheduled once the previous scheduled update is |
| 655 // completed. | 662 // completed. |
| 656 TEST_P(HttpServerPropertiesManagerTest, | 663 TEST_P(HttpServerPropertiesManagerTest, |
| 657 SinglePrefUpdateForTwoSpdyServerCacheChanges) { | 664 SinglePrefUpdateForTwoSpdyServerCacheChanges) { |
| 658 // Keep this in sync with http_server_properties_manager.cc | |
| 659 const int64_t kUpdatePrefsDelayMs = 60000; | |
| 660 ExpectPrefsUpdate(2); | 665 ExpectPrefsUpdate(2); |
| 661 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); | 666 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(3); |
| 662 | 667 |
| 663 // Post an update task to the network thread. SetSupportsSpdy calls | 668 // Post an update task to the network thread. SetSupportsSpdy calls |
| 664 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. | 669 // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms. |
| 665 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); | 670 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); |
| 666 EXPECT_FALSE( | 671 EXPECT_FALSE( |
| 667 http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 672 http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
| 668 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); | 673 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); |
| 669 // The pref update task should be scheduled to network thread. | 674 // The pref update task should be scheduled to network thread. |
| 670 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); | 675 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); |
| 671 | 676 |
| 672 // Move forward the task runner with kUpdatePrefsDelayMs/2. | 677 // Move forward the task runner short by 20ms. |
| 673 net_test_task_runner_->FastForwardBy( | 678 net_test_task_runner_->FastForwardBy( |
| 674 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2)); | 679 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting() - |
| 680 base::TimeDelta::FromMilliseconds(20)); | |
| 675 | 681 |
| 676 // Set another spdy server to trigger another call to | 682 // Set another spdy server to trigger another call to |
| 677 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to | 683 // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to |
| 678 // the network thread. | 684 // the network thread. |
| 679 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); | 685 url::SchemeHostPort spdy_server2("https", "drive.google.com", 443); |
| 680 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); | 686 http_server_props_manager_->SetSupportsSpdy(spdy_server2, true); |
| 681 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); | 687 EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount()); |
| 682 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 688 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 683 | 689 |
| 684 // Forward another kUpdatePrefsDelayMs/2. The pref update should be executed. | 690 // Move forward the extra 20ms. The pref update should be executed. |
| 685 net_test_task_runner_->FastForwardBy( | 691 net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); |
| 686 base::TimeDelta::FromMilliseconds(kUpdatePrefsDelayMs / 2)); | |
| 687 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 692 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 688 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 693 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
| 689 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 694 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 690 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 695 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 691 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 696 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 692 | 697 |
| 693 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 698 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
| 694 EXPECT_TRUE( | 699 EXPECT_TRUE( |
| 695 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); | 700 http_server_props_manager_->SupportsRequestPriority(spdy_server2)); |
| 696 // Set the third spdy server to trigger one more call to | 701 // 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()); | 800 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 796 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 801 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 797 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 802 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 798 | 803 |
| 799 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); | 804 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
| 800 } | 805 } |
| 801 | 806 |
| 802 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { | 807 TEST_P(HttpServerPropertiesManagerTest, ConfirmAlternativeService) { |
| 803 ExpectPrefsUpdate(1); | 808 ExpectPrefsUpdate(1); |
| 804 | 809 |
| 805 url::SchemeHostPort spdy_server_mail("http", "mail.google.com", 80); | 810 url::SchemeHostPort spdy_server_mail; |
| 806 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); | 811 AlternativeService alternative_service; |
| 807 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 443); | |
| 808 | 812 |
| 809 ExpectScheduleUpdatePrefsOnNetworkThread(); | 813 { |
| 810 http_server_props_manager_->SetAlternativeService( | 814 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
| 811 spdy_server_mail, alternative_service, one_day_from_now_); | |
| 812 | 815 |
| 813 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 816 spdy_server_mail = url::SchemeHostPort("http", "mail.google.com", 80); |
| 814 alternative_service)); | 817 EXPECT_FALSE(HasAlternativeService(spdy_server_mail)); |
| 815 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 818 alternative_service = |
| 816 alternative_service)); | 819 AlternativeService(kProtoHTTP2, "mail.google.com", 443); |
| 817 | 820 |
| 818 ExpectScheduleUpdatePrefsOnNetworkThread(); | 821 ExpectScheduleUpdatePrefsOnNetworkThread(); |
| 819 http_server_props_manager_->MarkAlternativeServiceBroken(alternative_service); | 822 http_server_props_manager_->SetAlternativeService( |
| 820 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( | 823 spdy_server_mail, alternative_service, one_day_from_now_); |
| 821 alternative_service)); | |
| 822 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | |
| 823 alternative_service)); | |
| 824 | 824 |
| 825 ExpectScheduleUpdatePrefsOnNetworkThread(); | 825 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
| 826 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | 826 alternative_service)); |
| 827 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 827 EXPECT_FALSE( |
| 828 alternative_service)); | 828 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 829 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 829 alternative_service)); |
| 830 alternative_service)); | 830 |
| 831 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. | 831 ExpectScheduleUpdatePrefsOnNetworkThread(); |
| 832 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | 832 http_server_props_manager_->MarkAlternativeServiceBroken( |
| 833 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 833 alternative_service); |
| 834 alternative_service)); | 834 EXPECT_TRUE(http_server_props_manager_->IsAlternativeServiceBroken( |
| 835 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 835 alternative_service)); |
| 836 alternative_service)); | 836 EXPECT_TRUE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( |
| 837 alternative_service)); | |
| 838 | |
| 839 ExpectScheduleUpdatePrefsOnNetworkThread(); | |
| 840 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | |
| 841 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | |
| 842 alternative_service)); | |
| 843 EXPECT_FALSE( | |
| 844 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | |
| 845 alternative_service)); | |
| 846 // ExpectScheduleUpdatePrefsOnNetworkThread() should be called only once. | |
| 847 http_server_props_manager_->ConfirmAlternativeService(alternative_service); | |
| 848 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | |
| 849 alternative_service)); | |
| 850 EXPECT_FALSE( | |
| 851 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | |
| 852 alternative_service)); | |
| 853 } | |
| 837 | 854 |
| 838 // Run the task. | 855 // Run the task. |
| 839 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 856 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 840 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 857 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
| 841 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 858 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 842 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 859 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
| 843 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 860 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 844 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 861 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 845 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 862 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 846 | 863 |
| 847 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 864 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 848 | 865 |
| 849 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( | 866 { |
| 850 alternative_service)); | 867 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
| 851 EXPECT_FALSE(http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | 868 EXPECT_FALSE(http_server_props_manager_->IsAlternativeServiceBroken( |
| 852 alternative_service)); | 869 alternative_service)); |
| 870 EXPECT_FALSE( | |
| 871 http_server_props_manager_->WasAlternativeServiceRecentlyBroken( | |
| 872 alternative_service)); | |
| 873 } | |
| 853 } | 874 } |
| 854 | 875 |
| 855 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) { | 876 TEST_P(HttpServerPropertiesManagerTest, SupportsQuic) { |
| 856 ExpectPrefsUpdate(1); | 877 ExpectPrefsUpdate(1); |
| 857 ExpectScheduleUpdatePrefsOnNetworkThread(); | 878 ExpectScheduleUpdatePrefsOnNetworkThread(); |
| 858 | 879 |
| 859 IPAddress address; | 880 IPAddress address; |
| 860 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); | 881 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); |
| 861 | 882 |
| 862 IPAddress actual_address(127, 0, 0, 1); | 883 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()); | 953 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 933 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 954 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 934 | 955 |
| 935 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 956 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 936 | 957 |
| 937 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( | 958 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( |
| 938 mail_quic_server_id)); | 959 mail_quic_server_id)); |
| 939 } | 960 } |
| 940 | 961 |
| 941 TEST_P(HttpServerPropertiesManagerTest, Clear) { | 962 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); | 963 ExpectPrefsUpdate(1); |
| 947 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); | 964 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(5); |
| 948 | 965 |
| 949 url::SchemeHostPort spdy_server("https", "mail.google.com", 443); | 966 const url::SchemeHostPort spdy_server("https", "mail.google.com", 443); |
| 950 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); | 967 const IPAddress actual_address(127, 0, 0, 1); |
| 951 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", 1234); | 968 const QuicServerId mail_quic_server_id("mail.google.com", 80); |
| 952 http_server_props_manager_->SetAlternativeService( | 969 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 | 970 |
| 960 QuicServerId mail_quic_server_id("mail.google.com", 80); | 971 { |
| 961 std::string quic_server_info1("quic_server_info1"); | 972 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
| 962 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, | 973 |
| 963 quic_server_info1); | 974 http_server_props_manager_->SetSupportsSpdy(spdy_server, true); |
| 975 AlternativeService alternative_service(kProtoHTTP2, "mail.google.com", | |
| 976 1234); | |
| 977 http_server_props_manager_->SetAlternativeService( | |
| 978 spdy_server, alternative_service, one_day_from_now_); | |
| 979 http_server_props_manager_->SetSupportsQuic(true, actual_address); | |
| 980 ServerNetworkStats stats; | |
| 981 stats.srtt = base::TimeDelta::FromMicroseconds(10); | |
| 982 http_server_props_manager_->SetServerNetworkStats(spdy_server, stats); | |
| 983 | |
| 984 http_server_props_manager_->SetQuicServerInfo(mail_quic_server_id, | |
| 985 quic_server_info1); | |
| 986 } | |
| 964 | 987 |
| 965 // Run the task. | 988 // Run the task. |
| 966 base::RunLoop().RunUntilIdle(); | 989 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 967 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 990 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
| 968 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 991 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 969 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 992 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 970 | 993 |
| 971 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 994 EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
| 972 EXPECT_TRUE(HasAlternativeService(spdy_server)); | 995 EXPECT_TRUE(HasAlternativeService(spdy_server)); |
| 973 IPAddress address; | 996 IPAddress address; |
| 974 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); | 997 EXPECT_TRUE(http_server_props_manager_->GetSupportsQuic(&address)); |
| 975 EXPECT_EQ(actual_address, address); | 998 EXPECT_EQ(actual_address, address); |
| 976 const ServerNetworkStats* stats1 = | 999 const ServerNetworkStats* stats1 = |
| 977 http_server_props_manager_->GetServerNetworkStats(spdy_server); | 1000 http_server_props_manager_->GetServerNetworkStats(spdy_server); |
| 978 EXPECT_EQ(10, stats1->srtt.ToInternalValue()); | 1001 EXPECT_EQ(10, stats1->srtt.ToInternalValue()); |
| 979 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( | 1002 EXPECT_EQ(quic_server_info1, *http_server_props_manager_->GetQuicServerInfo( |
| 980 mail_quic_server_id)); | 1003 mail_quic_server_id)); |
| 981 | 1004 |
| 982 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1005 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 983 | 1006 |
| 984 ExpectPrefsUpdate(1); | 1007 ExpectPrefsUpdate(1); |
| 985 | 1008 |
| 986 // Clear http server data, time out if we do not get a completion callback. | 1009 // Clear http server data and run the ensuing non-delayed prefs update. |
| 987 http_server_props_manager_->Clear(base::MessageLoop::QuitWhenIdleClosure()); | 1010 { |
| 988 | 1011 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); |
| 989 base::RunLoop().Run(); | 1012 http_server_props_manager_->Clear(); |
| 1013 } | |
| 1014 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | |
| 1015 pref_test_task_runner_->RunUntilIdle(); | |
| 1016 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | |
| 990 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1017 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 991 | 1018 |
| 992 EXPECT_FALSE( | 1019 EXPECT_FALSE( |
| 993 http_server_props_manager_->SupportsRequestPriority(spdy_server)); | 1020 http_server_props_manager_->SupportsRequestPriority(spdy_server)); |
| 994 EXPECT_FALSE(HasAlternativeService(spdy_server)); | 1021 EXPECT_FALSE(HasAlternativeService(spdy_server)); |
| 995 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); | 1022 EXPECT_FALSE(http_server_props_manager_->GetSupportsQuic(&address)); |
| 996 const ServerNetworkStats* stats2 = | 1023 const ServerNetworkStats* stats2 = |
| 997 http_server_props_manager_->GetServerNetworkStats(spdy_server); | 1024 http_server_props_manager_->GetServerNetworkStats(spdy_server); |
| 998 EXPECT_EQ(nullptr, stats2); | 1025 EXPECT_EQ(nullptr, stats2); |
| 999 EXPECT_EQ(nullptr, | 1026 EXPECT_EQ(nullptr, |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1179 const base::Value* http_server_properties = | 1206 const base::Value* http_server_properties = |
| 1180 &pref_delegate_->GetServerProperties(); | 1207 &pref_delegate_->GetServerProperties(); |
| 1181 std::string preferences_json; | 1208 std::string preferences_json; |
| 1182 EXPECT_TRUE( | 1209 EXPECT_TRUE( |
| 1183 base::JSONWriter::Write(*http_server_properties, &preferences_json)); | 1210 base::JSONWriter::Write(*http_server_properties, &preferences_json)); |
| 1184 EXPECT_EQ(expected_json, preferences_json); | 1211 EXPECT_EQ(expected_json, preferences_json); |
| 1185 } | 1212 } |
| 1186 | 1213 |
| 1187 TEST_P(HttpServerPropertiesManagerTest, | 1214 TEST_P(HttpServerPropertiesManagerTest, |
| 1188 SingleCacheUpdateForMultipleUpdatesScheduled) { | 1215 SingleCacheUpdateForMultipleUpdatesScheduled) { |
| 1189 // Keep this in sync with http_server_properties_manager.cc | |
| 1190 const int64_t kUpdateCacheDelayMs = 1000; | |
| 1191 // Update cache. | 1216 // Update cache. |
| 1192 ExpectCacheUpdate(); | 1217 ExpectCacheUpdate(); |
| 1193 | 1218 |
| 1194 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); | 1219 EXPECT_EQ(0u, pref_test_task_runner_->GetPendingTaskCount()); |
| 1195 // Update cache. | 1220 // Update cache. |
| 1196 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1221 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
| 1197 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1222 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
| 1198 | 1223 |
| 1199 // Move forward the task runner kUpdateCacheDelayMs/2. | 1224 // Move forward the task runner short by 20ms. |
| 1200 pref_test_task_runner_->FastForwardBy( | 1225 pref_test_task_runner_->FastForwardBy( |
| 1201 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2)); | 1226 HttpServerPropertiesManager::GetUpdateCacheDelayForTesting() - |
| 1227 base::TimeDelta::FromMilliseconds(20)); | |
| 1202 // Schedule a new cache update within the time window should be a no-op. | 1228 // Schedule a new cache update within the time window should be a no-op. |
| 1203 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1229 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
| 1204 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1230 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
| 1205 | 1231 |
| 1206 // Move forward the task runner kUpdateCaceDelayMs/2, now the cache update | 1232 // Move forward the task runner the extra 20ms, now the cache update should be |
| 1207 // should be exectured. | 1233 // exectuted. |
|
xunjieli
2017/02/16 02:49:18
nit: executed. (i know it was misspelled in the or
gab
2017/02/16 16:50:15
Done.
| |
| 1208 pref_test_task_runner_->FastForwardBy( | 1234 pref_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20)); |
| 1209 base::TimeDelta::FromMilliseconds(kUpdateCacheDelayMs / 2)); | |
| 1210 | 1235 |
| 1211 // Since this test has no pref corruption, there shouldn't be any pref update. | 1236 // Since this test has no pref corruption, there shouldn't be any pref update. |
| 1212 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1237 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1213 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1238 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1214 | 1239 |
| 1215 // Schedule one more cache update. The task should be successfully scheduled | 1240 // Schedule one more cache update. The task should be successfully scheduled |
| 1216 // on pref task runner. | 1241 // on pref task runner. |
| 1217 ExpectCacheUpdate(); | 1242 ExpectCacheUpdate(); |
| 1218 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); | 1243 http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); |
| 1219 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); | 1244 EXPECT_EQ(1u, pref_test_task_runner_->GetPendingTaskCount()); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1288 | 1313 |
| 1289 AlternativeServiceMap::iterator it = alternative_service_map.Get(server); | 1314 AlternativeServiceMap::iterator it = alternative_service_map.Get(server); |
| 1290 EXPECT_EQ(alternative_service_map.end(), it); | 1315 EXPECT_EQ(alternative_service_map.end(), it); |
| 1291 } | 1316 } |
| 1292 | 1317 |
| 1293 // Do not persist expired or broken alternative service entries to disk. | 1318 // Do not persist expired or broken alternative service entries to disk. |
| 1294 TEST_P(HttpServerPropertiesManagerTest, | 1319 TEST_P(HttpServerPropertiesManagerTest, |
| 1295 DoNotPersistExpiredOrBrokenAlternativeService) { | 1320 DoNotPersistExpiredOrBrokenAlternativeService) { |
| 1296 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); | 1321 ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly(2); |
| 1297 | 1322 |
| 1298 AlternativeServiceInfoVector alternative_service_info_vector; | 1323 { |
| 1324 TestMockTimeTaskRunner::ScopedContext scoped_context(net_test_task_runner_); | |
| 1299 | 1325 |
| 1300 const AlternativeService broken_alternative_service( | 1326 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 | 1327 |
| 1310 const AlternativeService expired_alternative_service( | 1328 const AlternativeService broken_alternative_service( |
| 1311 kProtoHTTP2, "expired.example.com", 443); | 1329 kProtoHTTP2, "broken.example.com", 443); |
| 1312 const base::Time time_one_day_ago = | 1330 const base::Time time_one_day_later = |
| 1313 base::Time::Now() - base::TimeDelta::FromDays(1); | 1331 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 1314 alternative_service_info_vector.push_back( | 1332 alternative_service_info_vector.push_back( |
| 1315 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); | 1333 AlternativeServiceInfo(broken_alternative_service, time_one_day_later)); |
| 1334 // #1: MarkAlternativeServiceBroken(). | |
| 1335 http_server_props_manager_->MarkAlternativeServiceBroken( | |
| 1336 broken_alternative_service); | |
| 1316 | 1337 |
| 1317 const AlternativeService valid_alternative_service(kProtoHTTP2, | 1338 const AlternativeService expired_alternative_service( |
| 1318 "valid.example.com", 443); | 1339 kProtoHTTP2, "expired.example.com", 443); |
| 1319 alternative_service_info_vector.push_back( | 1340 const base::Time time_one_day_ago = |
| 1320 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); | 1341 base::Time::Now() - base::TimeDelta::FromDays(1); |
| 1342 alternative_service_info_vector.push_back( | |
| 1343 AlternativeServiceInfo(expired_alternative_service, time_one_day_ago)); | |
| 1321 | 1344 |
| 1322 const url::SchemeHostPort server("https", "www.example.com", 443); | 1345 const AlternativeService valid_alternative_service( |
| 1323 // #2: SetAlternativeService(). | 1346 kProtoHTTP2, "valid.example.com", 443); |
| 1324 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( | 1347 alternative_service_info_vector.push_back( |
| 1325 server, alternative_service_info_vector)); | 1348 AlternativeServiceInfo(valid_alternative_service, time_one_day_later)); |
| 1349 | |
| 1350 const url::SchemeHostPort server("https", "www.example.com", 443); | |
| 1351 // #2: SetAlternativeService(). | |
| 1352 ASSERT_TRUE(http_server_props_manager_->SetAlternativeServices( | |
| 1353 server, alternative_service_info_vector)); | |
| 1354 } | |
| 1326 | 1355 |
| 1327 // Update cache. | 1356 // Update cache. |
| 1328 ExpectPrefsUpdate(1); | 1357 ExpectPrefsUpdate(1); |
| 1329 | 1358 |
| 1330 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1359 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
| 1331 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1360 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1332 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1361 |
| 1362 // |net_test_task_runner_| has a remaining pending task to expire | |
| 1363 // |broken_alternative_service| |time_one_day_later| (and the impl uses | |
| 1364 // TimeTicks::Now() without a mock clock so FastForwardUntilNoTasksRemain() | |
| 1365 // would result in an infinite loop). | |
| 1366 net_test_task_runner_->FastForwardBy( | |
| 1367 HttpServerPropertiesManager::GetUpdatePrefsDelayForTesting()); | |
| 1368 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount()); | |
| 1369 | |
| 1333 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 1370 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
| 1334 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1371 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 1335 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1372 EXPECT_EQ(1U, net_test_task_runner_->GetPendingTaskCount()); |
| 1336 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1373 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1337 | 1374 |
| 1338 const base::DictionaryValue& pref_dict = | 1375 const base::DictionaryValue& pref_dict = |
| 1339 pref_delegate_->GetServerProperties(); | 1376 pref_delegate_->GetServerProperties(); |
| 1340 | 1377 |
| 1341 const base::ListValue* servers_list = nullptr; | 1378 const base::ListValue* servers_list = nullptr; |
| 1342 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); | 1379 ASSERT_TRUE(pref_dict.GetListWithoutPathExpansion("servers", &servers_list)); |
| 1343 base::ListValue::const_iterator it = servers_list->begin(); | 1380 base::ListValue::const_iterator it = servers_list->begin(); |
| 1344 const base::DictionaryValue* server_pref_dict; | 1381 const base::DictionaryValue* server_pref_dict; |
| 1345 ASSERT_TRUE((*it)->GetAsDictionary(&server_pref_dict)); | 1382 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(); | 1487 http_server_props_manager_.reset(); |
| 1451 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1488 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1452 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1489 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1453 } | 1490 } |
| 1454 | 1491 |
| 1455 // | 1492 // |
| 1456 // Tests for shutdown when updating prefs. | 1493 // Tests for shutdown when updating prefs. |
| 1457 // | 1494 // |
| 1458 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { | 1495 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { |
| 1459 // Post an update task to the IO thread. | 1496 // Post an update task to the IO thread. |
| 1460 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); | 1497 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault(); |
| 1461 // Shutdown comes before the task is executed. | 1498 // Shutdown comes before the task is executed. |
| 1462 http_server_props_manager_->ShutdownOnPrefThread(); | 1499 http_server_props_manager_->ShutdownOnPrefThread(); |
| 1463 http_server_props_manager_.reset(); | 1500 http_server_props_manager_.reset(); |
| 1464 // Run the task after shutdown and deletion. | 1501 // Run the task after shutdown and deletion. |
| 1465 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1502 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
| 1466 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1503 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1467 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1504 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 1468 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1505 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1469 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1506 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1470 } | 1507 } |
| 1471 | 1508 |
| 1472 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { | 1509 TEST_P(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { |
| 1473 ExpectPrefsUpdate(1); | 1510 ExpectPrefsUpdate(1); |
| 1474 // Post an update task. | 1511 // Post an update task. |
| 1475 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); | 1512 http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThreadDefault(); |
| 1476 // Shutdown comes before the task is executed. | 1513 // Shutdown comes before the task is executed. |
| 1477 http_server_props_manager_->ShutdownOnPrefThread(); | 1514 http_server_props_manager_->ShutdownOnPrefThread(); |
| 1478 // Run the task after shutdown, but before deletion. | 1515 // Run the task after shutdown, but before deletion. |
| 1479 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); | 1516 EXPECT_TRUE(net_test_task_runner_->HasPendingTask()); |
| 1480 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1517 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1481 net_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1518 net_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 1482 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); | 1519 EXPECT_TRUE(pref_test_task_runner_->HasPendingTask()); |
| 1483 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1520 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 1484 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1521 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1485 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1522 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 1502 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); | 1539 pref_test_task_runner_->FastForwardUntilNoTasksRemain(); |
| 1503 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1540 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1504 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1541 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1505 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 1542 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 1506 http_server_props_manager_.reset(); | 1543 http_server_props_manager_.reset(); |
| 1507 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); | 1544 EXPECT_FALSE(net_test_task_runner_->HasPendingTask()); |
| 1508 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); | 1545 EXPECT_FALSE(pref_test_task_runner_->HasPendingTask()); |
| 1509 } | 1546 } |
| 1510 | 1547 |
| 1511 } // namespace net | 1548 } // namespace net |
| OLD | NEW |