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

Side by Side Diff: chrome/browser/chromeos/extensions/file_browser_private_api.cc

Issue 11787028: New FileSystemURL cracking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Couple of nits I noticed Created 7 years, 11 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 (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/chromeos/extensions/file_browser_private_api.h" 5 #include "chrome/browser/chromeos/extensions/file_browser_private_api.h"
6 6
7 #include <sys/stat.h> 7 #include <sys/stat.h>
8 #include <sys/statvfs.h> 8 #include <sys/statvfs.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 #include <utime.h> 10 #include <utime.h>
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 using extensions::app_file_handler_util::FindFileHandlersForMimeTypes; 87 using extensions::app_file_handler_util::FindFileHandlersForMimeTypes;
88 using chromeos::disks::DiskMountManager; 88 using chromeos::disks::DiskMountManager;
89 using content::BrowserContext; 89 using content::BrowserContext;
90 using content::BrowserThread; 90 using content::BrowserThread;
91 using content::ChildProcessSecurityPolicy; 91 using content::ChildProcessSecurityPolicy;
92 using content::SiteInstance; 92 using content::SiteInstance;
93 using content::WebContents; 93 using content::WebContents;
94 using extensions::Extension; 94 using extensions::Extension;
95 using extensions::ZipFileCreator; 95 using extensions::ZipFileCreator;
96 using file_handler_util::FileTaskExecutor; 96 using file_handler_util::FileTaskExecutor;
97 using fileapi::FileSystemURL;
97 using google_apis::InstalledApp; 98 using google_apis::InstalledApp;
98 99
99 namespace { 100 namespace {
100 101
101 // Default icon path for drive docs. 102 // Default icon path for drive docs.
102 const char kDefaultIcon[] = "images/filetype_generic.png"; 103 const char kDefaultIcon[] = "images/filetype_generic.png";
103 const int kPreferredIconSize = 16; 104 const int kPreferredIconSize = 16;
104 105
105 // Error messages. 106 // Error messages.
106 const char kFileError[] = "File error %d"; 107 const char kFileError[] = "File error %d";
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 static_cast<uint64_t>(stat.f_bfree) * stat.f_frsize; 320 static_cast<uint64_t>(stat.f_bfree) * stat.f_frsize;
320 } 321 }
321 *total_size_kb = static_cast<size_t>(total_size_in_bytes / 1024); 322 *total_size_kb = static_cast<size_t>(total_size_in_bytes / 1024);
322 *remaining_size_kb = static_cast<size_t>(remaining_size_in_bytes / 1024); 323 *remaining_size_kb = static_cast<size_t>(remaining_size_in_bytes / 1024);
323 } 324 }
324 325
325 // Given a |url|, return the virtual FilePath associated with it. If the file 326 // Given a |url|, return the virtual FilePath associated with it. If the file
326 // isn't of the type CrosMountPointProvider handles, return an empty FilePath. 327 // isn't of the type CrosMountPointProvider handles, return an empty FilePath.
327 // 328 //
328 // Virtual paths will look like "Downloads/foo/bar.txt" or "drive/foo/bar.txt". 329 // Virtual paths will look like "Downloads/foo/bar.txt" or "drive/foo/bar.txt".
329 FilePath GetVirtualPathFromURL(const GURL& url) { 330 FilePath GetVirtualPathFromURL(fileapi::FileSystemContext* context,
330 fileapi::FileSystemURL filesystem_url(url); 331 const GURL& url) {
332 fileapi::FileSystemURL filesystem_url(context->CrackURL(url));
331 if (!chromeos::CrosMountPointProvider::CanHandleURL(filesystem_url)) 333 if (!chromeos::CrosMountPointProvider::CanHandleURL(filesystem_url))
332 return FilePath(); 334 return FilePath();
333 return filesystem_url.virtual_path(); 335 return filesystem_url.virtual_path();
334 } 336 }
335 337
336 // Given a |url|, return the local FilePath associated with it. If the file 338 // Given a |url|, return the local FilePath associated with it. If the file
337 // isn't of the type CrosMountPointProvider handles, return an empty FilePath. 339 // isn't of the type CrosMountPointProvider handles, return an empty FilePath.
338 // 340 //
339 // Local paths will look like "/home/chronos/user/Downloads/foo/bar.txt" or 341 // Local paths will look like "/home/chronos/user/Downloads/foo/bar.txt" or
340 // "/special/drive/foo/bar.txt". 342 // "/special/drive/foo/bar.txt".
341 FilePath GetLocalPathFromURL(const GURL& url) { 343 FilePath GetLocalPathFromURL(fileapi::FileSystemContext* context,
342 fileapi::FileSystemURL filesystem_url(url); 344 const GURL& url) {
345 fileapi::FileSystemURL filesystem_url(context->CrackURL(url));
343 if (!chromeos::CrosMountPointProvider::CanHandleURL(filesystem_url)) 346 if (!chromeos::CrosMountPointProvider::CanHandleURL(filesystem_url))
344 return FilePath(); 347 return FilePath();
345 return filesystem_url.path(); 348 return filesystem_url.path();
346 } 349 }
347 350
348 // Make a set of unique filename suffixes out of the list of file URLs. 351 // Make a set of unique filename suffixes out of the list of file URLs.
349 std::set<std::string> GetUniqueSuffixes(base::ListValue* file_url_list) { 352 std::set<std::string> GetUniqueSuffixes(base::ListValue* file_url_list,
353 fileapi::FileSystemContext* context) {
350 std::set<std::string> suffixes; 354 std::set<std::string> suffixes;
351 for (size_t i = 0; i < file_url_list->GetSize(); ++i) { 355 for (size_t i = 0; i < file_url_list->GetSize(); ++i) {
352 std::string url; 356 std::string url_str;
353 if (!file_url_list->GetString(i, &url)) 357 if (!file_url_list->GetString(i, &url_str))
354 return std::set<std::string>(); 358 return std::set<std::string>();
355 FilePath path = GetVirtualPathFromURL(GURL(url)); 359 FileSystemURL url = context->CrackURL(GURL(url_str));
356 if (path.empty()) 360 if (!url.is_valid() || url.path().empty())
357 return std::set<std::string>(); 361 return std::set<std::string>();
358 // We'll skip empty suffixes. 362 // We'll skip empty suffixes.
359 if (!path.Extension().empty()) 363 if (!url.path().Extension().empty())
360 suffixes.insert(path.Extension()); 364 suffixes.insert(url.path().Extension());
361 } 365 }
362 return suffixes; 366 return suffixes;
363 } 367 }
364 368
365 // Make a set of unique MIME types out of the list of MIME types. 369 // Make a set of unique MIME types out of the list of MIME types.
366 std::set<std::string> GetUniqueMimeTypes(base::ListValue* mime_type_list) { 370 std::set<std::string> GetUniqueMimeTypes(base::ListValue* mime_type_list) {
367 std::set<std::string> mime_types; 371 std::set<std::string> mime_types;
368 for (size_t i = 0; i < mime_type_list->GetSize(); ++i) { 372 for (size_t i = 0; i < mime_type_list->GetSize(); ++i) {
369 std::string mime_type; 373 std::string mime_type;
370 if (!mime_type_list->GetString(i, &mime_type)) 374 if (!mime_type_list->GetString(i, &mime_type))
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 if (!entry_proto.content_url().empty()) 437 if (!entry_proto.content_url().empty())
434 property_dict->SetString("contentUrl", entry_proto.content_url()); 438 property_dict->SetString("contentUrl", entry_proto.content_url());
435 439
436 property_dict->SetBoolean("isHosted", 440 property_dict->SetBoolean("isHosted",
437 file_specific_info.is_hosted_document()); 441 file_specific_info.is_hosted_document());
438 442
439 property_dict->SetString("contentMimeType", 443 property_dict->SetString("contentMimeType",
440 file_specific_info.content_mime_type()); 444 file_specific_info.content_mime_type());
441 } 445 }
442 446
447 void GetMimeTypesForFileURLs(const std::vector<FilePath>& file_paths,
448 std::set<std::string>* mime_types) {
449 for (std::vector<FilePath>::const_iterator iter = file_paths.begin();
450 iter != file_paths.end(); ++iter) {
451 const FilePath::StringType file_extension =
452 StringToLowerASCII(iter->Extension());
453
454 // TODO(thorogood): Rearchitect this call so it can run on the File thread;
455 // GetMimeTypeFromFile requires this on Linux. Right now, we use
456 // Chrome-level knowledge only.
457 std::string mime_type;
458 if (file_extension.empty() ||
459 !net::GetWellKnownMimeTypeFromExtension(file_extension.substr(1),
460 &mime_type)) {
461 // If the file doesn't have an extension or its mime-type cannot be
462 // determined, then indicate that it has the empty mime-type. This will
463 // only be matched if the Web Intents accepts "*" or "*/*".
464 mime_types->insert("");
465 } else {
466 mime_types->insert(mime_type);
467 }
468 }
469 }
470
443 } // namespace 471 } // namespace
444 472
445 class RequestLocalFileSystemFunction::LocalFileSystemCallbackDispatcher { 473 class RequestLocalFileSystemFunction::LocalFileSystemCallbackDispatcher {
446 public: 474 public:
447 static fileapi::FileSystemContext::OpenFileSystemCallback CreateCallback( 475 static fileapi::FileSystemContext::OpenFileSystemCallback CreateCallback(
448 RequestLocalFileSystemFunction* function, 476 RequestLocalFileSystemFunction* function,
449 scoped_refptr<fileapi::FileSystemContext> file_system_context, 477 scoped_refptr<fileapi::FileSystemContext> file_system_context,
450 int child_id, 478 int child_id,
451 scoped_refptr<const Extension> extension) { 479 scoped_refptr<const Extension> extension) {
452 return base::Bind( 480 return base::Bind(
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 694
667 bool FileWatchBrowserFunctionBase::RunImpl() { 695 bool FileWatchBrowserFunctionBase::RunImpl() {
668 if (!render_view_host() || !render_view_host()->GetProcess()) 696 if (!render_view_host() || !render_view_host()->GetProcess())
669 return false; 697 return false;
670 698
671 // First param is url of a file to watch. 699 // First param is url of a file to watch.
672 std::string url; 700 std::string url;
673 if (!args_->GetString(0, &url) || url.empty()) 701 if (!args_->GetString(0, &url) || url.empty())
674 return false; 702 return false;
675 703
676 GURL file_watch_url(url); 704 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
705 scoped_refptr<fileapi::FileSystemContext> file_system_context =
706 BrowserContext::GetStoragePartition(profile(), site_instance)->
707 GetFileSystemContext();
708
709 FileSystemURL file_watch_url = file_system_context->CrackURL(GURL(url));
677 BrowserThread::PostTask( 710 BrowserThread::PostTask(
678 BrowserThread::FILE, FROM_HERE, 711 BrowserThread::FILE, FROM_HERE,
679 base::Bind( 712 base::Bind(
680 &FileWatchBrowserFunctionBase::RunFileWatchOperationOnFileThread, 713 &FileWatchBrowserFunctionBase::RunFileWatchOperationOnFileThread,
681 this, 714 this,
682 FileBrowserPrivateAPI::Get(profile_)->event_router(), 715 FileBrowserPrivateAPI::Get(profile_)->event_router(),
683 file_watch_url, 716 file_watch_url,
684 extension_id())); 717 extension_id()));
685 718
686 return true; 719 return true;
687 } 720 }
688 721
689 void FileWatchBrowserFunctionBase::RunFileWatchOperationOnFileThread( 722 void FileWatchBrowserFunctionBase::RunFileWatchOperationOnFileThread(
690 scoped_refptr<FileBrowserEventRouter> event_router, 723 scoped_refptr<FileBrowserEventRouter> event_router,
691 const GURL& file_url, const std::string& extension_id) { 724 const FileSystemURL& file_url, const std::string& extension_id) {
692 FilePath local_path = GetLocalPathFromURL(file_url); 725 FilePath local_path = file_url.path();
693 FilePath virtual_path = GetVirtualPathFromURL(file_url); 726 FilePath virtual_path = file_url.virtual_path();
694 bool result = !local_path.empty() && PerformFileWatchOperation( 727 bool result = !local_path.empty() && PerformFileWatchOperation(
695 event_router, local_path, virtual_path, extension_id); 728 event_router, local_path, virtual_path, extension_id);
696 729
697 BrowserThread::PostTask( 730 BrowserThread::PostTask(
698 BrowserThread::UI, FROM_HERE, 731 BrowserThread::UI, FROM_HERE,
699 base::Bind( 732 base::Bind(
700 &FileWatchBrowserFunctionBase::RespondOnUIThread, this, result)); 733 &FileWatchBrowserFunctionBase::RespondOnUIThread, this, result));
701 } 734 }
702 735
703 bool AddFileWatchBrowserFunction::PerformFileWatchOperation( 736 bool AddFileWatchBrowserFunction::PerformFileWatchOperation(
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 std::set<std::string> default_tasks; 901 std::set<std::string> default_tasks;
869 FindDefaultDriveTasks(file_info_list, available_tasks, &default_tasks); 902 FindDefaultDriveTasks(file_info_list, available_tasks, &default_tasks);
870 CreateDriveTasks(registry, app_info, available_tasks, default_tasks, 903 CreateDriveTasks(registry, app_info, available_tasks, default_tasks,
871 result_list, default_already_set); 904 result_list, default_already_set);
872 905
873 // We own the pointers in |app_info|, so we need to delete them. 906 // We own the pointers in |app_info|, so we need to delete them.
874 STLDeleteContainerPairSecondPointers(app_info.begin(), app_info.end()); 907 STLDeleteContainerPairSecondPointers(app_info.begin(), app_info.end());
875 return true; 908 return true;
876 } 909 }
877 910
878 static void GetMimeTypesForFileURLs(const std::vector<GURL>& file_urls,
879 std::set<std::string>* mime_types) {
880 for (std::vector<GURL>::const_iterator iter = file_urls.begin();
881 iter != file_urls.end(); ++iter) {
882 const FilePath file = FilePath(GURL(iter->spec()).ExtractFileName());
883 const FilePath::StringType file_extension =
884 StringToLowerASCII(file.Extension());
885
886 // TODO(thorogood): Rearchitect this call so it can run on the File thread;
887 // GetMimeTypeFromFile requires this on Linux. Right now, we use
888 // Chrome-level knowledge only.
889 std::string mime_type;
890 if (file_extension.empty() || !net::GetWellKnownMimeTypeFromExtension(
891 file_extension.substr(1), &mime_type)) {
892 // If the file doesn't have an extension or its mime-type cannot be
893 // determined, then indicate that it has the empty mime-type. This will
894 // only be matched if the Web Intents accepts "*" or "*/*".
895 mime_types->insert("");
896 } else {
897 mime_types->insert(mime_type);
898 }
899 }
900 }
901
902 bool GetFileTasksFileBrowserFunction::FindAppTasks( 911 bool GetFileTasksFileBrowserFunction::FindAppTasks(
903 const std::vector<GURL>& file_urls, 912 const std::vector<FilePath>& file_paths,
904 ListValue* result_list) { 913 ListValue* result_list) {
905 DCHECK(!file_urls.empty()); 914 DCHECK(!file_paths.empty());
906 ExtensionService* service = profile_->GetExtensionService(); 915 ExtensionService* service = profile_->GetExtensionService();
907 if (!service) 916 if (!service)
908 return false; 917 return false;
909 918
910 std::set<std::string> mime_types; 919 std::set<std::string> mime_types;
911 GetMimeTypesForFileURLs(file_urls, &mime_types); 920 GetMimeTypesForFileURLs(file_paths, &mime_types);
912 921
913 for (ExtensionSet::const_iterator iter = service->extensions()->begin(); 922 for (ExtensionSet::const_iterator iter = service->extensions()->begin();
914 iter != service->extensions()->end(); 923 iter != service->extensions()->end();
915 ++iter) { 924 ++iter) {
916 const Extension* extension = *iter; 925 const Extension* extension = *iter;
917 926
918 // We don't support using hosted apps to open files. 927 // We don't support using hosted apps to open files.
919 if (!extension->is_platform_app()) 928 if (!extension->is_platform_app())
920 continue; 929 continue;
921 930
(...skipping 28 matching lines...) Expand all
950 result_list->Append(task); 959 result_list->Append(task);
951 } 960 }
952 } 961 }
953 962
954 return true; 963 return true;
955 } 964 }
956 965
957 // Find Web Intent platform apps that support the View task, and add them to 966 // Find Web Intent platform apps that support the View task, and add them to
958 // the |result_list|. These will be marked as kTaskWebIntent. 967 // the |result_list|. These will be marked as kTaskWebIntent.
959 bool GetFileTasksFileBrowserFunction::FindWebIntentTasks( 968 bool GetFileTasksFileBrowserFunction::FindWebIntentTasks(
960 const std::vector<GURL>& file_urls, 969 const std::vector<FilePath>& file_paths,
961 ListValue* result_list) { 970 ListValue* result_list) {
962 DCHECK(!file_urls.empty()); 971 DCHECK(!file_paths.empty());
963 ExtensionService* service = profile_->GetExtensionService(); 972 ExtensionService* service = profile_->GetExtensionService();
964 if (!service) 973 if (!service)
965 return false; 974 return false;
966 975
967 std::set<std::string> mime_types; 976 std::set<std::string> mime_types;
968 GetMimeTypesForFileURLs(file_urls, &mime_types); 977 GetMimeTypesForFileURLs(file_paths, &mime_types);
969 978
970 for (ExtensionSet::const_iterator iter = service->extensions()->begin(); 979 for (ExtensionSet::const_iterator iter = service->extensions()->begin();
971 iter != service->extensions()->end(); 980 iter != service->extensions()->end();
972 ++iter) { 981 ++iter) {
973 const Extension* extension = *iter; 982 const Extension* extension = *iter;
974 983
975 // We don't support using hosted apps to open files. 984 // We don't support using hosted apps to open files.
976 if (!extension->is_platform_app()) 985 if (!extension->is_platform_app())
977 continue; 986 continue;
978 987
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 // Second argument is the list of mime types of each of the files in the list. 1024 // Second argument is the list of mime types of each of the files in the list.
1016 ListValue* mime_types_list = NULL; 1025 ListValue* mime_types_list = NULL;
1017 if (!args_->GetList(1, &mime_types_list)) 1026 if (!args_->GetList(1, &mime_types_list))
1018 return false; 1027 return false;
1019 1028
1020 // MIME types can either be empty, or there needs to be one for each file. 1029 // MIME types can either be empty, or there needs to be one for each file.
1021 if (mime_types_list->GetSize() != files_list->GetSize() && 1030 if (mime_types_list->GetSize() != files_list->GetSize() &&
1022 mime_types_list->GetSize() != 0) 1031 mime_types_list->GetSize() != 0)
1023 return false; 1032 return false;
1024 1033
1034 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1035 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1036 BrowserContext::GetStoragePartition(profile(), site_instance)->
1037 GetFileSystemContext();
1038
1025 // Collect all the URLs, convert them to GURLs, and crack all the urls into 1039 // Collect all the URLs, convert them to GURLs, and crack all the urls into
1026 // file paths. 1040 // file paths.
1027 FileInfoList info_list; 1041 FileInfoList info_list;
1028 std::vector<GURL> file_urls; 1042 std::vector<GURL> file_urls;
1043 std::vector<FilePath> file_paths;
1029 for (size_t i = 0; i < files_list->GetSize(); ++i) { 1044 for (size_t i = 0; i < files_list->GetSize(); ++i) {
1030 FileInfo info; 1045 FileInfo info;
1031 std::string file_url; 1046 std::string file_url_str;
1032 if (!files_list->GetString(i, &file_url)) 1047 if (!files_list->GetString(i, &file_url_str))
1033 return false; 1048 return false;
1034 info.file_url = GURL(file_url); 1049
1035 file_urls.push_back(info.file_url);
1036 if (mime_types_list->GetSize() != 0 && 1050 if (mime_types_list->GetSize() != 0 &&
1037 !mime_types_list->GetString(i, &info.mime_type)) 1051 !mime_types_list->GetString(i, &info.mime_type))
1038 return false; 1052 return false;
1039 fileapi::FileSystemURL file_system_url(info.file_url); 1053
1040 if (chromeos::CrosMountPointProvider::CanHandleURL(file_system_url)) { 1054 GURL file_url(file_url_str);
1041 info.file_path = file_system_url.path(); 1055 fileapi::FileSystemURL file_system_url(
1042 } 1056 file_system_context->CrackURL(file_url));
1057 if (!chromeos::CrosMountPointProvider::CanHandleURL(file_system_url))
1058 continue;
1059
1060 file_urls.push_back(file_url);
1061 file_paths.push_back(file_system_url.path());
1062
1063 info.file_url = file_url;
1064 info.file_path = file_system_url.path();
1043 info_list.push_back(info); 1065 info_list.push_back(info);
1044 } 1066 }
1045 1067
1046 ListValue* result_list = new ListValue(); 1068 ListValue* result_list = new ListValue();
1047 SetResult(result_list); 1069 SetResult(result_list);
1048 1070
1049 // Find the Drive apps first, because we want them to take precedence 1071 // Find the Drive apps first, because we want them to take precedence
1050 // when setting the default app. 1072 // when setting the default app.
1051 bool default_already_set = false; 1073 bool default_already_set = false;
1052 if (!FindDriveAppTasks(info_list, result_list, &default_already_set)) 1074 if (!FindDriveAppTasks(info_list, result_list, &default_already_set))
1053 return false; 1075 return false;
1054 1076
1055 // Take the union of Drive and extension tasks: Because any Drive tasks we 1077 // Take the union of Drive and extension tasks: Because any Drive tasks we
1056 // found must apply to all of the files (intersection), and because the same 1078 // found must apply to all of the files (intersection), and because the same
1057 // is true of the extensions, we simply take the union of two lists by adding 1079 // is true of the extensions, we simply take the union of two lists by adding
1058 // the extension tasks to the Drive task list. We know there aren't duplicates 1080 // the extension tasks to the Drive task list. We know there aren't duplicates
1059 // because they're entirely different kinds of tasks, but there could be both 1081 // because they're entirely different kinds of tasks, but there could be both
1060 // kinds of tasks for a file type (an image file, for instance). 1082 // kinds of tasks for a file type (an image file, for instance).
1061 std::set<const FileBrowserHandler*> common_tasks; 1083 std::set<const FileBrowserHandler*> common_tasks;
1062 std::set<const FileBrowserHandler*> default_tasks; 1084 std::set<const FileBrowserHandler*> default_tasks;
1063 if (!file_handler_util::FindCommonTasks(profile_, file_urls, &common_tasks)) 1085 if (!file_handler_util::FindCommonTasks(profile_, file_urls, &common_tasks))
1064 return false; 1086 return false;
1065 file_handler_util::FindDefaultTasks(profile_, file_urls, 1087 file_handler_util::FindDefaultTasks(profile_, file_paths,
1066 common_tasks, &default_tasks); 1088 common_tasks, &default_tasks);
1067 1089
1068 ExtensionService* service = 1090 ExtensionService* service =
1069 extensions::ExtensionSystem::Get(profile_)->extension_service(); 1091 extensions::ExtensionSystem::Get(profile_)->extension_service();
1070 for (std::set<const FileBrowserHandler*>::const_iterator iter = 1092 for (std::set<const FileBrowserHandler*>::const_iterator iter =
1071 common_tasks.begin(); 1093 common_tasks.begin();
1072 iter != common_tasks.end(); 1094 iter != common_tasks.end();
1073 ++iter) { 1095 ++iter) {
1074 const FileBrowserHandler* handler = *iter; 1096 const FileBrowserHandler* handler = *iter;
1075 const std::string extension_id = handler->extension_id(); 1097 const std::string extension_id = handler->extension_id();
(...skipping 22 matching lines...) Expand all
1098 task->SetBoolean("isDefault", false); 1120 task->SetBoolean("isDefault", false);
1099 } 1121 }
1100 1122
1101 result_list->Append(task); 1123 result_list->Append(task);
1102 } 1124 }
1103 1125
1104 // Take the union of platform app file handlers, Web Intents that platform 1126 // Take the union of platform app file handlers, Web Intents that platform
1105 // apps may accept, and all previous Drive and extension tasks. As above, we 1127 // apps may accept, and all previous Drive and extension tasks. As above, we
1106 // know there aren't duplicates because they're entirely different kinds of 1128 // know there aren't duplicates because they're entirely different kinds of
1107 // tasks. 1129 // tasks.
1108 if (!FindAppTasks(file_urls, result_list)) 1130 if (!FindAppTasks(file_paths, result_list))
1109 return false; 1131 return false;
1110 1132
1111 // TODO(benwells): remove the web intents tasks once we no longer support 1133 // TODO(benwells): remove the web intents tasks once we no longer support
1112 // them. 1134 // them.
1113 if (!FindWebIntentTasks(file_urls, result_list)) 1135 if (!FindWebIntentTasks(file_paths, result_list))
1114 return false; 1136 return false;
1115 1137
1116 if (VLOG_IS_ON(1)) { 1138 if (VLOG_IS_ON(1)) {
1117 std::string result_json; 1139 std::string result_json;
1118 base::JSONWriter::WriteWithOptions( 1140 base::JSONWriter::WriteWithOptions(
1119 result_list, 1141 result_list,
1120 base::JSONWriter::OPTIONS_DO_NOT_ESCAPE | 1142 base::JSONWriter::OPTIONS_DO_NOT_ESCAPE |
1121 base::JSONWriter::OPTIONS_PRETTY_PRINT, 1143 base::JSONWriter::OPTIONS_PRETTY_PRINT,
1122 &result_json); 1144 &result_json);
1123 VLOG(1) << "GetFileTasks result:\n" << result_json; 1145 VLOG(1) << "GetFileTasks result:\n" << result_json;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 std::string action_id; 1177 std::string action_id;
1156 if (!file_handler_util::CrackTaskID( 1178 if (!file_handler_util::CrackTaskID(
1157 task_id, &extension_id, &task_type, &action_id)) { 1179 task_id, &extension_id, &task_type, &action_id)) {
1158 LOG(WARNING) << "Invalid task " << task_id; 1180 LOG(WARNING) << "Invalid task " << task_id;
1159 return false; 1181 return false;
1160 } 1182 }
1161 1183
1162 if (!files_list->GetSize()) 1184 if (!files_list->GetSize())
1163 return true; 1185 return true;
1164 1186
1165 std::vector<GURL> file_urls; 1187 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1188 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1189 BrowserContext::GetStoragePartition(profile(), site_instance)->
1190 GetFileSystemContext();
1191
1192 std::vector<FileSystemURL> file_urls;
1166 for (size_t i = 0; i < files_list->GetSize(); i++) { 1193 for (size_t i = 0; i < files_list->GetSize(); i++) {
1167 std::string origin_file_url; 1194 std::string file_url_str;
1168 if (!files_list->GetString(i, &origin_file_url)) { 1195 if (!files_list->GetString(i, &file_url_str)) {
1169 error_ = kInvalidFileUrl; 1196 error_ = kInvalidFileUrl;
1170 return false; 1197 return false;
1171 } 1198 }
1172 file_urls.push_back(GURL(origin_file_url)); 1199 FileSystemURL url = file_system_context->CrackURL(GURL(file_url_str));
1200 if (!chromeos::CrosMountPointProvider::CanHandleURL(url)) {
1201 error_ = kInvalidFileUrl;
1202 return false;
1203 }
1204 file_urls.push_back(url);
1173 } 1205 }
1174 1206
1175 WebContents* web_contents = 1207 WebContents* web_contents =
1176 dispatcher()->delegate()->GetAssociatedWebContents(); 1208 dispatcher()->delegate()->GetAssociatedWebContents();
1177 int32 tab_id = 0; 1209 int32 tab_id = 0;
1178 if (web_contents) 1210 if (web_contents)
1179 tab_id = ExtensionTabUtil::GetTabId(web_contents); 1211 tab_id = ExtensionTabUtil::GetTabId(web_contents);
1180 1212
1181 scoped_refptr<FileTaskExecutor> executor( 1213 scoped_refptr<FileTaskExecutor> executor(
1182 FileTaskExecutor::Create(profile(), 1214 FileTaskExecutor::Create(profile(),
(...skipping 19 matching lines...) Expand all
1202 1234
1203 bool SetDefaultTaskFileBrowserFunction::RunImpl() { 1235 bool SetDefaultTaskFileBrowserFunction::RunImpl() {
1204 // First param is task id that was to the extension with setDefaultTask call. 1236 // First param is task id that was to the extension with setDefaultTask call.
1205 std::string task_id; 1237 std::string task_id;
1206 if (!args_->GetString(0, &task_id) || !task_id.size()) 1238 if (!args_->GetString(0, &task_id) || !task_id.size())
1207 return false; 1239 return false;
1208 1240
1209 base::ListValue* file_url_list; 1241 base::ListValue* file_url_list;
1210 if (!args_->GetList(1, &file_url_list)) 1242 if (!args_->GetList(1, &file_url_list))
1211 return false; 1243 return false;
1212 std::set<std::string> suffixes = GetUniqueSuffixes(file_url_list); 1244
1245 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1246 scoped_refptr<fileapi::FileSystemContext> context =
1247 BrowserContext::GetStoragePartition(profile(), site_instance)->
1248 GetFileSystemContext();
1249
1250 std::set<std::string> suffixes = GetUniqueSuffixes(file_url_list, context);
1213 1251
1214 // MIME types are an optional parameter. 1252 // MIME types are an optional parameter.
1215 base::ListValue* mime_type_list; 1253 base::ListValue* mime_type_list;
1216 std::set<std::string> mime_types; 1254 std::set<std::string> mime_types;
1217 if (args_->GetList(2, &mime_type_list) && !mime_type_list->empty()) { 1255 if (args_->GetList(2, &mime_type_list) && !mime_type_list->empty()) {
1218 if (mime_type_list->GetSize() != file_url_list->GetSize()) 1256 if (mime_type_list->GetSize() != file_url_list->GetSize())
1219 return false; 1257 return false;
1220 mime_types = GetUniqueMimeTypes(mime_type_list); 1258 mime_types = GetUniqueMimeTypes(mime_type_list);
1221 } 1259 }
1222 1260
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 net::UnescapeURLComponent(parameters[i].second, 1361 net::UnescapeURLComponent(parameters[i].second,
1324 kUnescapeRuleForQueryParameters); 1362 kUnescapeRuleForQueryParameters);
1325 local_path = FilePath::FromUTF8Unsafe(unescaped_value); 1363 local_path = FilePath::FromUTF8Unsafe(unescaped_value);
1326 break; 1364 break;
1327 } 1365 }
1328 } 1366 }
1329 } 1367 }
1330 } 1368 }
1331 1369
1332 // Extract the path from |file_url|. 1370 // Extract the path from |file_url|.
1333 fileapi::FileSystemURL url(file_url); 1371 fileapi::FileSystemURL url(file_system_context->CrackURL(file_url));
1334 if (!chromeos::CrosMountPointProvider::CanHandleURL(url)) 1372 if (!chromeos::CrosMountPointProvider::CanHandleURL(url))
1335 continue; 1373 continue;
1336 1374
1337 if (!url.path().empty()) { 1375 if (!url.path().empty()) {
1338 DVLOG(1) << "Selected: file path: " << url.path().value() 1376 DVLOG(1) << "Selected: file path: " << url.path().value()
1339 << " local path: " << local_path.value(); 1377 << " local path: " << local_path.value();
1340 selected_files.push_back( 1378 selected_files.push_back(
1341 ui::SelectedFileInfo(url.path(), local_path)); 1379 ui::SelectedFileInfo(url.path(), local_path));
1342 } 1380 }
1343 } 1381 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 return false; 1425 return false;
1388 } 1426 }
1389 1427
1390 ListValue* path_list = NULL; 1428 ListValue* path_list = NULL;
1391 args_->GetList(0, &path_list); 1429 args_->GetList(0, &path_list);
1392 DCHECK(path_list); 1430 DCHECK(path_list);
1393 1431
1394 std::string internal_task_id; 1432 std::string internal_task_id;
1395 args_->GetString(1, &internal_task_id); 1433 args_->GetString(1, &internal_task_id);
1396 1434
1435 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1436 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1437 BrowserContext::GetStoragePartition(profile(), site_instance)->
1438 GetFileSystemContext();
1439
1397 std::vector<FilePath> files; 1440 std::vector<FilePath> files;
1398 for (size_t i = 0; i < path_list->GetSize(); ++i) { 1441 for (size_t i = 0; i < path_list->GetSize(); ++i) {
1399 std::string url_as_string; 1442 std::string url_as_string;
1400 path_list->GetString(i, &url_as_string); 1443 path_list->GetString(i, &url_as_string);
1401 FilePath path = GetLocalPathFromURL(GURL(url_as_string)); 1444 FilePath path = GetLocalPathFromURL(file_system_context,
1445 GURL(url_as_string));
1402 if (path.empty()) 1446 if (path.empty())
1403 return false; 1447 return false;
1404 files.push_back(path); 1448 files.push_back(path);
1405 } 1449 }
1406 1450
1407 Browser* browser = GetCurrentBrowser(); 1451 Browser* browser = GetCurrentBrowser();
1408 bool success = browser; 1452 bool success = browser;
1409 1453
1410 if (browser) { 1454 if (browser) {
1411 for (size_t i = 0; i < files.size(); ++i) { 1455 for (size_t i = 0; i < files.size(); ++i) {
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 file_url, 1708 file_url,
1665 strtoul(timestamp.c_str(), NULL, 0))); 1709 strtoul(timestamp.c_str(), NULL, 0)));
1666 1710
1667 return true; 1711 return true;
1668 } 1712 }
1669 1713
1670 void SetLastModifiedFunction::RunOperationOnFileThread(std::string file_url, 1714 void SetLastModifiedFunction::RunOperationOnFileThread(std::string file_url,
1671 time_t timestamp) { 1715 time_t timestamp) {
1672 bool succeeded = false; 1716 bool succeeded = false;
1673 1717
1674 FilePath local_path = GetLocalPathFromURL(GURL(file_url)); 1718 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1719 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1720 BrowserContext::GetStoragePartition(profile(), site_instance)->
1721 GetFileSystemContext();
1722
1723 FilePath local_path = GetLocalPathFromURL(file_system_context,
1724 GURL(file_url));
1675 if (!local_path.empty()) { 1725 if (!local_path.empty()) {
1676 struct stat sb; 1726 struct stat sb;
1677 if (stat(local_path.value().c_str(), &sb) == 0) { 1727 if (stat(local_path.value().c_str(), &sb) == 0) {
1678 struct utimbuf times; 1728 struct utimbuf times;
1679 times.actime = sb.st_atime; 1729 times.actime = sb.st_atime;
1680 times.modtime = timestamp; 1730 times.modtime = timestamp;
1681 1731
1682 if (utime(local_path.value().c_str(), &times) == 0) 1732 if (utime(local_path.value().c_str(), &times) == 0)
1683 succeeded = true; 1733 succeeded = true;
1684 } 1734 }
(...skipping 15 matching lines...) Expand all
1700 1750
1701 bool GetSizeStatsFunction::RunImpl() { 1751 bool GetSizeStatsFunction::RunImpl() {
1702 if (args_->GetSize() != 1) { 1752 if (args_->GetSize() != 1) {
1703 return false; 1753 return false;
1704 } 1754 }
1705 1755
1706 std::string mount_url; 1756 std::string mount_url;
1707 if (!args_->GetString(0, &mount_url)) 1757 if (!args_->GetString(0, &mount_url))
1708 return false; 1758 return false;
1709 1759
1710 FilePath file_path = GetLocalPathFromURL(GURL(mount_url)); 1760 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1761 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1762 BrowserContext::GetStoragePartition(profile(), site_instance)->
1763 GetFileSystemContext();
1764
1765 FilePath file_path = GetLocalPathFromURL(file_system_context,
1766 GURL(mount_url));
1711 if (file_path.empty()) 1767 if (file_path.empty())
1712 return false; 1768 return false;
1713 1769
1714 if (file_path == drive::util::GetDriveMountPointPath()) { 1770 if (file_path == drive::util::GetDriveMountPointPath()) {
1715 drive::DriveSystemService* system_service = 1771 drive::DriveSystemService* system_service =
1716 drive::DriveSystemServiceFactory::GetForProfile(profile_); 1772 drive::DriveSystemServiceFactory::GetForProfile(profile_);
1717 // |system_service| is NULL if Drive is disabled. 1773 // |system_service| is NULL if Drive is disabled.
1718 if (!system_service) { 1774 if (!system_service) {
1719 // If stats couldn't be gotten for drive, result should be left 1775 // If stats couldn't be gotten for drive, result should be left
1720 // undefined. See comments in GetDriveAvailableSpaceCallback(). 1776 // undefined. See comments in GetDriveAvailableSpaceCallback().
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 if (args_->GetSize() != 1) { 1852 if (args_->GetSize() != 1) {
1797 return false; 1853 return false;
1798 } 1854 }
1799 1855
1800 std::string volume_file_url; 1856 std::string volume_file_url;
1801 if (!args_->GetString(0, &volume_file_url)) { 1857 if (!args_->GetString(0, &volume_file_url)) {
1802 NOTREACHED(); 1858 NOTREACHED();
1803 return false; 1859 return false;
1804 } 1860 }
1805 1861
1806 FilePath file_path = GetLocalPathFromURL(GURL(volume_file_url)); 1862 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1863 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1864 BrowserContext::GetStoragePartition(profile(), site_instance)->
1865 GetFileSystemContext();
1866
1867 FilePath file_path = GetLocalPathFromURL(file_system_context,
1868 GURL(volume_file_url));
1807 if (file_path.empty()) 1869 if (file_path.empty())
1808 return false; 1870 return false;
1809 1871
1810 DiskMountManager::GetInstance()->FormatMountedDevice(file_path.value()); 1872 DiskMountManager::GetInstance()->FormatMountedDevice(file_path.value());
1811 SendResponse(true); 1873 SendResponse(true);
1812 return true; 1874 return true;
1813 } 1875 }
1814 1876
1815 GetVolumeMetadataFunction::GetVolumeMetadataFunction() { 1877 GetVolumeMetadataFunction::GetVolumeMetadataFunction() {
1816 } 1878 }
1817 1879
1818 GetVolumeMetadataFunction::~GetVolumeMetadataFunction() { 1880 GetVolumeMetadataFunction::~GetVolumeMetadataFunction() {
1819 } 1881 }
1820 1882
1821 bool GetVolumeMetadataFunction::RunImpl() { 1883 bool GetVolumeMetadataFunction::RunImpl() {
1822 if (args_->GetSize() != 1) { 1884 if (args_->GetSize() != 1) {
1823 error_ = "Invalid argument count"; 1885 error_ = "Invalid argument count";
1824 return false; 1886 return false;
1825 } 1887 }
1826 1888
1827 std::string volume_mount_url; 1889 std::string volume_mount_url;
1828 if (!args_->GetString(0, &volume_mount_url)) { 1890 if (!args_->GetString(0, &volume_mount_url)) {
1829 NOTREACHED(); 1891 NOTREACHED();
1830 return false; 1892 return false;
1831 } 1893 }
1832 1894
1833 FilePath file_path = GetLocalPathFromURL(GURL(volume_mount_url)); 1895 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
1896 scoped_refptr<fileapi::FileSystemContext> file_system_context =
1897 BrowserContext::GetStoragePartition(profile(), site_instance)->
1898 GetFileSystemContext();
1899
1900 FilePath file_path = GetLocalPathFromURL(file_system_context,
1901 GURL(volume_mount_url));
1834 if (file_path.empty()) { 1902 if (file_path.empty()) {
1835 error_ = "Invalid mount path."; 1903 error_ = "Invalid mount path.";
1836 return false; 1904 return false;
1837 } 1905 }
1838 1906
1839 results_.reset(); 1907 results_.reset();
1840 1908
1841 const DiskMountManager::Disk* volume = GetVolumeAsDisk(file_path.value()); 1909 const DiskMountManager::Disk* volume = GetVolumeAsDisk(file_path.value());
1842 if (volume) { 1910 if (volume) {
1843 DictionaryValue* volume_info = 1911 DictionaryValue* volume_info =
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
2272 } 2340 }
2273 2341
2274 void GetDriveFilePropertiesFunction::GetNextFileProperties() { 2342 void GetDriveFilePropertiesFunction::GetNextFileProperties() {
2275 if (current_index_ >= path_list_->GetSize()) { 2343 if (current_index_ >= path_list_->GetSize()) {
2276 // Exit of asynchronous look and return the result. 2344 // Exit of asynchronous look and return the result.
2277 SetResult(file_properties_.release()); 2345 SetResult(file_properties_.release());
2278 SendResponse(true); 2346 SendResponse(true);
2279 return; 2347 return;
2280 } 2348 }
2281 2349
2350 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
2351 scoped_refptr<fileapi::FileSystemContext> file_system_context =
2352 BrowserContext::GetStoragePartition(profile(), site_instance)->
2353 GetFileSystemContext();
2354
2282 std::string file_str; 2355 std::string file_str;
2283 path_list_->GetString(current_index_, &file_str); 2356 path_list_->GetString(current_index_, &file_str);
2284 GURL file_url = GURL(file_str); 2357 GURL file_url = GURL(file_str);
2285 FilePath file_path = GetVirtualPathFromURL(file_url); 2358 FilePath file_path = GetVirtualPathFromURL(file_system_context,
2359 file_url);
2286 2360
2287 base::DictionaryValue* property_dict = new base::DictionaryValue; 2361 base::DictionaryValue* property_dict = new base::DictionaryValue;
2288 property_dict->SetString("fileUrl", file_url.spec()); 2362 property_dict->SetString("fileUrl", file_url.spec());
2289 file_properties_->Append(property_dict); 2363 file_properties_->Append(property_dict);
2290 2364
2291 // Start getting the file info. 2365 // Start getting the file info.
2292 drive::DriveSystemService* system_service = 2366 drive::DriveSystemService* system_service =
2293 drive::DriveSystemServiceFactory::GetForProfile(profile_); 2367 drive::DriveSystemServiceFactory::GetForProfile(profile_);
2294 // |system_service| is NULL if Drive is disabled. 2368 // |system_service| is NULL if Drive is disabled.
2295 if (!system_service) { 2369 if (!system_service) {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
2493 } 2567 }
2494 2568
2495 GetFileLocationsFunction::~GetFileLocationsFunction() { 2569 GetFileLocationsFunction::~GetFileLocationsFunction() {
2496 } 2570 }
2497 2571
2498 bool GetFileLocationsFunction::RunImpl() { 2572 bool GetFileLocationsFunction::RunImpl() {
2499 ListValue* file_urls_as_strings = NULL; 2573 ListValue* file_urls_as_strings = NULL;
2500 if (!args_->GetList(0, &file_urls_as_strings)) 2574 if (!args_->GetList(0, &file_urls_as_strings))
2501 return false; 2575 return false;
2502 2576
2577 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
2578 scoped_refptr<fileapi::FileSystemContext> file_system_context =
2579 BrowserContext::GetStoragePartition(profile(), site_instance)->
2580 GetFileSystemContext();
2581
2503 // Convert the list of strings to a list of GURLs. 2582 // Convert the list of strings to a list of GURLs.
2504 scoped_ptr<ListValue> locations(new ListValue); 2583 scoped_ptr<ListValue> locations(new ListValue);
2505 for (size_t i = 0; i < file_urls_as_strings->GetSize(); ++i) { 2584 for (size_t i = 0; i < file_urls_as_strings->GetSize(); ++i) {
2506 std::string file_url_as_string; 2585 std::string file_url_as_string;
2507 if (!file_urls_as_strings->GetString(i, &file_url_as_string)) 2586 if (!file_urls_as_strings->GetString(i, &file_url_as_string))
2508 return false; 2587 return false;
2509 2588
2510 fileapi::FileSystemURL url((GURL(file_url_as_string))); 2589 fileapi::FileSystemURL url(
2590 file_system_context->CrackURL(GURL(file_url_as_string)));
2511 if (url.type() == fileapi::kFileSystemTypeDrive) 2591 if (url.type() == fileapi::kFileSystemTypeDrive)
2512 locations->Append(new base::StringValue("drive")); 2592 locations->Append(new base::StringValue("drive"));
2513 else 2593 else
2514 locations->Append(new base::StringValue("local")); 2594 locations->Append(new base::StringValue("local"));
2515 } 2595 }
2516 2596
2517 SetResult(locations.release()); 2597 SetResult(locations.release());
2518 SendResponse(true); 2598 SendResponse(true);
2519 return true; 2599 return true;
2520 } 2600 }
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
2656 ListValue* url_list = NULL; 2736 ListValue* url_list = NULL;
2657 if (!args_->GetList(0, &url_list)) 2737 if (!args_->GetList(0, &url_list))
2658 return false; 2738 return false;
2659 2739
2660 drive::DriveSystemService* system_service = 2740 drive::DriveSystemService* system_service =
2661 drive::DriveSystemServiceFactory::GetForProfile(profile_); 2741 drive::DriveSystemServiceFactory::GetForProfile(profile_);
2662 // |system_service| is NULL if Drive is disabled. 2742 // |system_service| is NULL if Drive is disabled.
2663 if (!system_service) 2743 if (!system_service)
2664 return false; 2744 return false;
2665 2745
2746 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
2747 scoped_refptr<fileapi::FileSystemContext> file_system_context =
2748 BrowserContext::GetStoragePartition(profile(), site_instance)->
2749 GetFileSystemContext();
2750
2666 scoped_ptr<ListValue> responses(new ListValue()); 2751 scoped_ptr<ListValue> responses(new ListValue());
2667 for (size_t i = 0; i < url_list->GetSize(); ++i) { 2752 for (size_t i = 0; i < url_list->GetSize(); ++i) {
2668 std::string url_as_string; 2753 std::string url_as_string;
2669 url_list->GetString(i, &url_as_string); 2754 url_list->GetString(i, &url_as_string);
2670 2755
2671 FilePath file_path = GetLocalPathFromURL(GURL(url_as_string)); 2756 FilePath file_path = GetLocalPathFromURL(file_system_context,
2757 GURL(url_as_string));
2672 if (file_path.empty()) 2758 if (file_path.empty())
2673 continue; 2759 continue;
2674 2760
2675 DCHECK(drive::util::IsUnderDriveMountPoint(file_path)); 2761 DCHECK(drive::util::IsUnderDriveMountPoint(file_path));
2676 file_path = drive::util::ExtractDrivePath(file_path); 2762 file_path = drive::util::ExtractDrivePath(file_path);
2677 scoped_ptr<DictionaryValue> result(new DictionaryValue()); 2763 scoped_ptr<DictionaryValue> result(new DictionaryValue());
2678 result->SetBoolean( 2764 result->SetBoolean(
2679 "canceled", 2765 "canceled",
2680 system_service->drive_service()->CancelForFilePath(file_path)); 2766 system_service->drive_service()->CancelForFilePath(file_path));
2681 GURL file_url; 2767 GURL file_url;
(...skipping 21 matching lines...) Expand all
2703 !args_->GetString(1, &destination_file_url)) { 2789 !args_->GetString(1, &destination_file_url)) {
2704 return false; 2790 return false;
2705 } 2791 }
2706 2792
2707 drive::DriveSystemService* system_service = 2793 drive::DriveSystemService* system_service =
2708 drive::DriveSystemServiceFactory::GetForProfile(profile_); 2794 drive::DriveSystemServiceFactory::GetForProfile(profile_);
2709 // |system_service| is NULL if Drive is disabled. 2795 // |system_service| is NULL if Drive is disabled.
2710 if (!system_service) 2796 if (!system_service)
2711 return false; 2797 return false;
2712 2798
2713 FilePath source_file = GetLocalPathFromURL(GURL(source_file_url)); 2799 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
2714 FilePath destination_file = GetLocalPathFromURL(GURL(destination_file_url)); 2800 scoped_refptr<fileapi::FileSystemContext> file_system_context =
2801 BrowserContext::GetStoragePartition(profile(), site_instance)->
2802 GetFileSystemContext();
2803
2804 FilePath source_file = GetLocalPathFromURL(file_system_context,
2805 GURL(source_file_url));
2806 FilePath destination_file = GetLocalPathFromURL(file_system_context,
2807 GURL(destination_file_url));
2715 if (source_file.empty() || destination_file.empty()) 2808 if (source_file.empty() || destination_file.empty())
2716 return false; 2809 return false;
2717 2810
2718 bool source_file_under_drive = 2811 bool source_file_under_drive =
2719 drive::util::IsUnderDriveMountPoint(source_file); 2812 drive::util::IsUnderDriveMountPoint(source_file);
2720 bool destination_file_under_drive = 2813 bool destination_file_under_drive =
2721 drive::util::IsUnderDriveMountPoint(destination_file); 2814 drive::util::IsUnderDriveMountPoint(destination_file);
2722 2815
2723 if (source_file_under_drive && !destination_file_under_drive) { 2816 if (source_file_under_drive && !destination_file_under_drive) {
2724 // Transfer a file from gdata to local file system. 2817 // Transfer a file from gdata to local file system.
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
2952 std::string file_url_as_string; 3045 std::string file_url_as_string;
2953 if (!args_->GetString(0, &file_url_as_string)) 3046 if (!args_->GetString(0, &file_url_as_string))
2954 return false; 3047 return false;
2955 3048
2956 drive::DriveSystemService* system_service = 3049 drive::DriveSystemService* system_service =
2957 drive::DriveSystemServiceFactory::GetForProfile(profile_); 3050 drive::DriveSystemServiceFactory::GetForProfile(profile_);
2958 // |system_service| is NULL if Drive is disabled. 3051 // |system_service| is NULL if Drive is disabled.
2959 if (!system_service || !system_service->file_system()) 3052 if (!system_service || !system_service->file_system())
2960 return false; 3053 return false;
2961 3054
2962 FilePath directory_path = GetVirtualPathFromURL(GURL(file_url_as_string)); 3055 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
3056 scoped_refptr<fileapi::FileSystemContext> file_system_context =
3057 BrowserContext::GetStoragePartition(profile(), site_instance)->
3058 GetFileSystemContext();
3059
3060 FilePath directory_path = GetVirtualPathFromURL(file_system_context,
3061 GURL(file_url_as_string));
2963 system_service->file_system()->RequestDirectoryRefresh(directory_path); 3062 system_service->file_system()->RequestDirectoryRefresh(directory_path);
2964 3063
2965 return true; 3064 return true;
2966 } 3065 }
2967 3066
2968 ZipSelectionFunction::ZipSelectionFunction() { 3067 ZipSelectionFunction::ZipSelectionFunction() {
2969 } 3068 }
2970 3069
2971 ZipSelectionFunction::~ZipSelectionFunction() { 3070 ZipSelectionFunction::~ZipSelectionFunction() {
2972 } 3071 }
2973 3072
2974 bool ZipSelectionFunction::RunImpl() { 3073 bool ZipSelectionFunction::RunImpl() {
2975 if (args_->GetSize() < 3) { 3074 if (args_->GetSize() < 3) {
2976 return false; 3075 return false;
2977 } 3076 }
2978 3077
2979 // First param is the source directory URL. 3078 // First param is the source directory URL.
2980 std::string dir_url; 3079 std::string dir_url;
2981 if (!args_->GetString(0, &dir_url) || dir_url.empty()) 3080 if (!args_->GetString(0, &dir_url) || dir_url.empty())
2982 return false; 3081 return false;
2983 3082
2984 FilePath src_dir = GetLocalPathFromURL(GURL(dir_url)); 3083 content::SiteInstance* site_instance = render_view_host()->GetSiteInstance();
3084 scoped_refptr<fileapi::FileSystemContext> file_system_context =
3085 BrowserContext::GetStoragePartition(profile(), site_instance)->
3086 GetFileSystemContext();
3087
3088 FilePath src_dir = GetLocalPathFromURL(file_system_context,
3089 GURL(dir_url));
2985 if (src_dir.empty()) 3090 if (src_dir.empty())
2986 return false; 3091 return false;
2987 3092
2988 // Second param is the list of selected file URLs. 3093 // Second param is the list of selected file URLs.
2989 ListValue* selection_urls = NULL; 3094 ListValue* selection_urls = NULL;
2990 args_->GetList(1, &selection_urls); 3095 args_->GetList(1, &selection_urls);
2991 if (!selection_urls || !selection_urls->GetSize()) 3096 if (!selection_urls || !selection_urls->GetSize())
2992 return false; 3097 return false;
2993 3098
2994 std::vector<FilePath> files; 3099 std::vector<FilePath> files;
2995 for (size_t i = 0; i < selection_urls->GetSize(); ++i) { 3100 for (size_t i = 0; i < selection_urls->GetSize(); ++i) {
2996 std::string file_url; 3101 std::string file_url;
2997 selection_urls->GetString(i, &file_url); 3102 selection_urls->GetString(i, &file_url);
2998 FilePath path = GetLocalPathFromURL(GURL(file_url)); 3103 FilePath path = GetLocalPathFromURL(file_system_context, GURL(file_url));
2999 if (path.empty()) 3104 if (path.empty())
3000 return false; 3105 return false;
3001 files.push_back(path); 3106 files.push_back(path);
3002 } 3107 }
3003 3108
3004 // Third param is the name of the output zip file. 3109 // Third param is the name of the output zip file.
3005 std::string dest_name; 3110 std::string dest_name;
3006 if (!args_->GetString(2, &dest_name) || dest_name.empty()) 3111 if (!args_->GetString(2, &dest_name) || dest_name.empty())
3007 return false; 3112 return false;
3008 3113
(...skipping 24 matching lines...) Expand all
3033 // Keep the refcount until the zipping is complete on utility process. 3138 // Keep the refcount until the zipping is complete on utility process.
3034 AddRef(); 3139 AddRef();
3035 return true; 3140 return true;
3036 } 3141 }
3037 3142
3038 void ZipSelectionFunction::OnZipDone(bool success) { 3143 void ZipSelectionFunction::OnZipDone(bool success) {
3039 SetResult(new base::FundamentalValue(success)); 3144 SetResult(new base::FundamentalValue(success));
3040 SendResponse(true); 3145 SendResponse(true);
3041 Release(); 3146 Release();
3042 } 3147 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698