| Index: chrome/browser/chromeos/drive/drive_url_request_job.cc
|
| diff --git a/chrome/browser/chromeos/drive/drive_url_request_job.cc b/chrome/browser/chromeos/drive/drive_url_request_job.cc
|
| index 6e34cf2fbf85a6030a11e6e36f3a3c23eda82182..c936c18f43e92378c338f34613f2f030b3d79add 100644
|
| --- a/chrome/browser/chromeos/drive/drive_url_request_job.cc
|
| +++ b/chrome/browser/chromeos/drive/drive_url_request_job.cc
|
| @@ -17,6 +17,7 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "chrome/browser/chromeos/drive/drive.pb.h"
|
| #include "chrome/browser/chromeos/drive/drive_file_system_interface.h"
|
| +#include "chrome/browser/chromeos/drive/drive_file_system_util.h"
|
| #include "chrome/browser/chromeos/drive/drive_system_service.h"
|
| #include "chrome/browser/google_apis/base_operations.h"
|
| #include "chrome/browser/google_apis/task_util.h"
|
| @@ -69,20 +70,6 @@ std::string FixupMimeType(const std::string& type) {
|
| return type;
|
| }
|
|
|
| -// Helper function that extracts and unescapes resource_id from drive urls
|
| -// (drive:<resource_id>).
|
| -bool ParseDriveUrl(const std::string& path, std::string* resource_id) {
|
| - const std::string drive_schema(chrome::kDriveScheme + std::string(":"));
|
| - if (!StartsWithASCII(path, drive_schema, false) ||
|
| - path.size() <= drive_schema.size()) {
|
| - return false;
|
| - }
|
| -
|
| - std::string id = path.substr(drive_schema.size());
|
| - *resource_id = net::UnescapeURLComponent(id, kUrlPathUnescapeMask);
|
| - return resource_id->size();
|
| -}
|
| -
|
| // Helper function to cancel Drive download operation on UI thread.
|
| void CancelDriveDownloadOnUIThread(
|
| const DriveURLRequestJob::DriveFileSystemGetter& file_system_getter,
|
| @@ -109,39 +96,37 @@ void CancelDriveDownload(
|
| file_system_getter, drive_file_path));
|
| }
|
|
|
| -// Helper function to call DriveFileSystem::GetEntryInfoByResourceId.
|
| -void GetEntryInfoByResourceIdOnUIThread(
|
| +// Helper function to call DriveFileSystem::GetEntryInfoByPath.
|
| +void GetEntryInfoByPathOnUIThread(
|
| const DriveURLRequestJob::DriveFileSystemGetter& file_system_getter,
|
| - const std::string& resource_id,
|
| - const drive::GetEntryInfoWithFilePathCallback& callback) {
|
| + const base::FilePath& path,
|
| + const drive::GetEntryInfoCallback& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| DriveFileSystemInterface* file_system = file_system_getter.Run();
|
| if (!file_system) {
|
| - callback.Run(DRIVE_FILE_ERROR_FAILED,
|
| - base::FilePath(),
|
| - scoped_ptr<DriveEntryProto>());
|
| + callback.Run(DRIVE_FILE_ERROR_FAILED, scoped_ptr<DriveEntryProto>());
|
| return;
|
| }
|
| - file_system->GetEntryInfoByResourceId(resource_id, callback);
|
| + file_system->GetEntryInfoByPath(path, callback);
|
| }
|
|
|
| -// Returns the entry info for the |resource_id| on DriveFileSystem returned by
|
| +// Returns the entry info for the |path| on DriveFileSystem returned by
|
| // |file_system_getter| via |callback|.
|
| // The main task will be done on UI thread, but this method itself is designed
|
| // to be run on IO thread. Also the |callback| will be run on IO thread, too.
|
| -void GetEntryInfoByResourceId(
|
| +void GetEntryInfoByPath(
|
| const DriveURLRequestJob::DriveFileSystemGetter& file_system_getter,
|
| - const std::string& resource_id,
|
| - const drive::GetEntryInfoWithFilePathCallback& callback) {
|
| + const base::FilePath& path,
|
| + const drive::GetEntryInfoCallback& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI,
|
| FROM_HERE,
|
| - base::Bind(&GetEntryInfoByResourceIdOnUIThread,
|
| + base::Bind(&GetEntryInfoByPathOnUIThread,
|
| file_system_getter,
|
| - resource_id,
|
| + path,
|
| google_apis::CreateRelayCallback(callback)));
|
| }
|
|
|
| @@ -262,19 +247,10 @@ void DriveURLRequestJob::Start() {
|
| net::ERR_METHOD_NOT_SUPPORTED));
|
| return;
|
| }
|
| -
|
| - std::string resource_id;
|
| - if (!ParseDriveUrl(request_->url().spec(), &resource_id)) {
|
| - NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
|
| - net::ERR_INVALID_URL));
|
| - return;
|
| - }
|
| -
|
| - GetEntryInfoByResourceId(
|
| - file_system_getter_,
|
| - resource_id,
|
| - base::Bind(&DriveURLRequestJob::OnGetEntryInfoByResourceId,
|
| - weak_ptr_factory_.GetWeakPtr(), resource_id));
|
| + GetEntryInfoByPath(file_system_getter_,
|
| + util::DriveURLToFilePath(request_->url()),
|
| + base::Bind(&DriveURLRequestJob::OnGetEntryInfoByPath,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| void DriveURLRequestJob::Kill() {
|
| @@ -435,32 +411,32 @@ DriveURLRequestJob::~DriveURLRequestJob() {
|
|
|
| //======================= DriveURLRequestJob private methods ===================
|
|
|
| -void DriveURLRequestJob::OnGetEntryInfoByResourceId(
|
| - const std::string& resource_id,
|
| +void DriveURLRequestJob::OnGetEntryInfoByPath(
|
| DriveFileError error,
|
| - const base::FilePath& drive_file_path,
|
| scoped_ptr<DriveEntryProto> entry_proto) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
|
|
| if (entry_proto.get() && !entry_proto->has_file_specific_info())
|
| error = DRIVE_FILE_ERROR_NOT_FOUND;
|
|
|
| - if (error == DRIVE_FILE_OK) {
|
| - DCHECK(entry_proto.get());
|
| - mime_type_ = entry_proto->file_specific_info().content_mime_type();
|
| - drive_file_path_ = drive_file_path;
|
| - initial_file_size_ = entry_proto->file_info().size();
|
| - } else {
|
| + if (error != DRIVE_FILE_OK) {
|
| mime_type_.clear();
|
| drive_file_path_.clear();
|
| initial_file_size_ = 0;
|
| + NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
|
| + net::ERR_FILE_NOT_FOUND));
|
| + return;
|
| }
|
| + DCHECK(entry_proto.get());
|
| + mime_type_ = entry_proto->file_specific_info().content_mime_type();
|
| + drive_file_path_ = util::DriveURLToFilePath(request_->url());
|
| + initial_file_size_ = entry_proto->file_info().size();
|
| remaining_bytes_ = initial_file_size_;
|
|
|
| DVLOG(1) << "Getting file for resource id";
|
| GetFileByResourceId(
|
| file_system_getter_,
|
| - resource_id,
|
| + entry_proto->resource_id(),
|
| base::Bind(&DriveURLRequestJob::OnGetFileByResourceId,
|
| weak_ptr_factory_.GetWeakPtr()),
|
| base::Bind(&DriveURLRequestJob::OnUrlFetchDownloadData,
|
|
|