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

Side by Side Diff: chrome/browser/predictors/resource_prefetcher.cc

Issue 2293153002: Remove stl_util's STLDeleteContainerPairFirstPointers. (Closed)
Patch Set: fixing Created 4 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/predictors/resource_prefetcher.h" 5 #include "chrome/browser/predictors/resource_prefetcher.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/stl_util.h"
11 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
12 #include "net/base/io_buffer.h" 11 #include "net/base/io_buffer.h"
13 #include "net/base/load_flags.h" 12 #include "net/base/load_flags.h"
14 #include "net/base/request_priority.h" 13 #include "net/base/request_priority.h"
15 #include "net/url_request/url_request_context.h" 14 #include "net/url_request/url_request_context.h"
16 #include "url/origin.h" 15 #include "url/origin.h"
17 16
18 namespace { 17 namespace {
19 18
20 // The size of the buffer used to read the resource. 19 // The size of the buffer used to read the resource.
(...skipping 27 matching lines...) Expand all
48 navigation_id_(navigation_id), 47 navigation_id_(navigation_id),
49 key_type_(key_type), 48 key_type_(key_type),
50 request_vector_(std::move(requests)) { 49 request_vector_(std::move(requests)) {
51 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 50 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
52 DCHECK(request_vector_.get()); 51 DCHECK(request_vector_.get());
53 52
54 std::copy(request_vector_->begin(), request_vector_->end(), 53 std::copy(request_vector_->begin(), request_vector_->end(),
55 std::back_inserter(request_queue_)); 54 std::back_inserter(request_queue_));
56 } 55 }
57 56
58 ResourcePrefetcher::~ResourcePrefetcher() { 57 ResourcePrefetcher::~ResourcePrefetcher() {}
59 // Delete any pending net::URLRequests.
60 base::STLDeleteContainerPairFirstPointers(inflight_requests_.begin(),
61 inflight_requests_.end());
62 }
63 58
64 void ResourcePrefetcher::Start() { 59 void ResourcePrefetcher::Start() {
65 DCHECK(thread_checker_.CalledOnValidThread()); 60 DCHECK(thread_checker_.CalledOnValidThread());
66 61
67 CHECK_EQ(state_, INITIALIZED); 62 CHECK_EQ(state_, INITIALIZED);
68 state_ = RUNNING; 63 state_ = RUNNING;
69 64
70 TryToLaunchPrefetchRequests(); 65 TryToLaunchPrefetchRequests();
71 } 66 }
72 67
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 } 101 }
107 request_available = request_it != request_queue_.end(); 102 request_available = request_it != request_queue_.end();
108 103
109 if (request_available) { 104 if (request_available) {
110 SendRequest(*request_it); 105 SendRequest(*request_it);
111 request_queue_.erase(request_it); 106 request_queue_.erase(request_it);
112 } 107 }
113 } 108 }
114 } 109 }
115 110
116 // If the inflight_requests_ is empty, we cant launch any more. Finish. 111 // If the inflight_requests_ is empty, we can't launch any more. Finish.
117 if (inflight_requests_.empty()) { 112 if (inflight_requests_.empty()) {
118 CHECK(host_inflight_counts_.empty()); 113 CHECK(host_inflight_counts_.empty());
119 CHECK(request_queue_.empty() || state_ == STOPPED); 114 CHECK(request_queue_.empty() || state_ == STOPPED);
120 115
121 state_ = FINISHED; 116 state_ = FINISHED;
122 delegate_->ResourcePrefetcherFinished(this, request_vector_.release()); 117 delegate_->ResourcePrefetcherFinished(this, request_vector_.release());
123 } 118 }
124 } 119 }
125 120
126 void ResourcePrefetcher::SendRequest(Request* request) { 121 void ResourcePrefetcher::SendRequest(Request* request) {
127 request->prefetch_status = Request::PREFETCH_STATUS_STARTED; 122 request->prefetch_status = Request::PREFETCH_STATUS_STARTED;
128 123
129 net::URLRequest* url_request = 124 std::unique_ptr<net::URLRequest> url_request_ptr =
130 delegate_->GetURLRequestContext()->CreateRequest( 125 delegate_->GetURLRequestContext()->CreateRequest(request->resource_url,
131 request->resource_url, net::LOW, this).release(); 126 net::LOW, this);
127 net::URLRequest* url_request = url_request_ptr.get();
132 128
133 inflight_requests_[url_request] = request; 129 inflight_requests_[url_request] = {std::move(url_request_ptr), request};
134 host_inflight_counts_[url_request->original_url().host()] += 1; 130 host_inflight_counts_[url_request->original_url().host()] += 1;
135 131
136 url_request->set_method("GET"); 132 url_request->set_method("GET");
137 url_request->set_first_party_for_cookies(navigation_id_.main_frame_url); 133 url_request->set_first_party_for_cookies(navigation_id_.main_frame_url);
138 url_request->set_initiator(url::Origin(navigation_id_.main_frame_url)); 134 url_request->set_initiator(url::Origin(navigation_id_.main_frame_url));
139 url_request->SetReferrer(navigation_id_.main_frame_url.spec()); 135 url_request->SetReferrer(navigation_id_.main_frame_url.spec());
140 url_request->SetLoadFlags(url_request->load_flags() | net::LOAD_PREFETCH); 136 url_request->SetLoadFlags(url_request->load_flags() | net::LOAD_PREFETCH);
141 StartURLRequest(url_request); 137 StartURLRequest(url_request);
142 } 138 }
143 139
144 void ResourcePrefetcher::StartURLRequest(net::URLRequest* request) { 140 void ResourcePrefetcher::StartURLRequest(net::URLRequest* request) {
145 request->Start(); 141 request->Start();
146 } 142 }
147 143
148 void ResourcePrefetcher::FinishRequest(net::URLRequest* request, 144 void ResourcePrefetcher::FinishRequest(net::URLRequest* request,
149 Request::PrefetchStatus status) { 145 Request::PrefetchStatus status) {
150 std::map<net::URLRequest*, Request*>::iterator request_it = 146 auto request_it = inflight_requests_.find(request);
151 inflight_requests_.find(request);
152 CHECK(request_it != inflight_requests_.end()); 147 CHECK(request_it != inflight_requests_.end());
153 148
154 const std::string host = request->original_url().host(); 149 const std::string host = request->original_url().host();
155 std::map<std::string, size_t>::iterator host_it = host_inflight_counts_.find( 150 std::map<std::string, size_t>::iterator host_it = host_inflight_counts_.find(
156 host); 151 host);
157 CHECK_GT(host_it->second, 0U); 152 CHECK_GT(host_it->second, 0U);
158 host_it->second -= 1; 153 host_it->second -= 1;
159 if (host_it->second == 0) 154 if (host_it->second == 0)
160 host_inflight_counts_.erase(host); 155 host_inflight_counts_.erase(host);
161 156
162 request_it->second->prefetch_status = status; 157 request_it->second.second->prefetch_status = status;
163 inflight_requests_.erase(request_it); 158 inflight_requests_.erase(request_it);
164 159
165 delete request;
166
167 TryToLaunchPrefetchRequests(); 160 TryToLaunchPrefetchRequests();
168 } 161 }
169 162
170 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) { 163 void ResourcePrefetcher::ReadFullResponse(net::URLRequest* request) {
171 bool status = true; 164 bool status = true;
172 while (status) { 165 while (status) {
173 int bytes_read = 0; 166 int bytes_read = 0;
174 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer( 167 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(
175 kResourceBufferSizeBytes)); 168 kResourceBufferSizeBytes));
176 status = request->Read(buffer.get(), kResourceBufferSizeBytes, &bytes_read); 169 status = request->Read(buffer.get(), kResourceBufferSizeBytes, &bytes_read);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 if (!request->status().is_success()) { 229 if (!request->status().is_success()) {
237 FinishRequest(request, Request::PREFETCH_STATUS_FAILED); 230 FinishRequest(request, Request::PREFETCH_STATUS_FAILED);
238 return; 231 return;
239 } 232 }
240 233
241 if (ShouldContinueReadingRequest(request, bytes_read)) 234 if (ShouldContinueReadingRequest(request, bytes_read))
242 ReadFullResponse(request); 235 ReadFullResponse(request);
243 } 236 }
244 237
245 } // namespace predictors 238 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698