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_WIN_SNAPSHOT_FILE_DETAILS_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_MEDIA_GALLERIES_WIN_SNAPSHOT_FILE_DETAILS_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/scoped_comptr.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/media_galleries/fileapi/mtp_device_async_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Structure used to represent snapshot file request params. 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct SnapshotRequestInfo { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SnapshotRequestInfo( 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& device_file_path, 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& snapshot_file_path, 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback& 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) success_callback, 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const MTPDeviceAsyncDelegate::ErrorCallback& error_callback); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Device file path. 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath device_file_path; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Local platform path of the snapshot file. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath snapshot_file_path; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A callback to be called when CreateSnapshotFile() succeeds. 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) success_callback; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A callback to be called when CreateSnapshotFile() fails. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MTPDeviceAsyncDelegate::ErrorCallback error_callback; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Provides the details for the the creation of snapshot file. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SnapshotFileDetails { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit SnapshotFileDetails(const SnapshotRequestInfo& request_info); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~SnapshotFileDetails(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_file_info(const base::File::Info& file_info); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_device_file_stream(IStream* file_stream); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_optimal_transfer_size(DWORD optimal_transfer_size); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SnapshotRequestInfo request_info() const { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return request_info_; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Info file_info() const { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return file_info_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IStream* device_file_stream() const { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return file_stream_.get(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DWORD optimal_transfer_size() const { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return optimal_transfer_size_; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if the data contents of the device file is written to the 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // snapshot file. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsSnapshotFileWriteComplete() const; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds |bytes_written| to |bytes_written_|. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written| specifies the total number of bytes transferred during 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the last write operation. 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |bytes_written| is valid, returns true and adds |bytes_written| to 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written_|. 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |bytes_written| is invalid, returns false and does not add 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |bytes_written| to |bytes_written_|. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool AddBytesWritten(DWORD bytes_written); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Snapshot file request params. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SnapshotRequestInfo request_info_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Metadata of the created snapshot file. 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::File::Info file_info_; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to read the device file contents. 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::win::ScopedComPtr<IStream> file_stream_; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The number of bytes of data to read from the |file_stream| object 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // during each IStream::Read() operation. 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DWORD optimal_transfer_size_; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Total number of bytes written into the snapshot file. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DWORD bytes_written_; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CHROME_BROWSER_MEDIA_GALLERIES_WIN_SNAPSHOT_FILE_DETAILS_H_ 94