mtp_device_object_enumerator.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 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// MTPDeviceObjectEnumerator implementation. 6 7#include "chrome/browser/media_galleries/win/mtp_device_object_enumerator.h" 8 9#include "base/threading/thread_restrictions.h" 10#include "content/public/browser/browser_thread.h" 11 12namespace chrome { 13 14MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 15 const MTPDeviceObjectEntries& entries) 16 : object_entries_(entries), 17 index_(0U), 18 is_index_ready_(false) { 19 base::ThreadRestrictions::AssertIOAllowed(); 20} 21 22MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 23 DCHECK(thread_checker_.CalledOnValidThread()); 24} 25 26base::FilePath MTPDeviceObjectEnumerator::Next() { 27 DCHECK(thread_checker_.CalledOnValidThread()); 28 if (IsIndexReadyAndInRange()) 29 ++index_; // Normal traversal. 30 else if (!is_index_ready_) 31 is_index_ready_ = true; // First time calling Next(). 32 33 if (!HasMoreEntries()) 34 return base::FilePath(); 35 return base::FilePath(object_entries_[index_].name); 36} 37 38int64 MTPDeviceObjectEnumerator::Size() { 39 DCHECK(thread_checker_.CalledOnValidThread()); 40 if (!IsIndexReadyAndInRange()) 41 return 0; 42 return object_entries_[index_].size; 43} 44 45bool MTPDeviceObjectEnumerator::IsDirectory() { 46 DCHECK(thread_checker_.CalledOnValidThread()); 47 if (!IsIndexReadyAndInRange()) 48 return false; 49 return object_entries_[index_].is_directory; 50} 51 52base::Time MTPDeviceObjectEnumerator::LastModifiedTime() { 53 DCHECK(thread_checker_.CalledOnValidThread()); 54 if (!IsIndexReadyAndInRange()) 55 return base::Time(); 56 return object_entries_[index_].last_modified_time; 57} 58 59string16 MTPDeviceObjectEnumerator::GetObjectId() const { 60 DCHECK(thread_checker_.CalledOnValidThread()); 61 if (!IsIndexReadyAndInRange()) 62 return string16(); 63 return object_entries_[index_].object_id; 64} 65 66bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 67 return index_ < object_entries_.size(); 68} 69 70bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 71 return is_index_ready_ && HasMoreEntries(); 72} 73 74} // namespace chrome 75