Index: chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc |
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc |
index 87cd8b468a6bbee5625dbac532e12596cd8922d3..91443f6441e5e3fdba1acfeace607466a8bea476 100644 |
--- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc |
+++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc |
@@ -78,6 +78,22 @@ void ArcDocumentsProviderRoot::ReadDirectory( |
weak_ptr_factory_.GetWeakPtr(), path, callback)); |
} |
+void ArcDocumentsProviderRoot::ResolveToContentUrl( |
+ const base::FilePath& path, |
+ const ResolveToContentUrlCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ // Skip a cache update if possible. |
+ ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); |
+ if (entry) { |
+ ResolveToContentUrlAfterCacheUpdate(path, callback); |
+ return; |
+ } |
+ UpdateDirectoryCacheUpTo( |
+ path, |
+ base::Bind(&ArcDocumentsProviderRoot::ResolveToContentUrlAfterCacheUpdate, |
+ weak_ptr_factory_.GetWeakPtr(), path, callback)); |
+} |
+ |
void ArcDocumentsProviderRoot::GetFileInfoAfterCacheUpdate( |
const base::FilePath& path, |
const GetFileInfoCallback& callback) { |
@@ -157,6 +173,18 @@ void ArcDocumentsProviderRoot::ReadDirectoryWithChildDocuments( |
callback.Run(base::File::FILE_OK, entry_list, false /* has_more */); |
} |
+void ArcDocumentsProviderRoot::ResolveToContentUrlAfterCacheUpdate( |
+ const base::FilePath& path, |
+ const ResolveToContentUrlCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
+ ArcDocumentsProviderDocument* entry = root_directory_->Lookup(path); |
+ if (!entry) { |
+ callback.Run(GURL()); |
+ return; |
+ } |
+ callback.Run(BuildDocumentUrl(authority_, entry->document_id())); |
+} |
+ |
void ArcDocumentsProviderRoot::UpdateDirectoryCacheUpTo( |
const base::FilePath& path, |
const base::Closure& callback) { |