Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: net/http/http_server_properties_manager_unittest.cc

Issue 2554723003: Always persist data to disk after 60s from the receiving update request. (Closed)
Patch Set: rebase with upstream committed Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_server_properties_manager_unittest.cc
diff --git a/net/http/http_server_properties_manager_unittest.cc b/net/http/http_server_properties_manager_unittest.cc
index 822d053a394a370938ca14214d249ffd5083dbd3..b2f11528bdb6a81c88f45554792ea29b474bff37 100644
--- a/net/http/http_server_properties_manager_unittest.cc
+++ b/net/http/http_server_properties_manager_unittest.cc
@@ -84,7 +84,8 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
scoped_refptr<base::SingleThreadTaskRunner> net_task_runner)
: HttpServerPropertiesManager(pref_delegate,
pref_task_runner,
- net_task_runner) {
+ net_task_runner),
+ pref_update_delay_(base::TimeDelta()) {
InitializeOnNetworkThread();
}
@@ -96,7 +97,7 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
// Post tasks without a delay during tests.
void StartPrefsUpdateTimerOnNetworkThread(base::TimeDelta delay) override {
HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread(
- base::TimeDelta());
+ pref_update_delay_);
}
void UpdateCacheFromPrefsOnUIConcrete() {
@@ -124,6 +125,9 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
DETECTED_CORRUPTED_PREFS);
}
+ void set_pref_update_delay(base::TimeDelta delay) {
+ pref_update_delay_ = delay;
+ }
MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void());
MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&));
MOCK_METHOD1(ScheduleUpdatePrefsOnNetworkThread, void(Location location));
@@ -143,6 +147,8 @@ class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager {
const base::Closure& completion));
private:
+ // Time delays used in test for posting tasks. Default to zero.
+ base::TimeDelta pref_update_delay_;
DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
};
@@ -659,6 +665,68 @@ TEST_P(HttpServerPropertiesManagerTest, SupportsSpdy) {
Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
}
+// Regression test for crbug.com/670519. Test that there is only one pref update
+// scheduled if multiple updates happen in a given time period. Subsequent pref
+// update could also be scheduled once the previous scheduled update is
+// completed.
+TEST_P(HttpServerPropertiesManagerTest,
+ SinglePrefUpdateForTwoSpdyServerCacheChangese) {
+ http_server_props_manager_->set_pref_update_delay(
+ base::TimeDelta::FromMilliseconds(60));
+ ExpectPrefsUpdateRepeatedly();
+ ExpectScheduleUpdatePrefsOnNetworkThreadRepeatedly();
+
+ // Post an update task to the network thread. SetSupportsSpdy calls
+ // ScheduleUpdatePrefsOnNetworkThread with a delay of 60ms.
+ url::SchemeHostPort spdy_server("https", "mail.google.com", 443);
+ EXPECT_FALSE(
+ http_server_props_manager_->SupportsRequestPriority(spdy_server));
+ http_server_props_manager_->SetSupportsSpdy(spdy_server, true);
+ // The pref update task should be scheduled to network thread.
+ EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
+
+ // Move forward the task runner with 20ms.
+ net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(20));
+
+ // Set another spdy server to trigger another call to
+ // ScheduleUpdatePrefsOnNetworkThread. There should be no new update posted to
+ // the network thread.
+ url::SchemeHostPort spdy_server2("https", "drive.google.com", 443);
+ http_server_props_manager_->SetSupportsSpdy(spdy_server2, true);
+ EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
+
+ // Move forward another 40ms. The pref update should be executed.
+ net_test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(40));
+ EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
+ EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
+ pref_test_task_runner_->FastForwardUntilNoTasksRemain();
+ EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
+
+ EXPECT_TRUE(http_server_props_manager_->SupportsRequestPriority(spdy_server));
+ EXPECT_TRUE(
+ http_server_props_manager_->SupportsRequestPriority(spdy_server2));
+ // Set the third spdy server to trigger one more call to
+ // ScheduleUpdatePrefsOnNetworkThread. A new update task should be posted to
+ // network thread now since the previous one is completed.
+ url::SchemeHostPort spdy_server3("https", "maps.google.com", 443);
+ http_server_props_manager_->SetSupportsSpdy(spdy_server3, true);
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
+ EXPECT_EQ(1u, net_test_task_runner_->GetPendingTaskCount());
+
+ // Run the task.
+ EXPECT_TRUE(net_test_task_runner_->HasPendingTask());
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
+ net_test_task_runner_->FastForwardUntilNoTasksRemain();
+ EXPECT_TRUE(pref_test_task_runner_->HasPendingTask());
+ pref_test_task_runner_->FastForwardUntilNoTasksRemain();
+ EXPECT_FALSE(net_test_task_runner_->HasPendingTask());
+ EXPECT_FALSE(pref_test_task_runner_->HasPendingTask());
+
+ Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
+}
+
TEST_P(HttpServerPropertiesManagerTest, GetAlternativeServices) {
ExpectPrefsUpdate();
ExpectScheduleUpdatePrefsOnNetworkThread();
« no previous file with comments | « net/http/http_server_properties_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698