12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// MTPDeviceObjectEnumerator implementation. 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media_galleries/win/mtp_device_object_enumerator.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/thread_restrictions.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MTPDeviceObjectEntries& entries) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : object_entries_(entries), 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) index_(0U), 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_(false) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadRestrictions::AssertIOAllowed(); 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MTPDeviceObjectEnumerator::Next() { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsIndexReadyAndInRange()) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++index_; // Normal traversal. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (!is_index_ready_) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_ = true; // First time calling Next(). 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!HasMoreEntries()) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(object_entries_[index_].name); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 MTPDeviceObjectEnumerator::Size() { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].size; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsDirectory() { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].is_directory; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time MTPDeviceObjectEnumerator::LastModifiedTime() { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::Time(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].last_modified_time; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 MTPDeviceObjectEnumerator::GetObjectId() const { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return base::string16(); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].object_id; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return index_ < object_entries_.size(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_index_ready_ && HasMoreEntries(); 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 71