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 12 namespace chrome { 13 14 MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 15 const MTPDeviceObjectEntries& entries) 16 : object_entries_(entries), 17 index_(0U), 18 is_index_ready_(false) { 19 base::ThreadRestrictions::AssertIOAllowed(); 20 } 21 22 MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 23 DCHECK(thread_checker_.CalledOnValidThread()); 24 } 25 26 base::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 38 int64 MTPDeviceObjectEnumerator::Size() { 39 DCHECK(thread_checker_.CalledOnValidThread()); 40 if (!IsIndexReadyAndInRange()) 41 return 0; 42 return object_entries_[index_].size; 43 } 44 45 bool MTPDeviceObjectEnumerator::IsDirectory() { 46 DCHECK(thread_checker_.CalledOnValidThread()); 47 if (!IsIndexReadyAndInRange()) 48 return false; 49 return object_entries_[index_].is_directory; 50 } 51 52 base::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 59 string16 MTPDeviceObjectEnumerator::GetObjectId() const { 60 DCHECK(thread_checker_.CalledOnValidThread()); 61 if (!IsIndexReadyAndInRange()) 62 return string16(); 63 return object_entries_[index_].object_id; 64 } 65 66 bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 67 return index_ < object_entries_.size(); 68 } 69 70 bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 71 return is_index_ready_ && HasMoreEntries(); 72 } 73 74 } // namespace chrome 75