Index: chrome/browser/chromeos/drive/change_list_loader.cc |
diff --git a/chrome/browser/chromeos/drive/change_list_loader.cc b/chrome/browser/chromeos/drive/change_list_loader.cc |
index 5ecd19e7db2b19f00ecce0bced2c017fa7d733a6..7919c3c25ab8fcb13149641839334b57498f56d7 100644 |
--- a/chrome/browser/chromeos/drive/change_list_loader.cc |
+++ b/chrome/browser/chromeos/drive/change_list_loader.cc |
@@ -327,6 +327,15 @@ void ChangeListLoader::CheckForUpdates(const FileOperationCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!callback.is_null()); |
+ // If the metadata is not yet loaded, CheckForUpdates does nothing. |
+ if (!loaded_ && !IsRefreshing()) |
+ return; |
+ |
+ // For each CheckForUpdates() request, always refresh the changestamp info. |
+ about_resource_loader_->UpdateAboutResource( |
+ base::Bind(&ChangeListLoader::OnAboutResourceUpdated, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
if (IsRefreshing()) { |
// There is in-flight loading. So keep the callback here, and check for |
// updates when the in-flight loading is completed. |
@@ -348,8 +357,12 @@ void ChangeListLoader::LoadIfNeeded(const FileOperationCallback& callback) { |
DCHECK(!callback.is_null()); |
// If the metadata is not yet loaded, start loading. |
- if (!loaded_) |
+ if (!loaded_ && !IsRefreshing()) { |
+ about_resource_loader_->UpdateAboutResource( |
hashimoto
2014/08/06 05:55:43
GetAboutResource() requests the resource if not av
kinaba
2014/08/06 06:16:54
Good point. Done.
|
+ base::Bind(&ChangeListLoader::OnAboutResourceUpdated, |
+ weak_ptr_factory_.GetWeakPtr())); |
Load(callback); |
+ } |
} |
void ChangeListLoader::Load(const FileOperationCallback& callback) { |
@@ -402,7 +415,7 @@ void ChangeListLoader::LoadAfterGetLargestChangestamp( |
base::Bind(&util::EmptyFileOperationCallback)); |
} |
- about_resource_loader_->UpdateAboutResource( |
+ about_resource_loader_->GetAboutResource( |
base::Bind(&ChangeListLoader::LoadAfterGetAboutResource, |
weak_ptr_factory_.GetWeakPtr(), |
*local_changestamp)); |
@@ -463,6 +476,22 @@ void ChangeListLoader::OnChangeListLoadComplete(FileError error) { |
} |
} |
+void ChangeListLoader::OnAboutResourceUpdated( |
+ google_apis::GDataErrorCode error, |
+ scoped_ptr<google_apis::AboutResource> resource) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ if (drive::GDataToFileError(error) != drive::FILE_ERROR_OK) { |
+ logger_->Log(logging::LOG_ERROR, |
+ "Failed to update the about resource: %s", |
+ google_apis::GDataErrorCodeToString(error).c_str()); |
+ return; |
+ } |
+ logger_->Log(logging::LOG_INFO, |
+ "About resource updated to: %s", |
+ base::Int64ToString(resource->largest_change_id()).c_str()); |
+} |
+ |
void ChangeListLoader::LoadChangeListFromServer(int64 start_changestamp) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(!change_feed_fetcher_); |