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

Unified Diff: chrome/browser/chromeos/file_system_provider/service.cc

Issue 244623003: [fsp] [recommit] Add FileSystemURLParser to the file system provider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/file_system_provider/service.cc
diff --git a/chrome/browser/chromeos/file_system_provider/service.cc b/chrome/browser/chromeos/file_system_provider/service.cc
index ba822d364e24d91045f6deed6e7266ae40f14a1a..36bdda0063284813622296953f2129446cca7003 100644
--- a/chrome/browser/chromeos/file_system_provider/service.cc
+++ b/chrome/browser/chromeos/file_system_provider/service.cc
@@ -47,7 +47,16 @@ Service::Service(Profile* profile,
}
Service::~Service() {
- extension_registry_->RemoveObserver(this);
+ ProvidedFileSystemMap::iterator it = file_system_map_.begin();
+ while (it != file_system_map_.end()) {
+ const int file_system_id = it->first;
+ const std::string extension_id =
+ it->second->GetFileSystemInfo().extension_id();
+ ++it;
+ UnmountFileSystem(extension_id, file_system_id);
+ }
+
+ DCHECK_EQ(0u, file_system_map_.size());
STLDeleteValues(&file_system_map_);
}
@@ -95,15 +104,14 @@ int Service::MountFileSystem(const std::string& extension_id,
// The mount point path and name are unique per system, since they are system
// wide. This is necessary for copying between profiles.
- const base::FilePath& mount_point_path =
- util::GetMountPointPath(profile_, extension_id, file_system_id);
- const std::string mount_point_name =
- mount_point_path.BaseName().AsUTF8Unsafe();
+ const base::FilePath& mount_path =
+ util::GetMountPath(profile_, extension_id, file_system_id);
+ const std::string mount_point_name = mount_path.BaseName().AsUTF8Unsafe();
if (!mount_points->RegisterFileSystem(mount_point_name,
fileapi::kFileSystemTypeProvided,
fileapi::FileSystemMountOption(),
- mount_point_path)) {
+ mount_path)) {
FOR_EACH_OBSERVER(
Observer,
observers_,
@@ -116,10 +124,10 @@ int Service::MountFileSystem(const std::string& extension_id,
// system provider file system id.
// Examples:
// file_system_id = 41
- // mount_point_name = file_system_id = b33f1337-41-5aa5
- // mount_point_path = /provided/b33f1337-41-5aa5
+ // mount_point_name = b33f1337-41-5aa5
+ // mount_path = /provided/b33f1337-41-5aa5
ProvidedFileSystemInfo file_system_info(
- extension_id, file_system_id, file_system_name, mount_point_path);
+ extension_id, file_system_id, file_system_name, mount_path);
// The event router may be NULL for unit tests.
extensions::EventRouter* router = extensions::EventRouter::Get(profile_);
@@ -128,6 +136,7 @@ int Service::MountFileSystem(const std::string& extension_id,
file_system_factory_.Run(router, file_system_info);
DCHECK(file_system);
file_system_map_[file_system_id] = file_system;
+ mount_point_name_to_id_map_[mount_point_name] = file_system_id;
FOR_EACH_OBSERVER(
Observer,
@@ -142,7 +151,7 @@ bool Service::UnmountFileSystem(const std::string& extension_id,
int file_system_id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- ProvidedFileSystemMap::iterator file_system_it =
+ const ProvidedFileSystemMap::iterator file_system_it =
file_system_map_.find(file_system_id);
if (file_system_it == file_system_map_.end() ||
file_system_it->second->GetFileSystemInfo().extension_id() !=
@@ -179,8 +188,11 @@ bool Service::UnmountFileSystem(const std::string& extension_id,
observers_,
OnProvidedFileSystemUnmount(file_system_info, base::File::FILE_OK));
+ mount_point_name_to_id_map_.erase(mount_point_name);
+
delete file_system_it->second;
file_system_map_.erase(file_system_it);
+
return true;
}
@@ -215,7 +227,7 @@ ProvidedFileSystemInterface* Service::GetProvidedFileSystem(
int file_system_id) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
- ProvidedFileSystemMap::iterator file_system_it =
+ const ProvidedFileSystemMap::const_iterator file_system_it =
file_system_map_.find(file_system_id);
if (file_system_it == file_system_map_.end() ||
file_system_it->second->GetFileSystemInfo().extension_id() !=
@@ -246,6 +258,23 @@ void Service::OnExtensionUnloaded(
}
}
+ProvidedFileSystemInterface* Service::GetProvidedFileSystem(
+ const std::string& mount_point_name) {
+ DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+ const MountPointNameToIdMap::const_iterator mapping_it =
+ mount_point_name_to_id_map_.find(mount_point_name);
+ if (mapping_it == mount_point_name_to_id_map_.end())
+ return NULL;
+
+ const ProvidedFileSystemMap::const_iterator file_system_it =
+ file_system_map_.find(mapping_it->second);
+ if (file_system_it == file_system_map_.end())
+ return NULL;
+
+ return file_system_it->second;
+}
+
void Service::OnRequestUnmountStatus(
const ProvidedFileSystemInfo& file_system_info,
base::File::Error error) {

Powered by Google App Engine
This is Rietveld 408576698