Fix compile on ChromeOS. Revert "File browser: de-singleton"
This reverts commit 7db4f5b43aba588022cbc3c182f539da8cdbfa03.
BUG=none
TEST=none
TBR=asargent
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90482 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.cc b/chrome/browser/chromeos/extensions/file_browser_event_router.cc
index 121cd7cb..64d46d2 100644
--- a/chrome/browser/chromeos/extensions/file_browser_event_router.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_event_router.cc
@@ -55,10 +55,9 @@
return result;
}
-ExtensionFileBrowserEventRouter::ExtensionFileBrowserEventRouter(
- Profile* profile)
+ExtensionFileBrowserEventRouter::ExtensionFileBrowserEventRouter()
: delegate_(new ExtensionFileBrowserEventRouter::FileWatcherDelegate()),
- profile_(profile) {
+ profile_(NULL) {
}
ExtensionFileBrowserEventRouter::~ExtensionFileBrowserEventRouter() {
@@ -74,13 +73,20 @@
chromeos::MountLibrary* lib =
chromeos::CrosLibrary::Get()->GetMountLibrary();
lib->RemoveObserver(this);
+ profile_ = NULL;
}
-void ExtensionFileBrowserEventRouter::Init() {
- if (!profile_) {
- NOTREACHED();
+// static
+ExtensionFileBrowserEventRouter*
+ ExtensionFileBrowserEventRouter::GetInstance() {
+ return Singleton<ExtensionFileBrowserEventRouter>::get();
+}
+
+void ExtensionFileBrowserEventRouter::ObserveFileSystemEvents(
+ Profile* profile) {
+ if (!profile)
return;
- }
+ profile_ = profile;
if (!chromeos::CrosLibrary::Get()->EnsureLoaded())
return;
if (chromeos::UserManager::Get()->user_is_logged_in()) {
@@ -129,6 +135,17 @@
}
}
+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) {
diff --git a/chrome/browser/chromeos/extensions/file_browser_event_router.h b/chrome/browser/chromeos/extensions/file_browser_event_router.h
index 71f97193..ebe4ebaa 100644
--- a/chrome/browser/chromeos/extensions/file_browser_event_router.h
+++ b/chrome/browser/chromeos/extensions/file_browser_event_router.h
@@ -28,10 +28,12 @@
class ExtensionFileBrowserEventRouter
: public chromeos::MountLibrary::Observer {
public:
- explicit ExtensionFileBrowserEventRouter(Profile* profile);
- virtual ~ExtensionFileBrowserEventRouter();
+ static ExtensionFileBrowserEventRouter* GetInstance();
- void Init();
+ // Starts/stops observing file system change events. Currently only
+ // MountLibrary events are being observed.
+ void ObserveFileSystemEvents(Profile* profile);
+ void StopObservingFileSystemEvents();
// File watch setup routines.
bool AddFileWatch(const FilePath& file_path,
@@ -47,6 +49,7 @@
const std::string& device_path);
private:
+ friend struct DefaultSingletonTraits<ExtensionFileBrowserEventRouter>;
typedef std::map<std::string, linked_ptr<chromeos::SystemNotification> >
NotificationMap;
typedef std::map<std::string, std::string> MountPointMap;
@@ -77,6 +80,9 @@
void HandleFileWatchOnUIThread(const FilePath& local_path, bool got_error);
};
+ ExtensionFileBrowserEventRouter();
+ virtual ~ExtensionFileBrowserEventRouter();
+
// USB mount event handlers.
void OnDiskAdded(const chromeos::MountLibrary::Disk* disk);
void OnDiskRemoved(const chromeos::MountLibrary::Disk* disk);
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 1a65255..f734a66 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -645,6 +645,13 @@
ExternalExtensionProviderInterface* provider = i->get();
provider->ServiceShutdown();
}
+
+#if defined(OS_CHROMEOS)
+ if (event_routers_initialized_) {
+ ExtensionFileBrowserEventRouter::GetInstance()->
+ StopObservingFileSystemEvents();
+ }
+#endif
}
void ExtensionService::InitEventRouters() {
@@ -670,9 +677,9 @@
web_navigation_event_router_->Init();
#if defined(OS_CHROMEOS)
- file_browser_event_router_.reset(
- new ExtensionFileBrowserEventRouter(profile_));
- file_browser_event_router_->Init();
+ ExtensionFileBrowserEventRouter::GetInstance()->ObserveFileSystemEvents(
+ profile_);
+ ExtensionMediaPlayerEventRouter::GetInstance()->Init(profile_);
#endif
#if defined(OS_CHROMEOS) && defined(TOUCH_UI)
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 83ae3978..5fb3d457 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -43,7 +43,6 @@
class ExtensionBrowserEventRouter;
class ExtensionContentSettingsStore;
class ExtensionCookiesEventRouter;
-class ExtensionFileBrowserEventRouter;
class ExtensionHistoryEventRouter;
class ExtensionInstallUI;
class ExtensionManagementEventRouter;
@@ -717,10 +716,6 @@
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.