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

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: Undo incorrect fix 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 DCHECK(!database_path.empty());
53 54
54 std::string fsid = 55 std::string fsid =
55 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath( 56 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath(
56 fileapi::kFileSystemTypePicasa, 57 fileapi::kFileSystemTypePicasa,
57 extension_misc::kMediaFileSystemPathPart, 58 extension_misc::kMediaFileSystemPathPart,
58 base::FilePath()); 59 base::FilePath());
59 60
60 if (fsid.empty()) 61 if (fsid.empty())
61 return ""; 62 return "";
62 63
63 MediaTaskRunner()->PostTask( 64 picasa_fsids_.insert(fsid);
64 FROM_HERE, 65
65 Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem, 66 if (picasa_fsids_.size() == 1) {
66 base::Unretained(GetInstance()), database_path)); 67 MediaTaskRunner()->PostTask(
68 FROM_HERE,
69 Bind(&ImportedMediaGalleryRegistry::RegisterPicasaFileSystem,
70 base::Unretained(this), database_path));
71 #ifndef NDEBUG
72 picasa_database_path_ = database_path;
73 } else {
74 DCHECK_EQ(picasa_database_path_.value(), database_path.value());
75 #endif
76 }
67 77
68 return fsid; 78 return fsid;
69 } 79 }
70 80
71 // static 81 std::string ImportedMediaGalleryRegistry::RegisterITunesFilesystemOnUIThread(
72 bool ImportedMediaGalleryRegistry::RevokePicasaFilesystemOnUIThread( 82 const base::FilePath& library_xml_path) {
83 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
84 DCHECK(!library_xml_path.empty());
85
86 std::string fsid =
87 fileapi::IsolatedContext::GetInstance()->RegisterFileSystemForVirtualPath(
88 fileapi::kFileSystemTypeItunes,
89 extension_misc::kMediaFileSystemPathPart,
90 base::FilePath());
91
92 if (fsid.empty())
93 return std::string();
94
95 itunes_fsids_.insert(fsid);
96
97 if (itunes_fsids_.size() == 1) {
98 MediaTaskRunner()->PostTask(
99 FROM_HERE,
100 Bind(&ImportedMediaGalleryRegistry::RegisterITunesFileSystem,
101 base::Unretained(this), library_xml_path));
102 #ifndef NDEBUG
103 itunes_xml_library_path_ = library_xml_path;
104 } else {
105 DCHECK_EQ(itunes_xml_library_path_.value(), library_xml_path.value());
106 #endif
107 }
108
109 return fsid;
110 }
111
112 bool ImportedMediaGalleryRegistry::RevokeImportedFilesystemOnUIThread(
73 const std::string& fsid) { 113 const std::string& fsid) {
74 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 114 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
75 115
76 if (!fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid)) 116 if (picasa_fsids_.erase(fsid)) {
77 return false; 117 if (picasa_fsids_.empty()) {
118 MediaTaskRunner()->PostTask(
119 FROM_HERE,
120 Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem,
121 base::Unretained(this)));
122 }
123 return fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid);
124 }
78 125
79 MediaTaskRunner()->PostTask( 126 if (itunes_fsids_.erase(fsid)) {
80 FROM_HERE, 127 if (itunes_fsids_.empty()) {
81 Bind(&ImportedMediaGalleryRegistry::RevokePicasaFileSystem, 128 MediaTaskRunner()->PostTask(
82 base::Unretained(GetInstance()))); 129 FROM_HERE,
130 Bind(&ImportedMediaGalleryRegistry::RevokeITunesFileSystem,
131 base::Unretained(this)));
132 }
133 return fileapi::IsolatedContext::GetInstance()->RevokeFileSystem(fsid);
134 }
83 135
84 return true; 136 return false;
85 } 137 }
86 138
87 // static 139 // static
88 picasa::PicasaDataProvider* 140 picasa::PicasaDataProvider*
89 ImportedMediaGalleryRegistry::picasa_data_provider() { 141 ImportedMediaGalleryRegistry::PicasaDataProvider() {
90 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 142 DCHECK(CurrentlyOnMediaTaskRunnerThread());
91 DCHECK(GetInstance()->picasa_data_provider_); 143 DCHECK(GetInstance()->picasa_data_provider_);
92 return GetInstance()->picasa_data_provider_.get(); 144 return GetInstance()->picasa_data_provider_.get();
93 } 145 }
94 146
95 ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() 147 // static
96 : picasa_filesystems_count_(0) { 148 itunes::ITunesDataProvider*
149 ImportedMediaGalleryRegistry::ITunesDataProvider() {
150 DCHECK(CurrentlyOnMediaTaskRunnerThread());
151 DCHECK(GetInstance()->itunes_data_provider_);
152 return GetInstance()->itunes_data_provider_.get();
97 } 153 }
98 154
155 ImportedMediaGalleryRegistry::ImportedMediaGalleryRegistry() {}
156
99 ImportedMediaGalleryRegistry::~ImportedMediaGalleryRegistry() { 157 ImportedMediaGalleryRegistry::~ImportedMediaGalleryRegistry() {
100 DCHECK_EQ(0, picasa_filesystems_count_); 158 DCHECK_EQ(0U, picasa_fsids_.size());
159 DCHECK_EQ(0U, itunes_fsids_.size());
101 } 160 }
102 161
103 void ImportedMediaGalleryRegistry::RegisterPicasaFileSystem( 162 void ImportedMediaGalleryRegistry::RegisterPicasaFileSystem(
104 const base::FilePath& database_path) { 163 const base::FilePath& database_path) {
105 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 164 DCHECK(CurrentlyOnMediaTaskRunnerThread());
106 165 DCHECK(!picasa_data_provider_);
107 if (++picasa_filesystems_count_ == 1) { 166 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 } 167 }
112 168
113 void ImportedMediaGalleryRegistry::RevokePicasaFileSystem() { 169 void ImportedMediaGalleryRegistry::RevokePicasaFileSystem() {
114 DCHECK(CurrentlyOnMediaTaskRunnerThread()); 170 DCHECK(CurrentlyOnMediaTaskRunnerThread());
171 DCHECK(picasa_data_provider_);
172 picasa_data_provider_.reset();
173 }
115 174
116 if (--picasa_filesystems_count_ == 0) { 175 void ImportedMediaGalleryRegistry::RegisterITunesFileSystem(
117 DCHECK(picasa_data_provider_); 176 const base::FilePath& xml_library_path) {
118 picasa_data_provider_.reset(NULL); 177 DCHECK(CurrentlyOnMediaTaskRunnerThread());
119 } 178 DCHECK(!itunes_data_provider_);
179 itunes_data_provider_.reset(new itunes::ITunesDataProvider(xml_library_path));
180 }
181
182 void ImportedMediaGalleryRegistry::RevokeITunesFileSystem() {
183 DCHECK(CurrentlyOnMediaTaskRunnerThread());
184 DCHECK(itunes_data_provider_);
185 itunes_data_provider_.reset();
120 } 186 }
121 187
122 } // namespace chrome 188 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698