OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/extensions/api/file_system/file_system_api.h" | 5 #include "chrome/browser/extensions/api/file_system/file_system_api.h" |
6 | 6 |
7 #include "apps/app_window.h" | 7 #include "apps/app_window.h" |
8 #include "apps/app_window_registry.h" | 8 #include "apps/app_window_registry.h" |
9 #include "apps/saved_files_service.h" | 9 #include "apps/saved_files_service.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 return true; | 277 return true; |
278 } | 278 } |
279 | 279 |
280 FileSystemEntryFunction::FileSystemEntryFunction() | 280 FileSystemEntryFunction::FileSystemEntryFunction() |
281 : multiple_(false), | 281 : multiple_(false), |
282 is_directory_(false), | 282 is_directory_(false), |
283 response_(NULL) {} | 283 response_(NULL) {} |
284 | 284 |
285 void FileSystemEntryFunction::CheckWritableFiles( | 285 void FileSystemEntryFunction::CheckWritableFiles( |
286 const std::vector<base::FilePath>& paths) { | 286 const std::vector<base::FilePath>& paths) { |
287 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 287 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
288 app_file_handler_util::CheckWritableFiles( | 288 app_file_handler_util::CheckWritableFiles( |
289 paths, | 289 paths, |
290 GetProfile(), | 290 GetProfile(), |
291 is_directory_, | 291 is_directory_, |
292 base::Bind(&FileSystemEntryFunction::RegisterFileSystemsAndSendResponse, | 292 base::Bind(&FileSystemEntryFunction::RegisterFileSystemsAndSendResponse, |
293 this, | 293 this, |
294 paths), | 294 paths), |
295 base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this)); | 295 base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this)); |
296 } | 296 } |
297 | 297 |
298 void FileSystemEntryFunction::RegisterFileSystemsAndSendResponse( | 298 void FileSystemEntryFunction::RegisterFileSystemsAndSendResponse( |
299 const std::vector<base::FilePath>& paths) { | 299 const std::vector<base::FilePath>& paths) { |
300 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 300 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
301 if (!render_view_host_) | 301 if (!render_view_host_) |
302 return; | 302 return; |
303 | 303 |
304 CreateResponse(); | 304 CreateResponse(); |
305 for (std::vector<base::FilePath>::const_iterator it = paths.begin(); | 305 for (std::vector<base::FilePath>::const_iterator it = paths.begin(); |
306 it != paths.end(); ++it) { | 306 it != paths.end(); ++it) { |
307 AddEntryToResponse(*it, ""); | 307 AddEntryToResponse(*it, ""); |
308 } | 308 } |
309 SendResponse(true); | 309 SendResponse(true); |
310 } | 310 } |
(...skipping 28 matching lines...) Expand all Loading... |
339 if (id_override.empty()) | 339 if (id_override.empty()) |
340 entry->SetString("id", file_entry.id); | 340 entry->SetString("id", file_entry.id); |
341 else | 341 else |
342 entry->SetString("id", id_override); | 342 entry->SetString("id", id_override); |
343 entry->SetBoolean("isDirectory", is_directory_); | 343 entry->SetBoolean("isDirectory", is_directory_); |
344 entries->Append(entry); | 344 entries->Append(entry); |
345 } | 345 } |
346 | 346 |
347 void FileSystemEntryFunction::HandleWritableFileError( | 347 void FileSystemEntryFunction::HandleWritableFileError( |
348 const base::FilePath& error_path) { | 348 const base::FilePath& error_path) { |
349 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 349 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
350 error_ = base::StringPrintf(kWritableFileErrorFormat, | 350 error_ = base::StringPrintf(kWritableFileErrorFormat, |
351 error_path.BaseName().AsUTF8Unsafe().c_str()); | 351 error_path.BaseName().AsUTF8Unsafe().c_str()); |
352 SendResponse(false); | 352 SendResponse(false); |
353 } | 353 } |
354 | 354 |
355 bool FileSystemGetWritableEntryFunction::RunImpl() { | 355 bool FileSystemGetWritableEntryFunction::RunImpl() { |
356 std::string filesystem_name; | 356 std::string filesystem_name; |
357 std::string filesystem_path; | 357 std::string filesystem_path; |
358 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &filesystem_name)); | 358 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &filesystem_name)); |
359 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); | 359 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); |
(...skipping 16 matching lines...) Expand all Loading... |
376 base::Bind( | 376 base::Bind( |
377 &FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread, | 377 &FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread, |
378 this), | 378 this), |
379 base::Bind( | 379 base::Bind( |
380 &FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse, | 380 &FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse, |
381 this)); | 381 this)); |
382 return true; | 382 return true; |
383 } | 383 } |
384 | 384 |
385 void FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse() { | 385 void FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse() { |
386 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 386 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
387 if (is_directory_ && | 387 if (is_directory_ && |
388 !extension_->HasAPIPermission(APIPermission::kFileSystemDirectory)) { | 388 !extension_->HasAPIPermission(APIPermission::kFileSystemDirectory)) { |
389 error_ = kRequiresFileSystemDirectoryError; | 389 error_ = kRequiresFileSystemDirectoryError; |
390 SendResponse(false); | 390 SendResponse(false); |
391 } | 391 } |
392 std::vector<base::FilePath> paths; | 392 std::vector<base::FilePath> paths; |
393 paths.push_back(path_); | 393 paths.push_back(path_); |
394 CheckWritableFiles(paths); | 394 CheckWritableFiles(paths); |
395 } | 395 } |
396 | 396 |
397 void FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread() { | 397 void FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread() { |
398 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); | 398 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
399 if (base::DirectoryExists(path_)) { | 399 if (base::DirectoryExists(path_)) { |
400 is_directory_ = true; | 400 is_directory_ = true; |
401 } | 401 } |
402 } | 402 } |
403 | 403 |
404 bool FileSystemIsWritableEntryFunction::RunImpl() { | 404 bool FileSystemIsWritableEntryFunction::RunImpl() { |
405 std::string filesystem_name; | 405 std::string filesystem_name; |
406 std::string filesystem_path; | 406 std::string filesystem_path; |
407 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &filesystem_name)); | 407 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &filesystem_name)); |
408 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); | 408 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 fileapi::ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 632 fileapi::ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
633 name, | 633 name, |
634 fileapi::kFileSystemTypeNativeLocal, | 634 fileapi::kFileSystemTypeNativeLocal, |
635 fileapi::FileSystemMountOption(), | 635 fileapi::FileSystemMountOption(), |
636 path); | 636 path); |
637 } | 637 } |
638 | 638 |
639 void FileSystemChooseEntryFunction::SetInitialPathOnFileThread( | 639 void FileSystemChooseEntryFunction::SetInitialPathOnFileThread( |
640 const base::FilePath& suggested_name, | 640 const base::FilePath& suggested_name, |
641 const base::FilePath& previous_path) { | 641 const base::FilePath& previous_path) { |
642 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE)); | 642 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); |
643 if (!previous_path.empty() && base::DirectoryExists(previous_path)) { | 643 if (!previous_path.empty() && base::DirectoryExists(previous_path)) { |
644 initial_path_ = previous_path.Append(suggested_name); | 644 initial_path_ = previous_path.Append(suggested_name); |
645 } else { | 645 } else { |
646 base::FilePath documents_dir; | 646 base::FilePath documents_dir; |
647 if (PathService::Get(chrome::DIR_USER_DOCUMENTS, &documents_dir)) { | 647 if (PathService::Get(chrome::DIR_USER_DOCUMENTS, &documents_dir)) { |
648 initial_path_ = documents_dir.Append(suggested_name); | 648 initial_path_ = documents_dir.Append(suggested_name); |
649 } else { | 649 } else { |
650 initial_path_ = suggested_name; | 650 initial_path_ = suggested_name; |
651 } | 651 } |
652 } | 652 } |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 if (needs_new_entry) { | 977 if (needs_new_entry) { |
978 is_directory_ = file_entry->is_directory; | 978 is_directory_ = file_entry->is_directory; |
979 CreateResponse(); | 979 CreateResponse(); |
980 AddEntryToResponse(file_entry->path, file_entry->id); | 980 AddEntryToResponse(file_entry->path, file_entry->id); |
981 } | 981 } |
982 SendResponse(true); | 982 SendResponse(true); |
983 return true; | 983 return true; |
984 } | 984 } |
985 | 985 |
986 } // namespace extensions | 986 } // namespace extensions |
OLD | NEW |