Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/file_manager/fileapi_util.h" | 5 #include "chrome/browser/chromeos/file_manager/fileapi_util.h" |
| 6 | 6 |
| 7 #include "base/files/file.h" | 7 #include "base/files/file.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "chrome/browser/chromeos/drive/file_system_util.h" | 9 #include "chrome/browser/chromeos/drive/file_system_util.h" |
| 10 #include "chrome/browser/extensions/extension_util.h" | 10 #include "chrome/browser/extensions/extension_util.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 // Converts the element under the iterator to an entry. First, converts | 64 // Converts the element under the iterator to an entry. First, converts |
| 65 // the virtual path to an URL, and calls OnResolvedURL(). In case of error | 65 // the virtual path to an URL, and calls OnResolvedURL(). In case of error |
| 66 // calls OnIteratorConverted with an error entry definition. | 66 // calls OnIteratorConverted with an error entry definition. |
| 67 void ConvertNextIterator(scoped_ptr<FileDefinitionListConverter> self_deleter, | 67 void ConvertNextIterator(scoped_ptr<FileDefinitionListConverter> self_deleter, |
| 68 FileDefinitionList::const_iterator iterator); | 68 FileDefinitionList::const_iterator iterator); |
| 69 | 69 |
| 70 // Creates an entry definition from the URL as well as the file definition. | 70 // Creates an entry definition from the URL as well as the file definition. |
| 71 // Then, calls OnIteratorConverted with the created entry definition. | 71 // Then, calls OnIteratorConverted with the created entry definition. |
| 72 void OnResolvedURL(scoped_ptr<FileDefinitionListConverter> self_deleter, | 72 void OnResolvedURL(scoped_ptr<FileDefinitionListConverter> self_deleter, |
| 73 FileDefinitionList::const_iterator iterator, | 73 FileDefinitionList::const_iterator iterator, |
| 74 const GURL& root_url, | 74 base::File::Error error, |
| 75 const std::string& name, | 75 const fileapi::FileSystemInfo& info, |
| 76 base::File::Error error); | 76 const base::FilePath& file_path, |
| 77 bool is_directory); | |
| 77 | 78 |
| 78 // Called when the iterator is converted. Adds the |entry_definition| to | 79 // Called when the iterator is converted. Adds the |entry_definition| to |
| 79 // |results_| and calls ConvertNextIterator() for the next element. | 80 // |results_| and calls ConvertNextIterator() for the next element. |
| 80 void OnIteratorConverted(scoped_ptr<FileDefinitionListConverter> self_deleter, | 81 void OnIteratorConverted(scoped_ptr<FileDefinitionListConverter> self_deleter, |
| 81 FileDefinitionList::const_iterator iterator, | 82 FileDefinitionList::const_iterator iterator, |
| 82 const EntryDefinition& entry_definition); | 83 const EntryDefinition& entry_definition); |
| 83 | 84 |
| 84 scoped_refptr<fileapi::FileSystemContext> file_system_context_; | 85 scoped_refptr<fileapi::FileSystemContext> file_system_context_; |
| 85 const std::string extension_id_; | 86 const std::string extension_id_; |
| 86 const FileDefinitionList file_definition_list_; | 87 const FileDefinitionList file_definition_list_; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 133 } | 134 } |
| 134 | 135 |
| 135 fileapi::ExternalFileSystemBackend* backend = | 136 fileapi::ExternalFileSystemBackend* backend = |
| 136 file_system_context_->external_backend(); | 137 file_system_context_->external_backend(); |
| 137 if (!backend) { | 138 if (!backend) { |
| 138 OnIteratorConverted(self_deleter.Pass(), | 139 OnIteratorConverted(self_deleter.Pass(), |
| 139 iterator, | 140 iterator, |
| 140 CreateEntryDefinitionWithError( | 141 CreateEntryDefinitionWithError( |
| 141 base::File::FILE_ERROR_INVALID_OPERATION)); | 142 base::File::FILE_ERROR_INVALID_OPERATION)); |
| 142 return; | 143 return; |
| 143 } | 144 } |
|
kinuko
2014/04/18 07:35:02
Looks like this code will no longer be necessary
kinaba
2014/04/21 04:51:41
Done.
| |
| 144 | 145 |
| 145 fileapi::FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( | 146 fileapi::FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( |
| 146 extensions::Extension::GetBaseURLFromExtensionId(extension_id_), | 147 extensions::Extension::GetBaseURLFromExtensionId(extension_id_), |
| 147 fileapi::kFileSystemTypeExternal, | 148 fileapi::kFileSystemTypeExternal, |
| 148 iterator->virtual_path); | 149 iterator->virtual_path); |
| 149 DCHECK(url.is_valid()); | 150 DCHECK(url.is_valid()); |
| 150 | 151 |
| 151 // The converter object will be deleted if the callback is not called because | 152 // The converter object will be deleted if the callback is not called because |
| 152 // of shutdown during ResolveURL(). | 153 // of shutdown during ResolveURL(). |
| 153 // | 154 file_system_context_->ResolveURL( |
| 154 // TODO(mtomasz, nhiroki): Call FileSystemContext::ResolveURL() directly, | |
| 155 // after removing redundant thread restrictions in there. | |
| 156 backend->ResolveURL( | |
| 157 url, | 155 url, |
| 158 // Not sandboxed file systems are not creatable via ResolveURL(). | |
| 159 fileapi::OPEN_FILE_SYSTEM_FAIL_IF_NONEXISTENT, | |
| 160 base::Bind(&FileDefinitionListConverter::OnResolvedURL, | 156 base::Bind(&FileDefinitionListConverter::OnResolvedURL, |
| 161 base::Unretained(this), | 157 base::Unretained(this), |
| 162 base::Passed(&self_deleter), | 158 base::Passed(&self_deleter), |
| 163 iterator)); | 159 iterator)); |
| 164 } | 160 } |
| 165 | 161 |
| 166 void FileDefinitionListConverter::OnResolvedURL( | 162 void FileDefinitionListConverter::OnResolvedURL( |
| 167 scoped_ptr<FileDefinitionListConverter> self_deleter, | 163 scoped_ptr<FileDefinitionListConverter> self_deleter, |
| 168 FileDefinitionList::const_iterator iterator, | 164 FileDefinitionList::const_iterator iterator, |
| 169 const GURL& root_url, | 165 base::File::Error error, |
| 170 const std::string& name, | 166 const fileapi::FileSystemInfo& info, |
| 171 base::File::Error error) { | 167 const base::FilePath& file_path, |
| 168 bool is_directory) { | |
| 172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 169 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 173 | 170 |
| 174 EntryDefinition entry_definition; | 171 EntryDefinition entry_definition; |
| 175 entry_definition.file_system_root_url = root_url.spec(); | 172 entry_definition.file_system_root_url = info.root_url.spec(); |
| 176 entry_definition.file_system_name = name; | 173 entry_definition.file_system_name = info.name; |
| 177 entry_definition.is_directory = iterator->is_directory; | 174 entry_definition.is_directory = is_directory; |
| 178 entry_definition.error = error; | 175 entry_definition.error = error; |
| 179 | 176 |
| 180 // Construct a target Entry.fullPath value from the virtual path and the | 177 // Construct a target Entry.fullPath value from the virtual path and the |
| 181 // root URL. Eg. Downloads/A/b.txt -> A/b.txt. | 178 // root URL. Eg. Downloads/A/b.txt -> A/b.txt. |
| 182 const base::FilePath root_virtual_path = | 179 const base::FilePath root_virtual_path = |
| 183 file_system_context_->CrackURL(root_url).virtual_path(); | 180 file_system_context_->CrackURL(info.root_url).virtual_path(); |
| 184 DCHECK(root_virtual_path == iterator->virtual_path || | 181 DCHECK(root_virtual_path == iterator->virtual_path || |
| 185 root_virtual_path.IsParent(iterator->virtual_path)); | 182 root_virtual_path.IsParent(iterator->virtual_path)); |
|
mtomasz
2014/04/18 07:00:11
FYI, this fails in tests.
| |
| 186 base::FilePath full_path; | 183 base::FilePath full_path; |
| 187 root_virtual_path.AppendRelativePath(iterator->virtual_path, &full_path); | 184 root_virtual_path.AppendRelativePath(iterator->virtual_path, &full_path); |
| 188 entry_definition.full_path = full_path; | 185 entry_definition.full_path = full_path; |
| 189 | 186 |
| 190 OnIteratorConverted(self_deleter.Pass(), iterator, entry_definition); | 187 OnIteratorConverted(self_deleter.Pass(), iterator, entry_definition); |
| 191 } | 188 } |
| 192 | 189 |
| 193 void FileDefinitionListConverter::OnIteratorConverted( | 190 void FileDefinitionListConverter::OnIteratorConverted( |
| 194 scoped_ptr<FileDefinitionListConverter> self_deleter, | 191 scoped_ptr<FileDefinitionListConverter> self_deleter, |
| 195 FileDefinitionList::const_iterator iterator, | 192 FileDefinitionList::const_iterator iterator, |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 319 file_definition_list.push_back(file_definition); | 316 file_definition_list.push_back(file_definition); |
| 320 ConvertFileDefinitionListToEntryDefinitionList( | 317 ConvertFileDefinitionListToEntryDefinitionList( |
| 321 profile, | 318 profile, |
| 322 extension_id, | 319 extension_id, |
| 323 file_definition_list, | 320 file_definition_list, |
| 324 base::Bind(&OnConvertFileDefinitionDone, callback)); | 321 base::Bind(&OnConvertFileDefinitionDone, callback)); |
| 325 } | 322 } |
| 326 | 323 |
| 327 } // namespace util | 324 } // namespace util |
| 328 } // namespace file_manager | 325 } // namespace file_manager |
| OLD | NEW |