google_apis: Random fix in task_util.h

Change RunTaskOnThread's argument type from MessageLoopProxy to SingleThreadTaskRunner in favor of generality
Move CreateErrorRunCallback to its exclusive user job_scheduler.cc

BUG=None
TEST=unit_tests

Review URL: https://codereview.chromium.org/77553006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236998 0039d316-1c4b-4281-b951-d872f2087c98
parent 540f2134
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "chrome/browser/chromeos/drive/file_system_util.h" #include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/drive/logging.h" #include "chrome/browser/chromeos/drive/logging.h"
#include "chrome/browser/google_apis/drive_api_parser.h" #include "chrome/browser/google_apis/drive_api_parser.h"
#include "chrome/browser/google_apis/task_util.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
...@@ -33,6 +32,41 @@ namespace { ...@@ -33,6 +32,41 @@ namespace {
const int kMaxThrottleCount = 4; const int kMaxThrottleCount = 4;
const int kMaxRetryCount = 2 * kMaxThrottleCount; const int kMaxRetryCount = 2 * kMaxThrottleCount;
// GetDefaultValue returns a value constructed by the default constructor.
template<typename T> struct DefaultValueCreator {
static T GetDefaultValue() { return T(); }
};
template<typename T> struct DefaultValueCreator<const T&> {
static T GetDefaultValue() { return T(); }
};
// Helper of CreateErrorRunCallback implementation.
// Provides:
// - ResultType; the type of the Callback which should be returned by
// CreateErrorRunCallback.
// - Run(): a static function which takes the original |callback| and |error|,
// and runs the |callback|.Run() with the error code and default values
// for remaining arguments.
template<typename CallbackType> struct CreateErrorRunCallbackHelper;
// CreateErrorRunCallback with two arguments.
template<typename P1>
struct CreateErrorRunCallbackHelper<void(google_apis::GDataErrorCode, P1)> {
static void Run(
const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback,
google_apis::GDataErrorCode error) {
callback.Run(error, DefaultValueCreator<P1>::GetDefaultValue());
}
};
// Returns a callback with the tail parameter bound to its default value.
// In other words, returned_callback.Run(error) runs callback.Run(error, T()).
template<typename CallbackType>
base::Callback<void(google_apis::GDataErrorCode)>
CreateErrorRunCallback(const base::Callback<CallbackType>& callback) {
return base::Bind(&CreateErrorRunCallbackHelper<CallbackType>::Run, callback);
}
// Parameter struct for RunUploadNewFile. // Parameter struct for RunUploadNewFile.
struct UploadNewFileParams { struct UploadNewFileParams {
std::string parent_resource_id; std::string parent_resource_id;
...@@ -208,7 +242,7 @@ void JobScheduler::GetAboutResource( ...@@ -208,7 +242,7 @@ void JobScheduler::GetAboutResource(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -224,7 +258,7 @@ void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) { ...@@ -224,7 +258,7 @@ void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) {
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -241,7 +275,7 @@ void JobScheduler::GetAllResourceList( ...@@ -241,7 +275,7 @@ void JobScheduler::GetAllResourceList(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -261,7 +295,7 @@ void JobScheduler::GetResourceListInDirectory( ...@@ -261,7 +295,7 @@ void JobScheduler::GetResourceListInDirectory(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -280,7 +314,7 @@ void JobScheduler::Search( ...@@ -280,7 +314,7 @@ void JobScheduler::Search(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -299,7 +333,7 @@ void JobScheduler::GetChangeList( ...@@ -299,7 +333,7 @@ void JobScheduler::GetChangeList(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -318,7 +352,7 @@ void JobScheduler::GetRemainingChangeList( ...@@ -318,7 +352,7 @@ void JobScheduler::GetRemainingChangeList(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -337,7 +371,7 @@ void JobScheduler::GetRemainingFileList( ...@@ -337,7 +371,7 @@ void JobScheduler::GetRemainingFileList(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -358,7 +392,7 @@ void JobScheduler::GetResourceEntry( ...@@ -358,7 +392,7 @@ void JobScheduler::GetResourceEntry(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -381,7 +415,7 @@ void JobScheduler::GetShareUrl( ...@@ -381,7 +415,7 @@ void JobScheduler::GetShareUrl(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -428,7 +462,7 @@ void JobScheduler::CopyResource( ...@@ -428,7 +462,7 @@ void JobScheduler::CopyResource(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -449,7 +483,7 @@ void JobScheduler::CopyHostedDocument( ...@@ -449,7 +483,7 @@ void JobScheduler::CopyHostedDocument(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -474,7 +508,7 @@ void JobScheduler::MoveResource( ...@@ -474,7 +508,7 @@ void JobScheduler::MoveResource(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -518,7 +552,7 @@ void JobScheduler::TouchResource( ...@@ -518,7 +552,7 @@ void JobScheduler::TouchResource(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -581,7 +615,7 @@ void JobScheduler::AddNewDirectory( ...@@ -581,7 +615,7 @@ void JobScheduler::AddNewDirectory(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -612,8 +646,7 @@ JobID JobScheduler::DownloadFile( ...@@ -612,8 +646,7 @@ JobID JobScheduler::DownloadFile(
base::Bind(&JobScheduler::UpdateProgress, base::Bind(&JobScheduler::UpdateProgress,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id)); new_job->job_info.job_id));
new_job->abort_callback = new_job->abort_callback = CreateErrorRunCallback(download_action_callback);
google_apis::CreateErrorRunCallback(download_action_callback);
StartJob(new_job); StartJob(new_job);
return new_job->job_info.job_id; return new_job->job_info.job_id;
} }
...@@ -651,7 +684,7 @@ void JobScheduler::UploadNewFile( ...@@ -651,7 +684,7 @@ void JobScheduler::UploadNewFile(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id); new_job->job_info.job_id);
new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params);
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -688,7 +721,7 @@ void JobScheduler::UploadExistingFile( ...@@ -688,7 +721,7 @@ void JobScheduler::UploadExistingFile(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id); new_job->job_info.job_id);
new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params);
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -725,7 +758,7 @@ void JobScheduler::CreateFile( ...@@ -725,7 +758,7 @@ void JobScheduler::CreateFile(
params.progress_callback = google_apis::ProgressCallback(); params.progress_callback = google_apis::ProgressCallback();
new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params);
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -745,7 +778,7 @@ void JobScheduler::GetResourceListInDirectoryByWapi( ...@@ -745,7 +778,7 @@ void JobScheduler::GetResourceListInDirectoryByWapi(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
...@@ -764,7 +797,7 @@ void JobScheduler::GetRemainingResourceList( ...@@ -764,7 +797,7 @@ void JobScheduler::GetRemainingResourceList(
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id, new_job->job_info.job_id,
callback)); callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback); new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job); StartJob(new_job);
} }
......
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
namespace google_apis { namespace google_apis {
void RunTaskOnThread(scoped_refptr<base::MessageLoopProxy> relay_proxy, void RunTaskOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
const base::Closure& task) { const base::Closure& task) {
if (relay_proxy->BelongsToCurrentThread()) { if (task_runner->BelongsToCurrentThread()) {
task.Run(); task.Run();
} else { } else {
const bool posted = relay_proxy->PostTask(FROM_HERE, task); const bool posted = task_runner->PostTask(FROM_HERE, task);
DCHECK(posted); DCHECK(posted);
} }
} }
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
namespace google_apis { namespace google_apis {
// Runs task on the thread to which |relay_proxy| belongs. // Runs task on the thread to which |task_runner| belongs.
void RunTaskOnThread(scoped_refptr<base::MessageLoopProxy> relay_proxy, void RunTaskOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
const base::Closure& task); const base::Closure& task);
namespace internal { namespace internal {
...@@ -106,33 +106,6 @@ struct ComposedCallback<void(T1, scoped_ptr<T2, D2>, T3, T4)> { ...@@ -106,33 +106,6 @@ struct ComposedCallback<void(T1, scoped_ptr<T2, D2>, T3, T4)> {
} }
}; };
// GetDefaultValue returns a value constructed by the default constructor.
template<typename T> struct DefaultValueCreator {
static T GetDefaultValue() { return T(); }
};
template<typename T> struct DefaultValueCreator<const T&> {
static T GetDefaultValue() { return T(); }
};
// Helper of CreateErrorRunCallback implementation.
// Provides:
// - ResultType; the type of the Callback which should be returned by
// CreateErrorRunCallback.
// - Run(): a static function which takes the original |callback| and |error|,
// and runs the |callback|.Run() with the error code and default values
// for remaining arguments.
template<typename CallbackType> struct CreateErrorRunCallbackHelper;
// CreateErrorRunCallback with two arguments.
template<typename ErrorType, typename P1>
struct CreateErrorRunCallbackHelper<void(ErrorType, P1)> {
typedef base::Callback<void(ErrorType)> ResultType;
static void Run(
const base::Callback<void(ErrorType, P1)>& callback, ErrorType error) {
callback.Run(error, DefaultValueCreator<P1>::GetDefaultValue());
}
};
} // namespace internal } // namespace internal
// Returns callback that takes arguments (arg1, arg2, ...), create a closure // Returns callback that takes arguments (arg1, arg2, ...), create a closure
...@@ -158,15 +131,6 @@ CallbackType CreateRelayCallback(const CallbackType& callback) { ...@@ -158,15 +131,6 @@ CallbackType CreateRelayCallback(const CallbackType& callback) {
callback); callback);
} }
// Returns a callback with the tail parameter bound to its default value.
// In other words, returned_callback.Run(error) runs callback.Run(error, T()).
template<typename CallbackType>
typename internal::CreateErrorRunCallbackHelper<CallbackType>::ResultType
CreateErrorRunCallback(const base::Callback<CallbackType>& callback) {
return base::Bind(
&internal::CreateErrorRunCallbackHelper<CallbackType>::Run, callback);
}
} // namespace google_apis } // namespace google_apis
#endif // CHROME_BROWSER_GOOGLE_APIS_TASK_UTIL_H_ #endif // CHROME_BROWSER_GOOGLE_APIS_TASK_UTIL_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment