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

Side by Side Diff: chrome/browser/dom_ui/chrome_url_data_manager.cc

Issue 10941: Add mimetypes on the "chrome-resource://" responses.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month 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/dom_ui/chrome_url_data_manager.h ('k') | chrome/browser/dom_ui/new_tab_ui.h » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/dom_ui/chrome_url_data_manager.h" 5 #include "chrome/browser/dom_ui/chrome_url_data_manager.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 // URLRequestJob implementation. 45 // URLRequestJob implementation.
46 virtual void Start(); 46 virtual void Start();
47 virtual void Kill(); 47 virtual void Kill();
48 virtual bool ReadRawData(char* buf, int buf_size, int *bytes_read); 48 virtual bool ReadRawData(char* buf, int buf_size, int *bytes_read);
49 virtual bool GetMimeType(std::string* mime_type); 49 virtual bool GetMimeType(std::string* mime_type);
50 50
51 // Called by ChromeURLDataManager to notify us that the data blob is ready 51 // Called by ChromeURLDataManager to notify us that the data blob is ready
52 // for us. 52 // for us.
53 void DataAvailable(RefCountedBytes* bytes); 53 void DataAvailable(RefCountedBytes* bytes);
54 54
55 void SetMimeType(const std::string& mime_type) {
56 mime_type_ = mime_type;
57 }
58
55 private: 59 private:
56 // Helper for Start(), to let us start asynchronously. 60 // Helper for Start(), to let us start asynchronously.
57 // (This pattern is shared by most URLRequestJob implementations.) 61 // (This pattern is shared by most URLRequestJob implementations.)
58 void StartAsync(); 62 void StartAsync();
59 63
60 // Do the actual copy from data_ (the data we're serving) into |buf|. 64 // Do the actual copy from data_ (the data we're serving) into |buf|.
61 // Separate from ReadRawData so we can handle async I/O. 65 // Separate from ReadRawData so we can handle async I/O.
62 void CompleteRead(char* buf, int buf_size, int* bytes_read); 66 void CompleteRead(char* buf, int buf_size, int* bytes_read);
63 67
64 // The actual data we're serving. NULL until it's been fetched. 68 // The actual data we're serving. NULL until it's been fetched.
65 scoped_refptr<RefCountedBytes> data_; 69 scoped_refptr<RefCountedBytes> data_;
66 // The current offset into the data that we're handing off to our 70 // The current offset into the data that we're handing off to our
67 // callers via the Read interfaces. 71 // callers via the Read interfaces.
68 int data_offset_; 72 int data_offset_;
69 73
70 // For async reads, we keep around a pointer to the buffer that 74 // For async reads, we keep around a pointer to the buffer that
71 // we're reading into. 75 // we're reading into.
72 char* pending_buf_; 76 char* pending_buf_;
73 int pending_buf_size_; 77 int pending_buf_size_;
78 std::string mime_type_;
74 79
75 DISALLOW_EVIL_CONSTRUCTORS(URLRequestChromeJob); 80 DISALLOW_EVIL_CONSTRUCTORS(URLRequestChromeJob);
76 }; 81 };
77 82
78 // URLRequestChromeFileJob is a URLRequestJob that acts like a file:// URL 83 // URLRequestChromeFileJob is a URLRequestJob that acts like a file:// URL
79 class URLRequestChromeFileJob : public URLRequestFileJob { 84 class URLRequestChromeFileJob : public URLRequestFileJob {
80 public: 85 public:
81 URLRequestChromeFileJob(URLRequest* request, const std::wstring& path); 86 URLRequestChromeFileJob(URLRequest* request, const std::wstring& path);
82 virtual ~URLRequestChromeFileJob(); 87 virtual ~URLRequestChromeFileJob();
83 88
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 // Look up the data source for the request. 185 // Look up the data source for the request.
181 DataSourceMap::iterator i = data_sources_.find(source_name); 186 DataSourceMap::iterator i = data_sources_.find(source_name);
182 if (i == data_sources_.end()) 187 if (i == data_sources_.end())
183 return false; 188 return false;
184 DataSource* source = i->second; 189 DataSource* source = i->second;
185 190
186 // Save this request so we know where to send the data. 191 // Save this request so we know where to send the data.
187 RequestID request_id = next_request_id_++; 192 RequestID request_id = next_request_id_++;
188 pending_requests_.insert(std::make_pair(request_id, job)); 193 pending_requests_.insert(std::make_pair(request_id, job));
189 194
195 // TODO(eroman): would be nicer if the mimetype were set at the same time
196 // as the data blob. For now do it here, since NotifyHeadersComplete() is
197 // going to get called once we return.
198 job->SetMimeType(source->GetMimeType(path));
199
190 // Forward along the request to the data source. 200 // Forward along the request to the data source.
191 source->message_loop()->PostTask(FROM_HERE, 201 source->message_loop()->PostTask(FROM_HERE,
192 NewRunnableMethod(source, &DataSource::StartDataRequest, 202 NewRunnableMethod(source, &DataSource::StartDataRequest,
193 path, request_id)); 203 path, request_id));
194 return true; 204 return true;
195 } 205 }
196 206
197 void ChromeURLDataManager::RemoveRequest(URLRequestChromeJob* job) { 207 void ChromeURLDataManager::RemoveRequest(URLRequestChromeJob* job) {
198 // Remove the request from our list of pending requests. 208 // Remove the request from our list of pending requests.
199 // If/when the source sends the data that was requested, the data will just 209 // If/when the source sends the data that was requested, the data will just
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 // callbacks happen as they would for network requests. 261 // callbacks happen as they would for network requests.
252 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( 262 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod(
253 this, &URLRequestChromeJob::StartAsync)); 263 this, &URLRequestChromeJob::StartAsync));
254 } 264 }
255 265
256 void URLRequestChromeJob::Kill() { 266 void URLRequestChromeJob::Kill() {
257 chrome_url_data_manager.RemoveRequest(this); 267 chrome_url_data_manager.RemoveRequest(this);
258 } 268 }
259 269
260 bool URLRequestChromeJob::GetMimeType(std::string* mime_type) { 270 bool URLRequestChromeJob::GetMimeType(std::string* mime_type) {
261 // Rely on MIME sniffing to simplify the logic here. 271 *mime_type = mime_type_;
262 *mime_type = "text/html"; 272 return !mime_type_.empty();
263 return true;
264 } 273 }
265 274
266 void URLRequestChromeJob::DataAvailable(RefCountedBytes* bytes) { 275 void URLRequestChromeJob::DataAvailable(RefCountedBytes* bytes) {
267 if (bytes) { 276 if (bytes) {
268 // The request completed, and we have all the data. 277 // The request completed, and we have all the data.
269 // Clear any IO pending status. 278 // Clear any IO pending status.
270 SetStatus(URLRequestStatus()); 279 SetStatus(URLRequestStatus());
271 280
272 data_ = bytes; 281 data_ = bytes;
273 int bytes_read; 282 int bytes_read;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 } 329 }
321 330
322 URLRequestChromeFileJob::URLRequestChromeFileJob(URLRequest* request, 331 URLRequestChromeFileJob::URLRequestChromeFileJob(URLRequest* request,
323 const std::wstring& path) 332 const std::wstring& path)
324 : URLRequestFileJob(request) { 333 : URLRequestFileJob(request) {
325 this->file_path_ = path; // set URLRequestFileJob::file_path_ 334 this->file_path_ = path; // set URLRequestFileJob::file_path_
326 } 335 }
327 336
328 URLRequestChromeFileJob::~URLRequestChromeFileJob() { } 337 URLRequestChromeFileJob::~URLRequestChromeFileJob() { }
329 338
OLDNEW
« no previous file with comments | « chrome/browser/dom_ui/chrome_url_data_manager.h ('k') | chrome/browser/dom_ui/new_tab_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698