12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_MEDIA_GALLERIES_LINUX_SNAPSHOT_FILE_DETAILS_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_LINUX_SNAPSHOT_FILE_DETAILS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/mtp_device_async_delegate.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Used to represent snapshot file request params. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct SnapshotRequestInfo { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SnapshotRequestInfo( 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint32 file_id, 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& snapshot_file_path, 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback& 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) success_callback, 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::ErrorCallback& error_callback); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SnapshotRequestInfo(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // MTP device file id. 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const uint32 file_id; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Local platform path of the snapshot file. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath snapshot_file_path; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A callback to be called when CreateSnapshotFile() succeeds. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) success_callback; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A callback to be called when CreateSnapshotFile() fails. 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::ErrorCallback error_callback; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// SnapshotFileDetails tracks the current state of the snapshot file (e.g how 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// many bytes written to the snapshot file, source file details, snapshot file 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// metadata information, etc). 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SnapshotFileDetails { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SnapshotFileDetails(const SnapshotRequestInfo& request_info, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::File::Info& file_info); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SnapshotFileDetails(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch uint32 file_id() const { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return request_info_.file_id; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath snapshot_file_path() const { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return request_info_.snapshot_file_path; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 bytes_written() const { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return bytes_written_; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::File::Info file_info() const { 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return file_info_; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) success_callback() const { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return request_info_.success_callback; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::ErrorCallback error_callback() const { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return request_info_.error_callback; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool error_occurred() const { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return error_occurred_; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_error_occurred(bool error); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds |bytes_written| to |bytes_written_|. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written| specifies the total number of bytes transferred during the 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // last write operation. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |bytes_written| is valid, returns true and adds |bytes_written| to 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written_|. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |bytes_written| is invalid, returns false and does not add 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written| to |bytes_written_|. 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool AddBytesWritten(uint32 bytes_written); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if the snapshot file is created successfully (no more write 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // operation is required to complete the snapshot file). 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsSnapshotFileWriteComplete() const; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 BytesToRead() const; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Snapshot file request params. 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SnapshotRequestInfo request_info_; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Metadata of the snapshot file (such as name, size, type, etc). 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::File::Info file_info_; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Number of bytes written into the snapshot file. 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 bytes_written_; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether an error occurred during file transfer. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool error_occurred_; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SnapshotFileDetails); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_LINUX_SNAPSHOT_FILE_DETAILS_H_ 113