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 2e42d78456bceaf5edca9c3389f73cb2b3b64b76..93b24c01bb96c486374174dcf7481c2313c4642d 100644 |
--- a/chrome/browser/chromeos/drive/change_list_loader.cc |
+++ b/chrome/browser/chromeos/drive/change_list_loader.cc |
@@ -128,16 +128,10 @@ scoped_ptr<google_apis::ResourceList> ParseFeedOnBlockingPool( |
// When all feeds are loaded, |feed_load_callback| is invoked with the retrieved |
// feeds. |feed_load_callback| must not be null. |
struct ChangeListLoader::LoadFeedParams { |
- explicit LoadFeedParams(const LoadFeedListCallback& feed_load_callback) |
+ LoadFeedParams() |
: start_changestamp(0), |
shared_with_me(false), |
- load_subsequent_feeds(true), |
- feed_load_callback(feed_load_callback) {} |
- |
- // Runs this->feed_load_callback with |error|. |
- void RunFeedLoadCallback(DriveFileError error) { |
- feed_load_callback.Run(feed_list, error); |
- } |
+ load_subsequent_feeds(true) {} |
// Changestamps are positive numbers in increasing order. The difference |
// between two changestamps is proportional equal to number of items in |
@@ -149,7 +143,6 @@ struct ChangeListLoader::LoadFeedParams { |
std::string directory_resource_id; |
GURL feed_to_load; |
bool load_subsequent_feeds; |
- const LoadFeedListCallback feed_load_callback; |
ScopedVector<google_apis::ResourceList> feed_list; |
scoped_ptr<GetResourceListUiState> ui_state; |
}; |
@@ -167,26 +160,6 @@ struct ChangeListLoader::LoadRootFeedParams { |
const FileOperationCallback callback; |
}; |
-// Defines parameters sent to UpdateMetadataFromFeedAfterLoadFromServer(). |
-// |
-// In the case of loading the root feed we use |root_feed_changestamp| as its |
-// initial changestamp value since it does not come with that info. |
-// |
-// On initial feed load for Drive API, remember root ID for |
-// DriveResourceData initialization later in UpdateFromFeed(). |
-struct ChangeListLoader::UpdateMetadataParams { |
- UpdateMetadataParams(bool is_delta_feed, |
- int64 feed_changestamp, |
- const FileOperationCallback& callback) |
- : is_delta_feed(is_delta_feed), |
- feed_changestamp(feed_changestamp), |
- callback(callback) {} |
- |
- const bool is_delta_feed; |
- const int64 feed_changestamp; |
- const FileOperationCallback callback; |
-}; |
- |
// Defines set of parameters sent to callback OnNotifyResourceListFetched(). |
// This is a trick to update the number of fetched documents frequently on |
// UI. Due to performance reason, we need to fetch a number of files at |
@@ -328,18 +301,27 @@ void ChangeListLoader::CompareChangestampsAndLoadIfNeeded( |
return; |
} |
- // Load changes from the server. |
int64 start_changestamp = local_changestamp > 0 ? local_changestamp + 1 : 0; |
- scoped_ptr<LoadFeedParams> load_params(new LoadFeedParams( |
- base::Bind(&ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer, |
- weak_ptr_factory_.GetWeakPtr(), |
- UpdateMetadataParams(start_changestamp != 0, // is_delta_feed |
- remote_changestamp, |
- callback)))); |
- load_params->start_changestamp = start_changestamp; |
// TODO(satorux): Use directory_fetch_info to start "fast-fetch" here. |
- LoadFromServer(load_params.Pass()); |
+ LoadChangeListFromServer(start_changestamp, |
+ remote_changestamp, |
+ callback); |
+} |
+ |
+void ChangeListLoader::LoadChangeListFromServer( |
+ int64 start_changestamp, |
+ int64 remote_changestamp, |
+ const FileOperationCallback& callback) { |
+ scoped_ptr<LoadFeedParams> load_params(new LoadFeedParams); |
+ load_params->start_changestamp = start_changestamp; |
+ LoadFromServer( |
+ load_params.Pass(), |
+ base::Bind(&ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ start_changestamp != 0, // is_delta_feed |
+ remote_changestamp, |
+ callback)); |
} |
void ChangeListLoader::OnGetAppList(google_apis::GDataErrorCode status, |
@@ -355,8 +337,10 @@ void ChangeListLoader::OnGetAppList(google_apis::GDataErrorCode status, |
} |
} |
-void ChangeListLoader::LoadFromServer(scoped_ptr<LoadFeedParams> params) { |
+void ChangeListLoader::LoadFromServer(scoped_ptr<LoadFeedParams> params, |
+ const LoadFeedListCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(!callback.is_null()); |
const base::TimeTicks start_time = base::TimeTicks::Now(); |
@@ -368,9 +352,10 @@ void ChangeListLoader::LoadFromServer(scoped_ptr<LoadFeedParams> params) { |
params_ptr->search_query, |
params_ptr->shared_with_me, |
params_ptr->directory_resource_id, |
- base::Bind(&ChangeListLoader::OnGetResourceList, |
+ base::Bind(&ChangeListLoader::LoadFromServerAfterGetResourceList, |
weak_ptr_factory_.GetWeakPtr(), |
base::Passed(¶ms), |
+ callback, |
start_time)); |
} |
@@ -416,13 +401,14 @@ void ChangeListLoader::DoLoadDirectoryFromServer( |
DCHECK(!callback.is_null()); |
DCHECK(!directory_fetch_info.empty()); |
- scoped_ptr<LoadFeedParams> params(new LoadFeedParams( |
+ scoped_ptr<LoadFeedParams> params(new LoadFeedParams); |
+ params->directory_resource_id = directory_fetch_info.resource_id(); |
+ LoadFromServer( |
+ params.Pass(), |
base::Bind(&ChangeListLoader::DoLoadDirectoryFromServerAfterLoad, |
weak_ptr_factory_.GetWeakPtr(), |
directory_fetch_info, |
- callback))); |
- params->directory_resource_id = directory_fetch_info.resource_id(); |
- LoadFromServer(params.Pass()); |
+ callback)); |
} |
void ChangeListLoader::DoLoadDirectoryFromServerAfterLoad( |
@@ -476,41 +462,45 @@ void ChangeListLoader::SearchFromServer( |
const LoadFeedListCallback& feed_load_callback) { |
DCHECK(!feed_load_callback.is_null()); |
- scoped_ptr<LoadFeedParams> params(new LoadFeedParams(feed_load_callback)); |
+ scoped_ptr<LoadFeedParams> params(new LoadFeedParams); |
params->search_query = search_query; |
params->shared_with_me = shared_with_me; |
params->feed_to_load = next_feed; |
params->load_subsequent_feeds = false; |
- LoadFromServer(params.Pass()); |
+ LoadFromServer(params.Pass(), feed_load_callback); |
} |
void ChangeListLoader::UpdateMetadataFromFeedAfterLoadFromServer( |
- const UpdateMetadataParams& params, |
+ bool is_delta_feed, |
+ int64 feed_changestamp, |
+ const FileOperationCallback& callback, |
const ScopedVector<google_apis::ResourceList>& feed_list, |
DriveFileError error) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- DCHECK(!params.callback.is_null()); |
+ DCHECK(!callback.is_null()); |
DCHECK(refreshing_); |
if (error != DRIVE_FILE_OK) { |
- OnChangeListLoadComplete(params.callback, error); |
+ OnChangeListLoadComplete(callback, error); |
return; |
} |
UpdateFromFeed(feed_list, |
- params.is_delta_feed, |
- params.feed_changestamp, |
+ is_delta_feed, |
+ feed_changestamp, |
base::Bind(&ChangeListLoader::OnUpdateFromFeed, |
weak_ptr_factory_.GetWeakPtr(), |
- params.callback)); |
+ callback)); |
} |
-void ChangeListLoader::OnGetResourceList( |
+void ChangeListLoader::LoadFromServerAfterGetResourceList( |
scoped_ptr<LoadFeedParams> params, |
+ const LoadFeedListCallback& callback, |
base::TimeTicks start_time, |
google_apis::GDataErrorCode status, |
scoped_ptr<google_apis::ResourceList> resource_list) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK(!callback.is_null()); |
if (params->feed_list.empty()) { |
UMA_HISTOGRAM_TIMES("Drive.InitialFeedLoadTime", |
@@ -519,7 +509,7 @@ void ChangeListLoader::OnGetResourceList( |
DriveFileError error = util::GDataToDriveFileError(status); |
if (error != DRIVE_FILE_OK) { |
- params->RunFeedLoadCallback(error); |
+ callback.Run(params->feed_list, error); |
return; |
} |
DCHECK(resource_list); |
@@ -569,9 +559,10 @@ void ChangeListLoader::OnGetResourceList( |
params_ptr->search_query, |
params_ptr->shared_with_me, |
params_ptr->directory_resource_id, |
- base::Bind(&ChangeListLoader::OnGetResourceList, |
+ base::Bind(&ChangeListLoader::LoadFromServerAfterGetResourceList, |
weak_ptr_factory_.GetWeakPtr(), |
base::Passed(¶ms), |
+ callback, |
start_time)); |
return; |
} |
@@ -584,7 +575,7 @@ void ChangeListLoader::OnGetResourceList( |
base::TimeTicks::Now() - start_time); |
// Run the callback so the client can process the retrieved feeds. |
- params->RunFeedLoadCallback(DRIVE_FILE_OK); |
+ callback.Run(params->feed_list, DRIVE_FILE_OK); |
} |
void ChangeListLoader::OnNotifyResourceListFetched( |