summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-21 21:32:58 +0000
committeryoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-21 21:32:58 +0000
commitb16fc2e17f05ba5d285329559a4e352f9f689374 (patch)
treede60120771efe9df3e7eb789e2c92cd2720dbcef
parentba25bb107b348f1b4057fe10759695f3a4aecf5f (diff)
downloadchromium_src-b16fc2e17f05ba5d285329559a4e352f9f689374.zip
chromium_src-b16fc2e17f05ba5d285329559a4e352f9f689374.tar.gz
chromium_src-b16fc2e17f05ba5d285329559a4e352f9f689374.tar.bz2
Make file browser event router owned by the ExtensionService instead of a singleton.
Originally was a part of http://codereview.chromium.org/7243012/ BUG=81745 TEST=covered by existing FileSystemExtensionApiTest tests Review URL: http://codereview.chromium.org/7460005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93475 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_event_router.cc43
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_event_router.h21
-rw-r--r--chrome/browser/extensions/extension_file_browser_private_api.cc8
-rw-r--r--chrome/browser/extensions/extension_service.cc12
-rw-r--r--chrome/browser/extensions/extension_service.h11
5 files changed, 41 insertions, 54 deletions
diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.cc b/chrome/browser/chromeos/extensions/file_browser_event_router.cc
index d78b176..df0d61e 100644
--- a/chrome/browser/chromeos/extensions/file_browser_event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_event_router.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/chromeos/extensions/file_browser_event_router.h"
#include "base/json/json_writer.h"
-#include "base/memory/singleton.h"
#include "base/stl_util.h"
#include "base/values.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
@@ -55,17 +54,20 @@ DictionaryValue* DiskToDictionaryValue(
return result;
}
-ExtensionFileBrowserEventRouter::ExtensionFileBrowserEventRouter()
- : delegate_(new ExtensionFileBrowserEventRouter::FileWatcherDelegate()),
- profile_(NULL) {
+ExtensionFileBrowserEventRouter::ExtensionFileBrowserEventRouter(
+ Profile* profile)
+ : delegate_(new ExtensionFileBrowserEventRouter::FileWatcherDelegate(this)),
+ profile_(profile) {
}
ExtensionFileBrowserEventRouter::~ExtensionFileBrowserEventRouter() {
DCHECK(file_watchers_.empty());
STLDeleteValues(&file_watchers_);
- if (!profile_)
+ if (!profile_) {
+ NOTREACHED();
return;
+ }
if (!chromeos::CrosLibrary::Get()->EnsureLoaded())
return;
chromeos::MountLibrary* lib =
@@ -74,17 +76,11 @@ ExtensionFileBrowserEventRouter::~ExtensionFileBrowserEventRouter() {
profile_ = NULL;
}
-// static
-ExtensionFileBrowserEventRouter*
- ExtensionFileBrowserEventRouter::GetInstance() {
- return Singleton<ExtensionFileBrowserEventRouter>::get();
-}
-
-void ExtensionFileBrowserEventRouter::ObserveFileSystemEvents(
- Profile* profile) {
- if (!profile)
+void ExtensionFileBrowserEventRouter::ObserveFileSystemEvents() {
+ if (!profile_) {
+ NOTREACHED();
return;
- profile_ = profile;
+ }
if (!chromeos::CrosLibrary::Get()->EnsureLoaded())
return;
if (chromeos::UserManager::Get()->user_is_logged_in()) {
@@ -133,17 +129,6 @@ void ExtensionFileBrowserEventRouter::RemoveFileWatch(
}
}
-void ExtensionFileBrowserEventRouter::StopObservingFileSystemEvents() {
- if (!profile_)
- return;
- if (!chromeos::CrosLibrary::Get()->EnsureLoaded())
- return;
- chromeos::MountLibrary* lib =
- chromeos::CrosLibrary::Get()->GetMountLibrary();
- lib->RemoveObserver(this);
- profile_ = NULL;
-}
-
void ExtensionFileBrowserEventRouter::DiskChanged(
chromeos::MountLibraryEventType event,
const chromeos::MountLibrary::Disk* disk) {
@@ -361,7 +346,8 @@ ExtensionFileBrowserEventRouter::NotificationMap::iterator
// ExtensionFileBrowserEventRouter::WatcherDelegate methods.
-ExtensionFileBrowserEventRouter::FileWatcherDelegate::FileWatcherDelegate() {
+ExtensionFileBrowserEventRouter::FileWatcherDelegate::FileWatcherDelegate(
+ ExtensionFileBrowserEventRouter* router) : router_(router) {
}
void ExtensionFileBrowserEventRouter::FileWatcherDelegate::OnFilePathChanged(
@@ -387,6 +373,5 @@ void ExtensionFileBrowserEventRouter::FileWatcherDelegate::OnFilePathError(
void
ExtensionFileBrowserEventRouter::FileWatcherDelegate::HandleFileWatchOnUIThread(
const FilePath& local_path, bool got_error) {
- ExtensionFileBrowserEventRouter::GetInstance()->HandleFileWatchNotification(
- local_path, got_error);
+ router_->HandleFileWatchNotification(local_path, got_error);
}
diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.h b/chrome/browser/chromeos/extensions/file_browser_event_router.h
index ebe4eba..fb8047d 100644
--- a/chrome/browser/chromeos/extensions/file_browser_event_router.h
+++ b/chrome/browser/chromeos/extensions/file_browser_event_router.h
@@ -28,12 +28,11 @@ class SystemNotification;
class ExtensionFileBrowserEventRouter
: public chromeos::MountLibrary::Observer {
public:
- static ExtensionFileBrowserEventRouter* GetInstance();
-
- // Starts/stops observing file system change events. Currently only
+ explicit ExtensionFileBrowserEventRouter(Profile* profile);
+ virtual ~ExtensionFileBrowserEventRouter();
+ // Starts observing file system change events. Currently only
// MountLibrary events are being observed.
- void ObserveFileSystemEvents(Profile* profile);
- void StopObservingFileSystemEvents();
+ void ObserveFileSystemEvents();
// File watch setup routines.
bool AddFileWatch(const FilePath& file_path,
@@ -44,12 +43,11 @@ class ExtensionFileBrowserEventRouter
// MountLibrary::Observer overrides.
virtual void DiskChanged(chromeos::MountLibraryEventType event,
- const chromeos::MountLibrary::Disk* disk);
+ const chromeos::MountLibrary::Disk* disk) OVERRIDE;
virtual void DeviceChanged(chromeos::MountLibraryEventType event,
- const std::string& device_path);
+ const std::string& device_path) OVERRIDE;
private:
- friend struct DefaultSingletonTraits<ExtensionFileBrowserEventRouter>;
typedef std::map<std::string, linked_ptr<chromeos::SystemNotification> >
NotificationMap;
typedef std::map<std::string, std::string> MountPointMap;
@@ -70,7 +68,7 @@ class ExtensionFileBrowserEventRouter
// Helper class for passing through file watch notification events.
class FileWatcherDelegate : public base::files::FilePathWatcher::Delegate {
public:
- FileWatcherDelegate();
+ explicit FileWatcherDelegate(ExtensionFileBrowserEventRouter* router);
private:
// base::files::FilePathWatcher::Delegate overrides.
@@ -78,10 +76,9 @@ class ExtensionFileBrowserEventRouter
virtual void OnFilePathError(const FilePath& path) OVERRIDE;
void HandleFileWatchOnUIThread(const FilePath& local_path, bool got_error);
- };
- ExtensionFileBrowserEventRouter();
- virtual ~ExtensionFileBrowserEventRouter();
+ ExtensionFileBrowserEventRouter* router_;
+ };
// USB mount event handlers.
void OnDiskAdded(const chromeos::MountLibrary::Disk* disk);
diff --git a/chrome/browser/extensions/extension_file_browser_private_api.cc b/chrome/browser/extensions/extension_file_browser_private_api.cc
index 7d0622c..3f0cb0e 100644
--- a/chrome/browser/extensions/extension_file_browser_private_api.cc
+++ b/chrome/browser/extensions/extension_file_browser_private_api.cc
@@ -479,15 +479,15 @@ void FileWatchBrowserFunctionBase::RunFileWatchOperationOnFileThread(
bool AddFileWatchBrowserFunction::PerformFileWatchOperation(
const FilePath& local_path, const FilePath& virtual_path,
const std::string& extension_id) {
- return ExtensionFileBrowserEventRouter::GetInstance()->AddFileWatch(
- local_path, virtual_path, extension_id);
+ return profile_->GetExtensionService()->file_browser_event_router()->
+ AddFileWatch(local_path, virtual_path, extension_id);
}
bool RemoveFileWatchBrowserFunction::PerformFileWatchOperation(
const FilePath& local_path, const FilePath& unused,
const std::string& extension_id) {
- ExtensionFileBrowserEventRouter::GetInstance()->RemoveFileWatch(
- local_path, extension_id);
+ profile_->GetExtensionService()->file_browser_event_router()->
+ RemoveFileWatch(local_path, extension_id);
return true;
}
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 6afe4ce..c2aab1e 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -646,13 +646,6 @@ ExtensionService::~ExtensionService() {
ExternalExtensionProviderInterface* provider = i->get();
provider->ServiceShutdown();
}
-
-#if defined(OS_CHROMEOS)
- if (event_routers_initialized_) {
- ExtensionFileBrowserEventRouter::GetInstance()->
- StopObservingFileSystemEvents();
- }
-#endif
}
void ExtensionService::InitEventRouters() {
@@ -678,8 +671,9 @@ void ExtensionService::InitEventRouters() {
web_navigation_event_router_->Init();
#if defined(OS_CHROMEOS)
- ExtensionFileBrowserEventRouter::GetInstance()->ObserveFileSystemEvents(
- profile_);
+ file_browser_event_router_.reset(
+ new ExtensionFileBrowserEventRouter(profile_));
+ file_browser_event_router_->ObserveFileSystemEvents();
// Lazy initialization.
chromeos::ExtensionInputMethodEventRouter::GetInstance();
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 491a80a..4c74f0a 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -44,6 +44,7 @@ class ExtensionBookmarkEventRouter;
class ExtensionBrowserEventRouter;
class ExtensionContentSettingsStore;
class ExtensionCookiesEventRouter;
+class ExtensionFileBrowserEventRouter;
class ExtensionHistoryEventRouter;
class ExtensionInstallUI;
class ExtensionManagementEventRouter;
@@ -471,6 +472,12 @@ class ExtensionService
return browser_event_router_.get();
}
+#if defined(OS_CHROMEOS)
+ ExtensionFileBrowserEventRouter* file_browser_event_router() {
+ return file_browser_event_router_.get();
+ }
+#endif
+
// Notify the frontend that there was an error loading an extension.
// This method is public because ExtensionServiceBackend can post to here.
void ReportExtensionLoadError(const FilePath& extension_path,
@@ -729,6 +736,10 @@ class ExtensionService
scoped_ptr<ExtensionWebNavigationEventRouter> web_navigation_event_router_;
+#if defined(OS_CHROMEOS)
+ scoped_ptr<ExtensionFileBrowserEventRouter> file_browser_event_router_;
+#endif
+
// A collection of external extension providers. Each provider reads
// a source of external extension information. Examples include the
// windows registry and external_extensions.json.