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

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

Issue 213123008: [fsp] Unmount file systems when the providing extension gets unloaded. (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 9f4151cc69004a97cbf76742686cbe51e64f1c93..ba822d364e24d91045f6deed6e7266ae40f14a1a 100644
--- a/chrome/browser/chromeos/file_system_provider/service.cc
+++ b/chrome/browser/chromeos/file_system_provider/service.cc
@@ -14,6 +14,8 @@
#include "chrome/browser/chromeos/file_system_provider/service_factory.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/event_router.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_system.h"
#include "webkit/browser/fileapi/external_mount_points.h"
namespace chromeos {
@@ -34,13 +36,20 @@ ProvidedFileSystemInterface* CreateProvidedFileSystem(
} // namespace
-Service::Service(Profile* profile)
+Service::Service(Profile* profile,
+ extensions::ExtensionRegistry* extension_registry)
: profile_(profile),
+ extension_registry_(extension_registry),
file_system_factory_(base::Bind(CreateProvidedFileSystem)),
next_id_(1),
- weak_ptr_factory_(this) {}
+ weak_ptr_factory_(this) {
+ extension_registry_->AddObserver(this);
+}
-Service::~Service() { STLDeleteValues(&file_system_map_); }
+Service::~Service() {
+ extension_registry_->RemoveObserver(this);
+ STLDeleteValues(&file_system_map_);
+}
// static
Service* Service::Get(content::BrowserContext* context) {
@@ -217,7 +226,25 @@ ProvidedFileSystemInterface* Service::GetProvidedFileSystem(
return file_system_it->second;
}
-void Service::Shutdown() {}
+void Service::OnExtensionUnloaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UnloadedExtensionInfo::Reason reason) {
+ // Unmount all of the provided file systems associated with this extension.
+ ProvidedFileSystemMap::iterator it = file_system_map_.begin();
+ while (it != file_system_map_.end()) {
+ const ProvidedFileSystemInfo& file_system_info =
+ it->second->GetFileSystemInfo();
+ // Advance the iterator beforehand, otherwise it will become invalidated
+ // by the UnmountFileSystem() call.
+ ++it;
+ if (file_system_info.extension_id() == extension->id()) {
+ bool result = UnmountFileSystem(file_system_info.extension_id(),
+ file_system_info.file_system_id());
+ DCHECK(result);
+ }
+ }
+}
void Service::OnRequestUnmountStatus(
const ProvidedFileSystemInfo& file_system_info,

Powered by Google App Engine
This is Rietveld 408576698