| Index: device/media_transfer_protocol/media_transfer_protocol_manager.cc
|
| diff --git a/device/media_transfer_protocol/media_transfer_protocol_manager.cc b/device/media_transfer_protocol/media_transfer_protocol_manager.cc
|
| index cde9e5363244a6234addbf86dcfa9f4cd89bddac..fb59588be516b54c95a9bdcce21fa83f481cdb71 100644
|
| --- a/device/media_transfer_protocol/media_transfer_protocol_manager.cc
|
| +++ b/device/media_transfer_protocol/media_transfer_protocol_manager.cc
|
| @@ -223,6 +223,25 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
|
| weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| + void CopyFileFromLocal(const std::string& storage_handle,
|
| + const int source_file_descriptor,
|
| + const uint32 parent_id,
|
| + const std::string& file_name,
|
| + const CopyFileFromLocalCallback& callback) override {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (!ContainsKey(handles_, storage_handle) || !mtp_client_) {
|
| + callback.Run(true /* error */);
|
| + return;
|
| + }
|
| + copy_file_from_local_callbacks_.push(callback);
|
| + mtp_client_->CopyFileFromLocal(
|
| + storage_handle, source_file_descriptor, parent_id, file_name,
|
| + base::Bind(&MediaTransferProtocolManagerImpl::OnCopyFileFromLocal,
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + base::Bind(&MediaTransferProtocolManagerImpl::OnCopyFileFromLocalError,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| private:
|
| // Map of storage names to storage info.
|
| typedef std::map<std::string, MtpStorageInfo> StorageInfoMap;
|
| @@ -235,6 +254,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
|
| typedef std::queue<ReadDirectoryCallback> ReadDirectoryCallbackQueue;
|
| typedef std::queue<ReadFileCallback> ReadFileCallbackQueue;
|
| typedef std::queue<GetFileInfoCallback> GetFileInfoCallbackQueue;
|
| + typedef std::queue<CopyFileFromLocalCallback> CopyFileFromLocalCallbackQueue;
|
|
|
| void OnStorageAttached(const std::string& storage_name) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -451,6 +471,18 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
|
| get_file_info_callbacks_.pop();
|
| }
|
|
|
| + void OnCopyFileFromLocal() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + copy_file_from_local_callbacks_.front().Run(false /* no error */);
|
| + copy_file_from_local_callbacks_.pop();
|
| + }
|
| +
|
| + void OnCopyFileFromLocalError() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + copy_file_from_local_callbacks_.front().Run(true /* error */);
|
| + copy_file_from_local_callbacks_.pop();
|
| + }
|
| +
|
| // Get the Bus object used to communicate with mtpd.
|
| dbus::Bus* GetBus() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| @@ -532,6 +564,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
|
| ReadDirectoryCallbackQueue read_directory_callbacks_;
|
| ReadFileCallbackQueue read_file_callbacks_;
|
| GetFileInfoCallbackQueue get_file_info_callbacks_;
|
| + CopyFileFromLocalCallbackQueue copy_file_from_local_callbacks_;
|
|
|
| base::ThreadChecker thread_checker_;
|
|
|
|
|