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

Side by Side Diff: chrome/browser/ui/webui/chrome_url_data_manager_backend.cc

Issue 10407066: NTP: Prevent tab sync icons from being cached. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/webui/chrome_url_data_manager_backend.h" 5 #include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 virtual bool ReadRawData(net::IOBuffer* buf, 170 virtual bool ReadRawData(net::IOBuffer* buf,
171 int buf_size, 171 int buf_size,
172 int* bytes_read) OVERRIDE; 172 int* bytes_read) OVERRIDE;
173 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; 173 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
174 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE; 174 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE;
175 175
176 // Called by ChromeURLDataManager to notify us that the data blob is ready 176 // Called by ChromeURLDataManager to notify us that the data blob is ready
177 // for us. 177 // for us.
178 void DataAvailable(base::RefCountedMemory* bytes); 178 void DataAvailable(base::RefCountedMemory* bytes);
179 179
180 void SetMimeType(const std::string& mime_type) { 180 void SetMimeType(const std::string& mime_type) {
James Hawkins 2012/05/21 15:58:50 nit: Per style-guide, these should be set_mime_typ
Patrick Dubroy 2012/05/21 16:26:28 Done.
181 mime_type_ = mime_type; 181 mime_type_ = mime_type;
182 } 182 }
183 183
184 void SetAllowCaching(bool allow_caching) {
185 allow_caching_ = allow_caching;
186 }
187
184 private: 188 private:
185 virtual ~URLRequestChromeJob(); 189 virtual ~URLRequestChromeJob();
186 190
187 // Helper for Start(), to let us start asynchronously. 191 // Helper for Start(), to let us start asynchronously.
188 // (This pattern is shared by most net::URLRequestJob implementations.) 192 // (This pattern is shared by most net::URLRequestJob implementations.)
189 void StartAsync(); 193 void StartAsync();
190 194
191 // Do the actual copy from data_ (the data we're serving) into |buf|. 195 // Do the actual copy from data_ (the data we're serving) into |buf|.
192 // Separate from ReadRawData so we can handle async I/O. 196 // Separate from ReadRawData so we can handle async I/O.
193 void CompleteRead(net::IOBuffer* buf, int buf_size, int* bytes_read); 197 void CompleteRead(net::IOBuffer* buf, int buf_size, int* bytes_read);
194 198
195 // The actual data we're serving. NULL until it's been fetched. 199 // The actual data we're serving. NULL until it's been fetched.
196 scoped_refptr<base::RefCountedMemory> data_; 200 scoped_refptr<base::RefCountedMemory> data_;
197 // The current offset into the data that we're handing off to our 201 // The current offset into the data that we're handing off to our
198 // callers via the Read interfaces. 202 // callers via the Read interfaces.
199 int data_offset_; 203 int data_offset_;
200 204
201 // For async reads, we keep around a pointer to the buffer that 205 // For async reads, we keep around a pointer to the buffer that
202 // we're reading into. 206 // we're reading into.
203 scoped_refptr<net::IOBuffer> pending_buf_; 207 scoped_refptr<net::IOBuffer> pending_buf_;
204 int pending_buf_size_; 208 int pending_buf_size_;
205 std::string mime_type_; 209 std::string mime_type_;
210 bool allow_caching_;
James Hawkins 2012/05/21 15:58:50 nit: Document member variable.
Patrick Dubroy 2012/05/21 16:26:28 Done.
206 211
207 // The backend is owned by ChromeURLRequestContext and always outlives us. 212 // The backend is owned by ChromeURLRequestContext and always outlives us.
208 ChromeURLDataManagerBackend* backend_; 213 ChromeURLDataManagerBackend* backend_;
209 214
210 base::WeakPtrFactory<URLRequestChromeJob> weak_factory_; 215 base::WeakPtrFactory<URLRequestChromeJob> weak_factory_;
211 216
212 DISALLOW_COPY_AND_ASSIGN(URLRequestChromeJob); 217 DISALLOW_COPY_AND_ASSIGN(URLRequestChromeJob);
213 }; 218 };
214 219
215 URLRequestChromeJob::URLRequestChromeJob(net::URLRequest* request, 220 URLRequestChromeJob::URLRequestChromeJob(net::URLRequest* request,
216 ChromeURLDataManagerBackend* backend) 221 ChromeURLDataManagerBackend* backend)
217 : net::URLRequestJob(request), 222 : net::URLRequestJob(request),
218 data_offset_(0), 223 data_offset_(0),
219 pending_buf_size_(0), 224 pending_buf_size_(0),
225 allow_caching_(true),
220 backend_(backend), 226 backend_(backend),
221 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 227 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
222 DCHECK(backend); 228 DCHECK(backend);
223 } 229 }
224 230
225 URLRequestChromeJob::~URLRequestChromeJob() { 231 URLRequestChromeJob::~URLRequestChromeJob() {
226 CHECK(!backend_->HasPendingJob(this)); 232 CHECK(!backend_->HasPendingJob(this));
227 } 233 }
228 234
229 void URLRequestChromeJob::Start() { 235 void URLRequestChromeJob::Start() {
(...skipping 17 matching lines...) Expand all
247 return !mime_type_.empty(); 253 return !mime_type_.empty();
248 } 254 }
249 255
250 void URLRequestChromeJob::GetResponseInfo(net::HttpResponseInfo* info) { 256 void URLRequestChromeJob::GetResponseInfo(net::HttpResponseInfo* info) {
251 DCHECK(!info->headers); 257 DCHECK(!info->headers);
252 // Set the headers so that requests serviced by ChromeURLDataManager return a 258 // Set the headers so that requests serviced by ChromeURLDataManager return a
253 // status code of 200. Without this they return a 0, which makes the status 259 // status code of 200. Without this they return a 0, which makes the status
254 // indistiguishable from other error types. Instant relies on getting a 200. 260 // indistiguishable from other error types. Instant relies on getting a 200.
255 info->headers = new net::HttpResponseHeaders("HTTP/1.1 200 OK"); 261 info->headers = new net::HttpResponseHeaders("HTTP/1.1 200 OK");
256 AddContentSecurityPolicyHeader(request_->url(), info->headers); 262 AddContentSecurityPolicyHeader(request_->url(), info->headers);
263 if (!allow_caching_)
264 info->headers->AddHeader("Cache-Control: no-cache");
257 } 265 }
258 266
259 void URLRequestChromeJob::DataAvailable(base::RefCountedMemory* bytes) { 267 void URLRequestChromeJob::DataAvailable(base::RefCountedMemory* bytes) {
260 TRACE_EVENT_ASYNC_END0("browser", "DataManager:Request", this); 268 TRACE_EVENT_ASYNC_END0("browser", "DataManager:Request", this);
261 if (bytes) { 269 if (bytes) {
262 // The request completed, and we have all the data. 270 // The request completed, and we have all the data.
263 // Clear any IO pending status. 271 // Clear any IO pending status.
264 SetStatus(net::URLRequestStatus()); 272 SetStatus(net::URLRequestStatus());
265 273
266 data_ = bytes; 274 data_ = bytes;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 ChromeURLDataManager::DataSource* source = i->second; 419 ChromeURLDataManager::DataSource* source = i->second;
412 420
413 // Save this request so we know where to send the data. 421 // Save this request so we know where to send the data.
414 RequestID request_id = next_request_id_++; 422 RequestID request_id = next_request_id_++;
415 pending_requests_.insert(std::make_pair(request_id, job)); 423 pending_requests_.insert(std::make_pair(request_id, job));
416 424
417 // TODO(eroman): would be nicer if the mimetype were set at the same time 425 // TODO(eroman): would be nicer if the mimetype were set at the same time
418 // as the data blob. For now do it here, since NotifyHeadersComplete() is 426 // as the data blob. For now do it here, since NotifyHeadersComplete() is
419 // going to get called once we return. 427 // going to get called once we return.
420 job->SetMimeType(source->GetMimeType(path)); 428 job->SetMimeType(source->GetMimeType(path));
429 job->SetAllowCaching(source->AllowCaching());
421 430
422 const ChromeURLRequestContext* context = 431 const ChromeURLRequestContext* context =
423 static_cast<const ChromeURLRequestContext*>(job->request()->context()); 432 static_cast<const ChromeURLRequestContext*>(job->request()->context());
424 433
425 // Forward along the request to the data source. 434 // Forward along the request to the data source.
426 MessageLoop* target_message_loop = source->MessageLoopForRequestPath(path); 435 MessageLoop* target_message_loop = source->MessageLoopForRequestPath(path);
427 if (!target_message_loop) { 436 if (!target_message_loop) {
428 // The DataSource is agnostic to which thread StartDataRequest is called 437 // The DataSource is agnostic to which thread StartDataRequest is called
429 // on for this path. Call directly into it from this thread, the IO 438 // on for this path. Call directly into it from this thread, the IO
430 // thread. 439 // thread.
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 564
556 return new URLRequestChromeJob(request, backend_); 565 return new URLRequestChromeJob(request, backend_);
557 } 566 }
558 567
559 } // namespace 568 } // namespace
560 569
561 net::URLRequestJobFactory::ProtocolHandler* 570 net::URLRequestJobFactory::ProtocolHandler*
562 CreateDevToolsProtocolHandler(ChromeURLDataManagerBackend* backend) { 571 CreateDevToolsProtocolHandler(ChromeURLDataManagerBackend* backend) {
563 return new DevToolsJobFactory(backend); 572 return new DevToolsJobFactory(backend);
564 } 573 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698