| OLD | NEW |
| 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 <string> | 7 #include <string> |
| 8 #include <utility> |
| 8 #include <vector> | 9 #include <vector> |
| 9 | 10 |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 12 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 13 #include "base/compiler_specific.h" | 14 #include "base/compiler_specific.h" |
| 14 #include "base/containers/hash_tables.h" | 15 #include "base/containers/hash_tables.h" |
| 15 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
| 16 #include "components/precache/core/precache_switches.h" | 17 #include "components/precache/core/precache_switches.h" |
| 17 #include "components/precache/core/proto/precache.pb.h" | 18 #include "components/precache/core/proto/precache.pb.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 } | 155 } |
| 155 | 156 |
| 156 PrecacheFetcher::Fetcher::~Fetcher() {} | 157 PrecacheFetcher::Fetcher::~Fetcher() {} |
| 157 | 158 |
| 158 void PrecacheFetcher::Fetcher::LoadFromCache() { | 159 void PrecacheFetcher::Fetcher::LoadFromCache() { |
| 159 fetch_stage_ = FetchStage::CACHE; | 160 fetch_stage_ = FetchStage::CACHE; |
| 160 url_fetcher_cache_ = URLFetcher::Create(url_, URLFetcher::GET, this); | 161 url_fetcher_cache_ = URLFetcher::Create(url_, URLFetcher::GET, this); |
| 161 url_fetcher_cache_->SetRequestContext(request_context_); | 162 url_fetcher_cache_->SetRequestContext(request_context_); |
| 162 url_fetcher_cache_->SetLoadFlags(net::LOAD_ONLY_FROM_CACHE | kNoTracking); | 163 url_fetcher_cache_->SetLoadFlags(net::LOAD_ONLY_FROM_CACHE | kNoTracking); |
| 163 scoped_ptr<URLFetcherNullWriter> null_writer(new URLFetcherNullWriter); | 164 scoped_ptr<URLFetcherNullWriter> null_writer(new URLFetcherNullWriter); |
| 164 url_fetcher_cache_->SaveResponseWithWriter(null_writer.Pass()); | 165 url_fetcher_cache_->SaveResponseWithWriter(std::move(null_writer)); |
| 165 url_fetcher_cache_->Start(); | 166 url_fetcher_cache_->Start(); |
| 166 } | 167 } |
| 167 | 168 |
| 168 void PrecacheFetcher::Fetcher::LoadFromNetwork() { | 169 void PrecacheFetcher::Fetcher::LoadFromNetwork() { |
| 169 fetch_stage_ = FetchStage::NETWORK; | 170 fetch_stage_ = FetchStage::NETWORK; |
| 170 url_fetcher_network_ = URLFetcher::Create(url_, URLFetcher::GET, this); | 171 url_fetcher_network_ = URLFetcher::Create(url_, URLFetcher::GET, this); |
| 171 url_fetcher_network_->SetRequestContext(request_context_); | 172 url_fetcher_network_->SetRequestContext(request_context_); |
| 172 if (is_resource_request_) { | 173 if (is_resource_request_) { |
| 173 // LOAD_VALIDATE_CACHE allows us to refresh Date headers for resources | 174 // LOAD_VALIDATE_CACHE allows us to refresh Date headers for resources |
| 174 // already in the cache. The Date headers are updated from 304s as well as | 175 // already in the cache. The Date headers are updated from 304s as well as |
| 175 // 200s. | 176 // 200s. |
| 176 url_fetcher_network_->SetLoadFlags(net::LOAD_VALIDATE_CACHE | kNoTracking); | 177 url_fetcher_network_->SetLoadFlags(net::LOAD_VALIDATE_CACHE | kNoTracking); |
| 177 // We don't need a copy of the response body for resource requests. The | 178 // We don't need a copy of the response body for resource requests. The |
| 178 // request is issued only to populate the browser cache. | 179 // request is issued only to populate the browser cache. |
| 179 scoped_ptr<URLFetcherNullWriter> null_writer(new URLFetcherNullWriter); | 180 scoped_ptr<URLFetcherNullWriter> null_writer(new URLFetcherNullWriter); |
| 180 url_fetcher_network_->SaveResponseWithWriter(null_writer.Pass()); | 181 url_fetcher_network_->SaveResponseWithWriter(std::move(null_writer)); |
| 181 } else { | 182 } else { |
| 182 // Config and manifest requests do not need to be revalidated. It's okay if | 183 // Config and manifest requests do not need to be revalidated. It's okay if |
| 183 // they expire from the cache minutes after we request them. | 184 // they expire from the cache minutes after we request them. |
| 184 url_fetcher_network_->SetLoadFlags(kNoTracking); | 185 url_fetcher_network_->SetLoadFlags(kNoTracking); |
| 185 } | 186 } |
| 186 url_fetcher_network_->Start(); | 187 url_fetcher_network_->Start(); |
| 187 } | 188 } |
| 188 | 189 |
| 189 void PrecacheFetcher::Fetcher::OnURLFetchComplete(const URLFetcher* source) { | 190 void PrecacheFetcher::Fetcher::OnURLFetchComplete(const URLFetcher* source) { |
| 190 if (fetch_stage_ == FetchStage::CACHE && | 191 if (fetch_stage_ == FetchStage::CACHE && |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 StartNextFetch(); | 371 StartNextFetch(); |
| 371 } | 372 } |
| 372 | 373 |
| 373 void PrecacheFetcher::OnResourceFetchComplete(const URLFetcher& source) { | 374 void PrecacheFetcher::OnResourceFetchComplete(const URLFetcher& source) { |
| 374 // The resource has already been put in the cache during the fetch process, so | 375 // The resource has already been put in the cache during the fetch process, so |
| 375 // nothing more needs to be done for the resource. | 376 // nothing more needs to be done for the resource. |
| 376 StartNextFetch(); | 377 StartNextFetch(); |
| 377 } | 378 } |
| 378 | 379 |
| 379 } // namespace precache | 380 } // namespace precache |
| OLD | NEW |