| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" | 5 #include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file.h" | 8 #include "base/files/file.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 if (path.empty()) { | 71 if (path.empty()) { |
| 72 ReadDirectoryAfterCacheUpdate(path, callback); | 72 ReadDirectoryAfterCacheUpdate(path, callback); |
| 73 return; | 73 return; |
| 74 } | 74 } |
| 75 UpdateDirectoryCacheUpTo( | 75 UpdateDirectoryCacheUpTo( |
| 76 StripBaseName(path), | 76 StripBaseName(path), |
| 77 base::Bind(&ArcDocumentsProviderRoot::ReadDirectoryAfterCacheUpdate, | 77 base::Bind(&ArcDocumentsProviderRoot::ReadDirectoryAfterCacheUpdate, |
| 78 weak_ptr_factory_.GetWeakPtr(), path, callback)); | 78 weak_ptr_factory_.GetWeakPtr(), path, callback)); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void ArcDocumentsProviderRoot::ResolveToContentUrl( |
| 82 const base::FilePath& path, |
| 83 const ResolveToContentUrlCallback& callback) { |
| 84 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 85 // Skip a cache update if possible. |
| 86 ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); |
| 87 if (entry) { |
| 88 ResolveToContentUrlAfterCacheUpdate(path, callback); |
| 89 return; |
| 90 } |
| 91 UpdateDirectoryCacheUpTo( |
| 92 path, |
| 93 base::Bind(&ArcDocumentsProviderRoot::ResolveToContentUrlAfterCacheUpdate, |
| 94 weak_ptr_factory_.GetWeakPtr(), path, callback)); |
| 95 } |
| 96 |
| 81 void ArcDocumentsProviderRoot::GetFileInfoAfterCacheUpdate( | 97 void ArcDocumentsProviderRoot::GetFileInfoAfterCacheUpdate( |
| 82 const base::FilePath& path, | 98 const base::FilePath& path, |
| 83 const GetFileInfoCallback& callback) { | 99 const GetFileInfoCallback& callback) { |
| 84 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 100 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 85 ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); | 101 ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); |
| 86 if (!entry) { | 102 if (!entry) { |
| 87 callback.Run(base::File::FILE_ERROR_NOT_FOUND, base::File::Info()); | 103 callback.Run(base::File::FILE_ERROR_NOT_FOUND, base::File::Info()); |
| 88 return; | 104 return; |
| 89 } | 105 } |
| 90 file_system_instance_util::GetDocumentOnIOThread( | 106 file_system_instance_util::GetDocumentOnIOThread( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 | 166 |
| 151 std::vector<storage::DirectoryEntry> entry_list; | 167 std::vector<storage::DirectoryEntry> entry_list; |
| 152 for (const auto& pair : parent_directory->children()) { | 168 for (const auto& pair : parent_directory->children()) { |
| 153 entry_list.emplace_back(pair.first, pair.second->is_directory() | 169 entry_list.emplace_back(pair.first, pair.second->is_directory() |
| 154 ? storage::DirectoryEntry::DIRECTORY | 170 ? storage::DirectoryEntry::DIRECTORY |
| 155 : storage::DirectoryEntry::FILE); | 171 : storage::DirectoryEntry::FILE); |
| 156 } | 172 } |
| 157 callback.Run(base::File::FILE_OK, entry_list, false /* has_more */); | 173 callback.Run(base::File::FILE_OK, entry_list, false /* has_more */); |
| 158 } | 174 } |
| 159 | 175 |
| 176 void ArcDocumentsProviderRoot::ResolveToContentUrlAfterCacheUpdate( |
| 177 const base::FilePath& path, |
| 178 const ResolveToContentUrlCallback& callback) { |
| 179 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 180 ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); |
| 181 if (!entry) { |
| 182 callback.Run(GURL()); |
| 183 return; |
| 184 } |
| 185 callback.Run(BuildDocumentUrl(authority_, entry->document_id())); |
| 186 } |
| 187 |
| 160 void ArcDocumentsProviderRoot::UpdateDirectoryCacheUpTo( | 188 void ArcDocumentsProviderRoot::UpdateDirectoryCacheUpTo( |
| 161 const base::FilePath& path, | 189 const base::FilePath& path, |
| 162 const base::Closure& callback) { | 190 const base::Closure& callback) { |
| 163 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 191 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 164 UpdateDirectoryCacheIter(base::FilePath(), path, callback); | 192 UpdateDirectoryCacheIter(base::FilePath(), path, callback); |
| 165 } | 193 } |
| 166 | 194 |
| 167 void ArcDocumentsProviderRoot::UpdateDirectoryCacheIter( | 195 void ArcDocumentsProviderRoot::UpdateDirectoryCacheIter( |
| 168 const base::FilePath& parent_directory_path, | 196 const base::FilePath& parent_directory_path, |
| 169 const base::FilePath& remaining_path, | 197 const base::FilePath& remaining_path, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 parent_directory_path.Append(components[0]); | 246 parent_directory_path.Append(components[0]); |
| 219 base::FilePath next_remaining_path = | 247 base::FilePath next_remaining_path = |
| 220 base::FilePath::FromUTF8Unsafe(base::JoinString( | 248 base::FilePath::FromUTF8Unsafe(base::JoinString( |
| 221 Components(components.begin() + 1, components.end()), "/")); | 249 Components(components.begin() + 1, components.end()), "/")); |
| 222 | 250 |
| 223 UpdateDirectoryCacheIter(next_parent_directory_path, next_remaining_path, | 251 UpdateDirectoryCacheIter(next_parent_directory_path, next_remaining_path, |
| 224 callback); | 252 callback); |
| 225 } | 253 } |
| 226 | 254 |
| 227 } // namespace arc | 255 } // namespace arc |
| OLD | NEW |