| 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 93b24c01bb96c486374174dcf7481c2313c4642d..cb0354604775cca02665274131886bb9e7d3857c 100644
|
| --- a/chrome/browser/chromeos/drive/change_list_loader.cc
|
| +++ b/chrome/browser/chromeos/drive/change_list_loader.cc
|
| @@ -264,30 +264,28 @@ void ChangeListLoader::LoadFromServerIfNeededAfterGetAbout(
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!callback.is_null());
|
| DCHECK(refreshing_);
|
| -
|
| - int64 remote_changestamp = 0;
|
| - if (util::GDataToDriveFileError(status) == DRIVE_FILE_OK) {
|
| - DCHECK(about_resource);
|
| - remote_changestamp = about_resource->largest_change_id();
|
| - }
|
| + DCHECK_EQ(util::GDataToDriveFileError(status) == DRIVE_FILE_OK,
|
| + about_resource.get() != NULL);
|
|
|
| resource_metadata_->GetLargestChangestamp(
|
| base::Bind(&ChangeListLoader::CompareChangestampsAndLoadIfNeeded,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| directory_fetch_info,
|
| callback,
|
| - remote_changestamp));
|
| + base::Passed(&about_resource)));
|
| }
|
|
|
| void ChangeListLoader::CompareChangestampsAndLoadIfNeeded(
|
| const DirectoryFetchInfo& directory_fetch_info,
|
| const FileOperationCallback& callback,
|
| - int64 remote_changestamp,
|
| + scoped_ptr<google_apis::AboutResource> about_resource,
|
| int64 local_changestamp) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!callback.is_null());
|
| DCHECK(refreshing_);
|
|
|
| + int64 remote_changestamp =
|
| + about_resource ? about_resource->largest_change_id() : 0;
|
| if (remote_changestamp > 0 && local_changestamp >= remote_changestamp) {
|
| if (local_changestamp > remote_changestamp) {
|
| LOG(WARNING) << "Cached client feed is fresher than server, client = "
|
| @@ -302,16 +300,22 @@ void ChangeListLoader::CompareChangestampsAndLoadIfNeeded(
|
| }
|
|
|
| int64 start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0;
|
| + if (start_changestamp == 0 && !about_resource.get()) {
|
| + // Full update needs AboutResource. If this is a full update, we should just
|
| + // give up.
|
| + callback.Run(DRIVE_FILE_ERROR_FAILED);
|
| + return;
|
| + }
|
|
|
| // TODO(satorux): Use directory_fetch_info to start "fast-fetch" here.
|
| - LoadChangeListFromServer(start_changestamp,
|
| - remote_changestamp,
|
| + LoadChangeListFromServer(about_resource.Pass(),
|
| + start_changestamp,
|
| callback);
|
| }
|
|
|
| void ChangeListLoader::LoadChangeListFromServer(
|
| + scoped_ptr<google_apis::AboutResource> about_resource,
|
| int64 start_changestamp,
|
| - int64 remote_changestamp,
|
| const FileOperationCallback& callback) {
|
| scoped_ptr<LoadFeedParams> load_params(new LoadFeedParams);
|
| load_params->start_changestamp = start_changestamp;
|
| @@ -319,8 +323,8 @@ void ChangeListLoader::LoadChangeListFromServer(
|
| load_params.Pass(),
|
| base::Bind(&ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| + base::Passed(&about_resource),
|
| start_changestamp != 0, // is_delta_feed
|
| - remote_changestamp,
|
| callback));
|
| }
|
|
|
| @@ -471,8 +475,8 @@ void ChangeListLoader::SearchFromServer(
|
| }
|
|
|
| void ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer(
|
| + scoped_ptr<google_apis::AboutResource> about_resource,
|
| bool is_delta_feed,
|
| - int64 feed_changestamp,
|
| const FileOperationCallback& callback,
|
| const ScopedVector<google_apis::ResourceList>& feed_list,
|
| DriveFileError error) {
|
| @@ -485,9 +489,9 @@ void ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer(
|
| return;
|
| }
|
|
|
| - UpdateFromFeed(feed_list,
|
| + UpdateFromFeed(about_resource.Pass(),
|
| + feed_list,
|
| is_delta_feed,
|
| - feed_changestamp,
|
| base::Bind(&ChangeListLoader::OnUpdateFromFeed,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| callback));
|
| @@ -733,9 +737,9 @@ void ChangeListLoader::SaveFileSystem() {
|
| }
|
|
|
| void ChangeListLoader::UpdateFromFeed(
|
| + scoped_ptr<google_apis::AboutResource> about_resource,
|
| const ScopedVector<google_apis::ResourceList>& feed_list,
|
| bool is_delta_feed,
|
| - int64 root_feed_changestamp,
|
| const base::Closure& update_finished_callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!update_finished_callback.is_null());
|
| @@ -747,9 +751,9 @@ void ChangeListLoader::UpdateFromFeed(
|
| const bool should_notify_changed_directories = is_delta_feed;
|
|
|
| change_list_processor_->ApplyFeeds(
|
| + about_resource.Pass(),
|
| feed_list,
|
| is_delta_feed,
|
| - root_feed_changestamp,
|
| base::Bind(&ChangeListLoader::NotifyDirectoryChanged,
|
| weak_ptr_factory_.GetWeakPtr(),
|
| should_notify_changed_directories,
|
|
|