| Index: chrome/browser/local_discovery/storage/privet_filesystem_operations.cc
|
| diff --git a/chrome/browser/local_discovery/storage/privet_filesystem_operations.cc b/chrome/browser/local_discovery/storage/privet_filesystem_operations.cc
|
| index aa84d25cc9d5fae550cda19d9a36160d0e2112da..4eb8ffab1d94cf783154b62cd0022dbce34c4a3f 100644
|
| --- a/chrome/browser/local_discovery/storage/privet_filesystem_operations.cc
|
| +++ b/chrome/browser/local_discovery/storage/privet_filesystem_operations.cc
|
| @@ -243,6 +243,19 @@ void PrivetFileSystemOperationFactory::CreateDirectory(
|
| operation->Start();
|
| }
|
|
|
| +void PrivetFileSystemOperationFactory::CopyInForeignFile(
|
| + base::FilePath src_file_path,
|
| + const fileapi::FileSystemURL& dest_url,
|
| + const fileapi::AsyncFileUtil::StatusCallback& callback) {
|
| + TemporaryServiceDiscoveryClient();
|
| +
|
| + PrivetFileSystemAsyncOperation* operation =
|
| + new PrivetFileSystemUploadOperation(
|
| + dest_url.path(), src_file_path, browser_context_, this, callback);
|
| + async_operations_.insert(operation);
|
| + operation->Start();
|
| +}
|
| +
|
| void PrivetFileSystemOperationFactory::RemoveOperation(
|
| PrivetFileSystemAsyncOperation* operation) {
|
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| @@ -811,4 +824,70 @@ void PrivetFileSystemStatusOperation::TriggerCallbackAndDestroy(
|
| container_->RemoveOperation(this);
|
| }
|
|
|
| +PrivetFileSystemUploadOperation::PrivetFileSystemUploadOperation(
|
| + const base::FilePath& full_path,
|
| + const base::FilePath& upload_path,
|
| + content::BrowserContext* browser_context,
|
| + PrivetFileSystemAsyncOperationContainer* container,
|
| + const fileapi::AsyncFileUtil::StatusCallback& callback)
|
| + : core_(full_path, browser_context, this),
|
| + full_path_(full_path),
|
| + upload_path_(upload_path),
|
| + container_(container),
|
| + callback_(callback) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| +}
|
| +
|
| +PrivetFileSystemUploadOperation::~PrivetFileSystemUploadOperation() {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| +}
|
| +
|
| +void PrivetFileSystemUploadOperation::Start() {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + core_.Start();
|
| +}
|
| +
|
| +void PrivetFileSystemUploadOperation::PrivetFileSystemResolved(
|
| + PrivetHTTPClient* http_client,
|
| + const std::string& path) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + if (!http_client) {
|
| + SignalError();
|
| + return;
|
| + }
|
| +
|
| + overwrite_operation_ = http_client->CreateStorageOverwriteOperation(
|
| + path,
|
| + base::Bind(&PrivetFileSystemUploadOperation::OnStorageOverwriteResult,
|
| + base::Unretained(this)));
|
| + overwrite_operation_->SetUploadFile(upload_path_);
|
| + overwrite_operation_->Start();
|
| +}
|
| +
|
| +void PrivetFileSystemUploadOperation::OnStorageOverwriteResult(
|
| + PrivetDataReadOperation::ResponseType result_type,
|
| + const std::string& data,
|
| + const base::FilePath& file) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| +
|
| + if (result_type == PrivetDataReadOperation::RESPONSE_TYPE_ERROR) {
|
| + SignalError();
|
| + } else {
|
| + TriggerCallbackAndDestroy(base::File::FILE_OK);
|
| + }
|
| +}
|
| +
|
| +void PrivetFileSystemUploadOperation::SignalError() {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + TriggerCallbackAndDestroy(base::File::FILE_ERROR_FAILED);
|
| +}
|
| +
|
| +void PrivetFileSystemUploadOperation::TriggerCallbackAndDestroy(
|
| + base::File::Error result) {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::IO, FROM_HERE, base::Bind(callback_, result));
|
| + container_->RemoveOperation(this);
|
| +}
|
| +
|
| } // namespace local_discovery
|
|
|