Chromium Code Reviews| 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 // GDataFileSystem::GetFileByResourceId(). | 142 // GDataFileSystem::GetFileByResourceId(). |
| 143 void OnGetFileByResourceId(base::PlatformFileError error, | 143 void OnGetFileByResourceId(base::PlatformFileError error, |
| 144 const FilePath& local_file_path, | 144 const FilePath& local_file_path, |
| 145 const std::string& mime_type, | 145 const std::string& mime_type, |
| 146 GDataFileType file_type); | 146 GDataFileType file_type); |
| 147 | 147 |
| 148 // Helper callback for GetFileSizeOnBlockingPool that sets |remaining_bytes_| | 148 // Helper callback for GetFileSizeOnBlockingPool that sets |remaining_bytes_| |
| 149 // to |file_size|, and notifies result for Start(). | 149 // to |file_size|, and notifies result for Start(). |
| 150 void OnGetFileSize(int64 *file_size); | 150 void OnGetFileSize(int64 *file_size); |
| 151 | 151 |
| 152 // Helper callback for FindEntryByResourceId invoked by StartAsync. | |
| 153 void OnFindEntryByResourceId(const std::string& resource_id, | |
| 154 base::PlatformFileError error, | |
| 155 GDataEntry* entry); | |
| 156 | |
| 152 // Helper methods for ReadRawData to open file and read from its corresponding | 157 // Helper methods for ReadRawData to open file and read from its corresponding |
| 153 // stream in a streaming fashion. | 158 // stream in a streaming fashion. |
| 154 bool ContinueReadFromFile(int* bytes_read); | 159 bool ContinueReadFromFile(int* bytes_read); |
| 155 void ReadFromFile(); | 160 void ReadFromFile(); |
| 156 void ReadFileStream(int bytes_to_read); | 161 void ReadFileStream(int bytes_to_read); |
| 157 | 162 |
| 158 // Helper callback for handling async responses from FileStream::Open(). | 163 // Helper callback for handling async responses from FileStream::Open(). |
| 159 void OnFileOpen(int bytes_to_read, int open_result); | 164 void OnFileOpen(int bytes_to_read, int open_result); |
| 160 | 165 |
| 161 // Helper callback for handling async responses from FileStream::Read(). | 166 // Helper callback for handling async responses from FileStream::Read(). |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 base::Bind(&CancelGDataDownloadOnUIThread, | 318 base::Bind(&CancelGDataDownloadOnUIThread, |
| 314 gdata_file_path_)); | 319 gdata_file_path_)); |
| 315 } | 320 } |
| 316 | 321 |
| 317 net::URLRequestJob::Kill(); | 322 net::URLRequestJob::Kill(); |
| 318 weak_ptr_factory_->InvalidateWeakPtrs(); | 323 weak_ptr_factory_->InvalidateWeakPtrs(); |
| 319 } | 324 } |
| 320 | 325 |
| 321 bool GDataURLRequestJob::GetMimeType(std::string* mime_type) const { | 326 bool GDataURLRequestJob::GetMimeType(std::string* mime_type) const { |
| 322 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 323 | 328 mime_type->assign(mime_type_); |
| 324 if (!file_system_) | |
| 325 return false; | |
| 326 | |
| 327 std::string resource_id; | |
| 328 std::string unused_file_name; | |
| 329 if (!ParseDriveUrl(request_->url().spec(), &resource_id)) { | |
| 330 return false; | |
| 331 } | |
| 332 | |
| 333 GDataEntry* entry = NULL; | |
| 334 file_system_->FindEntryByResourceIdSync( | |
| 335 resource_id, base::Bind(&ReadOnlyFindEntryCallback, &entry)); | |
| 336 if (!entry || !entry->AsGDataFile()) | |
| 337 return false; | |
| 338 mime_type->assign(entry->AsGDataFile()->content_mime_type()); | |
| 339 return !mime_type->empty(); | 329 return !mime_type->empty(); |
| 340 } | 330 } |
| 341 | 331 |
| 342 void GDataURLRequestJob::GetResponseInfo(net::HttpResponseInfo* info) { | 332 void GDataURLRequestJob::GetResponseInfo(net::HttpResponseInfo* info) { |
| 343 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 333 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 344 if (response_info_.get()) | 334 if (response_info_.get()) |
| 345 *info = *response_info_; | 335 *info = *response_info_; |
| 346 } | 336 } |
| 347 | 337 |
| 348 int GDataURLRequestJob::GetResponseCode() const { | 338 int GDataURLRequestJob::GetResponseCode() const { |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 477 return; | 467 return; |
| 478 } | 468 } |
| 479 | 469 |
| 480 std::string resource_id; | 470 std::string resource_id; |
| 481 if (!ParseDriveUrl(request_->url().spec(), &resource_id)) { | 471 if (!ParseDriveUrl(request_->url().spec(), &resource_id)) { |
| 482 NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED, | 472 NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED, |
| 483 net::ERR_INVALID_URL)); | 473 net::ERR_INVALID_URL)); |
| 484 return; | 474 return; |
| 485 } | 475 } |
| 486 | 476 |
| 487 // First, check if file metadata is matching our expectations. | 477 file_system_->FindEntryByResourceId( |
| 488 GDataEntry* entry = NULL; | 478 resource_id, |
| 489 file_system_->FindEntryByResourceIdSync( | 479 base::Bind(&GDataURLRequestJob::OnFindEntryByResourceId, |
| 490 resource_id, base::Bind(&ReadOnlyFindEntryCallback, &entry)); | 480 weak_ptr_factory_->GetWeakPtr(), |
| 491 if (entry && entry->AsGDataFile()) { | 481 resource_id)); |
| 482 } | |
| 483 | |
| 484 void GDataURLRequestJob::OnFindEntryByResourceId( | |
| 485 const std::string& resource_id, | |
| 486 base::PlatformFileError error, | |
| 487 GDataEntry* entry) { | |
| 488 if (error == base::PLATFORM_FILE_OK && entry && entry->AsGDataFile()) { | |
|
achuithb
2012/06/11 21:48:41
So this is on the UI thread now? Is it safe for me
hshi1
2012/06/11 22:42:21
No, this callback is run on the caller thread. See
| |
| 492 mime_type_ = entry->AsGDataFile()->content_mime_type(); | 489 mime_type_ = entry->AsGDataFile()->content_mime_type(); |
| 493 gdata_file_path_ = entry->GetFilePath(); | 490 gdata_file_path_ = entry->GetFilePath(); |
| 494 initial_file_size_ = entry->file_info().size; | 491 initial_file_size_ = entry->file_info().size; |
| 495 } else { | 492 } else { |
| 496 mime_type_.clear(); | 493 mime_type_.clear(); |
| 497 gdata_file_path_.clear(); | 494 gdata_file_path_.clear(); |
| 498 initial_file_size_ = 0; | 495 initial_file_size_ = 0; |
| 499 } | 496 } |
| 500 remaining_bytes_ = initial_file_size_; | 497 remaining_bytes_ = initial_file_size_; |
| 501 | 498 |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 906 GDataProtocolHandler::~GDataProtocolHandler() { | 903 GDataProtocolHandler::~GDataProtocolHandler() { |
| 907 } | 904 } |
| 908 | 905 |
| 909 net::URLRequestJob* GDataProtocolHandler::MaybeCreateJob( | 906 net::URLRequestJob* GDataProtocolHandler::MaybeCreateJob( |
| 910 net::URLRequest* request) const { | 907 net::URLRequest* request) const { |
| 911 DVLOG(1) << "Handling url: " << request->url().spec(); | 908 DVLOG(1) << "Handling url: " << request->url().spec(); |
| 912 return new GDataURLRequestJob(request); | 909 return new GDataURLRequestJob(request); |
| 913 } | 910 } |
| 914 | 911 |
| 915 } // namespace gdata | 912 } // namespace gdata |
| OLD | NEW |