| 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/extensions/file_manager/file_handler_util.h" | 5 #include "chrome/browser/chromeos/extensions/file_manager/file_handler_util.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/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 if (!service) | 141 if (!service) |
| 142 return false; // In unit-tests, we may not have an ExtensionService. | 142 return false; // In unit-tests, we may not have an ExtensionService. |
| 143 | 143 |
| 144 // We need case-insensitive matching, and pattern in the handler is already | 144 // We need case-insensitive matching, and pattern in the handler is already |
| 145 // in lower case. | 145 // in lower case. |
| 146 const GURL lowercase_url(EscapedUtf8ToLower(selected_file_url.spec())); | 146 const GURL lowercase_url(EscapedUtf8ToLower(selected_file_url.spec())); |
| 147 | 147 |
| 148 for (ExtensionSet::const_iterator iter = service->extensions()->begin(); | 148 for (ExtensionSet::const_iterator iter = service->extensions()->begin(); |
| 149 iter != service->extensions()->end(); | 149 iter != service->extensions()->end(); |
| 150 ++iter) { | 150 ++iter) { |
| 151 const Extension* extension = *iter; | 151 const Extension* extension = iter->get(); |
| 152 if (profile->IsOffTheRecord() && | 152 if (profile->IsOffTheRecord() && |
| 153 !service->IsIncognitoEnabled(extension->id())) | 153 !service->IsIncognitoEnabled(extension->id())) |
| 154 continue; | 154 continue; |
| 155 | 155 |
| 156 FileBrowserHandler::List* handler_list = | 156 FileBrowserHandler::List* handler_list = |
| 157 FileBrowserHandler::GetHandlers(extension); | 157 FileBrowserHandler::GetHandlers(extension); |
| 158 if (!handler_list) | 158 if (!handler_list) |
| 159 continue; | 159 continue; |
| 160 for (FileBrowserHandler::List::const_iterator action_iter = | 160 for (FileBrowserHandler::List::const_iterator action_iter = |
| 161 handler_list->begin(); | 161 handler_list->begin(); |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 const FileDefinitionList& file_list) { | 739 const FileDefinitionList& file_list) { |
| 740 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 740 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 741 | 741 |
| 742 if (file_list.empty()) { | 742 if (file_list.empty()) { |
| 743 ExecuteDoneOnUIThread(false); | 743 ExecuteDoneOnUIThread(false); |
| 744 return; | 744 return; |
| 745 } | 745 } |
| 746 | 746 |
| 747 int handler_pid = ExtractProcessFromExtensionId(profile_, extension_->id()); | 747 int handler_pid = ExtractProcessFromExtensionId(profile_, extension_->id()); |
| 748 if (handler_pid <= 0 && | 748 if (handler_pid <= 0 && |
| 749 !extensions::BackgroundInfo::HasLazyBackgroundPage(extension_)) { | 749 !extensions::BackgroundInfo::HasLazyBackgroundPage(extension_.get())) { |
| 750 ExecuteDoneOnUIThread(false); | 750 ExecuteDoneOnUIThread(false); |
| 751 return; | 751 return; |
| 752 } | 752 } |
| 753 | 753 |
| 754 if (handler_pid > 0) { | 754 if (handler_pid > 0) { |
| 755 SetupPermissionsAndDispatchEvent(file_system_name, file_system_root, | 755 SetupPermissionsAndDispatchEvent(file_system_name, file_system_root, |
| 756 file_list, handler_pid, NULL); | 756 file_list, handler_pid, NULL); |
| 757 } else { | 757 } else { |
| 758 // We have to wake the handler background page before we proceed. | 758 // We have to wake the handler background page before we proceed. |
| 759 extensions::LazyBackgroundTaskQueue* queue = | 759 extensions::LazyBackgroundTaskQueue* queue = |
| 760 extensions::ExtensionSystem::Get(profile_)-> | 760 extensions::ExtensionSystem::Get(profile_)-> |
| 761 lazy_background_task_queue(); | 761 lazy_background_task_queue(); |
| 762 if (!queue->ShouldEnqueueTask(profile_, extension_)) { | 762 if (!queue->ShouldEnqueueTask(profile_, extension_.get())) { |
| 763 ExecuteDoneOnUIThread(false); | 763 ExecuteDoneOnUIThread(false); |
| 764 return; | 764 return; |
| 765 } | 765 } |
| 766 queue->AddPendingTask( | 766 queue->AddPendingTask( |
| 767 profile_, extension_->id(), | 767 profile_, extension_->id(), |
| 768 base::Bind(&ExtensionTaskExecutor::SetupPermissionsAndDispatchEvent, | 768 base::Bind(&ExtensionTaskExecutor::SetupPermissionsAndDispatchEvent, |
| 769 weak_ptr_factory_.GetWeakPtr(), | 769 weak_ptr_factory_.GetWeakPtr(), |
| 770 file_system_name, | 770 file_system_name, |
| 771 file_system_root, | 771 file_system_root, |
| 772 file_list, | 772 file_list, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 788 return; | 788 return; |
| 789 } | 789 } |
| 790 | 790 |
| 791 extensions::EventRouter* event_router = | 791 extensions::EventRouter* event_router = |
| 792 extensions::ExtensionSystem::Get(profile_)->event_router(); | 792 extensions::ExtensionSystem::Get(profile_)->event_router(); |
| 793 if (!event_router) { | 793 if (!event_router) { |
| 794 ExecuteDoneOnUIThread(false); | 794 ExecuteDoneOnUIThread(false); |
| 795 return; | 795 return; |
| 796 } | 796 } |
| 797 | 797 |
| 798 SetupHandlerHostFileAccessPermissions(file_list, extension_, handler_pid); | 798 SetupHandlerHostFileAccessPermissions( |
| 799 file_list, extension_.get(), handler_pid); |
| 799 | 800 |
| 800 scoped_ptr<ListValue> event_args(new ListValue()); | 801 scoped_ptr<ListValue> event_args(new ListValue()); |
| 801 event_args->Append(new base::StringValue(action_id_)); | 802 event_args->Append(new base::StringValue(action_id_)); |
| 802 DictionaryValue* details = new DictionaryValue(); | 803 DictionaryValue* details = new DictionaryValue(); |
| 803 event_args->Append(details); | 804 event_args->Append(details); |
| 804 // Get file definitions. These will be replaced with Entry instances by | 805 // Get file definitions. These will be replaced with Entry instances by |
| 805 // dispatchEvent() method from event_binding.js. | 806 // dispatchEvent() method from event_binding.js. |
| 806 ListValue* files_urls = new ListValue(); | 807 ListValue* files_urls = new ListValue(); |
| 807 details->Set("entries", files_urls); | 808 details->Set("entries", files_urls); |
| 808 for (FileDefinitionList::const_iterator iter = file_list.begin(); | 809 for (FileDefinitionList::const_iterator iter = file_list.begin(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 831 void ExtensionTaskExecutor::SetupHandlerHostFileAccessPermissions( | 832 void ExtensionTaskExecutor::SetupHandlerHostFileAccessPermissions( |
| 832 const FileDefinitionList& file_list, | 833 const FileDefinitionList& file_list, |
| 833 const Extension* extension, | 834 const Extension* extension, |
| 834 int handler_pid) { | 835 int handler_pid) { |
| 835 for (FileDefinitionList::const_iterator iter = file_list.begin(); | 836 for (FileDefinitionList::const_iterator iter = file_list.begin(); |
| 836 iter != file_list.end(); | 837 iter != file_list.end(); |
| 837 ++iter) { | 838 ++iter) { |
| 838 content::ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( | 839 content::ChildProcessSecurityPolicy::GetInstance()->GrantPermissionsForFile( |
| 839 handler_pid, | 840 handler_pid, |
| 840 iter->absolute_path, | 841 iter->absolute_path, |
| 841 GetAccessPermissionsForFileBrowserHandler(extension_, action_id_)); | 842 GetAccessPermissionsForFileBrowserHandler(extension_.get(), |
| 843 action_id_)); |
| 842 } | 844 } |
| 843 } | 845 } |
| 844 | 846 |
| 845 } // namespace file_handler_util | 847 } // namespace file_handler_util |
| OLD | NEW |