Home | History | Annotate | Download | only in linux
      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     const std::string& device_file_path,
     15     const base::FilePath& snapshot_file_path,
     16     const MTPDeviceAsyncDelegate::CreateSnapshotFileSuccessCallback&
     17         success_callback,
     18     const MTPDeviceAsyncDelegate::ErrorCallback& error_callback)
     19     : device_file_path(device_file_path),
     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