1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/http/http_server_properties_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 89ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/run_loop.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/test/test_simple_task_runner.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace net { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Invoke; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Mock; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrictMock; 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kTestHttpServerProperties[] = "TestHttpServerProperties"; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingHttpServerPropertiesManager : public HttpServerPropertiesManager { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingHttpServerPropertiesManager( 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PrefService* pref_service, 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* pref_path, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : HttpServerPropertiesManager(pref_service, pref_path, io_task_runner) { 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InitializeOnNetworkThread(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~TestingHttpServerPropertiesManager() {} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make these methods public for testing. 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch using HttpServerPropertiesManager::ScheduleUpdateCacheOnPrefThread; 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch using HttpServerPropertiesManager::ScheduleUpdatePrefsOnNetworkThread; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post tasks without a delay during tests. 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void StartPrefsUpdateTimerOnNetworkThread( 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::TimeDelta delay) OVERRIDE { 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HttpServerPropertiesManager::StartPrefsUpdateTimerOnNetworkThread( 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateCacheFromPrefsOnUIConcrete() { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HttpServerPropertiesManager::UpdateCacheFromPrefsOnPrefThread(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post tasks without a delay during tests. 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void StartCacheUpdateTimerOnPrefThread( 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::TimeDelta delay) OVERRIDE { 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HttpServerPropertiesManager::StartCacheUpdateTimerOnPrefThread( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void UpdatePrefsFromCacheOnNetworkThreadConcrete( 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Closure& callback) { 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HttpServerPropertiesManager::UpdatePrefsFromCacheOnNetworkThread(callback); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MOCK_METHOD0(UpdateCacheFromPrefsOnPrefThread, void()); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MOCK_METHOD1(UpdatePrefsFromCacheOnNetworkThread, void(const base::Closure&)); 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD6(UpdateCacheFromPrefsOnNetworkThread, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(std::vector<std::string>* spdy_servers, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SpdySettingsMap* spdy_settings_map, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::AlternateProtocolMap* alternate_protocol_map, 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::AlternateProtocolExperiment experiment, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuicMap* supports_quic_map, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool detected_corrupted_prefs)); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MOCK_METHOD4(UpdatePrefsOnPref, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(base::ListValue* spdy_server_list, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SpdySettingsMap* spdy_settings_map, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::AlternateProtocolMap* alternate_protocol_map, 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuicMap* supports_quic_map)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpServerPropertiesManagerTest : public testing::Test { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HttpServerPropertiesManagerTest() {} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service_.registry()->RegisterDictionaryPref(kTestHttpServerProperties); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset( 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new StrictMock<TestingHttpServerPropertiesManager>( 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &pref_service_, 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kTestHttpServerProperties, 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::MessageLoop::current()->message_loop_proxy())); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectCacheUpdate(); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (http_server_props_manager_.get()) 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectCacheUpdate() { 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*http_server_props_manager_, UpdateCacheFromPrefsOnPrefThread()) 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .WillOnce(Invoke(http_server_props_manager_.get(), 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &TestingHttpServerPropertiesManager:: 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdateCacheFromPrefsOnUIConcrete)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectPrefsUpdate() { 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*http_server_props_manager_, 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdatePrefsFromCacheOnNetworkThread(_)) 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .WillOnce(Invoke(http_server_props_manager_.get(), 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &TestingHttpServerPropertiesManager:: 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdatePrefsFromCacheOnNetworkThreadConcrete)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectPrefsUpdateRepeatedly() { 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_CALL(*http_server_props_manager_, 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdatePrefsFromCacheOnNetworkThread(_)) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .WillRepeatedly( 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Invoke(http_server_props_manager_.get(), 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &TestingHttpServerPropertiesManager:: 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdatePrefsFromCacheOnNetworkThreadConcrete)); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch //base::RunLoop loop_; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSimple pref_service_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingHttpServerPropertiesManager> http_server_props_manager_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HttpServerPropertiesManagerTest); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SingleUpdateForTwoSpdyServerPrefChanges) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectCacheUpdate(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the prefs for www.google.com:80 and mail.google.com:80 and then set 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it twice. Only expect a single cache update. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* server_pref_dict = new base::DictionaryValue; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set supports_spdy for www.google.com:80. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_pref_dict->SetBoolean("supports_spdy", true); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up alternate_protocol for www.google.com:80. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* alternate_protocol = new base::DictionaryValue; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alternate_protocol->SetInteger("port", 443); 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) alternate_protocol->SetString("protocol_str", "npn-spdy/3"); 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch server_pref_dict->SetWithoutPathExpansion("alternate_protocol", 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch alternate_protocol); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up SupportsQuic for www.google.com:80. 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* supports_quic = new base::DictionaryValue; 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci supports_quic->SetBoolean("used_quic", true); 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci supports_quic->SetString("address", "foo"); 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci server_pref_dict->SetWithoutPathExpansion("supports_quic", supports_quic); 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the server preference for www.google.com:80. 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* servers_dict = new base::DictionaryValue; 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch servers_dict->SetWithoutPathExpansion("www.google.com:80", server_pref_dict); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the preference for mail.google.com server. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set supports_spdy for mail.google.com:80 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_pref_dict1->SetBoolean("supports_spdy", true); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up alternate_protocol for mail.google.com:80 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* alternate_protocol1 = new base::DictionaryValue; 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alternate_protocol1->SetInteger("port", 444); 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) alternate_protocol1->SetString("protocol_str", "npn-spdy/3.1"); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch server_pref_dict1->SetWithoutPathExpansion("alternate_protocol", 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch alternate_protocol1); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up SupportsQuic for mail.google.com:80 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::DictionaryValue* supports_quic1 = new base::DictionaryValue; 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci supports_quic1->SetBoolean("used_quic", false); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci supports_quic1->SetString("address", "bar"); 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci server_pref_dict1->SetWithoutPathExpansion("supports_quic", supports_quic1); 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the server preference for mail.google.com:80. 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch servers_dict->SetWithoutPathExpansion("mail.google.com:80", 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch server_pref_dict1); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* http_server_properties_dict = 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new base::DictionaryValue; 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch HttpServerPropertiesManager::SetVersion(http_server_properties_dict, -1); 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch http_server_properties_dict->SetWithoutPathExpansion("servers", servers_dict); 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the same value for kHttpServerProperties multiple times. 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service_.SetManagedPref(kTestHttpServerProperties, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_properties_dict); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* http_server_properties_dict2 = 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_properties_dict->DeepCopy(); 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service_.SetManagedPref(kTestHttpServerProperties, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_properties_dict2); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify SupportsSpdy. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(http_server_props_manager_->SupportsSpdy( 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("www.google.com:80"))); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(http_server_props_manager_->SupportsSpdy( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("mail.google.com:80"))); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(http_server_props_manager_->SupportsSpdy( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("foo.google.com:1337"))); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify AlternateProtocol. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(http_server_props_manager_->HasAlternateProtocol( 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("www.google.com:80"))); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(http_server_props_manager_->HasAlternateProtocol( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("mail.google.com:80"))); 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::AlternateProtocolInfo port_alternate_protocol = 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->GetAlternateProtocol( 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair::FromString("www.google.com:80")); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(443, port_alternate_protocol.port); 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(net::NPN_SPDY_3, port_alternate_protocol.protocol); 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch port_alternate_protocol = http_server_props_manager_->GetAlternateProtocol( 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::HostPortPair::FromString("mail.google.com:80")); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(444, port_alternate_protocol.port); 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(net::NPN_SPDY_3_1, port_alternate_protocol.protocol); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Verify SupportsQuic. 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuic supports_quic2 = 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci http_server_props_manager_->GetSupportsQuic( 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HostPortPair::FromString("www.google.com:80")); 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(supports_quic2.used_quic); 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("foo", supports_quic2.address); 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci supports_quic2 = http_server_props_manager_->GetSupportsQuic( 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HostPortPair::FromString("mail.google.com:80")); 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(supports_quic2.used_quic); 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("bar", supports_quic2.address); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Post an update task to the network thread. SetSupportsSpdy calls 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ScheduleUpdatePrefsOnNetworkThread. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add mail.google.com:443 as a supporting spdy server. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 443); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task. 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, SetSpdySetting) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add SpdySetting for mail.google.com:443. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 443); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 value1 = 31337; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetSpdySetting( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdy_server_mail, id1, flags1, value1); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task. 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SettingsMap& settings_map1_ret = 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, settings_map1_ret.size()); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it1_ret != settings_map1_ret.end()); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(value1, flags_and_value1_ret.second); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ClearSpdySetting) { 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectPrefsUpdateRepeatedly(); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add SpdySetting for mail.google.com:443. 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 443); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH; 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST; 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const uint32 value1 = 31337; 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->SetSpdySetting( 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spdy_server_mail, id1, flags1, value1); 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the task. 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SettingsMap& settings_map1_ret = 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1U, settings_map1_ret.size()); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(it1_ret != settings_map1_ret.end()); 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(value1, flags_and_value1_ret.second); 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Clear SpdySetting for mail.google.com:443. 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->ClearSpdySettings(spdy_server_mail); 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the task. 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that there are no entries in the settings map for 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // mail.google.com:443. 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SettingsMap& settings_map2_ret = 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(0U, settings_map2_ret.size()); 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ClearAllSpdySetting) { 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExpectPrefsUpdateRepeatedly(); 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add SpdySetting for mail.google.com:443. 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 443); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH; 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST; 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const uint32 value1 = 31337; 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->SetSpdySetting( 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) spdy_server_mail, id1, flags1, value1); 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the task. 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SettingsMap& settings_map1_ret = 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(1U, settings_map1_ret.size()); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(it1_ret != settings_map1_ret.end()); 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(value1, flags_and_value1_ret.second); 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Clear All SpdySettings. 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->ClearAllSpdySettings(); 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Run the task. 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that there are no entries in the settings map. 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const net::SpdySettingsMap& spdy_settings_map2_ret = 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) http_server_props_manager_->spdy_settings_map(); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(0U, spdy_settings_map2_ret.size()); 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, HasAlternateProtocol) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 80); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetAlternateProtocol( 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch spdy_server_mail, 443, net::NPN_SPDY_3, 1); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task. 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::AlternateProtocolInfo port_alternate_protocol = 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->GetAlternateProtocol(spdy_server_mail); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(443, port_alternate_protocol.port); 3824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(net::NPN_SPDY_3, port_alternate_protocol.protocol); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(HttpServerPropertiesManagerTest, SupportsQuic) { 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExpectPrefsUpdate(); 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::HostPortPair quic_server_mail("mail.google.com", 80); 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuic supports_quic = http_server_props_manager_->GetSupportsQuic( 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci quic_server_mail); 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(supports_quic.used_quic); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", supports_quic.address); 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci http_server_props_manager_->SetSupportsQuic(quic_server_mail, true, "foo"); 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Run the task. 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop().RunUntilIdle(); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuic supports_quic1 = 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci http_server_props_manager_->GetSupportsQuic(quic_server_mail); 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(supports_quic1.used_quic); 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("foo", supports_quic1.address); 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, Clear) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostPortPair spdy_server_mail("mail.google.com", 443); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetAlternateProtocol( 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch spdy_server_mail, 443, net::NPN_SPDY_3, 1); 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci http_server_props_manager_->SetSupportsQuic(spdy_server_mail, true, "foo"); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SpdySettingsIds id1 = net::SETTINGS_UPLOAD_BANDWIDTH; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SpdySettingsFlags flags1 = net::SETTINGS_FLAG_PLEASE_PERSIST; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32 value1 = 31337; 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->SetSpdySetting( 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdy_server_mail, id1, flags1, value1); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task. 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuic supports_quic = http_server_props_manager_->GetSupportsQuic( 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci spdy_server_mail); 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(supports_quic.used_quic); 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("foo", supports_quic.address); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check SPDY settings values. 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SettingsMap& settings_map1_ret = 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, settings_map1_ret.size()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SettingsMap::const_iterator it1_ret = settings_map1_ret.find(id1); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(it1_ret != settings_map1_ret.end()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SettingsFlagsAndValue flags_and_value1_ret = it1_ret->second; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(net::SETTINGS_FLAG_PERSISTED, flags_and_value1_ret.first); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(value1, flags_and_value1_ret.second); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear http server data, time out if we do not get a completion callback. 44690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) http_server_props_manager_->Clear(base::MessageLoop::QuitClosure()); 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().Run(); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::SupportsQuic supports_quic1 = 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci http_server_props_manager_->GetSupportsQuic(spdy_server_mail); 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(supports_quic1.used_quic); 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("", supports_quic1.address); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::SettingsMap& settings_map2_ret = 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->GetSpdySettings(spdy_server_mail); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0U, settings_map2_ret.size()); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache0) { 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task to the UI thread. 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown and deletion. 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache1) { 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task. 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ScheduleUpdateCacheOnPrefThread(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache2) { 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_->UpdateCacheFromPrefsOnUIConcrete(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests for shutdown when updating prefs. 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs0) { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task to the IO thread. 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown and deletion. 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs1) { 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectPrefsUpdate(); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Post an update task. 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ScheduleUpdatePrefsOnNetworkThread(); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdatePrefs2) { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This posts a task to the UI thread. 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->UpdatePrefsFromCacheOnNetworkThreadConcrete( 526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Closure()); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shutdown comes before the task is executed. 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch http_server_props_manager_->ShutdownOnPrefThread(); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the task after shutdown, but before deletion. 530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) http_server_props_manager_.reset(); 533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace net 539