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

Unified Diff: chrome/browser/chromeos/drive/change_list_loader.h

Issue 439643003: Change AboutResourceLoader::GetAboutResource to wait for inflight update task. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/change_list_loader.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/drive/change_list_loader.h
diff --git a/chrome/browser/chromeos/drive/change_list_loader.h b/chrome/browser/chromeos/drive/change_list_loader.h
index 3715c860fecb323235890f5175ac08da4110caa8..c5c193882b5ede63597b5f2048469cb1c5271d57 100644
--- a/chrome/browser/chromeos/drive/change_list_loader.h
+++ b/chrome/browser/chromeos/drive/change_list_loader.h
@@ -85,37 +85,46 @@ class AboutResourceLoader {
return cached_about_resource_.get();
}
- // Gets the about resource from the cache or the server. If the cache is
- // availlavle, just runs |callback| with the cached about resource. If not,
- // calls |UpdateAboutResource| passing |callback|.
+ // Gets the 'latest' about resource and asynchronously runs |callback|. I.e.,
+ // 1) If the last call to UpdateAboutResource call is in-flight, wait for it.
+ // 2) Otherwise, if the resource is cached, just returns the cached value.
+ // 3) If neither of the above hold, queries the API server by calling
+ // |UpdateAboutResource|.
void GetAboutResource(const google_apis::AboutResourceCallback& callback);
// Gets the about resource from the server, and caches it if successful. This
// function calls JobScheduler::GetAboutResource internally. The cache will be
// used in |GetAboutResource|.
- void UpdateAboutResource(
- const google_apis::AboutResourceCallback& callback);
+ void UpdateAboutResource(const google_apis::AboutResourceCallback& callback);
private:
// Part of UpdateAboutResource().
// This function should be called when the latest about resource is being
- // fetched from the server. The retrieved about resoure is cloned, and one is
- // cached and the other is passed to |callback|.
+ // fetched from the server. The retrieved about resource is cloned, and one is
+ // cached and the other is passed to callbacks associated with |task_id|.
void UpdateAboutResourceAfterGetAbout(
- const google_apis::AboutResourceCallback& callback,
+ int task_id,
google_apis::GDataErrorCode status,
scoped_ptr<google_apis::AboutResource> about_resource);
JobScheduler* scheduler_;
scoped_ptr<google_apis::AboutResource> cached_about_resource_;
+
+ // Identifier to denote the latest UpdateAboutResource call.
+ int current_update_task_id_;
+ // Mapping from each UpdateAboutResource task ID to the corresponding
+ // callbacks. Note that there will be multiple callbacks for a single task
+ // when GetAboutResource is called before the task completes.
+ std::map<int, std::vector<google_apis::AboutResourceCallback> >
+ pending_callbacks_;
+
base::WeakPtrFactory<AboutResourceLoader> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(AboutResourceLoader);
};
// ChangeListLoader is used to load the change list, the full resource list,
-// and directory contents, from WAPI (codename for Documents List API)
-// or Google Drive API. The class also updates the resource metadata with
-// the change list loaded from the server.
+// and directory contents, from Google Drive API. The class also updates the
+// resource metadata with the change list loaded from the server.
//
// Note that the difference between "resource list" and "change list" is
// subtle hence the two words are often used interchangeably. To be precise,
« no previous file with comments | « no previous file | chrome/browser/chromeos/drive/change_list_loader.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698