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