Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/net/http_server_properties_manager.h" | 5 #include "chrome/browser/net/http_server_properties_manager.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/common/pref_names.h" | 10 #include "chrome/common/pref_names.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 void UpdateCacheFromPrefsOnUIConcrete() { | 47 void UpdateCacheFromPrefsOnUIConcrete() { |
| 48 HttpServerPropertiesManager::UpdateCacheFromPrefsOnUI(); | 48 HttpServerPropertiesManager::UpdateCacheFromPrefsOnUI(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 // Post tasks without a delay during tests. | 51 // Post tasks without a delay during tests. |
| 52 virtual void StartCacheUpdateTimerOnUI(base::TimeDelta delay) OVERRIDE { | 52 virtual void StartCacheUpdateTimerOnUI(base::TimeDelta delay) OVERRIDE { |
| 53 HttpServerPropertiesManager::StartCacheUpdateTimerOnUI( | 53 HttpServerPropertiesManager::StartCacheUpdateTimerOnUI( |
| 54 base::TimeDelta()); | 54 base::TimeDelta()); |
| 55 } | 55 } |
| 56 | 56 |
| 57 void UpdatePrefsFromCacheOnIOConcrete() { | 57 void UpdatePrefsFromCacheOnIOConcrete(const base::Closure& callback) { |
| 58 HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO(); | 58 HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO(callback); |
| 59 } | 59 } |
| 60 | 60 |
| 61 MOCK_METHOD0(UpdateCacheFromPrefsOnUI, void()); | 61 MOCK_METHOD0(UpdateCacheFromPrefsOnUI, void()); |
| 62 MOCK_METHOD0(UpdatePrefsFromCacheOnIO, void()); | 62 MOCK_METHOD1(UpdatePrefsFromCacheOnIO, void(const base::Closure&)); |
| 63 MOCK_METHOD5(UpdateCacheFromPrefsOnIO, | 63 MOCK_METHOD5(UpdateCacheFromPrefsOnIO, |
| 64 void(std::vector<std::string>* spdy_servers, | 64 void(std::vector<std::string>* spdy_servers, |
| 65 net::SpdySettingsMap* spdy_settings_map, | 65 net::SpdySettingsMap* spdy_settings_map, |
| 66 net::AlternateProtocolMap* alternate_protocol_map, | 66 net::AlternateProtocolMap* alternate_protocol_map, |
| 67 net::PipelineCapabilityMap* pipeline_capability_map, | 67 net::PipelineCapabilityMap* pipeline_capability_map, |
| 68 bool detected_corrupted_prefs)); | 68 bool detected_corrupted_prefs)); |
| 69 MOCK_METHOD4(UpdatePrefsOnUI, | 69 MOCK_METHOD4(UpdatePrefsOnUI, |
| 70 void(base::ListValue* spdy_server_list, | 70 void(base::ListValue* spdy_server_list, |
| 71 net::SpdySettingsMap* spdy_settings_map, | 71 net::SpdySettingsMap* spdy_settings_map, |
| 72 net::AlternateProtocolMap* alternate_protocol_map, | 72 net::AlternateProtocolMap* alternate_protocol_map, |
| 73 net::PipelineCapabilityMap* pipeline_capability_map)); | 73 net::PipelineCapabilityMap* pipeline_capability_map)); |
| 74 | 74 |
| 75 private: | 75 private: |
| 76 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); | 76 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 class MockClosure : public base::RefCountedThreadSafe<MockClosure> { | |
| 80 public: | |
| 81 MOCK_METHOD0(MockMethod, void()); | |
| 82 | |
| 83 static base::Closure NewExpectedClosure() { | |
| 84 scoped_refptr<MockClosure> mock_closure(new MockClosure); | |
| 85 EXPECT_CALL(*mock_closure, MockMethod()); | |
| 86 return base::Bind(&MockClosure::MockMethod, mock_closure); | |
| 87 } | |
| 88 | |
| 89 protected: | |
| 90 friend class base::RefCountedThreadSafe<MockClosure>; | |
| 91 virtual ~MockClosure() {} | |
|
mmenke
2012/10/25 20:15:52
nit: friend classes are generally put in the priv
engedy
2012/10/25 21:47:43
Done.
| |
| 92 | |
| 93 private: | |
| 94 MockClosure() {} | |
|
mmenke
2012/10/25 20:15:52
nit: Suggest a blank line here.
engedy
2012/10/25 21:47:43
Done.
| |
| 95 DISALLOW_COPY_AND_ASSIGN(MockClosure); | |
| 96 }; | |
| 97 | |
| 79 class HttpServerPropertiesManagerTest : public testing::Test { | 98 class HttpServerPropertiesManagerTest : public testing::Test { |
| 80 protected: | 99 protected: |
| 81 HttpServerPropertiesManagerTest() | 100 HttpServerPropertiesManagerTest() |
| 82 : ui_thread_(BrowserThread::UI, &loop_), | 101 : ui_thread_(BrowserThread::UI, &loop_), |
| 83 io_thread_(BrowserThread::IO, &loop_) { | 102 io_thread_(BrowserThread::IO, &loop_) { |
| 84 } | 103 } |
| 85 | 104 |
| 86 virtual void SetUp() OVERRIDE { | 105 virtual void SetUp() OVERRIDE { |
| 87 pref_service_.RegisterDictionaryPref(prefs::kHttpServerProperties); | 106 pref_service_.RegisterDictionaryPref(prefs::kHttpServerProperties); |
| 88 http_server_props_manager_.reset( | 107 http_server_props_manager_.reset( |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 102 | 121 |
| 103 void ExpectCacheUpdate() { | 122 void ExpectCacheUpdate() { |
| 104 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnUI()) | 123 EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnUI()) |
| 105 .WillOnce( | 124 .WillOnce( |
| 106 Invoke(http_server_props_manager_.get(), | 125 Invoke(http_server_props_manager_.get(), |
| 107 &TestingHttpServerPropertiesManager:: | 126 &TestingHttpServerPropertiesManager:: |
| 108 UpdateCacheFromPrefsOnUIConcrete)); | 127 UpdateCacheFromPrefsOnUIConcrete)); |
| 109 } | 128 } |
| 110 | 129 |
| 111 void ExpectPrefsUpdate() { | 130 void ExpectPrefsUpdate() { |
| 112 EXPECT_CALL(*http_server_props_manager_, UpdatePrefsFromCacheOnIO()) | 131 EXPECT_CALL(*http_server_props_manager_, UpdatePrefsFromCacheOnIO(_)) |
| 113 .WillOnce( | 132 .WillOnce( |
| 114 Invoke(http_server_props_manager_.get(), | 133 Invoke(http_server_props_manager_.get(), |
| 115 &TestingHttpServerPropertiesManager:: | 134 &TestingHttpServerPropertiesManager:: |
| 116 UpdatePrefsFromCacheOnIOConcrete)); | 135 UpdatePrefsFromCacheOnIOConcrete)); |
| 117 } | 136 } |
| 118 | 137 |
| 119 MessageLoop loop_; | 138 MessageLoop loop_; |
| 120 TestingPrefService pref_service_; | 139 TestingPrefService pref_service_; |
| 121 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; | 140 scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; |
| 122 | 141 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; | 365 net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; |
| 347 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); | 366 EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); |
| 348 EXPECT_EQ(value1, flags_and_value1_ret.second); | 367 EXPECT_EQ(value1, flags_and_value1_ret.second); |
| 349 | 368 |
| 350 EXPECT_EQ(net::PIPELINE_CAPABLE, | 369 EXPECT_EQ(net::PIPELINE_CAPABLE, |
| 351 http_server_props_manager_->GetPipelineCapability(known_pipeliner)); | 370 http_server_props_manager_->GetPipelineCapability(known_pipeliner)); |
| 352 | 371 |
| 353 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 372 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 354 | 373 |
| 355 ExpectPrefsUpdate(); | 374 ExpectPrefsUpdate(); |
| 375 | |
| 356 // Clear http server data. | 376 // Clear http server data. |
| 357 http_server_props_manager_->Clear(); | 377 http_server_props_manager_->Clear(MockClosure::NewExpectedClosure()); |
| 358 | 378 |
| 359 // Run the task. | 379 // Run the task. |
| 360 loop_.RunAllPending(); | 380 loop_.RunAllPending(); |
| 361 | 381 |
| 362 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); | 382 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); |
| 363 EXPECT_FALSE( | 383 EXPECT_FALSE( |
| 364 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); | 384 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); |
| 365 | 385 |
| 366 const net::SettingsMap& settings_map2_ret = | 386 const net::SettingsMap& settings_map2_ret = |
| 367 http_server_props_manager_->GetSpdySettings(spdy_server_mail); | 387 http_server_props_manager_->GetSpdySettings(spdy_server_mail); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 427 http_server_props_manager_->ShutdownOnUIThread(); | 447 http_server_props_manager_->ShutdownOnUIThread(); |
| 428 // Run the task after shutdown, but before deletion. | 448 // Run the task after shutdown, but before deletion. |
| 429 loop_.RunAllPending(); | 449 loop_.RunAllPending(); |
| 430 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 450 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 431 http_server_props_manager_.reset(); | 451 http_server_props_manager_.reset(); |
| 432 loop_.RunAllPending(); | 452 loop_.RunAllPending(); |
| 433 } | 453 } |
| 434 | 454 |
| 435 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs2) { | 455 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs2) { |
| 436 // This posts a task to the UI thread. | 456 // This posts a task to the UI thread. |
| 437 http_server_props_manager_->UpdatePrefsFromCacheOnIOConcrete(); | 457 http_server_props_manager_->UpdatePrefsFromCacheOnIOConcrete(base::Closure()); |
| 438 // Shutdown comes before the task is executed. | 458 // Shutdown comes before the task is executed. |
| 439 http_server_props_manager_->ShutdownOnUIThread(); | 459 http_server_props_manager_->ShutdownOnUIThread(); |
| 440 // Run the task after shutdown, but before deletion. | 460 // Run the task after shutdown, but before deletion. |
| 441 loop_.RunAllPending(); | 461 loop_.RunAllPending(); |
| 442 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); | 462 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); |
| 443 http_server_props_manager_.reset(); | 463 http_server_props_manager_.reset(); |
| 444 loop_.RunAllPending(); | 464 loop_.RunAllPending(); |
| 445 } | 465 } |
| 446 | 466 |
| 447 } // namespace | 467 } // namespace |
| 448 | 468 |
| 449 } // namespace chrome_browser_net | 469 } // namespace chrome_browser_net |
| OLD | NEW |