mtp_device_object_enumerator.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/threading/thread_restrictions.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chrome { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::MTPDeviceObjectEnumerator( 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MTPDeviceObjectEntries& entries) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : object_entries_(entries), 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) index_(0U), 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_(false) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ThreadRestrictions::AssertIOAllowed(); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MTPDeviceObjectEnumerator::~MTPDeviceObjectEnumerator() { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath MTPDeviceObjectEnumerator::Next() { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (IsIndexReadyAndInRange()) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++index_; // Normal traversal. 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else if (!is_index_ready_) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_index_ready_ = true; // First time calling Next(). 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!HasMoreEntries()) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::FilePath(object_entries_[index_].name); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 MTPDeviceObjectEnumerator::Size() { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].size; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsDirectory() { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].is_directory; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::Time MTPDeviceObjectEnumerator::LastModifiedTime() { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::Time(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].last_modified_time; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)string16 MTPDeviceObjectEnumerator::GetObjectId() const { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(thread_checker_.CalledOnValidThread()); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!IsIndexReadyAndInRange()) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return string16(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return object_entries_[index_].object_id; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::HasMoreEntries() const { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return index_ < object_entries_.size(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool MTPDeviceObjectEnumerator::IsIndexReadyAndInRange() const { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_index_ready_ && HasMoreEntries(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chrome 75