Index: chrome/browser/media_galleries/imported_media_gallery_registry.cc |
diff --git a/chrome/browser/media_galleries/imported_media_gallery_registry.cc b/chrome/browser/media_galleries/imported_media_gallery_registry.cc |
index 0a17c82cf4293d7abe4b9116df31e6ffdc6c03b8..d8d006b9296665225c4d2fadfcf6d6147c24a4e1 100644 |
--- a/chrome/browser/media_galleries/imported_media_gallery_registry.cc |
+++ b/chrome/browser/media_galleries/imported_media_gallery_registry.cc |
@@ -7,6 +7,7 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
#include "base/threading/sequenced_worker_pool.h" |
+#include "chrome/browser/media_galleries/fileapi/itunes_data_provider.h" |
#include "chrome/browser/media_galleries/fileapi/picasa/picasa_data_provider.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "content/public/browser/browser_thread.h" |
@@ -46,10 +47,10 @@ ImportedMediaGalleryRegistry* ImportedMediaGalleryRegistry::GetInstance() { |
return g_imported_media_gallery_registry.Pointer(); |
} |
-// static |
std::string ImportedMediaGalleryRegistry::RegisterPicasaFilesystemOnUIThread( |
const base::FilePath& database_path) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ DCHECK(!database_path.empty()); |
std::string fsid = |
fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath( |
@@ -60,63 +61,128 @@ std::string ImportedMediaGalleryRegistry::RegisterPicasaFilesystemOnUIThread( |
if (fsid.empty()) |
return ""; |
- MediaTaskRunner()->PostTask( |
- FROM_HERE, |
- Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem, |
- base::Unretained(GetInstance()), database_path)); |
+ picasa_fsids_.insert(fsid); |
+ |
+ if (picasa_fsids_.size() == 1) { |
+ MediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem, |
+ base::Unretained(this), database_path)); |
+#ifndef NDEBUG |
+ picasa_database_path_ = database_path; |
+ } else { |
+ DCHECK_EQ(picasa_database_path_.value(), database_path.value()); |
+#endif |
+ } |
return fsid; |
} |
-// static |
-bool ImportedMediaGalleryRegistry::RevokePicasaFilesystemOnUIThread( |
+std::string ImportedMediaGalleryRegistry::RegisterITunesFilesystemOnUIThread( |
+ const base::FilePath& library_xml_path) { |
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
+ DCHECK(!library_xml_path.empty()); |
+ |
+ std::string fsid = |
+ fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath( |
+ fileapi::kFileSystemTypeItunes, |
+ extension_misc::kMediaFileSystemPathPart, |
+ base::FilePath()); |
+ |
+ if (fsid.empty()) |
+ return std::string(); |
+ |
+ itunes_fsids_.insert(fsid); |
+ |
+ if (itunes_fsids_.size() == 1) { |
+ MediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ Bind(&ImportedMediaGalleryRegistry::RegisterITunesFileSystem, |
+ base::Unretained(this), library_xml_path)); |
+#ifndef NDEBUG |
+ itunes_xml_library_path_ = library_xml_path; |
+ } else { |
+ DCHECK_EQ(itunes_xml_library_path_.value(), library_xml_path.value()); |
+#endif |
+ } |
+ |
+ return fsid; |
+} |
+ |
+bool ImportedMediaGalleryRegistry::RevokeImportedFilesystemOnUIThread( |
const std::string& fsid) { |
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- if (!fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid)) |
- return false; |
+ if (picasa_fsids_.erase(fsid)) { |
+ if (picasa_fsids_.empty()) { |
+ MediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem, |
+ base::Unretained(this))); |
+ } |
+ return fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid); |
+ } |
- MediaTaskRunner()->PostTask( |
- FROM_HERE, |
- Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem, |
- base::Unretained(GetInstance()))); |
+ if (itunes_fsids_.erase(fsid)) { |
+ if (itunes_fsids_.empty()) { |
+ MediaTaskRunner()->PostTask( |
+ FROM_HERE, |
+ Bind(&ImportedMediaGalleryRegistry::RevokeITunesFileSystem, |
+ base::Unretained(this))); |
+ } |
+ return fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid); |
+ } |
- return true; |
+ return false; |
} |
// static |
picasa::PicasaDataProvider* |
-ImportedMediaGalleryRegistry::picasa_data_provider() { |
+ImportedMediaGalleryRegistry::PicasaDataProvider() { |
DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
DCHECK(GetInstance()->picasa_data_provider_); |
return GetInstance()->picasa_data_provider_.get(); |
} |
-ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() |
- : picasa_filesystems_count_(0) { |
+// static |
+itunes::ITunesDataProvider* |
+ImportedMediaGalleryRegistry::ITunesDataProvider() { |
+ DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
+ DCHECK(GetInstance()->itunes_data_provider_); |
+ return GetInstance()->itunes_data_provider_.get(); |
} |
+ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() {} |
+ |
ImportedMediaGalleryRegistry::~ImportedMediaGalleryRegistry() { |
- DCHECK_EQ(0, picasa_filesystems_count_); |
+ DCHECK_EQ(0U, picasa_fsids_.size()); |
+ DCHECK_EQ(0U, itunes_fsids_.size()); |
} |
void ImportedMediaGalleryRegistry::RegisterPicasaFileSystem( |
const base::FilePath& database_path) { |
DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
- |
- if (++picasa_filesystems_count_ == 1) { |
- DCHECK(!picasa_data_provider_); |
- picasa_data_provider_.reset(new picasa::PicasaDataProvider(database_path)); |
- } |
+ DCHECK(!picasa_data_provider_); |
+ picasa_data_provider_.reset(new picasa::PicasaDataProvider(database_path)); |
} |
void ImportedMediaGalleryRegistry::RevokePicasaFileSystem() { |
DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
+ DCHECK(picasa_data_provider_); |
+ picasa_data_provider_.reset(); |
+} |
- if (--picasa_filesystems_count_ == 0) { |
- DCHECK(picasa_data_provider_); |
- picasa_data_provider_.reset(NULL); |
- } |
+void ImportedMediaGalleryRegistry::RegisterITunesFileSystem( |
+ const base::FilePath& xml_library_path) { |
+ DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
+ DCHECK(!itunes_data_provider_); |
+ itunes_data_provider_.reset(new itunes::ITunesDataProvider(xml_library_path)); |
+} |
+ |
+void ImportedMediaGalleryRegistry::RevokeITunesFileSystem() { |
+ DCHECK(CurrentlyOnMediaTaskRunnerThread()); |
+ DCHECK(itunes_data_provider_); |
+ itunes_data_provider_.reset(); |
} |
} // namespace chrome |