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

Unified Diff: chrome/browser/chromeos/drive/drive_integration_service.cc

Issue 23548025: Introduce State to DriveIntegrationService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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/drive/drive_integration_service.cc
diff --git a/chrome/browser/chromeos/drive/drive_integration_service.cc b/chrome/browser/chromeos/drive/drive_integration_service.cc
index 8a75b77471353ee71f0c801e47714934a64d5ec3..800bf35951bff1dea30a6270880c947997b80db7 100644
--- a/chrome/browser/chromeos/drive/drive_integration_service.cc
+++ b/chrome/browser/chromeos/drive/drive_integration_service.cc
@@ -139,7 +139,7 @@ DriveIntegrationService::DriveIntegrationService(
const base::FilePath& test_cache_root,
FileSystemInterface* test_file_system)
: profile_(profile),
- is_initialized_(false),
+ state_(NOT_INITIALIZED),
cache_root_directory_(!test_cache_root.empty() ?
test_cache_root : util::GetCacheRootPath(profile)),
weak_ptr_factory_(this) {
@@ -209,6 +209,9 @@ DriveIntegrationService::~DriveIntegrationService() {
void DriveIntegrationService::Initialize() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK_EQ(NOT_INITIALIZED, state_);
+
+ state_ = INITIALIZING;
drive_service_->Initialize();
file_system_->Initialize();
@@ -227,6 +230,8 @@ void DriveIntegrationService::Initialize() {
void DriveIntegrationService::Shutdown() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ weak_ptr_factory_.InvalidateWeakPtrs();
+
DriveNotificationManager* drive_notification_manager =
DriveNotificationManagerFactory::GetForBrowserContext(profile_);
if (drive_notification_manager)
@@ -272,7 +277,8 @@ bool DriveIntegrationService::IsDriveEnabled() {
if (!util::IsDriveEnabledForProfile(profile_))
return false;
- return is_initialized_;
+ // For backword compatibility, REMOUNTING also means enabled.
+ return state_ == INITIALIZED || state_ == REMOUNTING;
}
void DriveIntegrationService::ClearCacheAndRemountFileSystem(
@@ -280,6 +286,13 @@ void DriveIntegrationService::ClearCacheAndRemountFileSystem(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!callback.is_null());
+ if (state_ != INITIALIZED) {
+ callback.Run(false);
+ return;
+ }
+
+ state_ = REMOUNTING;
+
RemoveDriveMountPoint();
// Reloading the file system will clear the resource metadata.
file_system_->Reload();
@@ -324,9 +337,12 @@ void DriveIntegrationService::AddDriveMountPoint() {
drive_mount_point);
if (success) {
+ state_ = INITIALIZED;
util::Log(logging::LOG_INFO, "Drive mount point is added");
FOR_EACH_OBSERVER(DriveIntegrationServiceObserver, observers_,
OnFileSystemMounted());
+ } else {
+ state_ = NOT_INITIALIZED;
}
}
@@ -362,9 +378,12 @@ void DriveIntegrationService::InitializeAfterMetadataInitialized(
pref_service->SetFilePath(prefs::kDownloadDefaultDirectory,
DownloadPrefs::GetDefaultDownloadDirectory());
}
+
+ // Back to NOT_INITIALIZED state. Then, re-running Initialize() should
+ // work if the error is recovarable manually (such as out of disk space).
+ state_ = NOT_INITIALIZED;
return;
}
- is_initialized_ = true;
content::DownloadManager* download_manager =
g_browser_process->download_status_updater() ?
@@ -388,6 +407,7 @@ void DriveIntegrationService::InitializeAfterMetadataInitialized(
}
AddDriveMountPoint();
+ state_ = INITIALIZED;
}
//===================== DriveIntegrationServiceFactory =======================
« no previous file with comments | « chrome/browser/chromeos/drive/drive_integration_service.h ('k') | chrome/browser/chromeos/drive/file_system.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698