Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(808)

Side by Side Diff: chrome/browser/chromeos/file_manager/fileapi_util.cc

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/chromeos/file_manager/app_id.h" 10 #include "chrome/browser/chromeos/file_manager/app_id.h"
11 #include "chrome/browser/extensions/extension_util.h" 11 #include "chrome/browser/extensions/extension_util.h"
12 #include "chrome/browser/profiles/profile.h" 12 #include "chrome/browser/profiles/profile.h"
13 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/render_view_host.h" 14 #include "content/public/browser/render_view_host.h"
15 #include "content/public/browser/site_instance.h" 15 #include "content/public/browser/site_instance.h"
16 #include "content/public/browser/storage_partition.h" 16 #include "content/public/browser/storage_partition.h"
17 #include "extensions/common/extension.h" 17 #include "extensions/common/extension.h"
18 #include "google_apis/drive/task_util.h" 18 #include "google_apis/drive/task_util.h"
19 #include "net/base/escape.h" 19 #include "net/base/escape.h"
20 #include "url/gurl.h" 20 #include "url/gurl.h"
21 #include "webkit/browser/fileapi/file_system_context.h" 21 #include "storage/browser/fileapi/file_system_context.h"
22 #include "webkit/browser/fileapi/open_file_system_mode.h" 22 #include "storage/browser/fileapi/open_file_system_mode.h"
23 #include "webkit/common/fileapi/file_system_util.h" 23 #include "storage/common/fileapi/file_system_util.h"
24 24
25 using content::BrowserThread; 25 using content::BrowserThread;
26 26
27 namespace file_manager { 27 namespace file_manager {
28 namespace util { 28 namespace util {
29 29
30 namespace { 30 namespace {
31 31
32 GURL ConvertRelativeFilePathToFileSystemUrl(const base::FilePath& relative_path, 32 GURL ConvertRelativeFilePathToFileSystemUrl(const base::FilePath& relative_path,
33 const std::string& extension_id) { 33 const std::string& extension_id) {
34 GURL base_url = fileapi::GetFileSystemRootURI( 34 GURL base_url = storage::GetFileSystemRootURI(
35 extensions::Extension::GetBaseURLFromExtensionId(extension_id), 35 extensions::Extension::GetBaseURLFromExtensionId(extension_id),
36 fileapi::kFileSystemTypeExternal); 36 storage::kFileSystemTypeExternal);
37 return GURL(base_url.spec() + 37 return GURL(base_url.spec() +
38 net::EscapeUrlEncodedData(relative_path.AsUTF8Unsafe(), 38 net::EscapeUrlEncodedData(relative_path.AsUTF8Unsafe(),
39 false)); // Space to %20 instead of +. 39 false)); // Space to %20 instead of +.
40 } 40 }
41 41
42 // Creates an ErrorDefinition with an error set to |error|. 42 // Creates an ErrorDefinition with an error set to |error|.
43 EntryDefinition CreateEntryDefinitionWithError(base::File::Error error) { 43 EntryDefinition CreateEntryDefinitionWithError(base::File::Error error) {
44 EntryDefinition result; 44 EntryDefinition result;
45 result.error = error; 45 result.error = error;
46 return result; 46 return result;
(...skipping 20 matching lines...) Expand all
67 // the virtual path to an URL, and calls OnResolvedURL(). In case of error 67 // the virtual path to an URL, and calls OnResolvedURL(). In case of error
68 // calls OnIteratorConverted with an error entry definition. 68 // calls OnIteratorConverted with an error entry definition.
69 void ConvertNextIterator(scoped_ptr<FileDefinitionListConverter> self_deleter, 69 void ConvertNextIterator(scoped_ptr<FileDefinitionListConverter> self_deleter,
70 FileDefinitionList::const_iterator iterator); 70 FileDefinitionList::const_iterator iterator);
71 71
72 // Creates an entry definition from the URL as well as the file definition. 72 // Creates an entry definition from the URL as well as the file definition.
73 // Then, calls OnIteratorConverted with the created entry definition. 73 // Then, calls OnIteratorConverted with the created entry definition.
74 void OnResolvedURL(scoped_ptr<FileDefinitionListConverter> self_deleter, 74 void OnResolvedURL(scoped_ptr<FileDefinitionListConverter> self_deleter,
75 FileDefinitionList::const_iterator iterator, 75 FileDefinitionList::const_iterator iterator,
76 base::File::Error error, 76 base::File::Error error,
77 const fileapi::FileSystemInfo& info, 77 const storage::FileSystemInfo& info,
78 const base::FilePath& file_path, 78 const base::FilePath& file_path,
79 fileapi::FileSystemContext::ResolvedEntryType type); 79 storage::FileSystemContext::ResolvedEntryType type);
80 80
81 // Called when the iterator is converted. Adds the |entry_definition| to 81 // Called when the iterator is converted. Adds the |entry_definition| to
82 // |results_| and calls ConvertNextIterator() for the next element. 82 // |results_| and calls ConvertNextIterator() for the next element.
83 void OnIteratorConverted(scoped_ptr<FileDefinitionListConverter> self_deleter, 83 void OnIteratorConverted(scoped_ptr<FileDefinitionListConverter> self_deleter,
84 FileDefinitionList::const_iterator iterator, 84 FileDefinitionList::const_iterator iterator,
85 const EntryDefinition& entry_definition); 85 const EntryDefinition& entry_definition);
86 86
87 scoped_refptr<fileapi::FileSystemContext> file_system_context_; 87 scoped_refptr<storage::FileSystemContext> file_system_context_;
88 const std::string extension_id_; 88 const std::string extension_id_;
89 const FileDefinitionList file_definition_list_; 89 const FileDefinitionList file_definition_list_;
90 const EntryDefinitionListCallback callback_; 90 const EntryDefinitionListCallback callback_;
91 scoped_ptr<EntryDefinitionList> result_; 91 scoped_ptr<EntryDefinitionList> result_;
92 }; 92 };
93 93
94 FileDefinitionListConverter::FileDefinitionListConverter( 94 FileDefinitionListConverter::FileDefinitionListConverter(
95 Profile* profile, 95 Profile* profile,
96 const std::string& extension_id, 96 const std::string& extension_id,
97 const FileDefinitionList& file_definition_list, 97 const FileDefinitionList& file_definition_list,
(...skipping 30 matching lines...) Expand all
128 } 128 }
129 129
130 if (!file_system_context_.get()) { 130 if (!file_system_context_.get()) {
131 OnIteratorConverted(self_deleter.Pass(), 131 OnIteratorConverted(self_deleter.Pass(),
132 iterator, 132 iterator,
133 CreateEntryDefinitionWithError( 133 CreateEntryDefinitionWithError(
134 base::File::FILE_ERROR_INVALID_OPERATION)); 134 base::File::FILE_ERROR_INVALID_OPERATION));
135 return; 135 return;
136 } 136 }
137 137
138 fileapi::FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL( 138 storage::FileSystemURL url = file_system_context_->CreateCrackedFileSystemURL(
139 extensions::Extension::GetBaseURLFromExtensionId(extension_id_), 139 extensions::Extension::GetBaseURLFromExtensionId(extension_id_),
140 fileapi::kFileSystemTypeExternal, 140 storage::kFileSystemTypeExternal,
141 iterator->virtual_path); 141 iterator->virtual_path);
142 DCHECK(url.is_valid()); 142 DCHECK(url.is_valid());
143 143
144 // The converter object will be deleted if the callback is not called because 144 // The converter object will be deleted if the callback is not called because
145 // of shutdown during ResolveURL(). 145 // of shutdown during ResolveURL().
146 file_system_context_->ResolveURL( 146 file_system_context_->ResolveURL(
147 url, 147 url,
148 base::Bind(&FileDefinitionListConverter::OnResolvedURL, 148 base::Bind(&FileDefinitionListConverter::OnResolvedURL,
149 base::Unretained(this), 149 base::Unretained(this),
150 base::Passed(&self_deleter), 150 base::Passed(&self_deleter),
151 iterator)); 151 iterator));
152 } 152 }
153 153
154 void FileDefinitionListConverter::OnResolvedURL( 154 void FileDefinitionListConverter::OnResolvedURL(
155 scoped_ptr<FileDefinitionListConverter> self_deleter, 155 scoped_ptr<FileDefinitionListConverter> self_deleter,
156 FileDefinitionList::const_iterator iterator, 156 FileDefinitionList::const_iterator iterator,
157 base::File::Error error, 157 base::File::Error error,
158 const fileapi::FileSystemInfo& info, 158 const storage::FileSystemInfo& info,
159 const base::FilePath& file_path, 159 const base::FilePath& file_path,
160 fileapi::FileSystemContext::ResolvedEntryType type) { 160 storage::FileSystemContext::ResolvedEntryType type) {
161 DCHECK_CURRENTLY_ON(BrowserThread::UI); 161 DCHECK_CURRENTLY_ON(BrowserThread::UI);
162 162
163 if (error != base::File::FILE_OK) { 163 if (error != base::File::FILE_OK) {
164 OnIteratorConverted(self_deleter.Pass(), 164 OnIteratorConverted(self_deleter.Pass(),
165 iterator, 165 iterator,
166 CreateEntryDefinitionWithError(error)); 166 CreateEntryDefinitionWithError(error));
167 return; 167 return;
168 } 168 }
169 169
170 EntryDefinition entry_definition; 170 EntryDefinition entry_definition;
171 entry_definition.file_system_root_url = info.root_url.spec(); 171 entry_definition.file_system_root_url = info.root_url.spec();
172 entry_definition.file_system_name = info.name; 172 entry_definition.file_system_name = info.name;
173 switch (type) { 173 switch (type) {
174 case fileapi::FileSystemContext::RESOLVED_ENTRY_FILE: 174 case storage::FileSystemContext::RESOLVED_ENTRY_FILE:
175 entry_definition.is_directory = false; 175 entry_definition.is_directory = false;
176 break; 176 break;
177 case fileapi::FileSystemContext::RESOLVED_ENTRY_DIRECTORY: 177 case storage::FileSystemContext::RESOLVED_ENTRY_DIRECTORY:
178 entry_definition.is_directory = true; 178 entry_definition.is_directory = true;
179 break; 179 break;
180 case fileapi::FileSystemContext::RESOLVED_ENTRY_NOT_FOUND: 180 case storage::FileSystemContext::RESOLVED_ENTRY_NOT_FOUND:
181 entry_definition.is_directory = iterator->is_directory; 181 entry_definition.is_directory = iterator->is_directory;
182 break; 182 break;
183 } 183 }
184 entry_definition.error = base::File::FILE_OK; 184 entry_definition.error = base::File::FILE_OK;
185 185
186 // Construct a target Entry.fullPath value from the virtual path and the 186 // Construct a target Entry.fullPath value from the virtual path and the
187 // root URL. Eg. Downloads/A/b.txt -> A/b.txt. 187 // root URL. Eg. Downloads/A/b.txt -> A/b.txt.
188 const base::FilePath root_virtual_path = 188 const base::FilePath root_virtual_path =
189 file_system_context_->CrackURL(info.root_url).virtual_path(); 189 file_system_context_->CrackURL(info.root_url).virtual_path();
190 DCHECK(root_virtual_path == iterator->virtual_path || 190 DCHECK(root_virtual_path == iterator->virtual_path ||
(...skipping 17 matching lines...) Expand all
208 // the redundant container. 208 // the redundant container.
209 void OnConvertFileDefinitionDone( 209 void OnConvertFileDefinitionDone(
210 const EntryDefinitionCallback& callback, 210 const EntryDefinitionCallback& callback,
211 scoped_ptr<EntryDefinitionList> entry_definition_list) { 211 scoped_ptr<EntryDefinitionList> entry_definition_list) {
212 DCHECK_EQ(1u, entry_definition_list->size()); 212 DCHECK_EQ(1u, entry_definition_list->size());
213 callback.Run(entry_definition_list->at(0)); 213 callback.Run(entry_definition_list->at(0));
214 } 214 }
215 215
216 // Used to implement CheckIfDirectoryExists(). 216 // Used to implement CheckIfDirectoryExists().
217 void CheckIfDirectoryExistsOnIOThread( 217 void CheckIfDirectoryExistsOnIOThread(
218 scoped_refptr<fileapi::FileSystemContext> file_system_context, 218 scoped_refptr<storage::FileSystemContext> file_system_context,
219 const GURL& url, 219 const GURL& url,
220 const fileapi::FileSystemOperationRunner::StatusCallback& callback) { 220 const storage::FileSystemOperationRunner::StatusCallback& callback) {
221 DCHECK_CURRENTLY_ON(BrowserThread::IO); 221 DCHECK_CURRENTLY_ON(BrowserThread::IO);
222 222
223 fileapi::FileSystemURL file_system_url = file_system_context->CrackURL(url); 223 storage::FileSystemURL file_system_url = file_system_context->CrackURL(url);
224 file_system_context->operation_runner()->DirectoryExists( 224 file_system_context->operation_runner()->DirectoryExists(
225 file_system_url, callback); 225 file_system_url, callback);
226 } 226 }
227 227
228 } // namespace 228 } // namespace
229 229
230 EntryDefinition::EntryDefinition() { 230 EntryDefinition::EntryDefinition() {
231 } 231 }
232 232
233 EntryDefinition::~EntryDefinition() { 233 EntryDefinition::~EntryDefinition() {
234 } 234 }
235 235
236 fileapi::FileSystemContext* GetFileSystemContextForExtensionId( 236 storage::FileSystemContext* GetFileSystemContextForExtensionId(
237 Profile* profile, 237 Profile* profile,
238 const std::string& extension_id) { 238 const std::string& extension_id) {
239 GURL site = extensions::util::GetSiteForExtensionId(extension_id, profile); 239 GURL site = extensions::util::GetSiteForExtensionId(extension_id, profile);
240 return content::BrowserContext::GetStoragePartitionForSite(profile, site)-> 240 return content::BrowserContext::GetStoragePartitionForSite(profile, site)->
241 GetFileSystemContext(); 241 GetFileSystemContext();
242 } 242 }
243 243
244 fileapi::FileSystemContext* GetFileSystemContextForRenderViewHost( 244 storage::FileSystemContext* GetFileSystemContextForRenderViewHost(
245 Profile* profile, 245 Profile* profile,
246 content::RenderViewHost* render_view_host) { 246 content::RenderViewHost* render_view_host) {
247 content::SiteInstance* site_instance = render_view_host->GetSiteInstance(); 247 content::SiteInstance* site_instance = render_view_host->GetSiteInstance();
248 return content::BrowserContext::GetStoragePartition(profile, site_instance)-> 248 return content::BrowserContext::GetStoragePartition(profile, site_instance)->
249 GetFileSystemContext(); 249 GetFileSystemContext();
250 } 250 }
251 251
252 base::FilePath ConvertDrivePathToRelativeFileSystemPath( 252 base::FilePath ConvertDrivePathToRelativeFileSystemPath(
253 Profile* profile, 253 Profile* profile,
254 const std::string& extension_id, 254 const std::string& extension_id,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 294
295 bool ConvertAbsoluteFilePathToRelativeFileSystemPath( 295 bool ConvertAbsoluteFilePathToRelativeFileSystemPath(
296 Profile* profile, 296 Profile* profile,
297 const std::string& extension_id, 297 const std::string& extension_id,
298 const base::FilePath& absolute_path, 298 const base::FilePath& absolute_path,
299 base::FilePath* virtual_path) { 299 base::FilePath* virtual_path) {
300 // File browser APIs are meant to be used only from extension context, so the 300 // File browser APIs are meant to be used only from extension context, so the
301 // extension's site is the one in whose file system context the virtual path 301 // extension's site is the one in whose file system context the virtual path
302 // should be found. 302 // should be found.
303 GURL site = extensions::util::GetSiteForExtensionId(extension_id, profile); 303 GURL site = extensions::util::GetSiteForExtensionId(extension_id, profile);
304 fileapi::ExternalFileSystemBackend* backend = 304 storage::ExternalFileSystemBackend* backend =
305 content::BrowserContext::GetStoragePartitionForSite(profile, site)-> 305 content::BrowserContext::GetStoragePartitionForSite(profile, site)
306 GetFileSystemContext()->external_backend(); 306 ->GetFileSystemContext()
307 ->external_backend();
307 if (!backend) 308 if (!backend)
308 return false; 309 return false;
309 310
310 // Find if this file path is managed by the external backend. 311 // Find if this file path is managed by the external backend.
311 if (!backend->GetVirtualPath(absolute_path, virtual_path)) 312 if (!backend->GetVirtualPath(absolute_path, virtual_path))
312 return false; 313 return false;
313 314
314 return true; 315 return true;
315 } 316 }
316 317
(...skipping 19 matching lines...) Expand all
336 FileDefinitionList file_definition_list; 337 FileDefinitionList file_definition_list;
337 file_definition_list.push_back(file_definition); 338 file_definition_list.push_back(file_definition);
338 ConvertFileDefinitionListToEntryDefinitionList( 339 ConvertFileDefinitionListToEntryDefinitionList(
339 profile, 340 profile,
340 extension_id, 341 extension_id,
341 file_definition_list, 342 file_definition_list,
342 base::Bind(&OnConvertFileDefinitionDone, callback)); 343 base::Bind(&OnConvertFileDefinitionDone, callback));
343 } 344 }
344 345
345 void CheckIfDirectoryExists( 346 void CheckIfDirectoryExists(
346 scoped_refptr<fileapi::FileSystemContext> file_system_context, 347 scoped_refptr<storage::FileSystemContext> file_system_context,
347 const GURL& url, 348 const GURL& url,
348 const fileapi::FileSystemOperationRunner::StatusCallback& callback) { 349 const storage::FileSystemOperationRunner::StatusCallback& callback) {
349 DCHECK_CURRENTLY_ON(BrowserThread::UI); 350 DCHECK_CURRENTLY_ON(BrowserThread::UI);
350 351
351 // Check the existence of directory using file system API implementation on 352 // Check the existence of directory using file system API implementation on
352 // behalf of the file manager app. We need to grant access beforehand. 353 // behalf of the file manager app. We need to grant access beforehand.
353 fileapi::ExternalFileSystemBackend* backend = 354 storage::ExternalFileSystemBackend* backend =
354 file_system_context->external_backend(); 355 file_system_context->external_backend();
355 DCHECK(backend); 356 DCHECK(backend);
356 backend->GrantFullAccessToExtension(kFileManagerAppId); 357 backend->GrantFullAccessToExtension(kFileManagerAppId);
357 358
358 BrowserThread::PostTask( 359 BrowserThread::PostTask(
359 BrowserThread::IO, FROM_HERE, 360 BrowserThread::IO, FROM_HERE,
360 base::Bind(&CheckIfDirectoryExistsOnIOThread, 361 base::Bind(&CheckIfDirectoryExistsOnIOThread,
361 file_system_context, 362 file_system_context,
362 url, 363 url,
363 google_apis::CreateRelayCallback(callback))); 364 google_apis::CreateRelayCallback(callback)));
364 } 365 }
365 366
366 } // namespace util 367 } // namespace util
367 } // namespace file_manager 368 } // namespace file_manager
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/file_manager/fileapi_util.h ('k') | chrome/browser/chromeos/file_manager/filesystem_api_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698