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

Side by Side Diff: chrome/browser/net/http_server_properties_manager_unittest.cc

Issue 8770035: Save pipelining capabilities for the most used hosts between sessions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged Created 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/net/http_server_properties_manager.cc ('k') | net/http/http_pipelined_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 HttpServerPropertiesManager::StartCacheUpdateTimerOnUI( 53 HttpServerPropertiesManager::StartCacheUpdateTimerOnUI(
54 base::TimeDelta()); 54 base::TimeDelta());
55 } 55 }
56 56
57 void UpdatePrefsFromCacheOnIOConcrete() { 57 void UpdatePrefsFromCacheOnIOConcrete() {
58 HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO(); 58 HttpServerPropertiesManager::UpdatePrefsFromCacheOnIO();
59 } 59 }
60 60
61 MOCK_METHOD0(UpdateCacheFromPrefsOnUI, void()); 61 MOCK_METHOD0(UpdateCacheFromPrefsOnUI, void());
62 MOCK_METHOD0(UpdatePrefsFromCacheOnIO, void()); 62 MOCK_METHOD0(UpdatePrefsFromCacheOnIO, void());
63 MOCK_METHOD3(UpdateCacheFromPrefsOnIO, 63 MOCK_METHOD4(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 MOCK_METHOD3(UpdatePrefsOnUI, 67 net::PipelineCapabilityMap* pipeline_capability_map));
68 MOCK_METHOD4(UpdatePrefsOnUI,
68 void(base::ListValue* spdy_server_list, 69 void(base::ListValue* spdy_server_list,
69 net::SpdySettingsMap* spdy_settings_map, 70 net::SpdySettingsMap* spdy_settings_map,
70 net::AlternateProtocolMap* alternate_protocol_map)); 71 net::AlternateProtocolMap* alternate_protocol_map,
72 net::PipelineCapabilityMap* pipeline_capability_map));
71 73
72 private: 74 private:
73 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager); 75 DISALLOW_COPY_AND_ASSIGN(TestingHttpServerPropertiesManager);
74 }; 76 };
75 77
76 class HttpServerPropertiesManagerTest : public testing::Test { 78 class HttpServerPropertiesManagerTest : public testing::Test {
77 protected: 79 protected:
78 HttpServerPropertiesManagerTest() 80 HttpServerPropertiesManagerTest()
79 : ui_thread_(BrowserThread::UI, &loop_), 81 : ui_thread_(BrowserThread::UI, &loop_),
80 io_thread_(BrowserThread::IO, &loop_) { 82 io_thread_(BrowserThread::IO, &loop_) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 spdy_settings_list->Append(spdy_setting_dict); 147 spdy_settings_list->Append(spdy_setting_dict);
146 server_pref_dict->Set("settings", spdy_settings_list); 148 server_pref_dict->Set("settings", spdy_settings_list);
147 149
148 // Set up alternate_protocol for www.google.com:80. 150 // Set up alternate_protocol for www.google.com:80.
149 base::DictionaryValue* alternate_protocol = new base::DictionaryValue; 151 base::DictionaryValue* alternate_protocol = new base::DictionaryValue;
150 alternate_protocol->SetInteger("port", 443); 152 alternate_protocol->SetInteger("port", 443);
151 alternate_protocol->SetInteger("protocol", static_cast<int>(net::NPN_SPDY_1)); 153 alternate_protocol->SetInteger("protocol", static_cast<int>(net::NPN_SPDY_1));
152 server_pref_dict->SetWithoutPathExpansion( 154 server_pref_dict->SetWithoutPathExpansion(
153 "alternate_protocol", alternate_protocol); 155 "alternate_protocol", alternate_protocol);
154 156
157 // Set pipeline capability for www.google.com:80.
158 server_pref_dict->SetInteger("pipeline_capability", net::PIPELINE_CAPABLE);
159
155 // Set the server preference for www.google.com:80. 160 // Set the server preference for www.google.com:80.
156 base::DictionaryValue* http_server_properties_dict = 161 base::DictionaryValue* http_server_properties_dict =
157 new base::DictionaryValue; 162 new base::DictionaryValue;
158 http_server_properties_dict->SetWithoutPathExpansion( 163 http_server_properties_dict->SetWithoutPathExpansion(
159 "www.google.com:80", server_pref_dict); 164 "www.google.com:80", server_pref_dict);
160 165
161 // Set the preference for mail.google.com server. 166 // Set the preference for mail.google.com server.
162 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue; 167 base::DictionaryValue* server_pref_dict1 = new base::DictionaryValue;
163 168
164 // Set supports_spdy for mail.google.com:80 169 // Set supports_spdy for mail.google.com:80
165 server_pref_dict1->SetBoolean("supports_spdy", true); 170 server_pref_dict1->SetBoolean("supports_spdy", true);
166 171
167 // Set up the SpdySettings for mail.google.com:80 172 // Set up the SpdySettings for mail.google.com:80
168 base::ListValue* spdy_settings_list1 = new base::ListValue; 173 base::ListValue* spdy_settings_list1 = new base::ListValue;
169 base::DictionaryValue* spdy_setting_dict1 = new base::DictionaryValue; 174 base::DictionaryValue* spdy_setting_dict1 = new base::DictionaryValue;
170 spdy_setting_dict1->SetInteger("flags", spdy::SETTINGS_FLAG_PERSISTED); 175 spdy_setting_dict1->SetInteger("flags", spdy::SETTINGS_FLAG_PERSISTED);
171 spdy_setting_dict1->SetInteger("id", 5678); 176 spdy_setting_dict1->SetInteger("id", 5678);
172 spdy_setting_dict1->SetInteger("value", 62667); 177 spdy_setting_dict1->SetInteger("value", 62667);
173 spdy_settings_list1->Append(spdy_setting_dict1); 178 spdy_settings_list1->Append(spdy_setting_dict1);
174 server_pref_dict1->Set("settings", spdy_settings_list1); 179 server_pref_dict1->Set("settings", spdy_settings_list1);
175 180
176 // Set up alternate_protocol for mail.google.com:80 181 // Set up alternate_protocol for mail.google.com:80
177 base::DictionaryValue* alternate_protocol1 = new base::DictionaryValue; 182 base::DictionaryValue* alternate_protocol1 = new base::DictionaryValue;
178 alternate_protocol1->SetInteger("port", 444); 183 alternate_protocol1->SetInteger("port", 444);
179 alternate_protocol1->SetInteger( 184 alternate_protocol1->SetInteger(
180 "protocol", static_cast<int>(net::NPN_SPDY_2)); 185 "protocol", static_cast<int>(net::NPN_SPDY_2));
181 server_pref_dict1->SetWithoutPathExpansion( 186 server_pref_dict1->SetWithoutPathExpansion(
182 "alternate_protocol", alternate_protocol1); 187 "alternate_protocol", alternate_protocol1);
183 188
189 // Set pipelining capability for mail.google.com:80
190 server_pref_dict1->SetInteger("pipeline_capability", net::PIPELINE_INCAPABLE);
191
184 // Set the server preference for mail.google.com:80. 192 // Set the server preference for mail.google.com:80.
185 http_server_properties_dict->SetWithoutPathExpansion( 193 http_server_properties_dict->SetWithoutPathExpansion(
186 "mail.google.com:80", server_pref_dict1); 194 "mail.google.com:80", server_pref_dict1);
187 195
188 // Set the same value for kHttpServerProperties multiple times. 196 // Set the same value for kHttpServerProperties multiple times.
189 pref_service_.SetManagedPref(prefs::kHttpServerProperties, 197 pref_service_.SetManagedPref(prefs::kHttpServerProperties,
190 http_server_properties_dict); 198 http_server_properties_dict);
191 base::DictionaryValue* http_server_properties_dict2 = 199 base::DictionaryValue* http_server_properties_dict2 =
192 http_server_properties_dict->DeepCopy(); 200 http_server_properties_dict->DeepCopy();
193 pref_service_.SetManagedPref(prefs::kHttpServerProperties, 201 pref_service_.SetManagedPref(prefs::kHttpServerProperties,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 net::PortAlternateProtocolPair port_alternate_protocol = 239 net::PortAlternateProtocolPair port_alternate_protocol =
232 http_server_props_manager_->GetAlternateProtocol( 240 http_server_props_manager_->GetAlternateProtocol(
233 net::HostPortPair::FromString("www.google.com:80")); 241 net::HostPortPair::FromString("www.google.com:80"));
234 EXPECT_EQ(443, port_alternate_protocol.port); 242 EXPECT_EQ(443, port_alternate_protocol.port);
235 EXPECT_EQ(net::NPN_SPDY_1, port_alternate_protocol.protocol); 243 EXPECT_EQ(net::NPN_SPDY_1, port_alternate_protocol.protocol);
236 port_alternate_protocol = 244 port_alternate_protocol =
237 http_server_props_manager_->GetAlternateProtocol( 245 http_server_props_manager_->GetAlternateProtocol(
238 net::HostPortPair::FromString("mail.google.com:80")); 246 net::HostPortPair::FromString("mail.google.com:80"));
239 EXPECT_EQ(444, port_alternate_protocol.port); 247 EXPECT_EQ(444, port_alternate_protocol.port);
240 EXPECT_EQ(net::NPN_SPDY_2, port_alternate_protocol.protocol); 248 EXPECT_EQ(net::NPN_SPDY_2, port_alternate_protocol.protocol);
249
250 // Verify pipeline capability.
251 EXPECT_EQ(net::PIPELINE_CAPABLE,
252 http_server_props_manager_->GetPipelineCapability(
253 net::HostPortPair::FromString("www.google.com:80")));
254 EXPECT_EQ(net::PIPELINE_INCAPABLE,
255 http_server_props_manager_->GetPipelineCapability(
256 net::HostPortPair::FromString("mail.google.com:80")));
241 } 257 }
242 258
243 TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) { 259 TEST_F(HttpServerPropertiesManagerTest, SupportsSpdy) {
244 ExpectPrefsUpdate(); 260 ExpectPrefsUpdate();
245 261
246 // Post an update task to the IO thread. SetSupportsSpdy calls 262 // Post an update task to the IO thread. SetSupportsSpdy calls
247 // ScheduleUpdatePrefsOnIO. 263 // ScheduleUpdatePrefsOnIO.
248 264
249 // Add mail.google.com:443 as a supporting spdy server. 265 // Add mail.google.com:443 as a supporting spdy server.
250 net::HostPortPair spdy_server_mail("mail.google.com", 443); 266 net::HostPortPair spdy_server_mail("mail.google.com", 443);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 315 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
300 316
301 ASSERT_TRUE( 317 ASSERT_TRUE(
302 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 318 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
303 net::PortAlternateProtocolPair port_alternate_protocol = 319 net::PortAlternateProtocolPair port_alternate_protocol =
304 http_server_props_manager_->GetAlternateProtocol(spdy_server_mail); 320 http_server_props_manager_->GetAlternateProtocol(spdy_server_mail);
305 EXPECT_EQ(443, port_alternate_protocol.port); 321 EXPECT_EQ(443, port_alternate_protocol.port);
306 EXPECT_EQ(net::NPN_SPDY_2, port_alternate_protocol.protocol); 322 EXPECT_EQ(net::NPN_SPDY_2, port_alternate_protocol.protocol);
307 } 323 }
308 324
325 TEST_F(HttpServerPropertiesManagerTest, PipelineCapability) {
326 ExpectPrefsUpdate();
327
328 net::HostPortPair known_pipeliner("pipeline.com", 8080);
329 net::HostPortPair bad_pipeliner("wordpress.com", 80);
330 EXPECT_EQ(net::PIPELINE_UNKNOWN,
331 http_server_props_manager_->GetPipelineCapability(known_pipeliner));
332 EXPECT_EQ(net::PIPELINE_UNKNOWN,
333 http_server_props_manager_->GetPipelineCapability(bad_pipeliner));
334
335 // Post an update task to the IO thread. SetPipelineCapability calls
336 // ScheduleUpdatePrefsOnIO.
337 http_server_props_manager_->SetPipelineCapability(known_pipeliner,
338 net::PIPELINE_CAPABLE);
339 http_server_props_manager_->SetPipelineCapability(bad_pipeliner,
340 net::PIPELINE_INCAPABLE);
341
342 // Run the task.
343 loop_.RunAllPending();
344
345 EXPECT_EQ(net::PIPELINE_CAPABLE,
346 http_server_props_manager_->GetPipelineCapability(known_pipeliner));
347 EXPECT_EQ(net::PIPELINE_INCAPABLE,
348 http_server_props_manager_->GetPipelineCapability(bad_pipeliner));
349 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
350 }
351
309 TEST_F(HttpServerPropertiesManagerTest, Clear) { 352 TEST_F(HttpServerPropertiesManagerTest, Clear) {
310 ExpectPrefsUpdate(); 353 ExpectPrefsUpdate();
311 354
312 net::HostPortPair spdy_server_mail("mail.google.com", 443); 355 net::HostPortPair spdy_server_mail("mail.google.com", 443);
313 http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true); 356 http_server_props_manager_->SetSupportsSpdy(spdy_server_mail, true);
314 http_server_props_manager_->SetAlternateProtocol( 357 http_server_props_manager_->SetAlternateProtocol(
315 spdy_server_mail, 443, net::NPN_SPDY_2); 358 spdy_server_mail, 443, net::NPN_SPDY_2);
316 359
317 spdy::SpdySettings spdy_settings; 360 spdy::SpdySettings spdy_settings;
318 spdy::SettingsFlagsAndId id1(0); 361 spdy::SettingsFlagsAndId id1(0);
319 id1.set_flags(spdy::SETTINGS_FLAG_PLEASE_PERSIST); 362 id1.set_flags(spdy::SETTINGS_FLAG_PLEASE_PERSIST);
320 id1.set_id(1234); 363 id1.set_id(1234);
321 spdy_settings.push_back(std::make_pair(id1, 31337)); 364 spdy_settings.push_back(std::make_pair(id1, 31337));
322 http_server_props_manager_->SetSpdySettings(spdy_server_mail, spdy_settings); 365 http_server_props_manager_->SetSpdySettings(spdy_server_mail, spdy_settings);
323 366
367 net::HostPortPair known_pipeliner("pipeline.com", 8080);
368 http_server_props_manager_->SetPipelineCapability(known_pipeliner,
369 net::PIPELINE_CAPABLE);
370
324 // Run the task. 371 // Run the task.
325 loop_.RunAllPending(); 372 loop_.RunAllPending();
326 373
327 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 374 EXPECT_TRUE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
328 EXPECT_TRUE( 375 EXPECT_TRUE(
329 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 376 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
330 377
331 spdy::SpdySettings spdy_settings_ret = 378 spdy::SpdySettings spdy_settings_ret =
332 http_server_props_manager_->GetSpdySettings(spdy_server_mail); 379 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
333 ASSERT_EQ(1U, spdy_settings_ret.size()); 380 ASSERT_EQ(1U, spdy_settings_ret.size());
334 spdy::SpdySetting spdy_setting1_ret = spdy_settings_ret.front(); 381 spdy::SpdySetting spdy_setting1_ret = spdy_settings_ret.front();
335 spdy::SettingsFlagsAndId id1_ret(spdy_setting1_ret.first); 382 spdy::SettingsFlagsAndId id1_ret(spdy_setting1_ret.first);
336 EXPECT_EQ(1234U, id1_ret.id()); 383 EXPECT_EQ(1234U, id1_ret.id());
337 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, id1_ret.flags()); 384 EXPECT_EQ(spdy::SETTINGS_FLAG_PERSISTED, id1_ret.flags());
338 EXPECT_EQ(31337U, spdy_setting1_ret.second); 385 EXPECT_EQ(31337U, spdy_setting1_ret.second);
339 386
387 EXPECT_EQ(net::PIPELINE_CAPABLE,
388 http_server_props_manager_->GetPipelineCapability(known_pipeliner));
389
340 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 390 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
341 391
342 ExpectPrefsUpdate(); 392 ExpectPrefsUpdate();
343 // Clear http server data. 393 // Clear http server data.
344 http_server_props_manager_->Clear(); 394 http_server_props_manager_->Clear();
345 395
346 // Run the task. 396 // Run the task.
347 loop_.RunAllPending(); 397 loop_.RunAllPending();
348 398
349 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail)); 399 EXPECT_FALSE(http_server_props_manager_->SupportsSpdy(spdy_server_mail));
350 EXPECT_FALSE( 400 EXPECT_FALSE(
351 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail)); 401 http_server_props_manager_->HasAlternateProtocol(spdy_server_mail));
352 402
353 spdy::SpdySettings spdy_settings1_ret = 403 spdy::SpdySettings spdy_settings1_ret =
354 http_server_props_manager_->GetSpdySettings(spdy_server_mail); 404 http_server_props_manager_->GetSpdySettings(spdy_server_mail);
355 EXPECT_EQ(0U, spdy_settings1_ret.size()); 405 EXPECT_EQ(0U, spdy_settings1_ret.size());
356 406
407 EXPECT_EQ(net::PIPELINE_UNKNOWN,
408 http_server_props_manager_->GetPipelineCapability(known_pipeliner));
409
357 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 410 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
358 } 411 }
359 412
360 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache0) { 413 TEST_F(HttpServerPropertiesManagerTest, ShutdownWithPendingUpdateCache0) {
361 // Post an update task to the UI thread. 414 // Post an update task to the UI thread.
362 http_server_props_manager_->ScheduleUpdateCacheOnUI(); 415 http_server_props_manager_->ScheduleUpdateCacheOnUI();
363 // Shutdown comes before the task is executed. 416 // Shutdown comes before the task is executed.
364 http_server_props_manager_->ShutdownOnUIThread(); 417 http_server_props_manager_->ShutdownOnUIThread();
365 http_server_props_manager_.reset(); 418 http_server_props_manager_.reset();
366 // Run the task after shutdown and deletion. 419 // Run the task after shutdown and deletion.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 // Run the task after shutdown, but before deletion. 477 // Run the task after shutdown, but before deletion.
425 loop_.RunAllPending(); 478 loop_.RunAllPending();
426 Mock::VerifyAndClearExpectations(http_server_props_manager_.get()); 479 Mock::VerifyAndClearExpectations(http_server_props_manager_.get());
427 http_server_props_manager_.reset(); 480 http_server_props_manager_.reset();
428 loop_.RunAllPending(); 481 loop_.RunAllPending();
429 } 482 }
430 483
431 } // namespace 484 } // namespace
432 485
433 } // namespace chrome_browser_net 486 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/http_server_properties_manager.cc ('k') | net/http/http_pipelined_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698