1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/media_galleries/win/snapshot_file_details.h"
6 
7 #include <stdint.h>
8 
9 #include <limits>
10 
11 ///////////////////////////////////////////////////////////////////////////////
12 //                       SnapshotRequestInfo                                 //
13 ///////////////////////////////////////////////////////////////////////////////
14 
SnapshotRequestInfo(const base::FilePath & device_file_path,const base::FilePath & snapshot_file_path,const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback & success_callback,const MTPDeviceAsyncDelegate::ErrorCallback & error_callback)15 SnapshotRequestInfo::SnapshotRequestInfo(
16     const base::FilePath& device_file_path,
17     const base::FilePath& snapshot_file_path,
18     const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
19         success_callback,
20     const MTPDeviceAsyncDelegate::ErrorCallback& error_callback)
21     : device_file_path(device_file_path),
22       snapshot_file_path(snapshot_file_path),
23       success_callback(success_callback),
24       error_callback(error_callback) {
25 }
26 
27 SnapshotRequestInfo::SnapshotRequestInfo(const SnapshotRequestInfo& other) =
28     default;
29 
~SnapshotRequestInfo()30 SnapshotRequestInfo::~SnapshotRequestInfo() {
31 }
32 
33 ///////////////////////////////////////////////////////////////////////////////
34 //                       SnapshotFileDetails                                 //
35 ///////////////////////////////////////////////////////////////////////////////
36 
SnapshotFileDetails(const SnapshotRequestInfo & request_info)37 SnapshotFileDetails::SnapshotFileDetails(
38     const SnapshotRequestInfo& request_info)
39     : request_info_(request_info),
40       optimal_transfer_size_(0),
41       bytes_written_(0) {
42 }
43 
44 SnapshotFileDetails::SnapshotFileDetails(const SnapshotFileDetails& other) =
45     default;
46 
~SnapshotFileDetails()47 SnapshotFileDetails::~SnapshotFileDetails() {
48   file_stream_.Reset();
49 }
50 
set_file_info(const base::File::Info & file_info)51 void SnapshotFileDetails::set_file_info(const base::File::Info& file_info) {
52   file_info_ = file_info;
53 }
54 
set_device_file_stream(IStream * file_stream)55 void SnapshotFileDetails::set_device_file_stream(
56     IStream* file_stream) {
57   file_stream_ = file_stream;
58 }
59 
set_optimal_transfer_size(DWORD optimal_transfer_size)60 void SnapshotFileDetails::set_optimal_transfer_size(
61     DWORD optimal_transfer_size) {
62   optimal_transfer_size_ = optimal_transfer_size;
63 }
64 
IsSnapshotFileWriteComplete() const65 bool SnapshotFileDetails::IsSnapshotFileWriteComplete() const {
66   return bytes_written_ == file_info_.size;
67 }
68 
AddBytesWritten(DWORD bytes_written)69 bool SnapshotFileDetails::AddBytesWritten(DWORD bytes_written) {
70   if ((bytes_written == 0) ||
71       (bytes_written_ > std::numeric_limits<uint64_t>::max() - bytes_written) ||
72       (bytes_written_ + bytes_written > file_info_.size))
73     return false;
74 
75   bytes_written_ += bytes_written;
76   return true;
77 }
78