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/linux/snapshot_file_details.h" 6 7 #include "base/numerics/safe_conversions.h" 8 9 //////////////////////////////////////////////////////////////////////////////// 10 // SnapshotRequestInfo // 11 //////////////////////////////////////////////////////////////////////////////// 12 13 SnapshotRequestInfo::SnapshotRequestInfo( 14 uint32 file_id, 15 const base::FilePath& snapshot_file_path, 16 const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback& 17 success_callback, 18 const MTPDeviceAsyncDelegate::ErrorCallback& error_callback) 19 : file_id(file_id), 20 snapshot_file_path(snapshot_file_path), 21 success_callback(success_callback), 22 error_callback(error_callback) { 23 } 24 25 SnapshotRequestInfo::~SnapshotRequestInfo() { 26 } 27 28 //////////////////////////////////////////////////////////////////////////////// 29 // SnapshotFileDetails // 30 //////////////////////////////////////////////////////////////////////////////// 31 32 SnapshotFileDetails::SnapshotFileDetails( 33 const SnapshotRequestInfo& request_info, 34 const base::File::Info& file_info) 35 : request_info_(request_info), 36 file_info_(file_info), 37 bytes_written_(0), 38 error_occurred_(false) { 39 } 40 41 SnapshotFileDetails::~SnapshotFileDetails() { 42 } 43 44 void SnapshotFileDetails::set_error_occurred(bool error) { 45 error_occurred_ = error; 46 } 47 48 bool SnapshotFileDetails::AddBytesWritten(uint32 bytes_written) { 49 if ((bytes_written == 0) || 50 (bytes_written_ > kuint32max - bytes_written) || 51 (bytes_written_ + bytes_written > file_info_.size)) 52 return false; 53 54 bytes_written_ += bytes_written; 55 return true; 56 } 57 58 bool SnapshotFileDetails::IsSnapshotFileWriteComplete() const { 59 return !error_occurred_ && (bytes_written_ == file_info_.size); 60 } 61 62 uint32 SnapshotFileDetails::BytesToRead() const { 63 // Read data in 1MB chunks. 64 static const uint32 kReadChunkSize = 1024 * 1024; 65 return std::min( 66 kReadChunkSize, 67 base::checked_cast<uint32>(file_info_.size) - bytes_written_); 68 } 69