Chromium Code Reviews| 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_); |