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