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

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2229983002: Send the list of used and unused resources for precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <memory> 10 #include <memory>
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/command_line.h" 17 #include "base/command_line.h"
18 #include "base/compiler_specific.h" 18 #include "base/compiler_specific.h"
19 #include "base/files/file_path.h"
20 #include "base/files/scoped_temp_dir.h"
19 #include "base/memory/ptr_util.h" 21 #include "base/memory/ptr_util.h"
20 #include "base/memory/ref_counted.h" 22 #include "base/memory/ref_counted.h"
21 #include "base/memory/weak_ptr.h" 23 #include "base/memory/weak_ptr.h"
22 #include "base/run_loop.h" 24 #include "base/run_loop.h"
23 #include "base/single_thread_task_runner.h" 25 #include "base/single_thread_task_runner.h"
24 #include "base/strings/stringprintf.h" 26 #include "base/strings/stringprintf.h"
25 #include "base/test/histogram_tester.h" 27 #include "base/test/histogram_tester.h"
26 #include "base/threading/thread_task_runner_handle.h" 28 #include "base/threading/thread_task_runner_handle.h"
29 #include "components/precache/core/precache_database.h"
27 #include "components/precache/core/precache_switches.h" 30 #include "components/precache/core/precache_switches.h"
28 #include "components/precache/core/proto/precache.pb.h" 31 #include "components/precache/core/proto/precache.pb.h"
29 #include "components/precache/core/proto/unfinished_work.pb.h" 32 #include "components/precache/core/proto/unfinished_work.pb.h"
30 #include "net/base/load_flags.h" 33 #include "net/base/load_flags.h"
31 #include "net/http/http_response_headers.h" 34 #include "net/http/http_response_headers.h"
32 #include "net/http/http_status_code.h" 35 #include "net/http/http_status_code.h"
33 #include "net/url_request/test_url_fetcher_factory.h" 36 #include "net/url_request/test_url_fetcher_factory.h"
34 #include "net/url_request/url_request_status.h" 37 #include "net/url_request/url_request_status.h"
35 #include "net/url_request/url_request_test_util.h" 38 #include "net/url_request/url_request_test_util.h"
36 #include "testing/gmock/include/gmock/gmock.h" 39 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 net::URLRequestStatus::Status status) { 86 net::URLRequestStatus::Status status) {
84 std::unique_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher( 87 std::unique_ptr<net::FakeURLFetcher> fetcher(new net::FakeURLFetcher(
85 url, delegate, response_data, response_code, status)); 88 url, delegate, response_data, response_code, status));
86 89
87 total_response_bytes_ += response_data.size(); 90 total_response_bytes_ += response_data.size();
88 requested_urls_.insert(url); 91 requested_urls_.insert(url);
89 92
90 return fetcher; 93 return fetcher;
91 } 94 }
92 95
93 const std::multiset<GURL>& requested_urls() const { 96 std::multiset<GURL>& requested_urls() { return requested_urls_; }
sclittle 2016/08/11 22:52:36 You shouldn't return a non-const reference here. U
Raj 2016/08/12 19:04:21 Done.
94 return requested_urls_;
95 }
96 97
97 int total_response_bytes() const { return total_response_bytes_; } 98 int total_response_bytes() const { return total_response_bytes_; }
98 99
99 private: 100 private:
100 // Multiset with one entry for each URL requested. 101 // Multiset with one entry for each URL requested.
101 std::multiset<GURL> requested_urls_; 102 std::multiset<GURL> requested_urls_;
102 int total_response_bytes_; 103 int total_response_bytes_;
103 }; 104 };
104 105
105 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate { 106 class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
106 public: 107 public:
107 TestPrecacheDelegate() 108 TestPrecacheDelegate()
108 : on_done_was_called_(false) {} 109 : on_done_was_called_(false) {}
109 110
110 void OnDone() override { on_done_was_called_ = true; } 111 void OnDone() override { on_done_was_called_ = true; }
111 112
112 bool was_on_done_called() const { 113 bool was_on_done_called() const {
113 return on_done_was_called_; 114 return on_done_was_called_;
114 } 115 }
115 116
116 private: 117 private:
117 bool on_done_was_called_; 118 bool on_done_was_called_;
118 }; 119 };
119 120
120 class MockURLFetcherFactory : public net::URLFetcherFactory { 121 class MockURLFetcherFactory : public net::URLFetcherFactory {
sclittle 2016/08/11 22:52:36 FYI, for future CLs: Wow, we should really not nee
Raj 2016/08/12 19:04:21 Acknowledged.
121 public: 122 public:
122 typedef net::URLFetcher* DoURLFetcher( 123 typedef net::URLFetcher* DoURLFetcher(
123 int id, 124 int id,
124 const GURL& url, 125 const GURL& url,
125 net::URLFetcher::RequestType request_type, 126 net::URLFetcher::RequestType request_type,
126 net::URLFetcherDelegate* delegate); 127 net::URLFetcherDelegate* delegate);
127 128
128 std::unique_ptr<net::URLFetcher> CreateURLFetcher( 129 std::unique_ptr<net::URLFetcher> CreateURLFetcher(
129 int id, 130 int id,
130 const GURL& url, 131 const GURL& url,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 GURL url(kConfigURL); 224 GURL url(kConfigURL);
224 225
225 net::FakeURLFetcher* fetcher = nullptr; 226 net::FakeURLFetcher* fetcher = nullptr;
226 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 227 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
227 .WillOnce(factory_.RespondWith("", &fetcher)); 228 .WillOnce(factory_.RespondWith("", &fetcher));
228 EXPECT_CALL(*this, 229 EXPECT_CALL(*this,
229 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 230 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
230 NotNull()))); 231 NotNull())));
231 232
232 PrecacheFetcher::Fetcher precache_fetcher( 233 PrecacheFetcher::Fetcher precache_fetcher(
233 request_context_.get(), url, callback_, false /* is_resource_request */, 234 request_context_.get(), url, url.host(), callback_,
234 SIZE_MAX); 235 false /* is_resource_request */, SIZE_MAX);
235 236
236 loop_.RunUntilIdle(); 237 base::RunLoop().RunUntilIdle();
237 238
238 ASSERT_NE(nullptr, fetcher); 239 ASSERT_NE(nullptr, fetcher);
239 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags()); 240 EXPECT_EQ(kNoTracking, fetcher->GetLoadFlags());
240 } 241 }
241 242
242 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) { 243 TEST_F(PrecacheFetcherFetcherTest, ResourceNotInCache) {
243 GURL url(kGoodResourceURL); 244 GURL url(kGoodResourceURL);
244 245
245 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; 246 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr;
246 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 247 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
247 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1)) 248 .WillOnce(factory_.RespondWith("", CacheMiss, &fetcher1))
248 .WillOnce(factory_.RespondWith("", &fetcher2)); 249 .WillOnce(factory_.RespondWith("", &fetcher2));
249 EXPECT_CALL(*this, 250 EXPECT_CALL(*this,
250 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 251 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
251 NotNull()))) 252 NotNull())))
252 .Times(1); 253 .Times(1);
253 254
254 PrecacheFetcher::Fetcher precache_fetcher( 255 PrecacheFetcher::Fetcher precache_fetcher(
255 request_context_.get(), url, callback_, true /* is_resource_request */, 256 request_context_.get(), url, url.host(), callback_,
256 SIZE_MAX); 257 true /* is_resource_request */, SIZE_MAX);
257 258
258 loop_.RunUntilIdle(); 259 base::RunLoop().RunUntilIdle();
259 260
260 ASSERT_NE(nullptr, fetcher1); 261 ASSERT_NE(nullptr, fetcher1);
261 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); 262 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags());
262 ASSERT_NE(nullptr, fetcher2); 263 ASSERT_NE(nullptr, fetcher2);
263 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); 264 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags());
264 } 265 }
265 266
266 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) { 267 TEST_F(PrecacheFetcherFetcherTest, ResourceHasValidators) {
267 GURL url(kGoodResourceURL); 268 GURL url(kGoodResourceURL);
268 269
269 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr; 270 net::FakeURLFetcher *fetcher1 = nullptr, *fetcher2 = nullptr;
270 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 271 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
271 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1)) 272 .WillOnce(factory_.RespondWith("", HasETag, &fetcher1))
272 .WillOnce(factory_.RespondWith("", &fetcher2)); 273 .WillOnce(factory_.RespondWith("", &fetcher2));
273 EXPECT_CALL(*this, 274 EXPECT_CALL(*this,
274 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 275 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
275 NotNull()))); 276 NotNull())));
276 277
277 PrecacheFetcher::Fetcher precache_fetcher( 278 PrecacheFetcher::Fetcher precache_fetcher(
278 request_context_.get(), url, callback_, true /* is_resource_request */, 279 request_context_.get(), url, url.host(), callback_,
279 SIZE_MAX); 280 true /* is_resource_request */, SIZE_MAX);
280 281
281 loop_.RunUntilIdle(); 282 base::RunLoop().RunUntilIdle();
282 283
283 ASSERT_NE(nullptr, fetcher1); 284 ASSERT_NE(nullptr, fetcher1);
284 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags()); 285 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher1->GetLoadFlags());
285 ASSERT_NE(nullptr, fetcher2); 286 ASSERT_NE(nullptr, fetcher2);
286 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags()); 287 EXPECT_EQ(net::LOAD_VALIDATE_CACHE | kNoTracking, fetcher2->GetLoadFlags());
287 } 288 }
288 289
289 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) { 290 TEST_F(PrecacheFetcherFetcherTest, ResourceHasNoValidators) {
290 GURL url(kGoodResourceURL); 291 GURL url(kGoodResourceURL);
291 292
292 net::FakeURLFetcher* fetcher; 293 net::FakeURLFetcher* fetcher;
293 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 294 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
294 .WillOnce(factory_.RespondWith("", &fetcher)); 295 .WillOnce(factory_.RespondWith("", &fetcher));
295 EXPECT_CALL(*this, 296 EXPECT_CALL(*this,
296 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 297 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
297 nullptr))); // It never reached the network. 298 nullptr))); // It never reached the network.
298 299
299 PrecacheFetcher::Fetcher precache_fetcher( 300 PrecacheFetcher::Fetcher precache_fetcher(
300 request_context_.get(), url, callback_, true /* is_resource_request */, 301 request_context_.get(), url, url.host(), callback_,
301 SIZE_MAX); 302 true /* is_resource_request */, SIZE_MAX);
302 303
303 loop_.RunUntilIdle(); 304 base::RunLoop().RunUntilIdle();
304 305
305 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher->GetLoadFlags()); 306 EXPECT_EQ(net::LOAD_ONLY_FROM_CACHE | kNoTracking, fetcher->GetLoadFlags());
306 } 307 }
307 308
308 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) { 309 TEST_F(PrecacheFetcherFetcherTest, ResourceTooBig) {
309 GURL url(kGoodResourceURL); 310 GURL url(kGoodResourceURL);
310 311
311 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _)) 312 EXPECT_CALL(factory_, DoCreateURLFetcher(_, url, net::URLFetcher::GET, _))
312 // Cache request will fail, so that a network request is made. Only 313 // Cache request will fail, so that a network request is made. Only
313 // network requests are byte-capped. 314 // network requests are byte-capped.
314 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr)) 315 .WillOnce(factory_.RespondWith("", CacheMiss, nullptr))
315 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr)); 316 .WillOnce(factory_.RespondWith(std::string(100, '.'), nullptr));
316 317
317 // The callback should be called even though the download was cancelled, so 318 // The callback should be called even though the download was cancelled, so
318 // that the next download can start. The network_url_fetcher within should be 319 // that the next download can start. The network_url_fetcher within should be
319 // null, to signify that either the network was never reached (which will be 320 // null, to signify that either the network was never reached (which will be
320 // flagged as an error due to the expectation above) or it was requested but 321 // flagged as an error due to the expectation above) or it was requested but
321 // cancelled (which is the desired behavior). 322 // cancelled (which is the desired behavior).
322 EXPECT_CALL(*this, 323 EXPECT_CALL(*this,
323 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher, 324 Callback(Property(&PrecacheFetcher::Fetcher::network_url_fetcher,
324 nullptr))); 325 nullptr)));
325 326
326 PrecacheFetcher::Fetcher precache_fetcher( 327 PrecacheFetcher::Fetcher precache_fetcher(
327 request_context_.get(), url, callback_, true /* is_resource_request */, 328 request_context_.get(), url, url.host(), callback_,
328 99 /* max_bytes */); 329 true /* is_resource_request */, 99 /* max_bytes */);
329 330
330 loop_.RunUntilIdle(); 331 base::RunLoop().RunUntilIdle();
331 } 332 }
332 333
333 class PrecacheFetcherTest : public testing::Test { 334 class PrecacheFetcherTest : public testing::Test {
334 public: 335 public:
335 PrecacheFetcherTest() 336 PrecacheFetcherTest()
336 : request_context_(new net::TestURLRequestContextGetter( 337 : task_runner_(base::ThreadTaskRunnerHandle::Get()),
338 request_context_(new net::TestURLRequestContextGetter(
337 base::ThreadTaskRunnerHandle::Get())), 339 base::ThreadTaskRunnerHandle::Get())),
338 factory_(NULL, 340 factory_(NULL,
339 base::Bind(&TestURLFetcherCallback::CreateURLFetcher, 341 base::Bind(&TestURLFetcherCallback::CreateURLFetcher,
340 base::Unretained(&url_callback_))), 342 base::Unretained(&url_callback_))),
341 expected_total_response_bytes_(0), 343 expected_total_response_bytes_(0),
342 parallel_fetches_beyond_capacity_(false) {} 344 parallel_fetches_beyond_capacity_(false) {}
343 345
344 protected: 346 protected:
347 void SetUp() override {
348 ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
349 base::FilePath db_path = scoped_temp_dir_.path().Append(
350 base::FilePath(FILE_PATH_LITERAL("precache_database")));
351 precache_database_.Init(db_path);
352 }
345 void SetDefaultFlags() { 353 void SetDefaultFlags() {
346 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 354 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
347 switches::kPrecacheConfigSettingsURL, kConfigURL); 355 switches::kPrecacheConfigSettingsURL, kConfigURL);
348 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 356 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
349 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix); 357 switches::kPrecacheManifestURLPrefix, kManifestURLPrefix);
350 } 358 }
351 359
352 // Posts a task to check if more parallel fetches of precache manifest and 360 // Posts a task to check if more parallel fetches of precache manifest and
353 // resource URLs were attempted beyond the fetcher pool maximum defined 361 // resource URLs were attempted beyond the fetcher pool maximum defined
354 // capacity. The task will be posted repeatedly until such condition is met. 362 // capacity. The task will be posted repeatedly until such condition is met.
355 void CheckUntilParallelFetchesBeyondCapacity( 363 void CheckUntilParallelFetchesBeyondCapacity(
356 const PrecacheFetcher* precache_fetcher) { 364 const PrecacheFetcher* precache_fetcher) {
357 if (!precache_fetcher->pool_.IsAvailable() && 365 if (!precache_fetcher->pool_.IsAvailable() &&
358 !precache_fetcher->resource_urls_to_fetch_.empty() && 366 precache_fetcher->top_hosts_to_fetch_ &&
359 !precache_fetcher->manifest_urls_to_fetch_.empty()) { 367 !precache_fetcher->top_hosts_to_fetch_->empty() &&
368 !precache_fetcher->resources_to_fetch_.empty()) {
360 parallel_fetches_beyond_capacity_ = true; 369 parallel_fetches_beyond_capacity_ = true;
361 return; 370 return;
362 } 371 }
363 372
364 // Check again after allowing the message loop to process some messages. 373 // Check again after allowing the message loop to process some messages.
365 loop_.task_runner()->PostTask( 374 loop_.PostTask(
366 FROM_HERE, 375 FROM_HERE,
367 base::Bind( 376 base::Bind(
368 &PrecacheFetcherTest::CheckUntilParallelFetchesBeyondCapacity, 377 &PrecacheFetcherTest::CheckUntilParallelFetchesBeyondCapacity,
369 base::Unretained(this), precache_fetcher)); 378 base::Unretained(this), precache_fetcher));
370 } 379 }
371 380
381 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner() const {
382 return task_runner_;
383 }
384
385 // Must be declared first so that it is destroyed last.
372 base::MessageLoopForUI loop_; 386 base::MessageLoopForUI loop_;
387 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
373 scoped_refptr<net::TestURLRequestContextGetter> request_context_; 388 scoped_refptr<net::TestURLRequestContextGetter> request_context_;
374 TestURLFetcherCallback url_callback_; 389 TestURLFetcherCallback url_callback_;
375 net::FakeURLFetcherFactory factory_; 390 net::FakeURLFetcherFactory factory_;
376 TestPrecacheDelegate precache_delegate_; 391 TestPrecacheDelegate precache_delegate_;
392 base::ScopedTempDir scoped_temp_dir_;
393 PrecacheDatabase precache_database_;
377 int expected_total_response_bytes_; 394 int expected_total_response_bytes_;
378 395
379 // True if more parallel fetches were attempted beyond the fetcher pool 396 // True if more parallel fetches were attempted beyond the fetcher pool
380 // maximum capacity. 397 // maximum capacity.
381 bool parallel_fetches_beyond_capacity_; 398 bool parallel_fetches_beyond_capacity_;
382 }; 399 };
383 400
384 TEST_F(PrecacheFetcherTest, FullPrecache) { 401 TEST_F(PrecacheFetcherTest, FullPrecache) {
385 SetDefaultFlags(); 402 SetDefaultFlags();
386 403
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 net::URLRequestStatus::FAILED); 435 net::URLRequestStatus::FAILED);
419 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 436 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
420 net::URLRequestStatus::SUCCESS); 437 net::URLRequestStatus::SUCCESS);
421 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL), 438 factory_.SetFakeResponse(GURL(kForcedStartingURLManifestURL),
422 PrecacheManifest().SerializeAsString(), net::HTTP_OK, 439 PrecacheManifest().SerializeAsString(), net::HTTP_OK,
423 net::URLRequestStatus::SUCCESS); 440 net::URLRequestStatus::SUCCESS);
424 441
425 base::HistogramTester histogram; 442 base::HistogramTester histogram;
426 443
427 { 444 {
428 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 445 PrecacheFetcher precache_fetcher(
429 std::string(), std::move(unfinished_work), 446 request_context_.get(), GURL(), std::string(),
430 kExperimentID, &precache_delegate_); 447 std::move(unfinished_work), kExperimentID,
448 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
431 precache_fetcher.Start(); 449 precache_fetcher.Start();
432 450
433 loop_.RunUntilIdle(); 451 base::RunLoop().RunUntilIdle();
434 452
435 // Destroy the PrecacheFetcher after it has finished, to record metrics. 453 // Destroy the PrecacheFetcher after it has finished, to record metrics.
436 } 454 }
437 455
438 std::multiset<GURL> expected_requested_urls; 456 std::multiset<GURL> expected_requested_urls;
439 expected_requested_urls.insert(GURL(kConfigURL)); 457 expected_requested_urls.insert(GURL(kConfigURL));
440 expected_requested_urls.insert(GURL(kManifestFetchFailureURL)); 458 expected_requested_urls.insert(GURL(kManifestFetchFailureURL));
441 expected_requested_urls.insert(GURL(kBadManifestURL)); 459 expected_requested_urls.insert(GURL(kBadManifestURL));
442 expected_requested_urls.insert(GURL(kGoodManifestURL)); 460 expected_requested_urls.insert(GURL(kGoodManifestURL));
443 expected_requested_urls.insert(GURL(kResourceFetchFailureURL)); 461 expected_requested_urls.insert(GURL(kResourceFetchFailureURL));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 504 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
487 net::URLRequestStatus::SUCCESS); 505 net::URLRequestStatus::SUCCESS);
488 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, 506 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
489 net::URLRequestStatus::SUCCESS); 507 net::URLRequestStatus::SUCCESS);
490 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, 508 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
491 net::URLRequestStatus::SUCCESS); 509 net::URLRequestStatus::SUCCESS);
492 510
493 base::HistogramTester histogram; 511 base::HistogramTester histogram;
494 512
495 { 513 {
496 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 514 PrecacheFetcher precache_fetcher(
497 std::string(), std::move(unfinished_work), 515 request_context_.get(), GURL(), std::string(),
498 kExperimentID, &precache_delegate_); 516 std::move(unfinished_work), kExperimentID,
517 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
499 precache_fetcher.Start(); 518 precache_fetcher.Start();
500 519
501 loop_.RunUntilIdle(); 520 base::RunLoop().RunUntilIdle();
502 521
503 // Destroy the PrecacheFetcher after it has finished, to record metrics. 522 // Destroy the PrecacheFetcher after it has finished, to record metrics.
504 } 523 }
505 524
506 std::multiset<GURL> expected_requested_urls; 525 std::multiset<GURL> expected_requested_urls;
507 expected_requested_urls.insert(GURL(kConfigURL)); 526 expected_requested_urls.insert(GURL(kConfigURL));
508 expected_requested_urls.insert(GURL(kGoodManifestURL)); 527 expected_requested_urls.insert(GURL(kGoodManifestURL));
509 expected_requested_urls.insert(GURL(kGoodResourceURL)); 528 expected_requested_urls.insert(GURL(kGoodResourceURL));
510 expected_requested_urls.insert(GURL(kGoodResourceURLB)); 529 expected_requested_urls.insert(GURL(kGoodResourceURLB));
511 expected_requested_urls.insert(GURL(kGoodResourceURLD)); 530 expected_requested_urls.insert(GURL(kGoodResourceURLD));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, 577 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
559 net::URLRequestStatus::SUCCESS); 578 net::URLRequestStatus::SUCCESS);
560 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK, 579 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK,
561 net::URLRequestStatus::SUCCESS); 580 net::URLRequestStatus::SUCCESS);
562 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, 581 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
563 net::URLRequestStatus::SUCCESS); 582 net::URLRequestStatus::SUCCESS);
564 583
565 base::HistogramTester histogram; 584 base::HistogramTester histogram;
566 585
567 { 586 {
568 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 587 PrecacheFetcher precache_fetcher(
569 std::string(), std::move(unfinished_work), 588 request_context_.get(), GURL(), std::string(),
570 kExperimentID, &precache_delegate_); 589 std::move(unfinished_work), kExperimentID,
590 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
571 precache_fetcher.Start(); 591 precache_fetcher.Start();
572 592
573 loop_.RunUntilIdle(); 593 base::RunLoop().RunUntilIdle();
574 594
575 // Destroy the PrecacheFetcher after it has finished, to record metrics. 595 // Destroy the PrecacheFetcher after it has finished, to record metrics.
576 } 596 }
577 597
578 std::multiset<GURL> expected_requested_urls; 598 std::multiset<GURL> expected_requested_urls;
579 expected_requested_urls.insert(GURL(kConfigURL)); 599 expected_requested_urls.insert(GURL(kConfigURL));
580 expected_requested_urls.insert(GURL(kGoodManifestURL)); 600 expected_requested_urls.insert(GURL(kGoodManifestURL));
581 expected_requested_urls.insert(GURL(kGoodResourceURL)); 601 expected_requested_urls.insert(GURL(kGoodResourceURL));
582 expected_requested_urls.insert(GURL(kGoodResourceURLA)); 602 expected_requested_urls.insert(GURL(kGoodResourceURLA));
583 expected_requested_urls.insert(GURL(kGoodResourceURLB)); 603 expected_requested_urls.insert(GURL(kGoodResourceURLB));
(...skipping 11 matching lines...) Expand all
595 } 615 }
596 616
597 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { 617 TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
598 SetDefaultFlags(); 618 SetDefaultFlags();
599 619
600 PrecacheConfigurationSettings config; 620 PrecacheConfigurationSettings config;
601 config.set_top_sites_count(3); 621 config.set_top_sites_count(3);
602 622
603 std::unique_ptr<PrecacheUnfinishedWork> initial_work( 623 std::unique_ptr<PrecacheUnfinishedWork> initial_work(
604 new PrecacheUnfinishedWork()); 624 new PrecacheUnfinishedWork());
605 initial_work->add_manifest()->set_url( 625 initial_work->add_top_host()->set_hostname("manifest1.com");
606 "http://manifest-url-prefix.com/manifest1.com"); 626 initial_work->add_top_host()->set_hostname("manifest2.com");
607 initial_work->add_manifest()->set_url(
608 "http://manifest-url-prefix.com/manifest2.com");
609 initial_work->add_resource()->set_url(kGoodResourceURL);
610 initial_work->set_start_time( 627 initial_work->set_start_time(
611 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue()); 628 (base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue());
629 // initial_work->add_resource()->set_url(kGoodResourceURL);
612 630
613 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(), 631 PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(),
614 std::move(initial_work), kExperimentID, 632 std::move(initial_work), kExperimentID,
633 precache_database_.GetWeakPtr(), task_runner(),
615 &precache_delegate_); 634 &precache_delegate_);
616 635 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
617 loop_.RunUntilIdle(); 636 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
637 first_fetcher.Start();
638 // base::RunLoop().RunUntilIdle();
618 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work = 639 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work =
619 first_fetcher.CancelPrecaching(); 640 first_fetcher.CancelPrecaching();
620 641
621 std::multiset<GURL> expected_requested_urls; 642 std::multiset<GURL> expected_requested_urls;
643 expected_requested_urls.insert(GURL(kConfigURL));
622 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 644 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
623 645
624 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 646 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
625 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 647 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
626 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK, 648 factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
627 net::URLRequestStatus::SUCCESS); 649 net::URLRequestStatus::SUCCESS);
628 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"), 650 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"),
629 "bad protobuf", net::HTTP_OK, 651 "bad protobuf", net::HTTP_OK,
630 net::URLRequestStatus::SUCCESS); 652 net::URLRequestStatus::SUCCESS);
631 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"), 653 factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"),
632 "bad protobuf", net::HTTP_OK, 654 "bad protobuf", net::HTTP_OK,
633 net::URLRequestStatus::SUCCESS); 655 net::URLRequestStatus::SUCCESS);
634 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 656 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
635 net::URLRequestStatus::SUCCESS); 657 net::URLRequestStatus::SUCCESS);
636 // Starting hosts should not be fetched. 658
637 unfinished_work->add_top_host()->set_hostname("bad-manifest.com"); 659 // unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
sclittle 2016/08/11 22:52:36 remove dead code, here and elsewhere
660 url_callback_.requested_urls().clear();
638 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(), 661 PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(),
639 std::move(unfinished_work), kExperimentID, 662 std::move(unfinished_work), kExperimentID,
663 precache_database_.GetWeakPtr(), task_runner(),
640 &precache_delegate_); 664 &precache_delegate_);
641 second_fetcher.Start(); 665 second_fetcher.Start();
642 loop_.RunUntilIdle(); 666 base::RunLoop().RunUntilIdle();
643 expected_requested_urls.insert(GURL(kConfigURL));
644 expected_requested_urls.insert( 667 expected_requested_urls.insert(
645 GURL("http://manifest-url-prefix.com/manifest1.com")); 668 GURL("http://manifest-url-prefix.com/manifest1.com"));
646 expected_requested_urls.insert( 669 expected_requested_urls.insert(
647 GURL("http://manifest-url-prefix.com/manifest2.com")); 670 GURL("http://manifest-url-prefix.com/manifest2.com"));
648 expected_requested_urls.insert(GURL(kGoodResourceURL)); 671 // expected_requested_urls.insert(GURL(kGoodResourceURL));
649 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 672 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
650 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 673 EXPECT_TRUE(precache_delegate_.was_on_done_called());
651 } 674 }
652 675
653 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) { 676 TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
654 SetDefaultFlags(); 677 SetDefaultFlags();
655 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 678 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
656 new PrecacheUnfinishedWork()); 679 new PrecacheUnfinishedWork());
657 unfinished_work->mutable_config_settings()->add_forced_site( 680 unfinished_work->mutable_config_settings()->add_forced_site(
658 "good-manifest.com"); 681 "good-manifest.com");
659 unfinished_work->set_start_time(base::Time::Now().ToInternalValue()); 682 unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
660 PrecacheManifest good_manifest; 683 PrecacheManifest good_manifest;
661 good_manifest.add_resource()->set_url(kGoodResourceURL); 684 good_manifest.add_resource()->set_url(kGoodResourceURL);
662 685
663 factory_.SetFakeResponse(GURL(kGoodManifestURL), 686 factory_.SetFakeResponse(GURL(kGoodManifestURL),
664 good_manifest.SerializeAsString(), net::HTTP_OK, 687 good_manifest.SerializeAsString(), net::HTTP_OK,
665 net::URLRequestStatus::SUCCESS); 688 net::URLRequestStatus::SUCCESS);
666 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 689 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
667 net::URLRequestStatus::SUCCESS); 690 net::URLRequestStatus::SUCCESS);
668 { 691 {
669 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 692 PrecacheFetcher precache_fetcher(
670 std::string(), std::move(unfinished_work), 693 request_context_.get(), GURL(), std::string(),
671 kExperimentID, &precache_delegate_); 694 std::move(unfinished_work), kExperimentID,
695 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
672 precache_fetcher.Start(); 696 precache_fetcher.Start();
673 697
674 loop_.RunUntilIdle(); 698 base::RunLoop().RunUntilIdle();
675 } 699 }
676 700
677 std::multiset<GURL> expected_requested_urls; 701 std::multiset<GURL> expected_requested_urls;
678 expected_requested_urls.insert(GURL(kGoodManifestURL)); 702 expected_requested_urls.insert(GURL(kGoodManifestURL));
679 expected_requested_urls.insert(GURL(kGoodResourceURL)); 703 expected_requested_urls.insert(GURL(kGoodResourceURL));
680 704
681 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 705 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
682 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 706 EXPECT_TRUE(precache_delegate_.was_on_done_called());
683 707
684 } 708 }
(...skipping 14 matching lines...) Expand all
699 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(), 723 factory_.SetFakeResponse(GURL(kCustomConfigURL), config.SerializeAsString(),
700 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 724 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
701 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL), 725 factory_.SetFakeResponse(GURL(kCustomGoodManifestURL),
702 good_manifest.SerializeAsString(), net::HTTP_OK, 726 good_manifest.SerializeAsString(), net::HTTP_OK,
703 net::URLRequestStatus::SUCCESS); 727 net::URLRequestStatus::SUCCESS);
704 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 728 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
705 net::URLRequestStatus::SUCCESS); 729 net::URLRequestStatus::SUCCESS);
706 730
707 PrecacheFetcher precache_fetcher( 731 PrecacheFetcher precache_fetcher(
708 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix, 732 request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix,
709 std::move(unfinished_work), kExperimentID, &precache_delegate_); 733 std::move(unfinished_work), kExperimentID,
734 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
710 precache_fetcher.Start(); 735 precache_fetcher.Start();
711 736
712 loop_.RunUntilIdle(); 737 base::RunLoop().RunUntilIdle();
713 738
714 std::multiset<GURL> expected_requested_urls; 739 std::multiset<GURL> expected_requested_urls;
715 expected_requested_urls.insert(GURL(kCustomConfigURL)); 740 expected_requested_urls.insert(GURL(kCustomConfigURL));
716 expected_requested_urls.insert(GURL(kCustomGoodManifestURL)); 741 expected_requested_urls.insert(GURL(kCustomGoodManifestURL));
717 expected_requested_urls.insert(GURL(kGoodResourceURL)); 742 expected_requested_urls.insert(GURL(kGoodResourceURL));
718 743
719 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 744 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
720 745
721 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 746 EXPECT_TRUE(precache_delegate_.was_on_done_called());
722 } 747 }
723 748
724 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) { 749 TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
725 SetDefaultFlags(); 750 SetDefaultFlags();
726 751
727 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 752 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
728 new PrecacheUnfinishedWork()); 753 new PrecacheUnfinishedWork());
729 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 754 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
730 755
731 factory_.SetFakeResponse(GURL(kConfigURL), "", 756 factory_.SetFakeResponse(GURL(kConfigURL), "",
732 net::HTTP_INTERNAL_SERVER_ERROR, 757 net::HTTP_INTERNAL_SERVER_ERROR,
733 net::URLRequestStatus::FAILED); 758 net::URLRequestStatus::FAILED);
734 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 759 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
735 net::URLRequestStatus::SUCCESS); 760 net::URLRequestStatus::SUCCESS);
736 761
737 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 762 PrecacheFetcher precache_fetcher(
738 std::string(), std::move(unfinished_work), 763 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
739 kExperimentID, &precache_delegate_); 764 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
765 &precache_delegate_);
740 precache_fetcher.Start(); 766 precache_fetcher.Start();
741 767
742 loop_.RunUntilIdle(); 768 base::RunLoop().RunUntilIdle();
743 769
744 std::multiset<GURL> expected_requested_urls; 770 std::multiset<GURL> expected_requested_urls;
745 expected_requested_urls.insert(GURL(kConfigURL)); 771 expected_requested_urls.insert(GURL(kConfigURL));
746 expected_requested_urls.insert(GURL(kGoodManifestURL)); 772 expected_requested_urls.insert(GURL(kGoodManifestURL));
747 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 773 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
748 774
749 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 775 EXPECT_TRUE(precache_delegate_.was_on_done_called());
750 } 776 }
751 777
752 TEST_F(PrecacheFetcherTest, BadConfig) { 778 TEST_F(PrecacheFetcherTest, BadConfig) {
753 SetDefaultFlags(); 779 SetDefaultFlags();
754 780
755 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 781 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
756 new PrecacheUnfinishedWork()); 782 new PrecacheUnfinishedWork());
757 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 783 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
758 784
759 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK, 785 factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
760 net::URLRequestStatus::SUCCESS); 786 net::URLRequestStatus::SUCCESS);
761 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK, 787 factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
762 net::URLRequestStatus::SUCCESS); 788 net::URLRequestStatus::SUCCESS);
763 789
764 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 790 PrecacheFetcher precache_fetcher(
765 std::string(), std::move(unfinished_work), 791 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
766 kExperimentID, &precache_delegate_); 792 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
793 &precache_delegate_);
767 precache_fetcher.Start(); 794 precache_fetcher.Start();
768 795
769 loop_.RunUntilIdle(); 796 base::RunLoop().RunUntilIdle();
770 797
771 std::multiset<GURL> expected_requested_urls; 798 std::multiset<GURL> expected_requested_urls;
772 expected_requested_urls.insert(GURL(kConfigURL)); 799 expected_requested_urls.insert(GURL(kConfigURL));
773 expected_requested_urls.insert(GURL(kGoodManifestURL)); 800 expected_requested_urls.insert(GURL(kGoodManifestURL));
774 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 801 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
775 802
776 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 803 EXPECT_TRUE(precache_delegate_.was_on_done_called());
777 } 804 }
778 805
779 TEST_F(PrecacheFetcherTest, Cancel) { 806 TEST_F(PrecacheFetcherTest, Cancel) {
780 SetDefaultFlags(); 807 SetDefaultFlags();
781 808
782 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 809 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
783 new PrecacheUnfinishedWork()); 810 new PrecacheUnfinishedWork());
784 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 811 unfinished_work->add_top_host()->set_hostname("starting-url.com");
785 812
786 PrecacheConfigurationSettings config; 813 PrecacheConfigurationSettings config;
787 config.set_top_sites_count(1); 814 config.set_top_sites_count(1);
788 815
789 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 816 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
790 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 817 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
791 818
792 base::HistogramTester histogram; 819 base::HistogramTester histogram;
793 820
794 { 821 {
795 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 822 PrecacheFetcher precache_fetcher(
796 std::string(), std::move(unfinished_work), 823 request_context_.get(), GURL(), std::string(),
797 kExperimentID, &precache_delegate_); 824 std::move(unfinished_work), kExperimentID,
825 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
798 precache_fetcher.Start(); 826 precache_fetcher.Start();
799 827
800 // Destroy the PrecacheFetcher, to cancel precaching. No metrics 828 // Destroy the PrecacheFetcher, to cancel precaching. No metrics
801 // should be recorded because this should not cause OnDone to be 829 // should be recorded because this should not cause OnDone to be
802 // called on the precache delegate. 830 // called on the precache delegate.
803 } 831 }
804 832
805 loop_.RunUntilIdle(); 833 base::RunLoop().RunUntilIdle();
806 834
807 std::multiset<GURL> expected_requested_urls; 835 std::multiset<GURL> expected_requested_urls;
808 expected_requested_urls.insert(GURL(kConfigURL)); 836 expected_requested_urls.insert(GURL(kConfigURL));
809 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 837 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
810 838
811 EXPECT_FALSE(precache_delegate_.was_on_done_called()); 839 EXPECT_FALSE(precache_delegate_.was_on_done_called());
812 840
813 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0); 841 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0);
814 } 842 }
815 843
816 #if defined(PRECACHE_CONFIG_SETTINGS_URL) 844 #if defined(PRECACHE_CONFIG_SETTINGS_URL)
817 845
818 // If the default precache configuration settings URL is defined, then test that 846 // If the default precache configuration settings URL is defined, then test that
819 // it works with the PrecacheFetcher. 847 // it works with the PrecacheFetcher.
820 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) { 848 TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
821 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 849 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
822 new PrecacheUnfinishedWork()); 850 new PrecacheUnfinishedWork());
823 unfinished_work->add_top_host()->set_hostname("starting-url.com"); 851 unfinished_work->add_top_host()->set_hostname("starting-url.com");
824 852
825 PrecacheConfigurationSettings config; 853 PrecacheConfigurationSettings config;
826 config.set_top_sites_count(0); 854 config.set_top_sites_count(0);
827 855
828 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL), 856 factory_.SetFakeResponse(GURL(PRECACHE_CONFIG_SETTINGS_URL),
829 config.SerializeAsString(), net::HTTP_OK, 857 config.SerializeAsString(), net::HTTP_OK,
830 net::URLRequestStatus::SUCCESS); 858 net::URLRequestStatus::SUCCESS);
831 859
832 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 860 PrecacheFetcher precache_fetcher(
833 std::string(), std::move(unfinished_work), 861 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
834 kExperimentID, &precache_delegate_); 862 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
863 &precache_delegate_);
835 precache_fetcher.Start(); 864 precache_fetcher.Start();
836 865
837 loop_.RunUntilIdle(); 866 base::RunLoop().RunUntilIdle();
838 867
839 std::multiset<GURL> expected_requested_urls; 868 std::multiset<GURL> expected_requested_urls;
840 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL)); 869 expected_requested_urls.insert(GURL(PRECACHE_CONFIG_SETTINGS_URL));
841 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 870 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
842 871
843 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 872 EXPECT_TRUE(precache_delegate_.was_on_done_called());
844 } 873 }
845 874
846 #endif // PRECACHE_CONFIG_SETTINGS_URL 875 #endif // PRECACHE_CONFIG_SETTINGS_URL
847 876
(...skipping 12 matching lines...) Expand all
860 PrecacheConfigurationSettings config; 889 PrecacheConfigurationSettings config;
861 config.set_top_sites_count(1); 890 config.set_top_sites_count(1);
862 891
863 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com"); 892 GURL manifest_url(PRECACHE_MANIFEST_URL_PREFIX "starting-url.com");
864 893
865 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 894 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
866 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 895 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
867 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(), 896 factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
868 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 897 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
869 898
870 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 899 PrecacheFetcher precache_fetcher(
871 std::string(), std::move(unfinished_work), 900 request_context_.get(), GURL(), std::string(), std::move(unfinished_work),
872 kExperimentID, &precache_delegate_); 901 kExperimentID, precache_database_.GetWeakPtr(), task_runner(),
902 &precache_delegate_);
873 precache_fetcher.Start(); 903 precache_fetcher.Start();
874 904
875 loop_.RunUntilIdle(); 905 base::RunLoop().RunUntilIdle();
876 906
877 std::multiset<GURL> expected_requested_urls; 907 std::multiset<GURL> expected_requested_urls;
878 expected_requested_urls.insert(GURL(kConfigURL)); 908 expected_requested_urls.insert(GURL(kConfigURL));
879 expected_requested_urls.insert(manifest_url); 909 expected_requested_urls.insert(manifest_url);
880 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 910 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
881 911
882 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 912 EXPECT_TRUE(precache_delegate_.was_on_done_called());
883 } 913 }
884 914
885 #endif // PRECACHE_MANIFEST_URL_PREFIX 915 #endif // PRECACHE_MANIFEST_URL_PREFIX
(...skipping 20 matching lines...) Expand all
906 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 936 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
907 factory_.SetFakeResponse(GURL(kGoodManifestURL), 937 factory_.SetFakeResponse(GURL(kGoodManifestURL),
908 good_manifest.SerializeAsString(), net::HTTP_OK, 938 good_manifest.SerializeAsString(), net::HTTP_OK,
909 net::URLRequestStatus::SUCCESS); 939 net::URLRequestStatus::SUCCESS);
910 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good", 940 factory_.SetFakeResponse(GURL("http://good-manifest.com/retrieved"), "good",
911 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 941 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
912 942
913 base::HistogramTester histogram; 943 base::HistogramTester histogram;
914 944
915 { 945 {
916 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 946 PrecacheFetcher precache_fetcher(
917 std::string(), std::move(unfinished_work), 947 request_context_.get(), GURL(), std::string(),
918 kExperimentID, &precache_delegate_); 948 std::move(unfinished_work), kExperimentID,
949 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
919 precache_fetcher.Start(); 950 precache_fetcher.Start();
920 951
921 loop_.RunUntilIdle(); 952 base::RunLoop().RunUntilIdle();
922 953
923 // Destroy the PrecacheFetcher after it has finished, to record metrics. 954 // Destroy the PrecacheFetcher after it has finished, to record metrics.
924 } 955 }
925 956
926 std::multiset<GURL> expected_requested_urls; 957 std::multiset<GURL> expected_requested_urls;
927 expected_requested_urls.insert(GURL(kConfigURL)); 958 expected_requested_urls.insert(GURL(kConfigURL));
928 expected_requested_urls.insert(GURL(kGoodManifestURL)); 959 expected_requested_urls.insert(GURL(kGoodManifestURL));
929 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 960 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
930 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 961 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
931 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved")); 962 expected_requested_urls.insert(GURL("http://good-manifest.com/retrieved"));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1014 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
984 } 1015 }
985 1016
986 factory_.SetFakeResponse(GURL(kGoodManifestURL), 1017 factory_.SetFakeResponse(GURL(kGoodManifestURL),
987 good_manifest.SerializeAsString(), net::HTTP_OK, 1018 good_manifest.SerializeAsString(), net::HTTP_OK,
988 net::URLRequestStatus::SUCCESS); 1019 net::URLRequestStatus::SUCCESS);
989 1020
990 base::HistogramTester histogram; 1021 base::HistogramTester histogram;
991 1022
992 { 1023 {
993 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1024 PrecacheFetcher precache_fetcher(
994 std::string(), std::move(unfinished_work), 1025 request_context_.get(), GURL(), std::string(),
995 kExperimentID, &precache_delegate_); 1026 std::move(unfinished_work), kExperimentID,
1027 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
996 precache_fetcher.Start(); 1028 precache_fetcher.Start();
997 1029
998 loop_.RunUntilIdle(); 1030 base::RunLoop().RunUntilIdle();
999 } 1031 }
1000 1032
1001 // We don't know which will make it and which won't due to the parallelism in 1033 // We don't know which will make it and which won't due to the parallelism in
1002 // the pool of Fetchers. 1034 // the pool of Fetchers.
1003 EXPECT_GT(kNumResources, url_callback_.requested_urls().size()); 1035 EXPECT_GT(kNumResources, url_callback_.requested_urls().size());
1004 1036
1005 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1037 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1006 1038
1007 // good-manifest.com will not have been completed. 1039 // good-manifest.com will not have been completed.
1008 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1040 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 } 1077 }
1046 factory_.SetFakeResponse(GURL(kManifestURLPrefix + top_host_url), 1078 factory_.SetFakeResponse(GURL(kManifestURLPrefix + top_host_url),
1047 top_host_manifest[i].SerializeAsString(), 1079 top_host_manifest[i].SerializeAsString(),
1048 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 1080 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
1049 expected_requested_urls.insert(GURL(kManifestURLPrefix + top_host_url)); 1081 expected_requested_urls.insert(GURL(kManifestURLPrefix + top_host_url));
1050 } 1082 }
1051 1083
1052 base::HistogramTester histogram; 1084 base::HistogramTester histogram;
1053 1085
1054 { 1086 {
1055 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1087 PrecacheFetcher precache_fetcher(
1056 std::string(), std::move(unfinished_work), 1088 request_context_.get(), GURL(), std::string(),
1057 kExperimentID, &precache_delegate_); 1089 std::move(unfinished_work), kExperimentID,
1090 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1058 precache_fetcher.Start(); 1091 precache_fetcher.Start();
1059 1092
1060 EXPECT_GT(kNumResources, precache_fetcher.pool_.max_size()); 1093 EXPECT_GT(kNumResources, precache_fetcher.pool_.max_size());
1061 CheckUntilParallelFetchesBeyondCapacity(&precache_fetcher); 1094 CheckUntilParallelFetchesBeyondCapacity(&precache_fetcher);
1062 1095
1063 loop_.RunUntilIdle(); 1096 base::RunLoop().RunUntilIdle();
1064 1097
1065 // Destroy the PrecacheFetcher after it has finished, to record metrics. 1098 // Destroy the PrecacheFetcher after it has finished, to record metrics.
1066 } 1099 }
1067 1100
1068 EXPECT_TRUE(parallel_fetches_beyond_capacity_); 1101 EXPECT_TRUE(parallel_fetches_beyond_capacity_);
1069 1102
1070 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1103 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1071 1104
1072 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1105 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1073 1106
(...skipping 12 matching lines...) Expand all
1086 new PrecacheUnfinishedWork()); 1119 new PrecacheUnfinishedWork());
1087 unfinished_work->add_top_host()->set_hostname("manifest.com"); 1120 unfinished_work->add_top_host()->set_hostname("manifest.com");
1088 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 1121 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
1089 1122
1090 factory_.SetFakeResponse(GURL(kConfigURL), "", net::HTTP_OK, 1123 factory_.SetFakeResponse(GURL(kConfigURL), "", net::HTTP_OK,
1091 net::URLRequestStatus::SUCCESS); 1124 net::URLRequestStatus::SUCCESS);
1092 1125
1093 base::HistogramTester histogram; 1126 base::HistogramTester histogram;
1094 1127
1095 { 1128 {
1096 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1129 PrecacheFetcher precache_fetcher(
1097 std::string(), std::move(unfinished_work), 1130 request_context_.get(), GURL(), std::string(),
1098 kExperimentID, &precache_delegate_); 1131 std::move(unfinished_work), kExperimentID,
1132 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1099 precache_fetcher.Start(); 1133 precache_fetcher.Start();
1100 1134
1101 loop_.RunUntilIdle(); 1135 base::RunLoop().RunUntilIdle();
1102 } 1136 }
1103 1137
1104 // The config is fetched, but not the invalid manifest URL. 1138 // The config is fetched, but not the invalid manifest URL.
1105 EXPECT_EQ(1UL, url_callback_.requested_urls().size()); 1139 EXPECT_EQ(1UL, url_callback_.requested_urls().size());
1106 1140
1107 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1141 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1108 1142
1109 // manifest.com will have been failed to complete, in this case. 1143 // manifest.com will have been failed to complete, in this case.
1110 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1144 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1111 ElementsAre(base::Bucket(0, 1))); 1145 ElementsAre(base::Bucket(0, 1)));
(...skipping 13 matching lines...) Expand all
1125 PrecacheManifest bad_manifest; 1159 PrecacheManifest bad_manifest;
1126 bad_manifest.add_resource()->set_url("http://"); 1160 bad_manifest.add_resource()->set_url("http://");
1127 1161
1128 factory_.SetFakeResponse(GURL(kBadManifestURL), 1162 factory_.SetFakeResponse(GURL(kBadManifestURL),
1129 bad_manifest.SerializeAsString(), net::HTTP_OK, 1163 bad_manifest.SerializeAsString(), net::HTTP_OK,
1130 net::URLRequestStatus::SUCCESS); 1164 net::URLRequestStatus::SUCCESS);
1131 1165
1132 base::HistogramTester histogram; 1166 base::HistogramTester histogram;
1133 1167
1134 { 1168 {
1135 PrecacheFetcher precache_fetcher(request_context_.get(), GURL(), 1169 PrecacheFetcher precache_fetcher(
1136 std::string(), std::move(unfinished_work), 1170 request_context_.get(), GURL(), std::string(),
1137 kExperimentID, &precache_delegate_); 1171 std::move(unfinished_work), kExperimentID,
1172 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
1138 precache_fetcher.Start(); 1173 precache_fetcher.Start();
1139 1174
1140 loop_.RunUntilIdle(); 1175 base::RunLoop().RunUntilIdle();
1141 } 1176 }
1142 1177
1143 // The config and manifest are fetched, but not the invalid resource URL. 1178 // The config and manifest are fetched, but not the invalid resource URL.
1144 EXPECT_EQ(2UL, url_callback_.requested_urls().size()); 1179 EXPECT_EQ(2UL, url_callback_.requested_urls().size());
1145 1180
1146 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1181 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1147 1182
1148 // bad-manifest.com will have been completed. 1183 // bad-manifest.com will have been completed.
1149 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"), 1184 EXPECT_THAT(histogram.GetAllSamples("Precache.Fetch.PercentCompleted"),
1150 ElementsAre(base::Bucket(100, 1))); 1185 ElementsAre(base::Bucket(100, 1)));
1151 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 1186 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
1152 } 1187 }
1153 1188
1154 } // namespace precache 1189 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698