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

Side by Side Diff: chrome/browser/chromeos/drive/drive_feed_loader.cc

Issue 11876002: Make largest_changestamp setter/getter asynchronous. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase + comment Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/drive/drive_feed_loader.h" 5 #include "chrome/browser/chromeos/drive/drive_feed_loader.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 249
250 void DriveFeedLoader::RemoveObserver(DriveFeedLoaderObserver* observer) { 250 void DriveFeedLoader::RemoveObserver(DriveFeedLoaderObserver* observer) {
251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
252 observers_.RemoveObserver(observer); 252 observers_.RemoveObserver(observer);
253 } 253 }
254 254
255 void DriveFeedLoader::ReloadFromServerIfNeeded( 255 void DriveFeedLoader::ReloadFromServerIfNeeded(
256 const FileOperationCallback& callback) { 256 const FileOperationCallback& callback) {
257 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 257 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
258 DCHECK(!callback.is_null()); 258 DCHECK(!callback.is_null());
259 DVLOG(1) << "ReloadFromServerIfNeeded local_changestamp="
260 << resource_metadata_->largest_changestamp()
261 << ", loaded=" << resource_metadata_->loaded();
262 259
263 // Sets the refreshing flag, so that the caller does not send refresh requests 260 // Sets the refreshing flag, so that the caller does not send refresh requests
264 // in parallel (see DriveFileSystem::CheckForUpdates). Corresponding 261 // in parallel (see DriveFileSystem::CheckForUpdates). Corresponding
265 // "refresh_ = false" is in OnGetAccountMetadata when the cached feed is up to 262 // "refresh_ = false" is in OnGetAccountMetadata when the cached feed is up to
266 // date, or in OnFeedFromServerLoaded called back from LoadFromServer(). 263 // date, or in OnFeedFromServerLoaded called back from LoadFromServer().
267 refreshing_ = true; 264 refreshing_ = true;
268 265
269 if (google_apis::util::IsDriveV2ApiEnabled()) { 266 if (google_apis::util::IsDriveV2ApiEnabled()) {
270 // Drive v2 needs a separate application list fetch operation. 267 // Drive v2 needs a separate application list fetch operation.
271 // TODO(haruki): Application list rarely changes and is not necessarily 268 // TODO(haruki): Application list rarely changes and is not necessarily
(...skipping 12 matching lines...) Expand all
284 } 281 }
285 282
286 void DriveFeedLoader::OnGetAccountMetadata( 283 void DriveFeedLoader::OnGetAccountMetadata(
287 const FileOperationCallback& callback, 284 const FileOperationCallback& callback,
288 google_apis::GDataErrorCode status, 285 google_apis::GDataErrorCode status,
289 scoped_ptr<google_apis::AccountMetadataFeed> account_metadata) { 286 scoped_ptr<google_apis::AccountMetadataFeed> account_metadata) {
290 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 287 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
291 DCHECK(!callback.is_null()); 288 DCHECK(!callback.is_null());
292 DCHECK(refreshing_); 289 DCHECK(refreshing_);
293 290
294 int64 local_changestamp = resource_metadata_->largest_changestamp();
295 int64 remote_changestamp = 0; 291 int64 remote_changestamp = 0;
296
297 // When account metadata successfully fetched, parse the latest changestamp. 292 // When account metadata successfully fetched, parse the latest changestamp.
298 if (util::GDataToDriveFileError(status) == DRIVE_FILE_OK) { 293 if (util::GDataToDriveFileError(status) == DRIVE_FILE_OK) {
299 DCHECK(account_metadata); 294 DCHECK(account_metadata);
300 webapps_registry_->UpdateFromFeed(*account_metadata); 295 webapps_registry_->UpdateFromFeed(*account_metadata);
301 remote_changestamp = account_metadata->largest_changestamp(); 296 remote_changestamp = account_metadata->largest_changestamp();
302 } 297 }
303 298
299 resource_metadata_->GetLargestChangestamp(
300 base::Bind(&DriveFeedLoader::CompareChangestampsAndLoadIfNeeded,
301 weak_ptr_factory_.GetWeakPtr(),
302 callback,
303 remote_changestamp));
304 }
305
306 void DriveFeedLoader::CompareChangestampsAndLoadIfNeeded(
307 const FileOperationCallback& callback,
308 int64 remote_changestamp,
309 int64 local_changestamp) {
310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
311 DCHECK(!callback.is_null());
312 DCHECK(refreshing_);
313
304 if (remote_changestamp > 0 && local_changestamp >= remote_changestamp) { 314 if (remote_changestamp > 0 && local_changestamp >= remote_changestamp) {
305 if (local_changestamp > remote_changestamp) { 315 if (local_changestamp > remote_changestamp) {
306 LOG(WARNING) << "Cached client feed is fresher than server, client = " 316 LOG(WARNING) << "Cached client feed is fresher than server, client = "
307 << local_changestamp 317 << local_changestamp
308 << ", server = " 318 << ", server = "
309 << remote_changestamp; 319 << remote_changestamp;
310 } 320 }
311 321
312 // No changes detected, tell the client that the loading was successful. 322 // No changes detected, tell the client that the loading was successful.
313 refreshing_ = false; 323 refreshing_ = false;
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 696
687 // Run the callback now that the filesystem is ready. 697 // Run the callback now that the filesystem is ready.
688 load_finished_callback.Run(DRIVE_FILE_OK); 698 load_finished_callback.Run(DRIVE_FILE_OK);
689 699
690 FOR_EACH_OBSERVER(DriveFeedLoaderObserver, 700 FOR_EACH_OBSERVER(DriveFeedLoaderObserver,
691 observers_, 701 observers_,
692 OnFeedFromServerLoaded()); 702 OnFeedFromServerLoaded());
693 } 703 }
694 704
695 } // namespace drive 705 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/drive_feed_loader.h ('k') | chrome/browser/chromeos/drive/drive_feed_processor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698