Chromium Code Reviews| 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 bccbceede84f8249a2d18e6d104c071dabacdd69..1262e90e8bdb6bff81b28b1bf21469cd8d564a51 100644 |
| --- a/chrome/browser/chromeos/drive/change_list_loader.h |
| +++ b/chrome/browser/chromeos/drive/change_list_loader.h |
| @@ -7,7 +7,6 @@ |
| #include <map> |
| #include <string> |
| -#include <utility> |
| #include <vector> |
| #include "base/callback_forward.h" |
| @@ -32,7 +31,7 @@ class ChangeListProcessor; |
| class DriveScheduler; |
| class DriveWebAppsRegistry; |
| -// Callback run as a response to SearchFromServer and LoadDirectoryFromServer. |
| +// Callback run as a response to SearchFromServer. |
| typedef base::Callback<void(ScopedVector<ChangeList> change_lists, |
| DriveFileError error)> LoadFeedListCallback; |
| @@ -45,15 +44,18 @@ class ChangeListLoader { |
| DriveWebAppsRegistry* webapps_registry); |
| ~ChangeListLoader(); |
| + // Indicates whether there is a feed refreshing server request is in flight. |
| + bool IsRefreshing() const; |
| + |
| // Adds and removes the observer. |
| void AddObserver(ChangeListLoaderObserver* observer); |
| void RemoveObserver(ChangeListLoaderObserver* observer); |
| // Starts the change list loading first from the cache. If loading from the |
| - // cache is successful, runs |callback| and starts loading from the server |
| - // if needed (i.e. the cache is old). If loading from the cache is |
| - // unsuccessful, starts loading from the server, and runs |callback| to |
| - // tell the result to the caller. |
| + // cache is successful, runs |callback| immediately and starts checking |
| + // server for updates in background. If loading from the cache is |
| + // unsuccessful, starts loading from the server, and runs |callback| to tell |
| + // the result to the caller when it is finished. |
| // |
| // If |directory_fetch_info| is not empty, the directory will be fetched |
| // first from the server, so the UI can show the directory contents |
| @@ -63,6 +65,10 @@ class ChangeListLoader { |
| void LoadIfNeeded(const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback); |
| + // Checks for updates on the server. Does nothing if the change list is now |
| + // being loaded or refreshed. |callback| must not be null. |
| + void CheckForUpdates(const FileOperationCallback& callback); |
|
satorux1
2013/04/18 05:31:43
Is this a good place? Maybe move this above LoadIf
kinaba
2013/04/18 05:42:38
Done.
|
| + |
| // Initiates the directory contents loading. This function first obtains |
| // the changestamp from the server in order to set the per-directory |
| // changestamp for the directory. |
| @@ -86,29 +92,22 @@ class ChangeListLoader { |
| const GURL& next_feed, |
| const LoadFeedListCallback& callback); |
| - // Checks for updates on the server. Does nothing if the change list is now |
| - // being loaded or refreshed. |callback| must not be null. |
| - void CheckForUpdates(const FileOperationCallback& callback); |
| - |
| // Updates whole directory structure feeds collected in |feed_list|. |
| // Record file statistics as UMA histograms. |
| // |
| // See comments at ChangeListProcessor::ApplyFeeds() for |
| // |about_resource| and |is_delta_feed|. |
| - // |update_finished_callback| must not be null. |
| + // |callback| must not be null. |
|
satorux1
2013/04/18 05:31:43
Could you add: TODO(satorux): Make this private. c
kinaba
2013/04/18 05:42:38
Done.
|
| void UpdateFromFeed(scoped_ptr<google_apis::AboutResource> about_resource, |
| ScopedVector<ChangeList> change_lists, |
| bool is_delta_feed, |
| - const base::Closure& update_finished_callback); |
| - |
| - // Indicates whether there is a feed refreshing server request is in flight. |
| - bool IsRefreshing() const; |
| + const base::Closure& callback); |
| private: |
| - // Implementation of LoadIfNeeded and CheckForUpdates. Start metadata loading |
| - // of |directory_fetch_info|, and calls |callback| when it's done. If there is |
| - // already a loading job in-flight for |directory_fetch_info|, just append |
| - // the |callback| to the callback queue of the already running job. |
| + // Start metadata loading of |directory_fetch_info|, and calls |callback| |
| + // when it's done. If there is already a loading job in-flight for |
| + // |directory_fetch_info|, just append the |callback| to the callback queue |
| + // of the already running job. |
| void Load(const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback); |
| @@ -125,105 +124,128 @@ class ChangeListLoader { |
| int64 local_changestamp); |
| // Part of Load(). |
| + // This function should be called when the change list load is complete. |
| + // Flushes the callbacks for change list loading and all directory loading. |
| + void OnChangeListLoadComplete(DriveFileError error); |
| + |
| + // Part of Load(). |
| + // This function should be called when the directory load is complete. |
| + // Flushes the callbacks waiting for the directory to be loaded. |
| + void OnDirectoryLoadComplete(const DirectoryFetchInfo& directory_fetch_info, |
| + DriveFileError error); |
| + |
| + // ================= Implementation for change list loading ================= |
| + |
| // Initiates the change list loading from the server when |local_changestamp| |
| // is older than the server changestamp. If |directory_fetch_info| is set, |
| // do directory loading before change list loading. |
| void LoadFromServerIfNeeded(const DirectoryFetchInfo& directory_fetch_info, |
| int64 local_changestamp); |
| - // Part of Load(). |
| - // Checks the directory's changestamp and |last_known_remote_changestamp_|, |
| - // and load the feed from server if it is old. Runs |callback| when it's done. |
| - void CheckChangestampAndLoadDirectoryIfNeeed( |
| + // Part of LoadFromServerIfNeeded(). |
| + // Called after GetAboutResource() for getting remote changestamp is complete. |
| + void LoadFromServerIfNeededAfterGetAbout( |
| const DirectoryFetchInfo& directory_fetch_info, |
| int64 local_changestamp, |
| - const FileOperationCallback& callback); |
| + google_apis::GDataErrorCode status, |
| + scoped_ptr<google_apis::AboutResource> about_resource); |
| + |
| + // Part of LoadFromServerIfNeeded(). |
| + // When LoadFromServerIfNeeded is called with |directory_fetch_info| for a |
| + // specific directory, it tries to load the directory before loading the |
| + // content of full filesystem. This method is called after directory loading |
| + // is finished, and proceeds to the normal pass: LoadChangeListServer. |
| + void LoadChangeListFromServerAfterLoadDirectory( |
| + const DirectoryFetchInfo& directory_fetch_info, |
| + scoped_ptr<google_apis::AboutResource> about_resource, |
| + int64 start_changestamp, |
| + DriveFileError error); |
| + |
| + // Part of LoadFromServerIfNeeded(). |
| + // Starts loading the change list since |start_changestamp|, or the full |
| + // resource list if |start_changestamp| is zero. For full update, the |
| + // largest_change_id and root_folder_id from |about_resource| will be used. |
| + void LoadChangeListFromServer( |
| + scoped_ptr<google_apis::AboutResource> about_resource, |
| + int64 start_changestamp); |
| - // Part of LoadChangeListFromServer(). |
| + // Part of LoadFromServerIfNeeded(). |
| // Callback to fetch all the resource list response from the server. |
| // After all the resource list are fetched, |callback| |
| // will be invoked with the collected change lists. |
| - // |callback| must not be null. |
| - void OnGetResourceList( |
| + void OnGetResourceList(ScopedVector<ChangeList> change_lists, |
| + const LoadFeedListCallback& callback, |
| + base::TimeTicks start_time, |
| + google_apis::GDataErrorCode status, |
| + scoped_ptr<google_apis::ResourceList> data); |
| + |
| + // Part of LoadFromServerIfNeeded(). |
| + // Applies the change list loaded from the server to local metadata storage. |
| + void UpdateMetadataFromFeedAfterLoadFromServer( |
| + scoped_ptr<google_apis::AboutResource> about_resource, |
| + bool is_delta_feed, |
| ScopedVector<ChangeList> change_lists, |
| - const LoadFeedListCallback& callback, |
| - base::TimeTicks start_time, |
| - google_apis::GDataErrorCode status, |
| - scoped_ptr<google_apis::ResourceList> data); |
| + DriveFileError error); |
| + |
| + // Part of LoadFromServerIfNeeded(). |
| + // Called when UpdateMetadataFromFeedAfterLoadFromServer is finished. |
| + void OnUpdateFromFeed(); |
| - // Part of LoadDirectoryFromServer(). Called when |
| - // DriveScheduler::GetAboutResource() is complete. Calls |
| - // DoLoadDirectoryFromServer() to initiate the directory contents loading. |
| + // ================= Implementation for directory loading ================= |
| + |
| + // Part of LoadDirectoryFromServer(). |
| + // Called after GetAboutResource() for getting remote changestamp is complete. |
| + // Note that it directly proceeds to DoLoadDirectoryFromServer() not going |
| + // through CheckChangestampAndLoadDirectoryIfNeeed, because the purpose of |
| + // LoadDirectoryFromServer is to force reloading regardless of changestamp. |
| void LoadDirectoryFromServerAfterGetAbout( |
| const std::string& directory_resource_id, |
| const FileOperationCallback& callback, |
| google_apis::GDataErrorCode status, |
| scoped_ptr<google_apis::AboutResource> about_resource); |
| - // Initiates the directory contents loading, based on |directory_fetch_info|. |
| - // When it is finished it just runs |callback| but no other callbacks in |
| - // |pending_load_callback_|, because it depends on the caller whether to flush |
| - // callbacks. Thus, the caller must be responsible for task flushing. |
| + // Compares the directory's changestamp and |last_known_remote_changestamp_|. |
| + // Starts DoLoadDirectoryFromServer() if the local data is old and runs |
| + // |callback| when finished. If it is up to date, calls back immediately. |
| + void CheckChangestampAndLoadDirectoryIfNeeed( |
| + const DirectoryFetchInfo& directory_fetch_info, |
| + int64 local_changestamp, |
| + const FileOperationCallback& callback); |
| + |
| + // Loads the directory contents from server, and updates the local metadata. |
| + // Runs |callback| when it is finished. |
| void DoLoadDirectoryFromServer(const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback); |
| - // Part of DoLoadDirectoryFromServer for the grand root ("/drive" directory). |
| - // Called when GetEntryInfoByPath is completed. |
| - // |callback| must not be null. |
| + // Part of DoLoadDirectoryFromServer() for the grand root ("/drive"). |
| void DoLoadGrandRootDirectoryFromServerAfterGetEntryInfoByPath( |
| const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback, |
| DriveFileError error, |
| scoped_ptr<DriveEntryProto> entry_proto); |
| - // Part of DoLoadDirectoryFromServer for the grand root ("/drive" directory). |
| - // Called when GetAboutResource is completed. |
| - // |callback| must not be null. |
| + // Part of DoLoadDirectoryFromServer() for the grand root ("/drive"). |
| void DoLoadGrandRootDirectoryFromServerAfterGetAboutResource( |
| const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback, |
| google_apis::GDataErrorCode status, |
| scoped_ptr<google_apis::AboutResource> about_resource); |
| - // Part of DoLoadDirectoryFromServer(). Called after |
| - // LoadFromServer() is complete. |
| + // Part of DoLoadDirectoryFromServer() for a normal directory. |
| void DoLoadDirectoryFromServerAfterLoad( |
| const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback, |
| ScopedVector<ChangeList> change_lists, |
| DriveFileError error); |
| - // Part of DoLoadDirectoryFromServer(). Called after |
| - // DriveResourceMetadata::RefreshDirectory() is complete. |
| + // Part of DoLoadDirectoryFromServer(). |
| void DoLoadDirectoryFromServerAfterRefresh( |
| const DirectoryFetchInfo& directory_fetch_info, |
| const FileOperationCallback& callback, |
| DriveFileError error, |
| const base::FilePath& directory_path); |
| - // Part of LoadFromServerIfNeeded(). Called when GetAboutResource is complete. |
| - void LoadFromServerIfNeededAfterGetAbout( |
| - const DirectoryFetchInfo& directory_fetch_info, |
| - int64 local_changestamp, |
| - google_apis::GDataErrorCode status, |
| - scoped_ptr<google_apis::AboutResource> about_resource); |
| - |
| - // Part of LoadFromServerIfNeeded(). |
| - // Starts loading the change list since |start_changestamp|, or the full |
| - // resource list if |start_changestamp| is zero. For full update, the |
| - // largest_change_id and root_folder_id from |about_resource| will be used. |
| - void LoadChangeListFromServer( |
| - scoped_ptr<google_apis::AboutResource> about_resource, |
| - int64 start_changestamp); |
| - |
| - // Part of LoadFromServerIfNeeded(). |
| - // Starts loading the change list from the server. Called after the |
| - // directory contents are "fast-fetch"ed. |
| - void LoadChangeListFromServerAfterLoadDirectory( |
| - const DirectoryFetchInfo& directory_fetch_info, |
| - scoped_ptr<google_apis::AboutResource> about_resource, |
| - int64 start_changestamp, |
| - DriveFileError error); |
| + // ================= Implementation for other stuff ================= |
| // Callback for handling response from |DriveAPIService::GetAppList|. |
| // If the application list is successfully parsed, passes the list to |
| @@ -231,39 +253,17 @@ class ChangeListLoader { |
| void OnGetAppList(google_apis::GDataErrorCode status, |
| scoped_ptr<google_apis::AppList> app_list); |
| - // Part of SearchFromServer. Called when ResourceList is fetched from the |
| - // server. |
| - // |callback| must not be null. |
| + // Part of SearchFromServer(). |
| + // Processes the ResourceList received from server and passes to |callback|. |
| void SearchFromServerAfterGetResourceList( |
| const LoadFeedListCallback& callback, |
| google_apis::GDataErrorCode status, |
| scoped_ptr<google_apis::ResourceList> resource_list); |
| - // Part of LoadChangeListFromServer(). |
| - // Applies the change list loaded from the server to local metadata storage. |
| - void UpdateMetadataFromFeedAfterLoadFromServer( |
| - scoped_ptr<google_apis::AboutResource> about_resource, |
| - bool is_delta_feed, |
| - ScopedVector<ChangeList> change_lists, |
| - DriveFileError error); |
| - |
| + // Part of UpdateFromFeed(). |
| // Callback for ChangeListProcessor::ApplyFeeds. |
| - void NotifyDirectoryChangedAfterApplyFeed( |
| - bool should_notify, |
| - const base::Closure& update_finished_callback); |
| - |
| - // Part of LoadChangeListFromServer(). |
| - // Called when UpdateMetadataFromFeedAfterLoadFromServer is finished. |
| - void OnUpdateFromFeed(); |
| - |
| - // This function should be called when the change list load is complete. |
| - // Flushes the callbacks for change list loading and all directory loading. |
| - void OnChangeListLoadComplete(DriveFileError error); |
| - |
| - // This function should be called when the directory load is complete. |
| - // Flushes the callbacks waiting for the directory to be loaded. |
| - void OnDirectoryLoadComplete(const DirectoryFetchInfo& directory_fetch_info, |
| - DriveFileError error); |
| + void NotifyDirectoryChangedAfterApplyFeed(bool should_notify, |
| + const base::Closure& callback); |
| DriveResourceMetadata* resource_metadata_; // Not owned. |
| DriveScheduler* scheduler_; // Not owned. |