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/chromeos/file_manager/file_browser_handlers.h" | 5 #include "chrome/browser/chromeos/file_manager/file_browser_handlers.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/i18n/case_conversion.h" | 9 #include "base/i18n/case_conversion.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // files. The event will launch the file browser handler if not active. | 155 // files. The event will launch the file browser handler if not active. |
156 // 4) In the file browser handler, onExecute event is handled and executes the | 156 // 4) In the file browser handler, onExecute event is handled and executes the |
157 // task in JavaScript. | 157 // task in JavaScript. |
158 // | 158 // |
159 // That said, the class itself does not execute a task. The task will be | 159 // That said, the class itself does not execute a task. The task will be |
160 // executed in JavaScript. | 160 // executed in JavaScript. |
161 class FileBrowserHandlerExecutor { | 161 class FileBrowserHandlerExecutor { |
162 public: | 162 public: |
163 FileBrowserHandlerExecutor(Profile* profile, | 163 FileBrowserHandlerExecutor(Profile* profile, |
164 const Extension* extension, | 164 const Extension* extension, |
165 int32 tab_id, | |
166 const std::string& action_id); | 165 const std::string& action_id); |
167 | 166 |
168 // Executes the task for each file. |done| will be run with the result. | 167 // Executes the task for each file. |done| will be run with the result. |
169 void Execute(const std::vector<FileSystemURL>& file_urls, | 168 void Execute(const std::vector<FileSystemURL>& file_urls, |
170 const file_tasks::FileTaskFinishedCallback& done); | 169 const file_tasks::FileTaskFinishedCallback& done); |
171 | 170 |
172 private: | 171 private: |
173 // This object is responsible to delete itself. | 172 // This object is responsible to delete itself. |
174 virtual ~FileBrowserHandlerExecutor(); | 173 virtual ~FileBrowserHandlerExecutor(); |
175 | 174 |
(...skipping 25 matching lines...) Expand all Loading... |
201 | 200 |
202 // Registers file permissions from |handler_host_permissions_| with | 201 // Registers file permissions from |handler_host_permissions_| with |
203 // ChildProcessSecurityPolicy for process with id |handler_pid|. | 202 // ChildProcessSecurityPolicy for process with id |handler_pid|. |
204 void SetupHandlerHostFileAccessPermissions( | 203 void SetupHandlerHostFileAccessPermissions( |
205 const FileDefinitionList& file_list, | 204 const FileDefinitionList& file_list, |
206 const Extension* extension, | 205 const Extension* extension, |
207 int handler_pid); | 206 int handler_pid); |
208 | 207 |
209 Profile* profile_; | 208 Profile* profile_; |
210 scoped_refptr<const Extension> extension_; | 209 scoped_refptr<const Extension> extension_; |
211 int32 tab_id_; | |
212 const std::string action_id_; | 210 const std::string action_id_; |
213 file_tasks::FileTaskFinishedCallback done_; | 211 file_tasks::FileTaskFinishedCallback done_; |
214 base::WeakPtrFactory<FileBrowserHandlerExecutor> weak_ptr_factory_; | 212 base::WeakPtrFactory<FileBrowserHandlerExecutor> weak_ptr_factory_; |
215 | 213 |
216 DISALLOW_COPY_AND_ASSIGN(FileBrowserHandlerExecutor); | 214 DISALLOW_COPY_AND_ASSIGN(FileBrowserHandlerExecutor); |
217 }; | 215 }; |
218 | 216 |
219 FileBrowserHandlerExecutor::FileDefinition::FileDefinition() | 217 FileBrowserHandlerExecutor::FileDefinition::FileDefinition() |
220 : is_directory(false) { | 218 : is_directory(false) { |
221 } | 219 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 file.is_directory = file_info.is_directory; | 268 file.is_directory = file_info.is_directory; |
271 file.absolute_path = local_path; | 269 file.absolute_path = local_path; |
272 file_list.push_back(file); | 270 file_list.push_back(file); |
273 } | 271 } |
274 return file_list; | 272 return file_list; |
275 } | 273 } |
276 | 274 |
277 FileBrowserHandlerExecutor::FileBrowserHandlerExecutor( | 275 FileBrowserHandlerExecutor::FileBrowserHandlerExecutor( |
278 Profile* profile, | 276 Profile* profile, |
279 const Extension* extension, | 277 const Extension* extension, |
280 int32 tab_id, | |
281 const std::string& action_id) | 278 const std::string& action_id) |
282 : profile_(profile), | 279 : profile_(profile), |
283 extension_(extension), | 280 extension_(extension), |
284 tab_id_(tab_id), | |
285 action_id_(action_id), | 281 action_id_(action_id), |
286 weak_ptr_factory_(this) { | 282 weak_ptr_factory_(this) { |
287 } | 283 } |
288 | 284 |
289 FileBrowserHandlerExecutor::~FileBrowserHandlerExecutor() {} | 285 FileBrowserHandlerExecutor::~FileBrowserHandlerExecutor() {} |
290 | 286 |
291 void FileBrowserHandlerExecutor::Execute( | 287 void FileBrowserHandlerExecutor::Execute( |
292 const std::vector<FileSystemURL>& file_urls, | 288 const std::vector<FileSystemURL>& file_urls, |
293 const file_tasks::FileTaskFinishedCallback& done) { | 289 const file_tasks::FileTaskFinishedCallback& done) { |
294 done_ = done; | 290 done_ = done; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 DictionaryValue* file_def = new DictionaryValue(); | 393 DictionaryValue* file_def = new DictionaryValue(); |
398 file_entries->Append(file_def); | 394 file_entries->Append(file_def); |
399 file_def->SetString("fileSystemName", file_system_name); | 395 file_def->SetString("fileSystemName", file_system_name); |
400 file_def->SetString("fileSystemRoot", file_system_root.spec()); | 396 file_def->SetString("fileSystemRoot", file_system_root.spec()); |
401 base::FilePath root(FILE_PATH_LITERAL("/")); | 397 base::FilePath root(FILE_PATH_LITERAL("/")); |
402 base::FilePath full_path = root.Append(iter->virtual_path); | 398 base::FilePath full_path = root.Append(iter->virtual_path); |
403 file_def->SetString("fileFullPath", full_path.value()); | 399 file_def->SetString("fileFullPath", full_path.value()); |
404 file_def->SetBoolean("fileIsDirectory", iter->is_directory); | 400 file_def->SetBoolean("fileIsDirectory", iter->is_directory); |
405 } | 401 } |
406 | 402 |
407 details->SetInteger("tab_id", tab_id_); | |
408 | |
409 scoped_ptr<extensions::Event> event(new extensions::Event( | 403 scoped_ptr<extensions::Event> event(new extensions::Event( |
410 "fileBrowserHandler.onExecute", event_args.Pass())); | 404 "fileBrowserHandler.onExecute", event_args.Pass())); |
411 event->restrict_to_browser_context = profile_; | 405 event->restrict_to_browser_context = profile_; |
412 event_router->DispatchEventToExtension(extension_->id(), event.Pass()); | 406 event_router->DispatchEventToExtension(extension_->id(), event.Pass()); |
413 | 407 |
414 ExecuteDoneOnUIThread(true); | 408 ExecuteDoneOnUIThread(true); |
415 } | 409 } |
416 | 410 |
417 void FileBrowserHandlerExecutor::SetupHandlerHostFileAccessPermissions( | 411 void FileBrowserHandlerExecutor::SetupHandlerHostFileAccessPermissions( |
418 const FileDefinitionList& file_list, | 412 const FileDefinitionList& file_list, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 } | 459 } |
466 } | 460 } |
467 return num_opened > 0; | 461 return num_opened > 0; |
468 } | 462 } |
469 | 463 |
470 } // namespace | 464 } // namespace |
471 | 465 |
472 bool ExecuteFileBrowserHandler( | 466 bool ExecuteFileBrowserHandler( |
473 Profile* profile, | 467 Profile* profile, |
474 const Extension* extension, | 468 const Extension* extension, |
475 int32 tab_id, | |
476 const std::string& action_id, | 469 const std::string& action_id, |
477 const std::vector<FileSystemURL>& file_urls, | 470 const std::vector<FileSystemURL>& file_urls, |
478 const file_tasks::FileTaskFinishedCallback& done) { | 471 const file_tasks::FileTaskFinishedCallback& done) { |
479 // Forbid calling undeclared handlers. | 472 // Forbid calling undeclared handlers. |
480 if (!FindFileBrowserHandlerForActionId(extension, action_id)) | 473 if (!FindFileBrowserHandlerForActionId(extension, action_id)) |
481 return false; | 474 return false; |
482 | 475 |
483 // Some action IDs of the file manager's file browser handlers require the | 476 // Some action IDs of the file manager's file browser handlers require the |
484 // files to be directly opened with the browser. | 477 // files to be directly opened with the browser. |
485 if (ShouldBeOpenedWithBrowser(extension->id(), action_id)) { | 478 if (ShouldBeOpenedWithBrowser(extension->id(), action_id)) { |
486 return OpenFilesWithBrowser(profile, file_urls); | 479 return OpenFilesWithBrowser(profile, file_urls); |
487 } | 480 } |
488 | 481 |
489 // The executor object will be self deleted on completion. | 482 // The executor object will be self deleted on completion. |
490 (new FileBrowserHandlerExecutor( | 483 (new FileBrowserHandlerExecutor( |
491 profile, extension, tab_id, action_id))->Execute(file_urls, done); | 484 profile, extension, action_id))->Execute(file_urls, done); |
492 return true; | 485 return true; |
493 } | 486 } |
494 | 487 |
495 bool IsFallbackFileBrowserHandler(const file_tasks::TaskDescriptor& task) { | 488 bool IsFallbackFileBrowserHandler(const file_tasks::TaskDescriptor& task) { |
496 return (task.task_type == file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER && | 489 return (task.task_type == file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER && |
497 (task.app_id == kFileManagerAppId || | 490 (task.app_id == kFileManagerAppId || |
498 task.app_id == extension_misc::kQuickOfficeComponentExtensionId || | 491 task.app_id == extension_misc::kQuickOfficeComponentExtensionId || |
499 task.app_id == extension_misc::kQuickOfficeDevExtensionId || | 492 task.app_id == extension_misc::kQuickOfficeDevExtensionId || |
500 task.app_id == extension_misc::kQuickOfficeExtensionId)); | 493 task.app_id == extension_misc::kQuickOfficeExtensionId)); |
501 } | 494 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 common_handlers.erase(gallery_iter); | 539 common_handlers.erase(gallery_iter); |
547 else | 540 else |
548 common_handlers.erase(watch_iter); | 541 common_handlers.erase(watch_iter); |
549 } | 542 } |
550 | 543 |
551 return common_handlers; | 544 return common_handlers; |
552 } | 545 } |
553 | 546 |
554 } // namespace file_browser_handlers | 547 } // namespace file_browser_handlers |
555 } // namespace file_manager | 548 } // namespace file_manager |
OLD | NEW |