Home | History | Annotate | Download | only in win
      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