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 <map> | 7 #include <map> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
| 10 #include <utility> |
10 #include <vector> | 11 #include <vector> |
11 | 12 |
12 #include "base/base64.h" | 13 #include "base/base64.h" |
13 #include "base/bind.h" | 14 #include "base/bind.h" |
14 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
15 #include "base/logging.h" | 16 #include "base/logging.h" |
16 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
17 #include "base/threading/thread_restrictions.h" | 18 #include "base/threading/thread_restrictions.h" |
18 #include "chrome/browser/chromeos/file_manager/path_util.h" | 19 #include "chrome/browser/chromeos/file_manager/path_util.h" |
19 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 20 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
(...skipping 24 matching lines...) Expand all Loading... |
44 FILE_PATH_LITERAL("/sdcard/Download"); | 45 FILE_PATH_LITERAL("/sdcard/Download"); |
45 constexpr base::FilePath::CharType kRemovableMediaPath[] = | 46 constexpr base::FilePath::CharType kRemovableMediaPath[] = |
46 FILE_PATH_LITERAL("/media/removable"); | 47 FILE_PATH_LITERAL("/media/removable"); |
47 constexpr char kArcRemovableMediaProviderUrl[] = | 48 constexpr char kArcRemovableMediaProviderUrl[] = |
48 "content://org.chromium.arc.removablemediaprovider/"; | 49 "content://org.chromium.arc.removablemediaprovider/"; |
49 constexpr char kAppIdSeparator = '/'; | 50 constexpr char kAppIdSeparator = '/'; |
50 constexpr char kPngDataUrlPrefix[] = "data:image/png;base64,"; | 51 constexpr char kPngDataUrlPrefix[] = "data:image/png;base64,"; |
51 | 52 |
52 // Returns the Mojo interface for ARC Intent Helper, with version |minVersion| | 53 // Returns the Mojo interface for ARC Intent Helper, with version |minVersion| |
53 // or above. If the ARC bridge is not established, returns null. | 54 // or above. If the ARC bridge is not established, returns null. |
54 arc::mojom::IntentHelperInstance* GetArcIntentHelper(Profile* profile, | 55 arc::mojom::IntentHelperInstance* GetArcIntentHelper( |
55 uint32_t min_version) { | 56 Profile* profile, |
| 57 const std::string& method_name_for_logging, |
| 58 uint32_t min_version) { |
56 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 59 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
57 | 60 |
58 // File manager in secondary profile cannot access ARC. | 61 // File manager in secondary profile cannot access ARC. |
59 if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) | 62 if (!chromeos::ProfileHelper::IsPrimaryProfile(profile)) |
60 return nullptr; | 63 return nullptr; |
61 return arc::ArcIntentHelperBridge::GetIntentHelperInstance(min_version); | 64 return arc::ArcIntentHelperBridge::GetIntentHelperInstance( |
| 65 method_name_for_logging, min_version); |
62 } | 66 } |
63 | 67 |
64 // Returns the icon loader that wraps the Mojo interface for ARC Intent Helper. | 68 // Returns the icon loader that wraps the Mojo interface for ARC Intent Helper. |
65 scoped_refptr<arc::ActivityIconLoader> GetArcActivityIconLoader() { | 69 scoped_refptr<arc::ActivityIconLoader> GetArcActivityIconLoader() { |
66 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 70 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
67 | 71 |
68 arc::ArcServiceManager* arc_service_manager = arc::ArcServiceManager::Get(); | 72 arc::ArcServiceManager* arc_service_manager = arc::ArcServiceManager::Get(); |
69 if (!arc_service_manager) | 73 if (!arc_service_manager) |
70 return nullptr; | 74 return nullptr; |
71 return arc_service_manager->icon_loader(); | 75 return arc_service_manager->icon_loader(); |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 | 271 |
268 } // namespace | 272 } // namespace |
269 | 273 |
270 void FindArcTasks(Profile* profile, | 274 void FindArcTasks(Profile* profile, |
271 const std::vector<extensions::EntryInfo>& entries, | 275 const std::vector<extensions::EntryInfo>& entries, |
272 std::unique_ptr<std::vector<FullTaskDescriptor>> result_list, | 276 std::unique_ptr<std::vector<FullTaskDescriptor>> result_list, |
273 const FindTasksCallback& callback) { | 277 const FindTasksCallback& callback) { |
274 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 278 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
275 | 279 |
276 arc::mojom::IntentHelperInstance* arc_intent_helper = | 280 arc::mojom::IntentHelperInstance* arc_intent_helper = |
277 GetArcIntentHelper(profile, kArcIntentHelperVersionWithUrlListSupport); | 281 GetArcIntentHelper(profile, "RequestUrlListHandlerList", |
| 282 kArcIntentHelperVersionWithUrlListSupport); |
278 if (!arc_intent_helper) { | 283 if (!arc_intent_helper) { |
279 callback.Run(std::move(result_list)); | 284 callback.Run(std::move(result_list)); |
280 return; | 285 return; |
281 } | 286 } |
282 | 287 |
283 mojo::Array<arc::mojom::UrlWithMimeTypePtr> urls; | 288 mojo::Array<arc::mojom::UrlWithMimeTypePtr> urls; |
284 for (const extensions::EntryInfo& entry : entries) { | 289 for (const extensions::EntryInfo& entry : entries) { |
285 if (entry.is_directory) { // ARC apps don't support directories. | 290 if (entry.is_directory) { // ARC apps don't support directories. |
286 callback.Run(std::move(result_list)); | 291 callback.Run(std::move(result_list)); |
287 return; | 292 return; |
(...skipping 17 matching lines...) Expand all Loading... |
305 } | 310 } |
306 | 311 |
307 bool ExecuteArcTask(Profile* profile, | 312 bool ExecuteArcTask(Profile* profile, |
308 const TaskDescriptor& task, | 313 const TaskDescriptor& task, |
309 const std::vector<storage::FileSystemURL>& file_urls, | 314 const std::vector<storage::FileSystemURL>& file_urls, |
310 const std::vector<std::string>& mime_types) { | 315 const std::vector<std::string>& mime_types) { |
311 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 316 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
312 DCHECK_EQ(file_urls.size(), mime_types.size()); | 317 DCHECK_EQ(file_urls.size(), mime_types.size()); |
313 | 318 |
314 arc::mojom::IntentHelperInstance* const arc_intent_helper = | 319 arc::mojom::IntentHelperInstance* const arc_intent_helper = |
315 GetArcIntentHelper(profile, kArcIntentHelperVersionWithUrlListSupport); | 320 GetArcIntentHelper(profile, "HandleUrlListDeprecated", |
| 321 kArcIntentHelperVersionWithUrlListSupport); |
316 if (!arc_intent_helper) | 322 if (!arc_intent_helper) |
317 return false; | 323 return false; |
318 | 324 |
319 mojo::Array<arc::mojom::UrlWithMimeTypePtr> urls; | 325 mojo::Array<arc::mojom::UrlWithMimeTypePtr> urls; |
320 for (size_t i = 0; i < file_urls.size(); ++i) { | 326 for (size_t i = 0; i < file_urls.size(); ++i) { |
321 GURL url; | 327 GURL url; |
322 if (!ConvertToArcUrl(file_urls[i].path(), &url)) { | 328 if (!ConvertToArcUrl(file_urls[i].path(), &url)) { |
323 LOG(ERROR) << "File on unsuppored path"; | 329 LOG(ERROR) << "File on unsuppored path"; |
324 return false; | 330 return false; |
325 } | 331 } |
326 | 332 |
327 arc::mojom::UrlWithMimeTypePtr url_with_type = | 333 arc::mojom::UrlWithMimeTypePtr url_with_type = |
328 arc::mojom::UrlWithMimeType::New(); | 334 arc::mojom::UrlWithMimeType::New(); |
329 url_with_type->url = url.spec(); | 335 url_with_type->url = url.spec(); |
330 url_with_type->mime_type = mime_types[i]; | 336 url_with_type->mime_type = mime_types[i]; |
331 urls.push_back(std::move(url_with_type)); | 337 urls.push_back(std::move(url_with_type)); |
332 } | 338 } |
333 | 339 |
334 if (GetArcIntentHelper(profile, | 340 if (GetArcIntentHelper(profile, "HandleUrlList", |
335 kArcIntentHelperVersionWithFullActivityName)) { | 341 kArcIntentHelperVersionWithFullActivityName)) { |
336 arc_intent_helper->HandleUrlList(std::move(urls), | 342 arc_intent_helper->HandleUrlList(std::move(urls), |
337 AppIdToActivityName(task.app_id), | 343 AppIdToActivityName(task.app_id), |
338 StringToArcAction(task.action_id)); | 344 StringToArcAction(task.action_id)); |
339 } else { | 345 } else { |
340 arc_intent_helper->HandleUrlListDeprecated( | 346 arc_intent_helper->HandleUrlListDeprecated( |
341 std::move(urls), AppIdToActivityName(task.app_id)->package_name, | 347 std::move(urls), AppIdToActivityName(task.app_id)->package_name, |
342 StringToArcAction(task.action_id)); | 348 StringToArcAction(task.action_id)); |
343 } | 349 } |
344 return true; | 350 return true; |
345 } | 351 } |
346 | 352 |
347 } // namespace file_tasks | 353 } // namespace file_tasks |
348 } // namespace file_manager | 354 } // namespace file_manager |
OLD | NEW |