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

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

Issue 7685009: Revert "Modifying prefetch to account for multi-profile." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months 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/predictor.cc ('k') | chrome/browser/prefs/browser_prefs.cc » ('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 <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
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/string_number_conversions.h" 13 #include "base/string_number_conversions.h"
14 #include "base/timer.h" 14 #include "base/timer.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/net/predictor.h" 16 #include "chrome/browser/net/predictor_api.h"
17 #include "chrome/browser/net/url_info.h" 17 #include "chrome/browser/net/url_info.h"
18 #include "chrome/common/net/predictor_common.h" 18 #include "chrome/common/net/predictor_common.h"
19 #include "content/browser/browser_thread.h" 19 #include "content/browser/browser_thread.h"
20 #include "net/base/address_list.h" 20 #include "net/base/address_list.h"
21 #include "net/base/mock_host_resolver.h" 21 #include "net/base/mock_host_resolver.h"
22 #include "net/base/winsock_init.h" 22 #include "net/base/winsock_init.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 using base::Time; 25 using base::Time;
26 using base::TimeDelta; 26 using base::TimeDelta;
(...skipping 28 matching lines...) Expand all
55 55
56 private: 56 private:
57 Predictor* predictor_; 57 Predictor* predictor_;
58 const UrlList hosts_; 58 const UrlList hosts_;
59 HelperTimer* timer_; 59 HelperTimer* timer_;
60 }; 60 };
61 61
62 class PredictorTest : public testing::Test { 62 class PredictorTest : public testing::Test {
63 public: 63 public:
64 PredictorTest() 64 PredictorTest()
65 : ui_thread_(BrowserThread::UI, &loop_), 65 : io_thread_(BrowserThread::IO, &loop_),
66 io_thread_(BrowserThread::IO, &loop_), 66 host_resolver_(new net::MockCachingHostResolver()),
67 host_resolver_(new net::MockCachingHostResolver()) { 67 default_max_queueing_delay_(TimeDelta::FromMilliseconds(
68 PredictorInit::kMaxSpeculativeResolveQueueDelayMs)) {
68 } 69 }
69 70
70 protected: 71 protected:
71 virtual void SetUp() { 72 virtual void SetUp() {
72 #if defined(OS_WIN) 73 #if defined(OS_WIN)
73 net::EnsureWinsockInit(); 74 net::EnsureWinsockInit();
74 #endif 75 #endif
75 Predictor::set_max_parallel_resolves(
76 Predictor::kMaxSpeculativeParallelResolves);
77 Predictor::set_max_queueing_delay(
78 Predictor::kMaxSpeculativeResolveQueueDelayMs);
79 // Since we are using a caching HostResolver, the following latencies will 76 // Since we are using a caching HostResolver, the following latencies will
80 // only be incurred by the first request, after which the result will be 77 // only be incurred by the first request, after which the result will be
81 // cached internally by |host_resolver_|. 78 // cached internally by |host_resolver_|.
82 net::RuleBasedHostResolverProc* rules = host_resolver_->rules(); 79 net::RuleBasedHostResolverProc* rules = host_resolver_->rules();
83 rules->AddRuleWithLatency("www.google.com", "127.0.0.1", 50); 80 rules->AddRuleWithLatency("www.google.com", "127.0.0.1", 50);
84 rules->AddRuleWithLatency("gmail.google.com.com", "127.0.0.1", 70); 81 rules->AddRuleWithLatency("gmail.google.com.com", "127.0.0.1", 70);
85 rules->AddRuleWithLatency("mail.google.com", "127.0.0.1", 44); 82 rules->AddRuleWithLatency("mail.google.com", "127.0.0.1", 44);
86 rules->AddRuleWithLatency("gmail.com", "127.0.0.1", 63); 83 rules->AddRuleWithLatency("gmail.com", "127.0.0.1", 63);
87 } 84 }
88 85
89 void WaitForResolution(Predictor* predictor, const UrlList& hosts) { 86 void WaitForResolution(Predictor* predictor, const UrlList& hosts) {
90 HelperTimer* timer = new HelperTimer(); 87 HelperTimer* timer = new HelperTimer();
91 timer->Start(TimeDelta::FromMilliseconds(100), 88 timer->Start(TimeDelta::FromMilliseconds(100),
92 new WaitForResolutionHelper(predictor, hosts, timer), 89 new WaitForResolutionHelper(predictor, hosts, timer),
93 &WaitForResolutionHelper::Run); 90 &WaitForResolutionHelper::Run);
94 MessageLoop::current()->Run(); 91 MessageLoop::current()->Run();
95 } 92 }
96 93
97 private: 94 private:
98 // IMPORTANT: do not move this below |host_resolver_|; the host resolver 95 // IMPORTANT: do not move this below |host_resolver_|; the host resolver
99 // must not outlive the message loop, otherwise bad things can happen 96 // must not outlive the message loop, otherwise bad things can happen
100 // (like posting to a deleted message loop). 97 // (like posting to a deleted message loop).
101 MessageLoopForUI loop_; 98 MessageLoop loop_;
102 BrowserThread ui_thread_;
103 BrowserThread io_thread_; 99 BrowserThread io_thread_;
104 100
105 protected: 101 protected:
106 scoped_ptr<net::MockCachingHostResolver> host_resolver_; 102 scoped_ptr<net::MockCachingHostResolver> host_resolver_;
103
104 // Shorthand to access TimeDelta of PredictorInit::kMaxQueueingDelayMs.
105 // (It would be a static constant... except style rules preclude that :-/ ).
106 const TimeDelta default_max_queueing_delay_;
107 }; 107 };
108 108
109 //------------------------------------------------------------------------------ 109 //------------------------------------------------------------------------------
110 110
111 TEST_F(PredictorTest, StartupShutdownTest) { 111 TEST_F(PredictorTest, StartupShutdownTest) {
112 Predictor testing_master(true); 112 scoped_refptr<Predictor> testing_master(
113 testing_master.Shutdown(); 113 new Predictor(host_resolver_.get(),
114 default_max_queueing_delay_,
115 PredictorInit::kMaxSpeculativeParallelResolves,
116 false));
117 testing_master->Shutdown();
114 } 118 }
115 119
116 120
117 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) { 121 TEST_F(PredictorTest, ShutdownWhenResolutionIsPendingTest) {
118 scoped_refptr<net::WaitingHostResolverProc> resolver_proc( 122 scoped_refptr<net::WaitingHostResolverProc> resolver_proc(
119 new net::WaitingHostResolverProc(NULL)); 123 new net::WaitingHostResolverProc(NULL));
120 host_resolver_->Reset(resolver_proc); 124 host_resolver_->Reset(resolver_proc);
121 125
122 Predictor testing_master(true); 126 scoped_refptr<Predictor> testing_master(
123 testing_master.SetHostResolver(host_resolver_.get()); 127 new Predictor(host_resolver_.get(),
128 default_max_queueing_delay_,
129 PredictorInit::kMaxSpeculativeParallelResolves,
130 false));
124 131
125 GURL localhost("http://localhost:80"); 132 GURL localhost("http://localhost:80");
126 UrlList names; 133 UrlList names;
127 names.push_back(localhost); 134 names.push_back(localhost);
128 135
129 testing_master.ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); 136 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED);
130 137
131 MessageLoop::current()->PostDelayedTask(FROM_HERE, 138 MessageLoop::current()->PostDelayedTask(FROM_HERE,
132 new MessageLoop::QuitTask(), 500); 139 new MessageLoop::QuitTask(), 500);
133 MessageLoop::current()->Run(); 140 MessageLoop::current()->Run();
134 141
135 EXPECT_FALSE(testing_master.WasFound(localhost)); 142 EXPECT_FALSE(testing_master->WasFound(localhost));
136 143
137 testing_master.Shutdown(); 144 testing_master->Shutdown();
138 145
139 // Clean up after ourselves. 146 // Clean up after ourselves.
140 resolver_proc->Signal(); 147 resolver_proc->Signal();
141 MessageLoop::current()->RunAllPending(); 148 MessageLoop::current()->RunAllPending();
142 } 149 }
143 150
144 TEST_F(PredictorTest, SingleLookupTest) { 151 TEST_F(PredictorTest, SingleLookupTest) {
145 Predictor testing_master(true); 152 scoped_refptr<Predictor> testing_master(
146 testing_master.SetHostResolver(host_resolver_.get()); 153 new Predictor(host_resolver_.get(),
154 default_max_queueing_delay_,
155 PredictorInit::kMaxSpeculativeParallelResolves,
156 false));
147 157
148 GURL goog("http://www.google.com:80"); 158 GURL goog("http://www.google.com:80");
149 159
150 UrlList names; 160 UrlList names;
151 names.push_back(goog); 161 names.push_back(goog);
152 162
153 // Try to flood the predictor with many concurrent requests. 163 // Try to flood the predictor with many concurrent requests.
154 for (int i = 0; i < 10; i++) 164 for (int i = 0; i < 10; i++)
155 testing_master.ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); 165 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED);
156 166
157 WaitForResolution(&testing_master, names); 167 WaitForResolution(testing_master, names);
158 168
159 EXPECT_TRUE(testing_master.WasFound(goog)); 169 EXPECT_TRUE(testing_master->WasFound(goog));
160 170
161 MessageLoop::current()->RunAllPending(); 171 MessageLoop::current()->RunAllPending();
162 172
163 EXPECT_GT(testing_master.peak_pending_lookups(), names.size() / 2); 173 EXPECT_GT(testing_master->peak_pending_lookups(), names.size() / 2);
164 EXPECT_LE(testing_master.peak_pending_lookups(), names.size()); 174 EXPECT_LE(testing_master->peak_pending_lookups(), names.size());
165 EXPECT_LE(testing_master.peak_pending_lookups(), 175 EXPECT_LE(testing_master->peak_pending_lookups(),
166 testing_master.max_concurrent_dns_lookups()); 176 testing_master->max_concurrent_dns_lookups());
167 177
168 testing_master.Shutdown(); 178 testing_master->Shutdown();
169 } 179 }
170 180
171 TEST_F(PredictorTest, ConcurrentLookupTest) { 181 TEST_F(PredictorTest, ConcurrentLookupTest) {
172 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); 182 host_resolver_->rules()->AddSimulatedFailure("*.notfound");
173 183
174 Predictor testing_master(true); 184 scoped_refptr<Predictor> testing_master(
175 testing_master.SetHostResolver(host_resolver_.get()); 185 new Predictor(host_resolver_.get(),
186 default_max_queueing_delay_,
187 PredictorInit::kMaxSpeculativeParallelResolves,
188 false));
176 189
177 GURL goog("http://www.google.com:80"), 190 GURL goog("http://www.google.com:80"),
178 goog2("http://gmail.google.com.com:80"), 191 goog2("http://gmail.google.com.com:80"),
179 goog3("http://mail.google.com:80"), 192 goog3("http://mail.google.com:80"),
180 goog4("http://gmail.com:80"); 193 goog4("http://gmail.com:80");
181 GURL bad1("http://bad1.notfound:80"), 194 GURL bad1("http://bad1.notfound:80"),
182 bad2("http://bad2.notfound:80"); 195 bad2("http://bad2.notfound:80");
183 196
184 UrlList names; 197 UrlList names;
185 names.push_back(goog); 198 names.push_back(goog);
186 names.push_back(goog3); 199 names.push_back(goog3);
187 names.push_back(bad1); 200 names.push_back(bad1);
188 names.push_back(goog2); 201 names.push_back(goog2);
189 names.push_back(bad2); 202 names.push_back(bad2);
190 names.push_back(goog4); 203 names.push_back(goog4);
191 names.push_back(goog); 204 names.push_back(goog);
192 205
193 // Try to flood the predictor with many concurrent requests. 206 // Try to flood the predictor with many concurrent requests.
194 for (int i = 0; i < 10; i++) 207 for (int i = 0; i < 10; i++)
195 testing_master.ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); 208 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED);
196 209
197 WaitForResolution(&testing_master, names); 210 WaitForResolution(testing_master, names);
198 211
199 EXPECT_TRUE(testing_master.WasFound(goog)); 212 EXPECT_TRUE(testing_master->WasFound(goog));
200 EXPECT_TRUE(testing_master.WasFound(goog3)); 213 EXPECT_TRUE(testing_master->WasFound(goog3));
201 EXPECT_TRUE(testing_master.WasFound(goog2)); 214 EXPECT_TRUE(testing_master->WasFound(goog2));
202 EXPECT_TRUE(testing_master.WasFound(goog4)); 215 EXPECT_TRUE(testing_master->WasFound(goog4));
203 EXPECT_FALSE(testing_master.WasFound(bad1)); 216 EXPECT_FALSE(testing_master->WasFound(bad1));
204 EXPECT_FALSE(testing_master.WasFound(bad2)); 217 EXPECT_FALSE(testing_master->WasFound(bad2));
205 218
206 MessageLoop::current()->RunAllPending(); 219 MessageLoop::current()->RunAllPending();
207 220
208 EXPECT_FALSE(testing_master.WasFound(bad1)); 221 EXPECT_FALSE(testing_master->WasFound(bad1));
209 EXPECT_FALSE(testing_master.WasFound(bad2)); 222 EXPECT_FALSE(testing_master->WasFound(bad2));
210 223
211 EXPECT_LE(testing_master.peak_pending_lookups(), names.size()); 224 EXPECT_LE(testing_master->peak_pending_lookups(), names.size());
212 EXPECT_LE(testing_master.peak_pending_lookups(), 225 EXPECT_LE(testing_master->peak_pending_lookups(),
213 testing_master.max_concurrent_dns_lookups()); 226 testing_master->max_concurrent_dns_lookups());
214 227
215 testing_master.Shutdown(); 228 testing_master->Shutdown();
216 } 229 }
217 230
218 TEST_F(PredictorTest, MassiveConcurrentLookupTest) { 231 TEST_F(PredictorTest, MassiveConcurrentLookupTest) {
219 host_resolver_->rules()->AddSimulatedFailure("*.notfound"); 232 host_resolver_->rules()->AddSimulatedFailure("*.notfound");
220 233
221 Predictor testing_master(true); 234 scoped_refptr<Predictor> testing_master(
222 testing_master.SetHostResolver(host_resolver_.get()); 235 new Predictor(host_resolver_.get(),
236 default_max_queueing_delay_,
237 PredictorInit::kMaxSpeculativeParallelResolves,
238 false));
223 239
224 UrlList names; 240 UrlList names;
225 for (int i = 0; i < 100; i++) 241 for (int i = 0; i < 100; i++)
226 names.push_back(GURL( 242 names.push_back(GURL(
227 "http://host" + base::IntToString(i) + ".notfound:80")); 243 "http://host" + base::IntToString(i) + ".notfound:80"));
228 244
229 // Try to flood the predictor with many concurrent requests. 245 // Try to flood the predictor with many concurrent requests.
230 for (int i = 0; i < 10; i++) 246 for (int i = 0; i < 10; i++)
231 testing_master.ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED); 247 testing_master->ResolveList(names, UrlInfo::PAGE_SCAN_MOTIVATED);
232 248
233 WaitForResolution(&testing_master, names); 249 WaitForResolution(testing_master, names);
234 250
235 MessageLoop::current()->RunAllPending(); 251 MessageLoop::current()->RunAllPending();
236 252
237 EXPECT_LE(testing_master.peak_pending_lookups(), names.size()); 253 EXPECT_LE(testing_master->peak_pending_lookups(), names.size());
238 EXPECT_LE(testing_master.peak_pending_lookups(), 254 EXPECT_LE(testing_master->peak_pending_lookups(),
239 testing_master.max_concurrent_dns_lookups()); 255 testing_master->max_concurrent_dns_lookups());
240 256
241 testing_master.Shutdown(); 257 testing_master->Shutdown();
242 } 258 }
243 259
244 //------------------------------------------------------------------------------ 260 //------------------------------------------------------------------------------
245 // Functions to help synthesize and test serializations of subresource referrer 261 // Functions to help synthesize and test serializations of subresource referrer
246 // lists. 262 // lists.
247 263
248 // Return a motivation_list if we can find one for the given motivating_host (or 264 // Return a motivation_list if we can find one for the given motivating_host (or
249 // NULL if a match is not found). 265 // NULL if a match is not found).
250 static ListValue* FindSerializationMotivation( 266 static ListValue* FindSerializationMotivation(
251 const GURL& motivation, const ListValue& referral_list) { 267 const GURL& motivation, const ListValue& referral_list) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 return true; 345 return true;
330 } 346 }
331 } 347 }
332 return false; 348 return false;
333 } 349 }
334 350
335 //------------------------------------------------------------------------------ 351 //------------------------------------------------------------------------------
336 352
337 // Make sure nil referral lists really have no entries, and no latency listed. 353 // Make sure nil referral lists really have no entries, and no latency listed.
338 TEST_F(PredictorTest, ReferrerSerializationNilTest) { 354 TEST_F(PredictorTest, ReferrerSerializationNilTest) {
339 Predictor predictor(true); 355 scoped_refptr<Predictor> predictor(
340 predictor.SetHostResolver(host_resolver_.get()); 356 new Predictor(host_resolver_.get(),
341 357 default_max_queueing_delay_,
358 PredictorInit::kMaxSpeculativeParallelResolves,
359 false));
342 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); 360 scoped_ptr<ListValue> referral_list(NewEmptySerializationList());
343 predictor.SerializeReferrers(referral_list.get()); 361 predictor->SerializeReferrers(referral_list.get());
344 EXPECT_EQ(1U, referral_list->GetSize()); 362 EXPECT_EQ(1U, referral_list->GetSize());
345 EXPECT_FALSE(GetDataFromSerialization( 363 EXPECT_FALSE(GetDataFromSerialization(
346 GURL("http://a.com:79"), GURL("http://b.com:78"), 364 GURL("http://a.com:79"), GURL("http://b.com:78"),
347 *referral_list.get(), NULL)); 365 *referral_list.get(), NULL));
348 366
349 predictor.Shutdown(); 367 predictor->Shutdown();
350 } 368 }
351 369
352 // Make sure that when a serialization list includes a value, that it can be 370 // Make sure that when a serialization list includes a value, that it can be
353 // deserialized into the database, and can be extracted back out via 371 // deserialized into the database, and can be extracted back out via
354 // serialization without being changed. 372 // serialization without being changed.
355 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) { 373 TEST_F(PredictorTest, ReferrerSerializationSingleReferrerTest) {
356 Predictor predictor(true); 374 scoped_refptr<Predictor> predictor(
357 predictor.SetHostResolver(host_resolver_.get()); 375 new Predictor(host_resolver_.get(),
376 default_max_queueing_delay_,
377 PredictorInit::kMaxSpeculativeParallelResolves,
378 false));
358 const GURL motivation_url("http://www.google.com:91"); 379 const GURL motivation_url("http://www.google.com:91");
359 const GURL subresource_url("http://icons.google.com:90"); 380 const GURL subresource_url("http://icons.google.com:90");
360 const double kUseRate = 23.4; 381 const double kUseRate = 23.4;
361 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); 382 scoped_ptr<ListValue> referral_list(NewEmptySerializationList());
362 383
363 AddToSerializedList(motivation_url, subresource_url, 384 AddToSerializedList(motivation_url, subresource_url,
364 kUseRate, referral_list.get()); 385 kUseRate, referral_list.get());
365 386
366 predictor.DeserializeReferrers(*referral_list.get()); 387 predictor->DeserializeReferrers(*referral_list.get());
367 388
368 ListValue recovered_referral_list; 389 ListValue recovered_referral_list;
369 predictor.SerializeReferrers(&recovered_referral_list); 390 predictor->SerializeReferrers(&recovered_referral_list);
370 EXPECT_EQ(2U, recovered_referral_list.GetSize()); 391 EXPECT_EQ(2U, recovered_referral_list.GetSize());
371 double rate; 392 double rate;
372 EXPECT_TRUE(GetDataFromSerialization( 393 EXPECT_TRUE(GetDataFromSerialization(
373 motivation_url, subresource_url, recovered_referral_list, &rate)); 394 motivation_url, subresource_url, recovered_referral_list, &rate));
374 EXPECT_EQ(rate, kUseRate); 395 EXPECT_EQ(rate, kUseRate);
375 396
376 predictor.Shutdown(); 397 predictor->Shutdown();
377 } 398 }
378 399
379 // Verify that two floats are within 1% of each other in value. 400 // Verify that two floats are within 1% of each other in value.
380 #define EXPECT_SIMILAR(a, b) do { \ 401 #define EXPECT_SIMILAR(a, b) do { \
381 double espilon_ratio = 1.01; \ 402 double espilon_ratio = 1.01; \
382 if ((a) < 0.) \ 403 if ((a) < 0.) \
383 espilon_ratio = 1 / espilon_ratio; \ 404 espilon_ratio = 1 / espilon_ratio; \
384 EXPECT_LT(a, espilon_ratio * (b)); \ 405 EXPECT_LT(a, espilon_ratio * (b)); \
385 EXPECT_GT((a) * espilon_ratio, b); \ 406 EXPECT_GT((a) * espilon_ratio, b); \
386 } while (0) 407 } while (0)
387 408
388 409
389 // Make sure the Trim() functionality works as expected. 410 // Make sure the Trim() functionality works as expected.
390 TEST_F(PredictorTest, ReferrerSerializationTrimTest) { 411 TEST_F(PredictorTest, ReferrerSerializationTrimTest) {
391 Predictor predictor(true); 412 scoped_refptr<Predictor> predictor(
392 predictor.SetHostResolver(host_resolver_.get()); 413 new Predictor(host_resolver_.get(),
414 default_max_queueing_delay_,
415 PredictorInit::kMaxSpeculativeParallelResolves,
416 false));
393 GURL motivation_url("http://www.google.com:110"); 417 GURL motivation_url("http://www.google.com:110");
394 418
395 GURL icon_subresource_url("http://icons.google.com:111"); 419 GURL icon_subresource_url("http://icons.google.com:111");
396 const double kRateIcon = 16.0 * Predictor::kDiscardableExpectedValue; 420 const double kRateIcon = 16.0 * Predictor::kDiscardableExpectedValue;
397 GURL img_subresource_url("http://img.google.com:118"); 421 GURL img_subresource_url("http://img.google.com:118");
398 const double kRateImg = 8.0 * Predictor::kDiscardableExpectedValue; 422 const double kRateImg = 8.0 * Predictor::kDiscardableExpectedValue;
399 423
400 scoped_ptr<ListValue> referral_list(NewEmptySerializationList()); 424 scoped_ptr<ListValue> referral_list(NewEmptySerializationList());
401 AddToSerializedList( 425 AddToSerializedList(
402 motivation_url, icon_subresource_url, kRateIcon, referral_list.get()); 426 motivation_url, icon_subresource_url, kRateIcon, referral_list.get());
403 AddToSerializedList( 427 AddToSerializedList(
404 motivation_url, img_subresource_url, kRateImg, referral_list.get()); 428 motivation_url, img_subresource_url, kRateImg, referral_list.get());
405 429
406 predictor.DeserializeReferrers(*referral_list.get()); 430 predictor->DeserializeReferrers(*referral_list.get());
407 431
408 ListValue recovered_referral_list; 432 ListValue recovered_referral_list;
409 predictor.SerializeReferrers(&recovered_referral_list); 433 predictor->SerializeReferrers(&recovered_referral_list);
410 EXPECT_EQ(2U, recovered_referral_list.GetSize()); 434 EXPECT_EQ(2U, recovered_referral_list.GetSize());
411 double rate; 435 double rate;
412 EXPECT_TRUE(GetDataFromSerialization( 436 EXPECT_TRUE(GetDataFromSerialization(
413 motivation_url, icon_subresource_url, recovered_referral_list, 437 motivation_url, icon_subresource_url, recovered_referral_list,
414 &rate)); 438 &rate));
415 EXPECT_SIMILAR(rate, kRateIcon); 439 EXPECT_SIMILAR(rate, kRateIcon);
416 440
417 EXPECT_TRUE(GetDataFromSerialization( 441 EXPECT_TRUE(GetDataFromSerialization(
418 motivation_url, img_subresource_url, recovered_referral_list, &rate)); 442 motivation_url, img_subresource_url, recovered_referral_list, &rate));
419 EXPECT_SIMILAR(rate, kRateImg); 443 EXPECT_SIMILAR(rate, kRateImg);
420 444
421 // Each time we Trim 24 times, the user_rate figures should reduce by a factor 445 // Each time we Trim 24 times, the user_rate figures should reduce by a factor
422 // of two, until they are small, and then a trim will delete the whole entry. 446 // of two, until they are small, and then a trim will delete the whole entry.
423 for (int i = 0; i < 24; ++i) 447 for (int i = 0; i < 24; ++i)
424 predictor.TrimReferrersNow(); 448 predictor->TrimReferrersNow();
425 predictor.SerializeReferrers(&recovered_referral_list); 449 predictor->SerializeReferrers(&recovered_referral_list);
426 EXPECT_EQ(2U, recovered_referral_list.GetSize()); 450 EXPECT_EQ(2U, recovered_referral_list.GetSize());
427 EXPECT_TRUE(GetDataFromSerialization( 451 EXPECT_TRUE(GetDataFromSerialization(
428 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); 452 motivation_url, icon_subresource_url, recovered_referral_list, &rate));
429 EXPECT_SIMILAR(rate, kRateIcon / 2); 453 EXPECT_SIMILAR(rate, kRateIcon / 2);
430 454
431 EXPECT_TRUE(GetDataFromSerialization( 455 EXPECT_TRUE(GetDataFromSerialization(
432 motivation_url, img_subresource_url, recovered_referral_list, &rate)); 456 motivation_url, img_subresource_url, recovered_referral_list, &rate));
433 EXPECT_SIMILAR(rate, kRateImg / 2); 457 EXPECT_SIMILAR(rate, kRateImg / 2);
434 458
435 for (int i = 0; i < 24; ++i) 459 for (int i = 0; i < 24; ++i)
436 predictor.TrimReferrersNow(); 460 predictor->TrimReferrersNow();
437 predictor.SerializeReferrers(&recovered_referral_list); 461 predictor->SerializeReferrers(&recovered_referral_list);
438 EXPECT_EQ(2U, recovered_referral_list.GetSize()); 462 EXPECT_EQ(2U, recovered_referral_list.GetSize());
439 EXPECT_TRUE(GetDataFromSerialization( 463 EXPECT_TRUE(GetDataFromSerialization(
440 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); 464 motivation_url, icon_subresource_url, recovered_referral_list, &rate));
441 EXPECT_SIMILAR(rate, kRateIcon / 4); 465 EXPECT_SIMILAR(rate, kRateIcon / 4);
442 EXPECT_TRUE(GetDataFromSerialization( 466 EXPECT_TRUE(GetDataFromSerialization(
443 motivation_url, img_subresource_url, recovered_referral_list, &rate)); 467 motivation_url, img_subresource_url, recovered_referral_list, &rate));
444 EXPECT_SIMILAR(rate, kRateImg / 4); 468 EXPECT_SIMILAR(rate, kRateImg / 4);
445 469
446 for (int i = 0; i < 24; ++i) 470 for (int i = 0; i < 24; ++i)
447 predictor.TrimReferrersNow(); 471 predictor->TrimReferrersNow();
448 predictor.SerializeReferrers(&recovered_referral_list); 472 predictor->SerializeReferrers(&recovered_referral_list);
449 EXPECT_EQ(2U, recovered_referral_list.GetSize()); 473 EXPECT_EQ(2U, recovered_referral_list.GetSize());
450 EXPECT_TRUE(GetDataFromSerialization( 474 EXPECT_TRUE(GetDataFromSerialization(
451 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); 475 motivation_url, icon_subresource_url, recovered_referral_list, &rate));
452 EXPECT_SIMILAR(rate, kRateIcon / 8); 476 EXPECT_SIMILAR(rate, kRateIcon / 8);
453 477
454 // Img is below threshold, and so it gets deleted. 478 // Img is below threshold, and so it gets deleted.
455 EXPECT_FALSE(GetDataFromSerialization( 479 EXPECT_FALSE(GetDataFromSerialization(
456 motivation_url, img_subresource_url, recovered_referral_list, &rate)); 480 motivation_url, img_subresource_url, recovered_referral_list, &rate));
457 481
458 for (int i = 0; i < 24; ++i) 482 for (int i = 0; i < 24; ++i)
459 predictor.TrimReferrersNow(); 483 predictor->TrimReferrersNow();
460 predictor.SerializeReferrers(&recovered_referral_list); 484 predictor->SerializeReferrers(&recovered_referral_list);
461 // Icon is also trimmed away, so entire set gets discarded. 485 // Icon is also trimmed away, so entire set gets discarded.
462 EXPECT_EQ(1U, recovered_referral_list.GetSize()); 486 EXPECT_EQ(1U, recovered_referral_list.GetSize());
463 EXPECT_FALSE(GetDataFromSerialization( 487 EXPECT_FALSE(GetDataFromSerialization(
464 motivation_url, icon_subresource_url, recovered_referral_list, &rate)); 488 motivation_url, icon_subresource_url, recovered_referral_list, &rate));
465 EXPECT_FALSE(GetDataFromSerialization( 489 EXPECT_FALSE(GetDataFromSerialization(
466 motivation_url, img_subresource_url, recovered_referral_list, &rate)); 490 motivation_url, img_subresource_url, recovered_referral_list, &rate));
467 491
468 predictor.Shutdown(); 492 predictor->Shutdown();
469 } 493 }
470 494
471 495
472 TEST_F(PredictorTest, PriorityQueuePushPopTest) { 496 TEST_F(PredictorTest, PriorityQueuePushPopTest) {
473 Predictor::HostNameQueue queue; 497 Predictor::HostNameQueue queue;
474 498
475 GURL first("http://first:80"), second("http://second:90"); 499 GURL first("http://first:80"), second("http://second:90");
476 500
477 // First check high priority queue FIFO functionality. 501 // First check high priority queue FIFO functionality.
478 EXPECT_TRUE(queue.IsEmpty()); 502 EXPECT_TRUE(queue.IsEmpty());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 EXPECT_NE(Predictor::CanonicalizeUrl(http), 594 EXPECT_NE(Predictor::CanonicalizeUrl(http),
571 Predictor::CanonicalizeUrl(https)); 595 Predictor::CanonicalizeUrl(https));
572 596
573 // Https works fine. 597 // Https works fine.
574 GURL long_https("https://host:999/path?query=value"); 598 GURL long_https("https://host:999/path?query=value");
575 EXPECT_EQ(Predictor::CanonicalizeUrl(long_https), 599 EXPECT_EQ(Predictor::CanonicalizeUrl(long_https),
576 long_https.GetWithEmptyPath()); 600 long_https.GetWithEmptyPath());
577 } 601 }
578 602
579 TEST_F(PredictorTest, DiscardPredictorResults) { 603 TEST_F(PredictorTest, DiscardPredictorResults) {
580 Predictor predictor(true); 604 scoped_refptr<Predictor> predictor(
581 predictor.SetHostResolver(host_resolver_.get()); 605 new Predictor(host_resolver_.get(),
606 default_max_queueing_delay_,
607 PredictorInit::kMaxSpeculativeParallelResolves,
608 false));
582 ListValue referral_list; 609 ListValue referral_list;
583 predictor.SerializeReferrers(&referral_list); 610 predictor->SerializeReferrers(&referral_list);
584 EXPECT_EQ(1U, referral_list.GetSize()); 611 EXPECT_EQ(1U, referral_list.GetSize());
585 612
586 GURL host_1("http://test_1"); 613 GURL host_1("http://test_1");
587 GURL host_2("http://test_2"); 614 GURL host_2("http://test_2");
588 predictor.LearnFromNavigation(host_1, host_2); 615 predictor->LearnFromNavigation(host_1, host_2);
589 616
590 predictor.SerializeReferrers(&referral_list); 617 predictor->SerializeReferrers(&referral_list);
591 EXPECT_EQ(2U, referral_list.GetSize()); 618 EXPECT_EQ(2U, referral_list.GetSize());
592 619
593 predictor.DiscardAllResults(); 620 predictor->DiscardAllResults();
594 predictor.SerializeReferrers(&referral_list); 621 predictor->SerializeReferrers(&referral_list);
595 EXPECT_EQ(1U, referral_list.GetSize()); 622 EXPECT_EQ(1U, referral_list.GetSize());
596 623
597 predictor.Shutdown(); 624 predictor->Shutdown();
598 } 625 }
599 626
600 } // namespace chrome_browser_net 627 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/predictor.cc ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698