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