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

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

Issue 444463005: drive: Trigger "fast fetch" if remote update came during full loading. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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/change_list_loader.h" 5 #include "chrome/browser/chromeos/drive/change_list_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/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 320
321 void ChangeListLoader::RemoveObserver(ChangeListLoaderObserver* observer) { 321 void ChangeListLoader::RemoveObserver(ChangeListLoaderObserver* observer) {
322 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 322 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
323 observers_.RemoveObserver(observer); 323 observers_.RemoveObserver(observer);
324 } 324 }
325 325
326 void ChangeListLoader::CheckForUpdates(const FileOperationCallback& callback) { 326 void ChangeListLoader::CheckForUpdates(const FileOperationCallback& callback) {
327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 327 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
328 DCHECK(!callback.is_null()); 328 DCHECK(!callback.is_null());
329 329
330 // If the metadata is not yet loaded, CheckForUpdates does nothing.
331 if (!loaded_ && !IsRefreshing())
332 return;
333
334 // For each CheckForUpdates() request, always refresh the changestamp info.
335 about_resource_loader_->UpdateAboutResource(
336 base::Bind(&ChangeListLoader::OnAboutResourceUpdated,
337 weak_ptr_factory_.GetWeakPtr()));
338
330 if (IsRefreshing()) { 339 if (IsRefreshing()) {
331 // There is in-flight loading. So keep the callback here, and check for 340 // There is in-flight loading. So keep the callback here, and check for
332 // updates when the in-flight loading is completed. 341 // updates when the in-flight loading is completed.
333 pending_update_check_callback_ = callback; 342 pending_update_check_callback_ = callback;
334 return; 343 return;
335 } 344 }
336 345
337 if (loaded_) { 346 if (loaded_) {
hashimoto 2014/08/06 05:55:43 nit: Can't we replace this "if" with DCHECK?
kinaba 2014/08/06 06:16:54 Done.
338 // We only start to check for updates iff the load is done. 347 // We only start to check for updates iff the load is done.
339 // I.e., we ignore checking updates if not loaded to avoid starting the 348 // I.e., we ignore checking updates if not loaded to avoid starting the
340 // load without user's explicit interaction (such as opening Drive). 349 // load without user's explicit interaction (such as opening Drive).
341 logger_->Log(logging::LOG_INFO, "Checking for updates"); 350 logger_->Log(logging::LOG_INFO, "Checking for updates");
342 Load(callback); 351 Load(callback);
343 } 352 }
344 } 353 }
345 354
346 void ChangeListLoader::LoadIfNeeded(const FileOperationCallback& callback) { 355 void ChangeListLoader::LoadIfNeeded(const FileOperationCallback& callback) {
347 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
348 DCHECK(!callback.is_null()); 357 DCHECK(!callback.is_null());
349 358
350 // If the metadata is not yet loaded, start loading. 359 // If the metadata is not yet loaded, start loading.
351 if (!loaded_) 360 if (!loaded_ && !IsRefreshing()) {
361 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.
362 base::Bind(&ChangeListLoader::OnAboutResourceUpdated,
363 weak_ptr_factory_.GetWeakPtr()));
352 Load(callback); 364 Load(callback);
365 }
353 } 366 }
354 367
355 void ChangeListLoader::Load(const FileOperationCallback& callback) { 368 void ChangeListLoader::Load(const FileOperationCallback& callback) {
356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 369 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
357 DCHECK(!callback.is_null()); 370 DCHECK(!callback.is_null());
358 371
359 // Check if this is the first time this ChangeListLoader do loading. 372 // Check if this is the first time this ChangeListLoader do loading.
360 // Note: IsRefreshing() depends on pending_load_callback_ so check in advance. 373 // Note: IsRefreshing() depends on pending_load_callback_ so check in advance.
361 const bool is_initial_load = (!loaded_ && !IsRefreshing()); 374 const bool is_initial_load = (!loaded_ && !IsRefreshing());
362 375
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 if (is_initial_load && *local_changestamp > 0) { 408 if (is_initial_load && *local_changestamp > 0) {
396 // The local data is usable. Flush callbacks to tell loading was successful. 409 // The local data is usable. Flush callbacks to tell loading was successful.
397 OnChangeListLoadComplete(FILE_ERROR_OK); 410 OnChangeListLoadComplete(FILE_ERROR_OK);
398 411
399 // Continues to load from server in background. 412 // Continues to load from server in background.
400 // Put dummy callbacks to indicate that fetching is still continuing. 413 // Put dummy callbacks to indicate that fetching is still continuing.
401 pending_load_callback_.push_back( 414 pending_load_callback_.push_back(
402 base::Bind(&util::EmptyFileOperationCallback)); 415 base::Bind(&util::EmptyFileOperationCallback));
403 } 416 }
404 417
405 about_resource_loader_->UpdateAboutResource( 418 about_resource_loader_->GetAboutResource(
406 base::Bind(&ChangeListLoader::LoadAfterGetAboutResource, 419 base::Bind(&ChangeListLoader::LoadAfterGetAboutResource,
407 weak_ptr_factory_.GetWeakPtr(), 420 weak_ptr_factory_.GetWeakPtr(),
408 *local_changestamp)); 421 *local_changestamp));
409 } 422 }
410 423
411 void ChangeListLoader::LoadAfterGetAboutResource( 424 void ChangeListLoader::LoadAfterGetAboutResource(
412 int64 local_changestamp, 425 int64 local_changestamp,
413 google_apis::GDataErrorCode status, 426 google_apis::GDataErrorCode status,
414 scoped_ptr<google_apis::AboutResource> about_resource) { 427 scoped_ptr<google_apis::AboutResource> about_resource) {
415 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 428 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 } 469 }
457 pending_load_callback_.clear(); 470 pending_load_callback_.clear();
458 471
459 // If there is pending update check, try to load the change from the server 472 // If there is pending update check, try to load the change from the server
460 // again, because there may exist an update during the completed loading. 473 // again, because there may exist an update during the completed loading.
461 if (!pending_update_check_callback_.is_null()) { 474 if (!pending_update_check_callback_.is_null()) {
462 Load(base::ResetAndReturn(&pending_update_check_callback_)); 475 Load(base::ResetAndReturn(&pending_update_check_callback_));
463 } 476 }
464 } 477 }
465 478
479 void ChangeListLoader::OnAboutResourceUpdated(
480 google_apis::GDataErrorCode error,
481 scoped_ptr<google_apis::AboutResource> resource) {
482 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
483
484 if (drive::GDataToFileError(error) != drive::FILE_ERROR_OK) {
485 logger_->Log(logging::LOG_ERROR,
486 "Failed to update the about resource: %s",
487 google_apis::GDataErrorCodeToString(error).c_str());
488 return;
489 }
490 logger_->Log(logging::LOG_INFO,
491 "About resource updated to: %s",
492 base::Int64ToString(resource->largest_change_id()).c_str());
493 }
494
466 void ChangeListLoader::LoadChangeListFromServer(int64 start_changestamp) { 495 void ChangeListLoader::LoadChangeListFromServer(int64 start_changestamp) {
467 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 496 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
468 DCHECK(!change_feed_fetcher_); 497 DCHECK(!change_feed_fetcher_);
469 DCHECK(about_resource_loader_->cached_about_resource()); 498 DCHECK(about_resource_loader_->cached_about_resource());
470 499
471 bool is_delta_update = start_changestamp != 0; 500 bool is_delta_update = start_changestamp != 0;
472 501
473 // Set up feed fetcher. 502 // Set up feed fetcher.
474 if (is_delta_update) { 503 if (is_delta_update) {
475 change_feed_fetcher_.reset( 504 change_feed_fetcher_.reset(
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 579
551 OnChangeListLoadComplete(error); 580 OnChangeListLoadComplete(error);
552 581
553 FOR_EACH_OBSERVER(ChangeListLoaderObserver, 582 FOR_EACH_OBSERVER(ChangeListLoaderObserver,
554 observers_, 583 observers_,
555 OnLoadFromServerComplete()); 584 OnLoadFromServerComplete());
556 } 585 }
557 586
558 } // namespace internal 587 } // namespace internal
559 } // namespace drive 588 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/change_list_loader.h ('k') | chrome/browser/chromeos/drive/directory_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698