| Index: chrome/browser/sessions/base_session_service.cc
|
| diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc
|
| index a30981e47c096d70ebea1db6098885abd011dd6f..a05d30b01b14e28233e70db16450c24abaf849ce 100644
|
| --- a/chrome/browser/sessions/base_session_service.cc
|
| +++ b/chrome/browser/sessions/base_session_service.cc
|
| @@ -22,17 +22,6 @@
|
| using content::BrowserThread;
|
| using content::NavigationEntry;
|
|
|
| -// InternalGetCommandsRequest -------------------------------------------------
|
| -
|
| -BaseSessionService::InternalGetCommandsRequest::InternalGetCommandsRequest(
|
| - const CallbackType& callback)
|
| - : CancelableRequest<InternalGetCommandsCallback>(callback) {
|
| -}
|
| -
|
| -BaseSessionService::InternalGetCommandsRequest::~InternalGetCommandsRequest() {
|
| - STLDeleteElements(&commands);
|
| -}
|
| -
|
| // BaseSessionService ---------------------------------------------------------
|
|
|
| namespace {
|
| @@ -51,6 +40,24 @@ void WriteStringToPickle(Pickle& pickle, int* bytes_written, int max_bytes,
|
| }
|
| }
|
|
|
| +// Helper used by ScheduleGetLastSessionCommands. It runs callback on TaskRunner
|
| +// thread if it's not canceled.
|
| +void RunIfNotCanceled(
|
| + const CancelableTaskTracker::IsCanceledCallback& is_canceled,
|
| + base::TaskRunner* task_runner,
|
| + const BaseSessionService::InternalGetCommandsCallback& callback,
|
| + ScopedVector<SessionCommand> commands) {
|
| + if (is_canceled.Run())
|
| + return;
|
| +
|
| + if (task_runner->RunsTasksOnCurrentThread()) {
|
| + callback.Run(commands.Pass());
|
| + } else {
|
| + task_runner->PostTask(FROM_HERE,
|
| + base::Bind(callback, base::Passed(&commands)));
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| // Delay between when a command is received, and when we save it to the
|
| @@ -259,16 +266,22 @@ bool BaseSessionService::ShouldTrackEntry(const GURL& url) {
|
| return url.is_valid();
|
| }
|
|
|
| -BaseSessionService::Handle BaseSessionService::ScheduleGetLastSessionCommands(
|
| - InternalGetCommandsRequest* request,
|
| - CancelableRequestConsumerBase* consumer) {
|
| - scoped_refptr<InternalGetCommandsRequest> request_wrapper(request);
|
| - AddRequest(request, consumer);
|
| +CancelableTaskTracker::TaskId
|
| + BaseSessionService::ScheduleGetLastSessionCommands(
|
| + const InternalGetCommandsCallback& callback,
|
| + CancelableTaskTracker* tracker) {
|
| + CancelableTaskTracker::IsCanceledCallback is_canceled;
|
| + CancelableTaskTracker::TaskId id = tracker->NewTrackedTaskId(&is_canceled);
|
| +
|
| + InternalGetCommandsCallback callback_runner =
|
| + base::Bind(&RunIfNotCanceled,
|
| + is_canceled, base::MessageLoopProxy::current(), callback);
|
| +
|
| RunTaskOnBackendThread(
|
| FROM_HERE,
|
| base::Bind(&SessionBackend::ReadLastSessionCommands, backend(),
|
| - request_wrapper));
|
| - return request->handle();
|
| + is_canceled, callback_runner));
|
| + return id;
|
| }
|
|
|
| bool BaseSessionService::RunTaskOnBackendThread(
|
|
|