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 @@
#include "chrome/browser/chromeos/drive/file_system_util.h"
#include "chrome/browser/chromeos/drive/logging.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 "content/public/browser/browser_thread.h"
......@@ -33,6 +32,41 @@ namespace {
const int kMaxThrottleCount = 4;
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.
struct UploadNewFileParams {
std::string parent_resource_id;
......@@ -208,7 +242,7 @@ void JobScheduler::GetAboutResource(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -224,7 +258,7 @@ void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) {
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -241,7 +275,7 @@ void JobScheduler::GetAllResourceList(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -261,7 +295,7 @@ void JobScheduler::GetResourceListInDirectory(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -280,7 +314,7 @@ void JobScheduler::Search(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -299,7 +333,7 @@ void JobScheduler::GetChangeList(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -318,7 +352,7 @@ void JobScheduler::GetRemainingChangeList(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -337,7 +371,7 @@ void JobScheduler::GetRemainingFileList(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -358,7 +392,7 @@ void JobScheduler::GetResourceEntry(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -381,7 +415,7 @@ void JobScheduler::GetShareUrl(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -428,7 +462,7 @@ void JobScheduler::CopyResource(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -449,7 +483,7 @@ void JobScheduler::CopyHostedDocument(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -474,7 +508,7 @@ void JobScheduler::MoveResource(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -518,7 +552,7 @@ void JobScheduler::TouchResource(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -581,7 +615,7 @@ void JobScheduler::AddNewDirectory(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -612,8 +646,7 @@ JobID JobScheduler::DownloadFile(
base::Bind(&JobScheduler::UpdateProgress,
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id));
new_job->abort_callback =
google_apis::CreateErrorRunCallback(download_action_callback);
new_job->abort_callback = CreateErrorRunCallback(download_action_callback);
StartJob(new_job);
return new_job->job_info.job_id;
}
......@@ -651,7 +684,7 @@ void JobScheduler::UploadNewFile(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id);
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);
}
......@@ -688,7 +721,7 @@ void JobScheduler::UploadExistingFile(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id);
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);
}
......@@ -725,7 +758,7 @@ void JobScheduler::CreateFile(
params.progress_callback = google_apis::ProgressCallback();
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);
}
......@@ -745,7 +778,7 @@ void JobScheduler::GetResourceListInDirectoryByWapi(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......@@ -764,7 +797,7 @@ void JobScheduler::GetRemainingResourceList(
weak_ptr_factory_.GetWeakPtr(),
new_job->job_info.job_id,
callback));
new_job->abort_callback = google_apis::CreateErrorRunCallback(callback);
new_job->abort_callback = CreateErrorRunCallback(callback);
StartJob(new_job);
}
......
......@@ -8,12 +8,12 @@
namespace google_apis {
void RunTaskOnThread(scoped_refptr<base::MessageLoopProxy> relay_proxy,
void RunTaskOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
const base::Closure& task) {
if (relay_proxy->BelongsToCurrentThread()) {
if (task_runner->BelongsToCurrentThread()) {
task.Run();
} else {
const bool posted = relay_proxy->PostTask(FROM_HERE, task);
const bool posted = task_runner->PostTask(FROM_HERE, task);
DCHECK(posted);
}
}
......
......@@ -10,8 +10,8 @@
namespace google_apis {
// Runs task on the thread to which |relay_proxy| belongs.
void RunTaskOnThread(scoped_refptr<base::MessageLoopProxy> relay_proxy,
// Runs task on the thread to which |task_runner| belongs.
void RunTaskOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
const base::Closure& task);
namespace internal {
......@@ -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
// Returns callback that takes arguments (arg1, arg2, ...), create a closure
......@@ -158,15 +131,6 @@ CallbackType CreateRelayCallback(const CallbackType& 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
#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