| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 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/arc_file_tasks.h" | 5 #include "chrome/browser/chromeos/file_manager/arc_file_tasks.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "content/public/browser/browser_thread.h" | 26 #include "content/public/browser/browser_thread.h" |
| 27 #include "extensions/browser/entry_info.h" | 27 #include "extensions/browser/entry_info.h" |
| 28 #include "storage/browser/fileapi/file_system_url.h" | 28 #include "storage/browser/fileapi/file_system_url.h" |
| 29 #include "url/gurl.h" | 29 #include "url/gurl.h" |
| 30 | 30 |
| 31 namespace file_manager { | 31 namespace file_manager { |
| 32 namespace file_tasks { | 32 namespace file_tasks { |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 constexpr int kArcIntentHelperVersionWithUrlListSupport = 4; | |
| 37 constexpr int kArcIntentHelperVersionWithFullActivityName = 5; | |
| 38 | |
| 39 constexpr char kAppIdSeparator = '/'; | 36 constexpr char kAppIdSeparator = '/'; |
| 40 | 37 |
| 41 // Returns the Mojo interface for ARC Intent Helper, with version |minVersion| | |
| 42 // or above. If the ARC bridge is not established, returns null. | |
| 43 arc::mojom::IntentHelperInstance* GetArcIntentHelper( | |
| 44 Profile* profile, | |
| 45 const std::string& method_name_for_logging, | |
| 46 uint32_t min_version) { | |
| 47 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
| 48 | |
| 49 // File manager in secondary profile cannot access ARC. | |
| 50 if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) | |
| 51 return nullptr; | |
| 52 return arc::ArcIntentHelperBridge::GetIntentHelperInstance( | |
| 53 method_name_for_logging, min_version); | |
| 54 } | |
| 55 | |
| 56 // Returns the icon loader that wraps the Mojo interface for ARC Intent Helper. | 38 // Returns the icon loader that wraps the Mojo interface for ARC Intent Helper. |
| 57 scoped_refptr<arc::ActivityIconLoader> GetArcActivityIconLoader() { | 39 scoped_refptr<arc::ActivityIconLoader> GetArcActivityIconLoader() { |
| 58 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 40 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 59 | 41 |
| 60 arc::ArcServiceManager* arc_service_manager = arc::ArcServiceManager::Get(); | 42 arc::ArcServiceManager* arc_service_manager = arc::ArcServiceManager::Get(); |
| 61 if (!arc_service_manager) | 43 if (!arc_service_manager) |
| 62 return nullptr; | 44 return nullptr; |
| 63 return arc_service_manager->icon_loader(); | 45 return arc_service_manager->icon_loader(); |
| 64 } | 46 } |
| 65 | 47 |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 164 } |
| 183 | 165 |
| 184 } // namespace | 166 } // namespace |
| 185 | 167 |
| 186 void FindArcTasks(Profile* profile, | 168 void FindArcTasks(Profile* profile, |
| 187 const std::vector<extensions::EntryInfo>& entries, | 169 const std::vector<extensions::EntryInfo>& entries, |
| 188 std::unique_ptr<std::vector<FullTaskDescriptor>> result_list, | 170 std::unique_ptr<std::vector<FullTaskDescriptor>> result_list, |
| 189 const FindTasksCallback& callback) { | 171 const FindTasksCallback& callback) { |
| 190 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 172 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 191 | 173 |
| 192 arc::mojom::IntentHelperInstance* arc_intent_helper = | 174 arc::mojom::IntentHelperInstance* arc_intent_helper = nullptr; |
| 193 GetArcIntentHelper(profile, "RequestUrlListHandlerList", | 175 // File manager in secondary profile cannot access ARC. |
| 194 kArcIntentHelperVersionWithUrlListSupport); | 176 if (chromeos::ProfileHelper::IsPrimaryProfile(profile)) { |
| 177 auto* arc_service_manager = arc::ArcServiceManager::Get(); |
| 178 if (arc_service_manager) { |
| 179 arc_intent_helper = ARC_GET_INSTANCE_FOR_METHOD( |
| 180 arc_service_manager->arc_bridge_service()->intent_helper(), |
| 181 RequestUrlListHandlerList); |
| 182 } |
| 183 } |
| 195 if (!arc_intent_helper) { | 184 if (!arc_intent_helper) { |
| 196 callback.Run(std::move(result_list)); | 185 callback.Run(std::move(result_list)); |
| 197 return; | 186 return; |
| 198 } | 187 } |
| 199 | 188 |
| 200 std::vector<arc::mojom::UrlWithMimeTypePtr> urls; | 189 std::vector<arc::mojom::UrlWithMimeTypePtr> urls; |
| 201 for (const extensions::EntryInfo& entry : entries) { | 190 for (const extensions::EntryInfo& entry : entries) { |
| 202 if (entry.is_directory) { // ARC apps don't support directories. | 191 if (entry.is_directory) { // ARC apps don't support directories. |
| 203 callback.Run(std::move(result_list)); | 192 callback.Run(std::move(result_list)); |
| 204 return; | 193 return; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 221 base::Bind(&OnArcHandlerList, base::Passed(&result_list), callback)); | 210 base::Bind(&OnArcHandlerList, base::Passed(&result_list), callback)); |
| 222 } | 211 } |
| 223 | 212 |
| 224 bool ExecuteArcTask(Profile* profile, | 213 bool ExecuteArcTask(Profile* profile, |
| 225 const TaskDescriptor& task, | 214 const TaskDescriptor& task, |
| 226 const std::vector<storage::FileSystemURL>& file_urls, | 215 const std::vector<storage::FileSystemURL>& file_urls, |
| 227 const std::vector<std::string>& mime_types) { | 216 const std::vector<std::string>& mime_types) { |
| 228 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 217 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 229 DCHECK_EQ(file_urls.size(), mime_types.size()); | 218 DCHECK_EQ(file_urls.size(), mime_types.size()); |
| 230 | 219 |
| 231 arc::mojom::IntentHelperInstance* const arc_intent_helper = | 220 arc::mojom::IntentHelperInstance* arc_intent_helper = nullptr; |
| 232 GetArcIntentHelper(profile, "HandleUrlList", | 221 // File manager in secondary profile cannot access ARC. |
| 233 kArcIntentHelperVersionWithFullActivityName); | 222 if (chromeos::ProfileHelper::IsPrimaryProfile(profile)) { |
| 223 auto* arc_service_manager = arc::ArcServiceManager::Get(); |
| 224 if (arc_service_manager) { |
| 225 arc_intent_helper = ARC_GET_INSTANCE_FOR_METHOD( |
| 226 arc_service_manager->arc_bridge_service()->intent_helper(), |
| 227 HandleUrlList); |
| 228 } |
| 229 } |
| 234 if (!arc_intent_helper) | 230 if (!arc_intent_helper) |
| 235 return false; | 231 return false; |
| 236 | 232 |
| 237 std::vector<arc::mojom::UrlWithMimeTypePtr> urls; | 233 std::vector<arc::mojom::UrlWithMimeTypePtr> urls; |
| 238 for (size_t i = 0; i < file_urls.size(); ++i) { | 234 for (size_t i = 0; i < file_urls.size(); ++i) { |
| 239 GURL url; | 235 GURL url; |
| 240 if (!util::ConvertPathToArcUrl(file_urls[i].path(), &url)) { | 236 if (!util::ConvertPathToArcUrl(file_urls[i].path(), &url)) { |
| 241 LOG(ERROR) << "File on unsuppored path"; | 237 LOG(ERROR) << "File on unsuppored path"; |
| 242 return false; | 238 return false; |
| 243 } | 239 } |
| 244 | 240 |
| 245 arc::mojom::UrlWithMimeTypePtr url_with_type = | 241 arc::mojom::UrlWithMimeTypePtr url_with_type = |
| 246 arc::mojom::UrlWithMimeType::New(); | 242 arc::mojom::UrlWithMimeType::New(); |
| 247 url_with_type->url = url.spec(); | 243 url_with_type->url = url.spec(); |
| 248 url_with_type->mime_type = mime_types[i]; | 244 url_with_type->mime_type = mime_types[i]; |
| 249 urls.push_back(std::move(url_with_type)); | 245 urls.push_back(std::move(url_with_type)); |
| 250 } | 246 } |
| 251 | 247 |
| 252 arc_intent_helper->HandleUrlList( | 248 arc_intent_helper->HandleUrlList( |
| 253 std::move(urls), AppIdToActivityName(task.app_id), | 249 std::move(urls), AppIdToActivityName(task.app_id), |
| 254 FileTaskActionIdToArcActionType(task.action_id)); | 250 FileTaskActionIdToArcActionType(task.action_id)); |
| 255 return true; | 251 return true; |
| 256 } | 252 } |
| 257 | 253 |
| 258 } // namespace file_tasks | 254 } // namespace file_tasks |
| 259 } // namespace file_manager | 255 } // namespace file_manager |
| OLD | NEW |