| OLD | NEW |
| 1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2010 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 <time.h> | 5 #include <time.h> |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 //------------------------------------------------------------------------------ | 108 //------------------------------------------------------------------------------ |
| 109 | 109 |
| 110 TEST_F(PredictorTest, StartupShutdownTest) { | 110 TEST_F(PredictorTest, StartupShutdownTest) { |
| 111 scoped_refptr<Predictor> testing_master = new Predictor(host_resolver_, | 111 scoped_refptr<Predictor> testing_master = new Predictor(host_resolver_, |
| 112 default_max_queueing_delay_, | 112 default_max_queueing_delay_, |
| 113 PredictorInit::kMaxPrefetchConcurrentLookups, | 113 PredictorInit::kMaxPrefetchConcurrentLookups, |
| 114 false); | 114 false); |
| 115 testing_master->Shutdown(); | 115 testing_master->Shutdown(); |
| 116 } | 116 } |
| 117 | 117 |
| 118 TEST_F(PredictorTest, BenefitLookupTest) { | |
| 119 scoped_refptr<Predictor> testing_master = new Predictor( | |
| 120 host_resolver_, | |
| 121 default_max_queueing_delay_, | |
| 122 PredictorInit::kMaxPrefetchConcurrentLookups, | |
| 123 false); | |
| 124 | |
| 125 GURL goog("http://www.google.com:80"), | |
| 126 goog2("http://gmail.google.com.com:80"), | |
| 127 goog3("http://mail.google.com:80"), | |
| 128 goog4("http://gmail.com:80"); | |
| 129 UrlInfo goog_info, goog2_info, goog3_info, goog4_info; | |
| 130 | |
| 131 // Simulate getting similar names from a network observer | |
| 132 goog_info.SetUrl(goog); | |
| 133 goog2_info.SetUrl(goog2); | |
| 134 goog3_info.SetUrl(goog3); | |
| 135 goog4_info.SetUrl(goog4); | |
| 136 | |
| 137 goog_info.SetStartedState(); | |
| 138 goog2_info.SetStartedState(); | |
| 139 goog3_info.SetStartedState(); | |
| 140 goog4_info.SetStartedState(); | |
| 141 | |
| 142 goog_info.SetFinishedState(true); | |
| 143 goog2_info.SetFinishedState(true); | |
| 144 goog3_info.SetFinishedState(true); | |
| 145 goog4_info.SetFinishedState(true); | |
| 146 | |
| 147 UrlList names; | |
| 148 names.push_back(goog); | |
| 149 names.push_back(goog2); | |
| 150 names.push_back(goog3); | |
| 151 names.push_back(goog4); | |
| 152 | |
| 153 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); | |
| 154 | |
| 155 WaitForResolution(testing_master, names); | |
| 156 | |
| 157 EXPECT_TRUE(testing_master->WasFound(goog)); | |
| 158 EXPECT_TRUE(testing_master->WasFound(goog2)); | |
| 159 EXPECT_TRUE(testing_master->WasFound(goog3)); | |
| 160 EXPECT_TRUE(testing_master->WasFound(goog4)); | |
| 161 | |
| 162 // With the mock DNS, each of these should have taken some time, and hence | |
| 163 // shown a benefit (i.e., prefetch cost more than network access time). | |
| 164 | |
| 165 GURL referer; // Null host. | |
| 166 | |
| 167 // Simulate actual navigation, and acrue the benefit for "helping" the DNS | |
| 168 // part of the navigation. | |
| 169 EXPECT_TRUE(testing_master->AccruePrefetchBenefits(referer, &goog_info)); | |
| 170 EXPECT_TRUE(testing_master->AccruePrefetchBenefits(referer, &goog2_info)); | |
| 171 EXPECT_TRUE(testing_master->AccruePrefetchBenefits(referer, &goog3_info)); | |
| 172 EXPECT_TRUE(testing_master->AccruePrefetchBenefits(referer, &goog4_info)); | |
| 173 | |
| 174 // Benefits can ONLY be reported once (for the first navigation). | |
| 175 EXPECT_FALSE(testing_master->AccruePrefetchBenefits(referer, &goog_info)); | |
| 176 EXPECT_FALSE(testing_master->AccruePrefetchBenefits(referer, &goog2_info)); | |
| 177 EXPECT_FALSE(testing_master->AccruePrefetchBenefits(referer, &goog3_info)); | |
| 178 EXPECT_FALSE(testing_master->AccruePrefetchBenefits(referer, &goog4_info)); | |
| 179 | |
| 180 testing_master->Shutdown(); | |
| 181 } | |
| 182 | 118 |
| 183 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) { | 119 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) { |
| 184 scoped_refptr<net::WaitingHostResolverProc> resolver_proc = | 120 scoped_refptr<net::WaitingHostResolverProc> resolver_proc = |
| 185 new net::WaitingHostResolverProc(NULL); | 121 new net::WaitingHostResolverProc(NULL); |
| 186 host_resolver_->Reset(resolver_proc); | 122 host_resolver_->Reset(resolver_proc); |
| 187 | 123 |
| 188 scoped_refptr<Predictor> testing_master = new Predictor(host_resolver_, | 124 scoped_refptr<Predictor> testing_master = new Predictor(host_resolver_, |
| 189 default_max_queueing_delay_, | 125 default_max_queueing_delay_, |
| 190 PredictorInit::kMaxPrefetchConcurrentLookups, | 126 PredictorInit::kMaxPrefetchConcurrentLookups, |
| 191 false); | 127 false); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 // Functions to help synthesize and test serializations of subresource referrer | 256 // Functions to help synthesize and test serializations of subresource referrer |
| 321 // lists. | 257 // lists. |
| 322 | 258 |
| 323 // Return a motivation_list if we can find one for the given motivating_host (or | 259 // Return a motivation_list if we can find one for the given motivating_host (or |
| 324 // NULL if a match is not found). | 260 // NULL if a match is not found). |
| 325 static ListValue* FindSerializationMotivation( | 261 static ListValue* FindSerializationMotivation( |
| 326 const GURL& motivation, const ListValue& referral_list) { | 262 const GURL& motivation, const ListValue& referral_list) { |
| 327 CHECK_LT(0u, referral_list.GetSize()); // Room for version. | 263 CHECK_LT(0u, referral_list.GetSize()); // Room for version. |
| 328 int format_version = -1; | 264 int format_version = -1; |
| 329 CHECK(referral_list.GetInteger(0, &format_version)); | 265 CHECK(referral_list.GetInteger(0, &format_version)); |
| 330 CHECK_EQ(Predictor::DNS_REFERRER_VERSION, format_version); | 266 CHECK_EQ(Predictor::PREDICTOR_REFERRER_VERSION, format_version); |
| 331 ListValue* motivation_list(NULL); | 267 ListValue* motivation_list(NULL); |
| 332 for (size_t i = 1; i < referral_list.GetSize(); ++i) { | 268 for (size_t i = 1; i < referral_list.GetSize(); ++i) { |
| 333 referral_list.GetList(i, &motivation_list); | 269 referral_list.GetList(i, &motivation_list); |
| 334 std::string existing_spec; | 270 std::string existing_spec; |
| 335 EXPECT_TRUE(motivation_list->GetString(0, &existing_spec)); | 271 EXPECT_TRUE(motivation_list->GetString(0, &existing_spec)); |
| 336 if (motivation == GURL(existing_spec)) | 272 if (motivation == GURL(existing_spec)) |
| 337 return motivation_list; | 273 return motivation_list; |
| 338 } | 274 } |
| 339 return NULL; | 275 return NULL; |
| 340 } | 276 } |
| 341 | 277 |
| 342 // Create a new empty serialization list. | 278 // Create a new empty serialization list. |
| 343 static ListValue* NewEmptySerializationList() { | 279 static ListValue* NewEmptySerializationList() { |
| 344 ListValue* list = new ListValue; | 280 ListValue* list = new ListValue; |
| 345 list->Append(new FundamentalValue(Predictor::DNS_REFERRER_VERSION)); | 281 list->Append(new FundamentalValue(Predictor::PREDICTOR_REFERRER_VERSION)); |
| 346 return list; | 282 return list; |
| 347 } | 283 } |
| 348 | 284 |
| 349 // Add a motivating_host and a subresource_host to a serialized list, using | 285 // Add a motivating_url and a subresource_url to a serialized list, using |
| 350 // this given latency. This is a helper function for quickly building these | 286 // this given latency. This is a helper function for quickly building these |
| 351 // lists. | 287 // lists. |
| 352 static void AddToSerializedList(const GURL& motivation, | 288 static void AddToSerializedList(const GURL& motivation, |
| 353 const GURL& subresource, | 289 const GURL& subresource, |
| 354 int latency, | 290 double use_rate, |
| 355 double rate, | |
| 356 ListValue* referral_list ) { | 291 ListValue* referral_list ) { |
| 357 // Find the motivation if it is already used. | 292 // Find the motivation if it is already used. |
| 358 ListValue* motivation_list = FindSerializationMotivation(motivation, | 293 ListValue* motivation_list = FindSerializationMotivation(motivation, |
| 359 *referral_list); | 294 *referral_list); |
| 360 if (!motivation_list) { | 295 if (!motivation_list) { |
| 361 // This is the first mention of this motivation, so build a list. | 296 // This is the first mention of this motivation, so build a list. |
| 362 motivation_list = new ListValue; | 297 motivation_list = new ListValue; |
| 363 motivation_list->Append(new StringValue(motivation.spec())); | 298 motivation_list->Append(new StringValue(motivation.spec())); |
| 364 // Provide empty subresource list. | 299 // Provide empty subresource list. |
| 365 motivation_list->Append(new ListValue()); | 300 motivation_list->Append(new ListValue()); |
| 366 | 301 |
| 367 // ...and make it part of the serialized referral_list. | 302 // ...and make it part of the serialized referral_list. |
| 368 referral_list->Append(motivation_list); | 303 referral_list->Append(motivation_list); |
| 369 } | 304 } |
| 370 | 305 |
| 371 ListValue* subresource_list(NULL); | 306 ListValue* subresource_list(NULL); |
| 372 // 0 == url; 1 == subresource_list. | 307 // 0 == url; 1 == subresource_list. |
| 373 EXPECT_TRUE(motivation_list->GetList(1, &subresource_list)); | 308 EXPECT_TRUE(motivation_list->GetList(1, &subresource_list)); |
| 374 | 309 |
| 375 // We won't bother to check for the subresource being there already. Worst | 310 // We won't bother to check for the subresource being there already. Worst |
| 376 // case, during deserialization, the latency value we supply plus the | 311 // case, during deserialization, the latency value we supply plus the |
| 377 // existing value(s) will be added to the referrer. | 312 // existing value(s) will be added to the referrer. |
| 378 | 313 |
| 379 subresource_list->Append(new StringValue(subresource.spec())); | 314 subresource_list->Append(new StringValue(subresource.spec())); |
| 380 subresource_list->Append(new FundamentalValue(latency)); | 315 subresource_list->Append(new FundamentalValue(use_rate)); |
| 381 subresource_list->Append(new FundamentalValue(rate)); | |
| 382 } | 316 } |
| 383 | 317 |
| 384 static const int kLatencyNotFound = -1; | 318 static const int kLatencyNotFound = -1; |
| 385 | 319 |
| 386 // For a given motivation, and subresource, find what latency is currently | 320 // For a given motivation, and subresource, find what latency is currently |
| 387 // listed. This assume a well formed serialization, which has at most one such | 321 // listed. This assume a well formed serialization, which has at most one such |
| 388 // entry for any pair of names. If no such pair is found, then return false. | 322 // entry for any pair of names. If no such pair is found, then return false. |
| 389 // Data is written into rate and latency arguments. | 323 // Data is written into use_rate arguments. |
| 390 static bool GetDataFromSerialization(const GURL& motivation, | 324 static bool GetDataFromSerialization(const GURL& motivation, |
| 391 const GURL& subresource, | 325 const GURL& subresource, |
| 392 const ListValue& referral_list, | 326 const ListValue& referral_list, |
| 393 double* rate, | 327 double* use_rate) { |
| 394 int* latency) { | |
| 395 ListValue* motivation_list = FindSerializationMotivation(motivation, | 328 ListValue* motivation_list = FindSerializationMotivation(motivation, |
| 396 referral_list); | 329 referral_list); |
| 397 if (!motivation_list) | 330 if (!motivation_list) |
| 398 return false; | 331 return false; |
| 399 ListValue* subresource_list; | 332 ListValue* subresource_list; |
| 400 EXPECT_TRUE(motivation_list->GetList(1, &subresource_list)); | 333 EXPECT_TRUE(motivation_list->GetList(1, &subresource_list)); |
| 401 for (size_t i = 0; i < subresource_list->GetSize();) { | 334 for (size_t i = 0; i < subresource_list->GetSize();) { |
| 402 std::string url_spec; | 335 std::string url_spec; |
| 403 EXPECT_TRUE(subresource_list->GetString(i++, &url_spec)); | 336 EXPECT_TRUE(subresource_list->GetString(i++, &url_spec)); |
| 404 EXPECT_TRUE(subresource_list->GetInteger(i++, latency)); | 337 EXPECT_TRUE(subresource_list->GetReal(i++, use_rate)); |
| 405 EXPECT_TRUE(subresource_list->GetReal(i++, rate)); | |
| 406 if (subresource == GURL(url_spec)) { | 338 if (subresource == GURL(url_spec)) { |
| 407 return true; | 339 return true; |
| 408 } | 340 } |
| 409 } | 341 } |
| 410 return false; | 342 return false; |
| 411 } | 343 } |
| 412 | 344 |
| 413 //------------------------------------------------------------------------------ | 345 //------------------------------------------------------------------------------ |
| 414 | 346 |
| 415 // Make sure nil referral lists really have no entries, and no latency listed. | 347 // Make sure nil referral lists really have no entries, and no latency listed. |
| 416 TEST_F(PredictorTest, ReferrerSerializationNilTest) { | 348 TEST_F(PredictorTest, ReferrerSerializationNilTest) { |
| 417 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, | 349 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, |
| 418 default_max_queueing_delay_, | 350 default_max_queueing_delay_, |
| 419 PredictorInit::kMaxPrefetchConcurrentLookups, | 351 PredictorInit::kMaxPrefetchConcurrentLookups, |
| 420 false); | 352 false); |
| 421 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 353 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
| 422 predictor->SerializeReferrers(referral_list.get()); | 354 predictor->SerializeReferrers(referral_list.get()); |
| 423 EXPECT_EQ(1U, referral_list->GetSize()); | 355 EXPECT_EQ(1U, referral_list->GetSize()); |
| 424 EXPECT_FALSE(GetDataFromSerialization( | 356 EXPECT_FALSE(GetDataFromSerialization( |
| 425 GURL("http://a.com:79"), GURL("http://b.com:78"), | 357 GURL("http://a.com:79"), GURL("http://b.com:78"), |
| 426 *referral_list.get(), NULL, NULL)); | 358 *referral_list.get(), NULL)); |
| 427 | 359 |
| 428 predictor->Shutdown(); | 360 predictor->Shutdown(); |
| 429 } | 361 } |
| 430 | 362 |
| 431 // Make sure that when a serialization list includes a value, that it can be | 363 // Make sure that when a serialization list includes a value, that it can be |
| 432 // deserialized into the database, and can be extracted back out via | 364 // deserialized into the database, and can be extracted back out via |
| 433 // serialization without being changed. | 365 // serialization without being changed. |
| 434 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) { | 366 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) { |
| 435 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, | 367 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, |
| 436 default_max_queueing_delay_, | 368 default_max_queueing_delay_, |
| 437 PredictorInit::kMaxPrefetchConcurrentLookups, | 369 PredictorInit::kMaxPrefetchConcurrentLookups, |
| 438 false); | 370 false); |
| 439 const GURL motivation_url("http://www.google.com:91"); | 371 const GURL motivation_url("http://www.google.com:91"); |
| 440 const GURL subresource_url("http://icons.google.com:90"); | 372 const GURL subresource_url("http://icons.google.com:90"); |
| 441 const int kLatency = 3; | 373 const double kUseRate = 23.4; |
| 442 const double kRate = 23.4; | |
| 443 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 374 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
| 444 | 375 |
| 445 AddToSerializedList(motivation_url, subresource_url, | 376 AddToSerializedList(motivation_url, subresource_url, |
| 446 kLatency, kRate, referral_list.get()); | 377 kUseRate, referral_list.get()); |
| 447 | 378 |
| 448 predictor->DeserializeReferrers(*referral_list.get()); | 379 predictor->DeserializeReferrers(*referral_list.get()); |
| 449 | 380 |
| 450 ListValue recovered_referral_list; | 381 ListValue recovered_referral_list; |
| 451 predictor->SerializeReferrers(&recovered_referral_list); | 382 predictor->SerializeReferrers(&recovered_referral_list); |
| 452 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 383 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
| 453 int latency; | |
| 454 double rate; | 384 double rate; |
| 455 EXPECT_TRUE(GetDataFromSerialization( | 385 EXPECT_TRUE(GetDataFromSerialization( |
| 456 motivation_url, subresource_url, recovered_referral_list, &rate, | 386 motivation_url, subresource_url, recovered_referral_list, &rate)); |
| 457 &latency)); | 387 EXPECT_EQ(rate, kUseRate); |
| 458 EXPECT_EQ(rate, kRate); | |
| 459 EXPECT_EQ(latency, kLatency); | |
| 460 | 388 |
| 461 predictor->Shutdown(); | 389 predictor->Shutdown(); |
| 462 } | 390 } |
| 463 | 391 |
| 464 // Make sure the Trim() functionality works as expected. | 392 // Make sure the Trim() functionality works as expected. |
| 465 TEST_F(PredictorTest, ReferrerSerializationTrimTest) { | 393 TEST_F(PredictorTest, ReferrerSerializationTrimTest) { |
| 466 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, | 394 scoped_refptr<Predictor> predictor = new Predictor(host_resolver_, |
| 467 default_max_queueing_delay_, | 395 default_max_queueing_delay_, |
| 468 PredictorInit::kMaxPrefetchConcurrentLookups, | 396 PredictorInit::kMaxPrefetchConcurrentLookups, |
| 469 false); | 397 false); |
| 470 GURL motivation_url("http://www.google.com:110"); | 398 GURL motivation_url("http://www.google.com:110"); |
| 471 | 399 |
| 472 GURL icon_subresource_url("http://icons.google.com:111"); | 400 GURL icon_subresource_url("http://icons.google.com:111"); |
| 473 const int kLatencyIcon = 10; | 401 const double kRateIcon = 16.0 * Predictor::kPersistWorthyExpectedValue; |
| 474 const double kRateIcon = 0.; // User low rate, so latency will dominate. | |
| 475 GURL img_subresource_url("http://img.google.com:118"); | 402 GURL img_subresource_url("http://img.google.com:118"); |
| 476 const int kLatencyImg = 3; | 403 const double kRateImg = 8.0 * Predictor::kPersistWorthyExpectedValue; |
| 477 const double kRateImg = 0.; | |
| 478 | 404 |
| 479 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); | 405 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); |
| 480 AddToSerializedList( | 406 AddToSerializedList( |
| 481 motivation_url, icon_subresource_url, | 407 motivation_url, icon_subresource_url, kRateIcon, referral_list.get()); |
| 482 kLatencyIcon, kRateIcon, referral_list.get()); | |
| 483 AddToSerializedList( | 408 AddToSerializedList( |
| 484 motivation_url, img_subresource_url, | 409 motivation_url, img_subresource_url, kRateImg, referral_list.get()); |
| 485 kLatencyImg, kRateImg, referral_list.get()); | |
| 486 | 410 |
| 487 predictor->DeserializeReferrers(*referral_list.get()); | 411 predictor->DeserializeReferrers(*referral_list.get()); |
| 488 | 412 |
| 489 ListValue recovered_referral_list; | 413 ListValue recovered_referral_list; |
| 490 predictor->SerializeReferrers(&recovered_referral_list); | 414 predictor->SerializeReferrers(&recovered_referral_list); |
| 491 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 415 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
| 492 int latency; | |
| 493 double rate; | 416 double rate; |
| 494 EXPECT_TRUE(GetDataFromSerialization( | 417 EXPECT_TRUE(GetDataFromSerialization( |
| 495 motivation_url, icon_subresource_url, recovered_referral_list, | 418 motivation_url, icon_subresource_url, recovered_referral_list, |
| 496 &rate, &latency)); | 419 &rate)); |
| 497 EXPECT_EQ(latency, kLatencyIcon); | |
| 498 EXPECT_EQ(rate, kRateIcon); | 420 EXPECT_EQ(rate, kRateIcon); |
| 499 | 421 |
| 500 EXPECT_TRUE(GetDataFromSerialization( | 422 EXPECT_TRUE(GetDataFromSerialization( |
| 501 motivation_url, img_subresource_url, recovered_referral_list, | 423 motivation_url, img_subresource_url, recovered_referral_list, &rate)); |
| 502 &rate, &latency)); | |
| 503 EXPECT_EQ(latency, kLatencyImg); | |
| 504 EXPECT_EQ(rate, kRateImg); | 424 EXPECT_EQ(rate, kRateImg); |
| 505 | 425 |
| 506 // Each time we Trim, the latency figures should reduce by a factor of two, | 426 // Each time we Trim, the user_rate figures should reduce by a factor of two, |
| 507 // until they both are 0, an then a trim will delete the whole entry. | 427 // until they both are small, an then a trim will delete the whole entry. |
| 508 predictor->TrimReferrers(); | 428 predictor->TrimReferrers(); |
| 509 predictor->SerializeReferrers(&recovered_referral_list); | 429 predictor->SerializeReferrers(&recovered_referral_list); |
| 510 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 430 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
| 511 EXPECT_TRUE(GetDataFromSerialization( | 431 EXPECT_TRUE(GetDataFromSerialization( |
| 512 motivation_url, icon_subresource_url, recovered_referral_list, | 432 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); |
| 513 &rate, &latency)); | 433 EXPECT_EQ(rate, kRateIcon / 2); |
| 514 EXPECT_EQ(latency, kLatencyIcon / 2); | |
| 515 EXPECT_EQ(rate, kRateIcon); | |
| 516 | 434 |
| 517 EXPECT_TRUE(GetDataFromSerialization( | 435 EXPECT_TRUE(GetDataFromSerialization( |
| 518 motivation_url, img_subresource_url, recovered_referral_list, | 436 motivation_url, img_subresource_url, recovered_referral_list, &rate)); |
| 519 &rate, &latency)); | 437 EXPECT_EQ(rate, kRateImg / 2); |
| 520 EXPECT_EQ(latency, kLatencyImg / 2); | |
| 521 EXPECT_EQ(rate, kRateImg); | |
| 522 | 438 |
| 523 predictor->TrimReferrers(); | 439 predictor->TrimReferrers(); |
| 524 predictor->SerializeReferrers(&recovered_referral_list); | 440 predictor->SerializeReferrers(&recovered_referral_list); |
| 525 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 441 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
| 526 EXPECT_TRUE(GetDataFromSerialization( | 442 EXPECT_TRUE(GetDataFromSerialization( |
| 527 motivation_url, icon_subresource_url, recovered_referral_list, | 443 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); |
| 528 &rate, &latency)); | 444 EXPECT_EQ(rate, kRateIcon / 4); |
| 529 EXPECT_EQ(latency, kLatencyIcon / 4); | |
| 530 EXPECT_EQ(rate, kRateIcon); | |
| 531 // Img is down to zero, but we don't delete it yet. | |
| 532 EXPECT_TRUE(GetDataFromSerialization( | 445 EXPECT_TRUE(GetDataFromSerialization( |
| 533 motivation_url, img_subresource_url, recovered_referral_list, | 446 motivation_url, img_subresource_url, recovered_referral_list, &rate)); |
| 534 &rate, &latency)); | 447 EXPECT_EQ(rate, kRateImg / 4); |
| 535 EXPECT_EQ(kLatencyImg / 4, 0); | |
| 536 EXPECT_EQ(latency, kLatencyImg / 4); | |
| 537 EXPECT_EQ(rate, kRateImg); | |
| 538 | 448 |
| 539 predictor->TrimReferrers(); | 449 predictor->TrimReferrers(); |
| 540 predictor->SerializeReferrers(&recovered_referral_list); | 450 predictor->SerializeReferrers(&recovered_referral_list); |
| 541 EXPECT_EQ(2U, recovered_referral_list.GetSize()); | 451 EXPECT_EQ(2U, recovered_referral_list.GetSize()); |
| 542 EXPECT_TRUE(GetDataFromSerialization( | 452 EXPECT_TRUE(GetDataFromSerialization( |
| 543 motivation_url, icon_subresource_url, recovered_referral_list, | 453 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); |
| 544 &rate, &latency)); | 454 EXPECT_EQ(rate, kRateIcon / 8); |
| 545 EXPECT_EQ(latency, kLatencyIcon / 8); | |
| 546 EXPECT_EQ(rate, kRateIcon); | |
| 547 | 455 |
| 548 // Img is down to zero, but we don't delete it yet. | 456 // Img is below threshold, and so it gets deleted. |
| 549 EXPECT_TRUE(GetDataFromSerialization( | 457 EXPECT_FALSE(GetDataFromSerialization( |
| 550 motivation_url, img_subresource_url, recovered_referral_list, | 458 motivation_url, img_subresource_url, recovered_referral_list, &rate)); |
| 551 &rate, &latency)); | |
| 552 EXPECT_EQ(kLatencyImg / 8, 0); | |
| 553 EXPECT_EQ(latency, kLatencyImg / 8); | |
| 554 EXPECT_EQ(rate, kRateImg); | |
| 555 | 459 |
| 556 predictor->TrimReferrers(); | 460 predictor->TrimReferrers(); |
| 557 predictor->SerializeReferrers(&recovered_referral_list); | 461 predictor->SerializeReferrers(&recovered_referral_list); |
| 558 // Icon is also trimmed away, so entire set gets discarded. | 462 // Icon is also trimmed away, so entire set gets discarded. |
| 559 EXPECT_EQ(1U, recovered_referral_list.GetSize()); | 463 EXPECT_EQ(1U, recovered_referral_list.GetSize()); |
| 560 EXPECT_FALSE(GetDataFromSerialization( | 464 EXPECT_FALSE(GetDataFromSerialization( |
| 561 motivation_url, icon_subresource_url, recovered_referral_list, | 465 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); |
| 562 &rate, &latency)); | |
| 563 EXPECT_FALSE(GetDataFromSerialization( | 466 EXPECT_FALSE(GetDataFromSerialization( |
| 564 motivation_url, img_subresource_url, recovered_referral_list, | 467 motivation_url, img_subresource_url, recovered_referral_list, &rate)); |
| 565 &rate, &latency)); | |
| 566 | 468 |
| 567 predictor->Shutdown(); | 469 predictor->Shutdown(); |
| 568 } | 470 } |
| 569 | 471 |
| 570 | 472 |
| 571 TEST_F(PredictorTest, PriorityQueuePushPopTest) { | 473 TEST_F(PredictorTest, PriorityQueuePushPopTest) { |
| 572 Predictor::HostNameQueue queue; | 474 Predictor::HostNameQueue queue; |
| 573 | 475 |
| 574 GURL first("http://first:80"), second("http://second:90"); | 476 GURL first("http://first:80"), second("http://second:90"); |
| 575 | 477 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 631 EXPECT_EQ(queue.Pop(), low2); | 533 EXPECT_EQ(queue.Pop(), low2); |
| 632 EXPECT_EQ(queue.Pop(), low3); | 534 EXPECT_EQ(queue.Pop(), low3); |
| 633 EXPECT_EQ(queue.Pop(), low4); | 535 EXPECT_EQ(queue.Pop(), low4); |
| 634 EXPECT_EQ(queue.Pop(), low5); | 536 EXPECT_EQ(queue.Pop(), low5); |
| 635 EXPECT_EQ(queue.Pop(), low4); | 537 EXPECT_EQ(queue.Pop(), low4); |
| 636 | 538 |
| 637 EXPECT_TRUE(queue.IsEmpty()); | 539 EXPECT_TRUE(queue.IsEmpty()); |
| 638 } | 540 } |
| 639 | 541 |
| 640 } // namespace chrome_browser_net | 542 } // namespace chrome_browser_net |
| OLD | NEW |