Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / media_galleries / fileapi / iapps_finder_impl.cc
blobadea47e5639c292c3ed1573f27b64f26a994a2af
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/media_galleries/fileapi/iapps_finder_impl.h"
7 #include "base/bind.h"
8 #include "base/logging.h"
9 #include "content/public/browser/browser_thread.h"
11 namespace iapps {
13 namespace {
15 void PostResultToUIThread(storage_monitor::StorageInfo::Type type,
16 const IAppsFinderCallback& callback,
17 const std::string& unique_id) {
18 DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
20 std::string device_id;
21 if (!unique_id.empty())
22 device_id = storage_monitor::StorageInfo::MakeDeviceId(type, unique_id);
24 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
25 base::Bind(callback, device_id));
28 } // namespace
30 void FindIAppsOnFileThread(storage_monitor::StorageInfo::Type type,
31 const IAppsFinderTask& task,
32 const IAppsFinderCallback& callback) {
33 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
34 DCHECK(!task.is_null());
35 DCHECK(!callback.is_null());
37 content::BrowserThread::PostTask(
38 content::BrowserThread::FILE,
39 FROM_HERE,
40 base::Bind(task, base::Bind(PostResultToUIThread, type, callback)));
43 // iPhoto is only supported on OSX.
44 #if !defined(OS_MACOSX)
45 void FindIPhotoLibrary(const IAppsFinderCallback& callback) {
46 callback.Run(std::string());
48 #endif // !defined(OS_MACOSX)
50 // iTunes is only support on OSX and Windows.
51 #if !defined(OS_MACOSX) && !defined(OS_WIN)
52 void FindITunesLibrary(const IAppsFinderCallback& callback) {
53 callback.Run(std::string());
55 #endif
57 bool PathIndicatesIPhotoLibrary(const std::string& device_id,
58 const base::FilePath& path) {
59 storage_monitor::StorageInfo::Type device_type;
60 std::string unique_id;
61 storage_monitor::StorageInfo::CrackDeviceId(
62 device_id, &device_type, &unique_id);
63 if (device_type != storage_monitor::StorageInfo::IPHOTO)
64 return false;
66 // |unique_id| is the path to the library XML file at the library root.
67 base::FilePath library_root =
68 base::FilePath::FromUTF8Unsafe(unique_id).DirName();
69 return (path == library_root) ||
70 (path == library_root.AppendASCII("Data")) ||
71 (path == library_root.AppendASCII("Originals")) ||
72 (path == library_root.AppendASCII("Masters"));
75 bool PathIndicatesITunesLibrary(const std::string& device_id,
76 const base::FilePath& path) {
77 storage_monitor::StorageInfo::Type device_type;
78 std::string unique_id;
79 storage_monitor::StorageInfo::CrackDeviceId(
80 device_id, &device_type, &unique_id);
81 if (device_type != storage_monitor::StorageInfo::ITUNES)
82 return false;
84 // |unique_id| is the path to the library XML file at the library root.
85 base::FilePath library_root =
86 base::FilePath::FromUTF8Unsafe(unique_id).DirName();
87 return (path == library_root) ||
88 (path == library_root.AppendASCII("iTunes Media")) ||
89 (path == library_root.AppendASCII("iTunes Media").AppendASCII("Music"));
92 } // namespace iapps