OLD | NEW |
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/chromeos/gdata/gdata_protocol_handler.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_protocol_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 system_service->docs_service()->operation_registry()->CancelForFilePath( | 120 system_service->docs_service()->operation_registry()->CancelForFilePath( |
121 gdata_file_path); | 121 gdata_file_path); |
122 } | 122 } |
123 | 123 |
124 // GDataURLRequesetJob is the gateway between network-level drive://... | 124 // GDataURLRequesetJob is the gateway between network-level drive://... |
125 // requests for gdata resources and GDataFileSytem. It exposes content URLs | 125 // requests for gdata resources and GDataFileSytem. It exposes content URLs |
126 // formatted as drive://<resource-id>. | 126 // formatted as drive://<resource-id>. |
127 class GDataURLRequestJob : public net::URLRequestJob { | 127 class GDataURLRequestJob : public net::URLRequestJob { |
128 public: | 128 public: |
129 explicit GDataURLRequestJob(net::URLRequest* request); | 129 explicit GDataURLRequestJob(net::URLRequest* request); |
130 virtual ~GDataURLRequestJob(); | |
131 | 130 |
132 // net::URLRequestJob overrides: | 131 // net::URLRequestJob overrides: |
133 virtual void Start() OVERRIDE; | 132 virtual void Start() OVERRIDE; |
134 virtual void Kill() OVERRIDE; | 133 virtual void Kill() OVERRIDE; |
135 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; | 134 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; |
136 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE; | 135 virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE; |
137 virtual int GetResponseCode() const OVERRIDE; | 136 virtual int GetResponseCode() const OVERRIDE; |
138 virtual bool ReadRawData(net::IOBuffer* buf, | 137 virtual bool ReadRawData(net::IOBuffer* buf, |
139 int buf_size, | 138 int buf_size, |
140 int* bytes_read) OVERRIDE; | 139 int* bytes_read) OVERRIDE; |
141 | 140 |
| 141 protected: |
| 142 virtual ~GDataURLRequestJob(); |
| 143 |
142 private: | 144 private: |
143 // Helper for Start() to let us start asynchronously. | 145 // Helper for Start() to let us start asynchronously. |
144 void StartAsync(GDataFileSystem** file_system); | 146 void StartAsync(GDataFileSystem** file_system); |
145 | 147 |
146 // Helper methods for Delegate::OnUrlFetchDownloadData and ReadRawData to | 148 // Helper methods for Delegate::OnUrlFetchDownloadData and ReadRawData to |
147 // receive download data and copy to response buffer. | 149 // receive download data and copy to response buffer. |
148 // For detailed description of logic, refer to comments in definitions of | 150 // For detailed description of logic, refer to comments in definitions of |
149 // Start() and ReadRawData(). | 151 // Start() and ReadRawData(). |
150 | 152 |
151 void OnUrlFetchDownloadData(GDataErrorCode error, | 153 void OnUrlFetchDownloadData(GDataErrorCode error, |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 headers_set_(false), | 228 headers_set_(false), |
227 initial_file_size_(0), | 229 initial_file_size_(0), |
228 remaining_bytes_(0), | 230 remaining_bytes_(0), |
229 streaming_download_(false), | 231 streaming_download_(false), |
230 download_growable_buf_(new net::GrowableIOBuffer) { | 232 download_growable_buf_(new net::GrowableIOBuffer) { |
231 download_growable_buf_->SetCapacity(kInitialDownloadBufferSizeInBytes); | 233 download_growable_buf_->SetCapacity(kInitialDownloadBufferSizeInBytes); |
232 download_drainable_buf_ = new net::DrainableIOBuffer( | 234 download_drainable_buf_ = new net::DrainableIOBuffer( |
233 download_growable_buf_, download_growable_buf_->capacity()); | 235 download_growable_buf_, download_growable_buf_->capacity()); |
234 } | 236 } |
235 | 237 |
236 GDataURLRequestJob::~GDataURLRequestJob() { | |
237 CloseFileStream(); | |
238 } | |
239 | |
240 void GDataURLRequestJob::Start() { | 238 void GDataURLRequestJob::Start() { |
241 DVLOG(1) << "Starting request"; | 239 DVLOG(1) << "Starting request"; |
242 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 240 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
243 | 241 |
244 // As per pattern shared by most net::URLRequestJob implementations, we start | 242 // As per pattern shared by most net::URLRequestJob implementations, we start |
245 // asynchronously. | 243 // asynchronously. |
246 | 244 |
247 // Here is how Start and its helper methods work: | 245 // Here is how Start and its helper methods work: |
248 // 1) Post task to UI thread to get file system. | 246 // 1) Post task to UI thread to get file system. |
249 // Note: should we not post task to get file system later, start request | 247 // Note: should we not post task to get file system later, start request |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 DVLOG(1) << "ReadRawData: out with " | 452 DVLOG(1) << "ReadRawData: out with " |
455 << (rc ? "has" : "no") | 453 << (rc ? "has" : "no") |
456 << "_data, bytes_read=" << *bytes_read | 454 << "_data, bytes_read=" << *bytes_read |
457 << ", buf_remaining=" | 455 << ", buf_remaining=" |
458 << (read_buf_ ? read_buf_->BytesRemaining() : 0) | 456 << (read_buf_ ? read_buf_->BytesRemaining() : 0) |
459 << ", " << (streaming_download_ ? "download" : "file") | 457 << ", " << (streaming_download_ ? "download" : "file") |
460 << "_remaining=" << remaining_bytes_; | 458 << "_remaining=" << remaining_bytes_; |
461 return rc; | 459 return rc; |
462 } | 460 } |
463 | 461 |
| 462 //======================= GDataURLRequestJob protected methods ================ |
| 463 |
| 464 GDataURLRequestJob::~GDataURLRequestJob() { |
| 465 CloseFileStream(); |
| 466 } |
| 467 |
464 //======================= GDataURLRequestJob private methods =================== | 468 //======================= GDataURLRequestJob private methods =================== |
465 | 469 |
466 void GDataURLRequestJob::StartAsync(GDataFileSystem** file_system) { | 470 void GDataURLRequestJob::StartAsync(GDataFileSystem** file_system) { |
467 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 471 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
468 | 472 |
469 file_system_ = *file_system; | 473 file_system_ = *file_system; |
470 | 474 |
471 if (!request_ || !file_system_) { | 475 if (!request_ || !file_system_) { |
472 LOG(WARNING) << "Failed to start request: null " | 476 LOG(WARNING) << "Failed to start request: null " |
473 << (!request_ ? "request" : "file system"); | 477 << (!request_ ? "request" : "file system"); |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 GDataProtocolHandler::~GDataProtocolHandler() { | 924 GDataProtocolHandler::~GDataProtocolHandler() { |
921 } | 925 } |
922 | 926 |
923 net::URLRequestJob* GDataProtocolHandler::MaybeCreateJob( | 927 net::URLRequestJob* GDataProtocolHandler::MaybeCreateJob( |
924 net::URLRequest* request) const { | 928 net::URLRequest* request) const { |
925 DVLOG(1) << "Handling url: " << request->url().spec(); | 929 DVLOG(1) << "Handling url: " << request->url().spec(); |
926 return new GDataURLRequestJob(request); | 930 return new GDataURLRequestJob(request); |
927 } | 931 } |
928 | 932 |
929 } // namespace gdata | 933 } // namespace gdata |
OLD | NEW |