Index: chrome/browser/chromeos/extensions/file_handler_util.cc |
diff --git a/chrome/browser/chromeos/extensions/file_handler_util.cc b/chrome/browser/chromeos/extensions/file_handler_util.cc |
index dc5aa726cd1369365d4c5418ddbb440e7111d5d9..909cc3205c1ee294168496499ff9f9b91e61e607 100644 |
--- a/chrome/browser/chromeos/extensions/file_handler_util.cc |
+++ b/chrome/browser/chromeos/extensions/file_handler_util.cc |
@@ -49,6 +49,7 @@ using content::ChildProcessSecurityPolicy; |
using content::SiteInstance; |
using content::WebContents; |
using extensions::Extension; |
+using fileapi::FileSystemURL; |
namespace file_handler_util { |
@@ -346,6 +347,7 @@ FileBrowserHandlerSet::iterator FindHandler( |
// Given the list of selected files, returns array of file action tasks |
// that are shared between them. |
+// TODO(tbarzic): Pass set of file extensions instead file urls. |
void FindDefaultTasks(Profile* profile, |
const std::vector<GURL>& files_list, |
const FileBrowserHandlerSet& common_tasks, |
@@ -358,16 +360,17 @@ void FindDefaultTasks(Profile* profile, |
it != files_list.end(); ++it) { |
// Get the default task for this file based only on the extension (since |
// we don't have MIME types here), and add it to the set of default tasks. |
- fileapi::FileSystemURL filesystem_url(*it); |
- if (filesystem_url.is_valid() && |
- (filesystem_url.type() == fileapi::kFileSystemTypeDrive || |
- filesystem_url.type() == fileapi::kFileSystemTypeNativeMedia || |
- filesystem_url.type() == fileapi::kFileSystemTypeNativeLocal)) { |
- std::string task_id = file_handler_util::GetDefaultTaskIdFromPrefs( |
- profile, "", filesystem_url.virtual_path().Extension()); |
- if (!task_id.empty()) |
- default_ids.insert(task_id); |
- } |
+ // |
+ // There is no need to crack the URL, since only path's extension is needed |
+ // from FileSystemURL. |
+ FileSystemURL non_cracked_url(*it); |
+ DCHECK(non_cracked_url.is_valid() && |
+ non_cracked_url.type() == fileapi::kFileSystemTypeExternal); |
+ |
+ std::string task_id = file_handler_util::GetDefaultTaskIdFromPrefs( |
+ profile, "", non_cracked_url.path().Extension()); |
+ if (!task_id.empty()) |
+ default_ids.insert(task_id); |
} |
const FileBrowserHandler* builtin_task = NULL; |
@@ -454,8 +457,9 @@ bool FindCommonTasks(Profile* profile, |
return true; |
} |
-bool GetTaskForURL( |
- Profile* profile, const GURL& url, const FileBrowserHandler** handler) { |
+bool GetTaskForURL(Profile* profile, |
+ const GURL& url, |
+ const FileBrowserHandler** handler) { |
std::vector<GURL> file_urls; |
file_urls.push_back(url); |
@@ -488,7 +492,7 @@ bool GetTaskForURL( |
class ExtensionTaskExecutor : public FileTaskExecutor { |
public: |
// FileTaskExecutor overrides. |
- virtual bool ExecuteAndNotify(const std::vector<GURL>& file_urls, |
+ virtual bool ExecuteAndNotify(const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) OVERRIDE; |
private: |
@@ -507,7 +511,6 @@ class ExtensionTaskExecutor : public FileTaskExecutor { |
FileDefinition(); |
~FileDefinition(); |
- GURL target_file_url; |
FilePath virtual_path; |
FilePath absolute_path; |
bool is_directory; |
@@ -520,7 +523,7 @@ class ExtensionTaskExecutor : public FileTaskExecutor { |
const GURL& handler_base_url, |
const scoped_refptr<const extensions::Extension>& handler, |
int handler_pid, |
- const std::vector<GURL>& file_urls); |
+ const std::vector<FileSystemURL>& file_urls); |
void ExecuteDoneOnUIThread(bool success); |
void ExecuteFileActionsOnUIThread(const std::string& file_system_name, |
@@ -548,7 +551,7 @@ class ExtensionTaskExecutor : public FileTaskExecutor { |
class WebIntentTaskExecutor : public FileTaskExecutor { |
public: |
// FileTaskExecutor overrides. |
- virtual bool ExecuteAndNotify(const std::vector<GURL>& file_urls, |
+ virtual bool ExecuteAndNotify(const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) OVERRIDE; |
private: |
@@ -569,7 +572,7 @@ class WebIntentTaskExecutor : public FileTaskExecutor { |
class AppTaskExecutor : public FileTaskExecutor { |
public: |
// FileTaskExecutor overrides. |
- virtual bool ExecuteAndNotify(const std::vector<GURL>& file_urls, |
+ virtual bool ExecuteAndNotify(const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) OVERRIDE; |
private: |
@@ -639,12 +642,12 @@ FileTaskExecutor::FileTaskExecutor(Profile* profile, |
FileTaskExecutor::~FileTaskExecutor() { |
} |
-bool FileTaskExecutor::Execute(const std::vector<GURL>& file_urls) { |
+bool FileTaskExecutor::Execute(const std::vector<FileSystemURL>& file_urls) { |
return ExecuteAndNotify(file_urls, FileTaskFinishedCallback()); |
} |
bool FileTaskExecutor::FileBrowserHasAccessPermissionForFiles( |
- const std::vector<GURL>& files) { |
+ const std::vector<FileSystemURL>& files) { |
// Check if the file browser extension has permissions for the files in its |
// file system context. |
GURL site = extensions::ExtensionSystem::Get(profile())->extension_service()-> |
@@ -657,13 +660,12 @@ bool FileTaskExecutor::FileBrowserHasAccessPermissionForFiles( |
return false; |
for (size_t i = 0; i < files.size(); ++i) { |
- fileapi::FileSystemURL url(files[i]); |
// Make sure this url really being used by the right caller extension. |
- if (source_url_.GetOrigin() != url.origin()) |
+ if (source_url_.GetOrigin() != files[i].origin()) |
return false; |
- if (!chromeos::CrosMountPointProvider::CanHandleURL(url) || |
- !external_provider->IsAccessAllowed(url)) { |
+ if (!chromeos::CrosMountPointProvider::CanHandleURL(files[i]) || |
+ !external_provider->IsAccessAllowed(files[i])) { |
return false; |
} |
} |
@@ -702,7 +704,7 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
scoped_refptr<const Extension> handler_extension, |
int handler_pid, |
const std::string& action_id, |
- const std::vector<GURL>& file_urls) { |
+ const std::vector<FileSystemURL>& file_urls) { |
return base::Bind( |
&ExecuteTasksFileSystemCallbackDispatcher::DidOpenFileSystem, |
base::Owned(new ExecuteTasksFileSystemCallbackDispatcher( |
@@ -719,8 +721,8 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
} |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
ExtensionTaskExecutor::FileDefinitionList file_list; |
- for (std::vector<GURL>::iterator iter = origin_file_urls_.begin(); |
- iter != origin_file_urls_.end(); |
+ for (std::vector<FileSystemURL>::iterator iter = urls_.begin(); |
+ iter != urls_.end(); |
++iter) { |
// Set up file permission access. |
ExtensionTaskExecutor::FileDefinition file; |
@@ -765,19 +767,19 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
const scoped_refptr<const Extension>& handler_extension, |
int handler_pid, |
const std::string& action_id, |
- const std::vector<GURL>& file_urls) |
+ const std::vector<FileSystemURL>& file_urls) |
: executor_(executor), |
file_system_context_handler_(file_system_context_handler), |
handler_extension_(handler_extension), |
handler_pid_(handler_pid), |
action_id_(action_id), |
- origin_file_urls_(file_urls) { |
+ urls_(file_urls) { |
DCHECK(executor_); |
} |
// Checks legitimacy of file url and grants file RO access permissions from |
// handler (target) extension and its renderer process. |
- bool SetupFileAccessPermissions(const GURL& origin_file_url, |
+ bool SetupFileAccessPermissions(const FileSystemURL& url, |
FileDefinition* file) { |
if (!handler_extension_.get()) |
return false; |
@@ -785,8 +787,6 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
if (handler_pid_ == 0) |
return false; |
- fileapi::FileSystemURL url(origin_file_url); |
- |
fileapi::ExternalFileSystemMountPointProvider* external_provider_handler = |
file_system_context_handler_->external_provider(); |
@@ -816,11 +816,6 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
handler_extension_->id(), virtual_path); |
// Output values. |
- GURL target_origin_url(Extension::GetBaseURLFromExtensionId( |
- handler_extension_->id())); |
- GURL base_url = fileapi::GetFileSystemRootURI(target_origin_url, |
- fileapi::kFileSystemTypeExternal); |
- file->target_file_url = GURL(base_url.spec() + virtual_path.value()); |
file->virtual_path = virtual_path; |
file->is_directory = file_info.is_directory; |
file->absolute_path = local_path; |
@@ -832,7 +827,7 @@ class ExtensionTaskExecutor::ExecuteTasksFileSystemCallbackDispatcher { |
scoped_refptr<const Extension> handler_extension_; |
int handler_pid_; |
std::string action_id_; |
- std::vector<GURL> origin_file_urls_; |
+ std::vector<FileSystemURL> urls_; |
DISALLOW_COPY_AND_ASSIGN(ExecuteTasksFileSystemCallbackDispatcher); |
}; |
@@ -851,7 +846,7 @@ ExtensionTaskExecutor::ExtensionTaskExecutor( |
ExtensionTaskExecutor::~ExtensionTaskExecutor() {} |
bool ExtensionTaskExecutor::ExecuteAndNotify( |
- const std::vector<GURL>& file_urls, |
+ const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) { |
if (!FileBrowserHasAccessPermissionForFiles(file_urls)) |
return false; |
@@ -895,7 +890,7 @@ void ExtensionTaskExecutor::RequestFileEntryOnFileThread( |
const GURL& handler_base_url, |
const scoped_refptr<const Extension>& handler, |
int handler_pid, |
- const std::vector<GURL>& file_urls) { |
+ const std::vector<FileSystemURL>& file_urls) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
GURL origin_url = handler_base_url.GetOrigin(); |
file_system_context_handler->OpenFileSystem( |
@@ -1036,15 +1031,14 @@ WebIntentTaskExecutor::WebIntentTaskExecutor( |
WebIntentTaskExecutor::~WebIntentTaskExecutor() {} |
bool WebIntentTaskExecutor::ExecuteAndNotify( |
- const std::vector<GURL>& file_urls, |
+ const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) { |
if (!FileBrowserHasAccessPermissionForFiles(file_urls)) |
return false; |
for (size_t i = 0; i != file_urls.size(); ++i) { |
- fileapi::FileSystemURL url(file_urls[i]); |
extensions::LaunchPlatformAppWithPath(profile(), GetExtension(), |
- url.path()); |
+ file_urls[i].path()); |
} |
if (!done.is_null()) |
@@ -1066,20 +1060,18 @@ AppTaskExecutor::AppTaskExecutor( |
AppTaskExecutor::~AppTaskExecutor() {} |
bool AppTaskExecutor::ExecuteAndNotify( |
- const std::vector<GURL>& file_urls, |
+ const std::vector<FileSystemURL>& file_urls, |
const FileTaskFinishedCallback& done) { |
if (!FileBrowserHasAccessPermissionForFiles(file_urls)) |
return false; |
for (size_t i = 0; i != file_urls.size(); ++i) { |
- fileapi::FileSystemURL url(file_urls[i]); |
extensions::LaunchPlatformAppWithFileHandler(profile(), GetExtension(), |
- action_id_, url.path()); |
+ action_id_, file_urls[i].path()); |
} |
if (!done.is_null()) |
done.Run(true); |
- |
return true; |
} |