Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: chrome/browser/media_galleries/imported_media_gallery_registry.cc

Issue 16158004: iTunes file util and data provider for media galleries (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 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/media_galleries/imported_media_gallery_registry.h" 5 #include "chrome/browser/media_galleries/imported_media_gallery_registry.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/threading/sequenced_worker_pool.h" 9 #include "base/threading/sequenced_worker_pool.h"
10 #include "chrome/browser/media_galleries/fileapi/itunes_data_provider.h"
10 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h" 11 #include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h"
11 #include "chrome/common/extensions/extension_constants.h" 12 #include "chrome/common/extensions/extension_constants.h"
12 #include "content/public/browser/browser_thread.h" 13 #include "content/public/browser/browser_thread.h"
13 #include "webkit/browser/fileapi/file_system_task_runners.h" 14 #include "webkit/browser/fileapi/file_system_task_runners.h"
14 #include "webkit/browser/fileapi/isolated_context.h" 15 #include "webkit/browser/fileapi/isolated_context.h"
15 16
16 using base::Bind; 17 using base::Bind;
17 18
18 namespace chrome { 19 namespace chrome {
19 20
(...skipping 19 matching lines...) Expand all
39 static base::LazyInstance<ImportedMediaGalleryRegistry>::Leaky 40 static base::LazyInstance<ImportedMediaGalleryRegistry>::Leaky
40 g_imported_media_gallery_registry = LAZY_INSTANCE_INITIALIZER; 41 g_imported_media_gallery_registry = LAZY_INSTANCE_INITIALIZER;
41 42
42 } 43 }
43 44
44 // static 45 // static
45 ImportedMediaGalleryRegistry* ImportedMediaGalleryRegistry::GetInstance() { 46 ImportedMediaGalleryRegistry* ImportedMediaGalleryRegistry::GetInstance() {
46 return g_imported_media_gallery_registry.Pointer(); 47 return g_imported_media_gallery_registry.Pointer();
47 } 48 }
48 49
49 // static
50 std::string ImportedMediaGalleryRegistry::RegisterPicasaFilesystemOnUIThread( 50 std::string ImportedMediaGalleryRegistry::RegisterPicasaFilesystemOnUIThread(
51 const base::FilePath& database_path) { 51 const base::FilePath& database_path) {
52 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 52 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
53 53
54 std::string fsid = 54 std::string fsid =
55 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath( 55 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath(
56 fileapi::kFileSystemTypePicasa, 56 fileapi::kFileSystemTypePicasa,
57 extension_misc::kMediaFileSystemPathPart, 57 extension_misc::kMediaFileSystemPathPart,
58 base::FilePath()); 58 base::FilePath());
59 59
60 if (fsid.empty()) 60 if (fsid.empty())
61 return ""; 61 return "";
62 62
63 MediaTaskRunner()->PostTask( 63 picasa_fsids_.insert(fsid);
64 FROM_HERE, 64
65 Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem, 65 if (picasa_fsids_.size() == 1) {
66 base::Unretained(GetInstance()), database_path)); 66 MediaTaskRunner()->PostTask(
67 FROM_HERE,
68 Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem,
69 base::Unretained(GetInstance()), database_path));
Lei Zhang 2013/06/06 03:48:47 Since this is no longer static, use this instead o
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
70 #ifndef NDEBUG
71 picasa_database_path_ = database_path;
72 } else {
73 DCHECK_EQ(picasa_database_path_, database_path);
Lei Zhang 2013/06/06 03:48:47 If these were FilePaths, you need to compare their
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
74 #endif
75 }
67 76
68 return fsid; 77 return fsid;
69 } 78 }
70 79
71 // static 80 std::string ImportedMediaGalleryRegistry::RegisterITunesFilesystemOnUIThread(
72 bool ImportedMediaGalleryRegistry::RevokePicasaFilesystemOnUIThread( 81 const base::FilePath& library_xml_path) {
Lei Zhang 2013/06/06 03:48:47 DCHECK the path is not empty?
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
82 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
83
84 std::string fsid =
85 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath(
86 fileapi::kFileSystemTypeItunes,
87 extension_misc::kMediaFileSystemPathPart,
88 base::FilePath());
89
90 if (fsid.empty())
91 return "";
Lei Zhang 2013/06/06 03:48:47 FWIW, this can't actually be reached. If we reach
vandebo (ex-Chrome) 2013/06/06 19:49:18 It can fail in IsolatedContext, so I fixed the cal
Lei Zhang 2013/06/07 03:29:07 With the current implementation and the parameters
vandebo (ex-Chrome) 2013/06/07 03:46:52 Are you saying that we should add a CHECK in Isola
92
93 itunes_fsids_.insert(fsid);
94
95 if (itunes_fsids_.size() == 1) {
96 MediaTaskRunner()->PostTask(
97 FROM_HERE,
98 Bind(&ImportedMediaGalleryRegistry::RegisterITunesFileSystem,
99 base::Unretained(GetInstance()), library_xml_path));
100 #ifndef NDEBUG
101 itunes_xml_library_path_ = library_xml_path;
102 } else {
103 DCHECK_EQ(itumes_xml_library_path_, library_xml_path);
Lei Zhang 2013/06/06 03:48:47 typo: itumes
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
104 #endif
105 }
106
107 return fsid;
108 }
109
110 bool ImportedMediaGalleryRegistry::RevokeImportedFilesystemOnUIThread(
73 const std::string& fsid) { 111 const std::string& fsid) {
74 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 112 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
75 113
76 if (!fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid)) 114 if (!fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid))
77 return false; 115 return false;
78 116
79 MediaTaskRunner()->PostTask( 117 if (picasa_fsids_.erase(fsid) && !picasa_fsids_.size()) {
Lei Zhang 2013/06/06 03:48:47 !foo_set.size() -> foo_set.empty()
Lei Zhang 2013/06/06 03:48:47 If |picasa_fsids_| has 2 elements, and you erase 1
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
80 FROM_HERE, 118 MediaTaskRunner()->PostTask(
81 Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem, 119 FROM_HERE,
82 base::Unretained(GetInstance()))); 120 Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem,
121 base::Unretained(GetInstance())));
122 return true;
123 }
83 124
84 return true; 125 if (itunes_fsids_.erase(fsid) && !itunes_fsids_.size()) {
126 MediaTaskRunner()->PostTask(
127 FROM_HERE,
128 Bind(&ImportedMediaGalleryRegistry::RevokeITunesFileSystem,
129 base::Unretained(GetInstance())));
130 return true;
131 }
132
133 NOTREACHED();
134 return false;
85 } 135 }
86 136
87 // static 137 // static
88 picasa::PicasaDataProvider* 138 picasa::PicasaDataProvider*
89 ImportedMediaGalleryRegistry::picasa_data_provider() { 139 ImportedMediaGalleryRegistry::picasa_data_provider() {
90 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 140 DCHECK(CurrentlyOnMediaTaskRunnerThread());
91 DCHECK(GetInstance()->picasa_data_provider_); 141 DCHECK(GetInstance()->picasa_data_provider_);
92 return GetInstance()->picasa_data_provider_.get(); 142 return GetInstance()->picasa_data_provider_.get();
93 } 143 }
94 144
95 ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() 145 // static
96 : picasa_filesystems_count_(0) { 146 itunes::ITunesDataProvider*
147 ImportedMediaGalleryRegistry::itunes_data_provider() {
Lei Zhang 2013/06/06 03:48:47 nit: These are not simple getters, and should not
vandebo (ex-Chrome) 2013/06/06 19:49:18 Done.
148 DCHECK(CurrentlyOnMediaTaskRunnerThread());
149 DCHECK(GetInstance()->itunes_data_provider_);
150 return GetInstance()->itunes_data_provider_.get();
97 } 151 }
98 152
153 ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() {}
154
99 ImportedMediaGalleryRegistry::~ImportedMediaGalleryRegistry() { 155 ImportedMediaGalleryRegistry::~ImportedMediaGalleryRegistry() {
100 DCHECK_EQ(0, picasa_filesystems_count_); 156 DCHECK_EQ(0U, picasa_fsids_.size());
157 DCHECK_EQ(0U, itunes_fsids_.size());
101 } 158 }
102 159
103 void ImportedMediaGalleryRegistry::RegisterPicasaFileSystem( 160 void ImportedMediaGalleryRegistry::RegisterPicasaFileSystem(
104 const base::FilePath& database_path) { 161 const base::FilePath& database_path) {
105 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 162 DCHECK(CurrentlyOnMediaTaskRunnerThread());
106 163 DCHECK(!picasa_data_provider_);
107 if (++picasa_filesystems_count_ == 1) { 164 picasa_data_provider_.reset(new picasa::PicasaDataProvider(database_path));
108 DCHECK(!picasa_data_provider_);
109 picasa_data_provider_.reset(new picasa::PicasaDataProvider(database_path));
110 }
111 } 165 }
112 166
113 void ImportedMediaGalleryRegistry::RevokePicasaFileSystem() { 167 void ImportedMediaGalleryRegistry::RevokePicasaFileSystem() {
114 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 168 DCHECK(CurrentlyOnMediaTaskRunnerThread());
169 DCHECK(picasa_data_provider_);
170 picasa_data_provider_.reset();
171 }
115 172
116 if (--picasa_filesystems_count_ == 0) { 173 void ImportedMediaGalleryRegistry::RegisterITunesFileSystem(
117 DCHECK(picasa_data_provider_); 174 const base::FilePath& xml_library_path) {
118 picasa_data_provider_.reset(NULL); 175 DCHECK(CurrentlyOnMediaTaskRunnerThread());
119 } 176 DCHECK(!itunes_data_provider_);
177 itunes_data_provider_.reset(new itunes::ITunesDataProvider(xml_library_path));
178 }
179
180 void ImportedMediaGalleryRegistry::RevokeITunesFileSystem() {
181 DCHECK(CurrentlyOnMediaTaskRunnerThread());
182 DCHECK(itunes_data_provider_);
183 itunes_data_provider_.reset();
120 } 184 }
121 185
122 } // namespace chrome 186 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698